ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmRmNDA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotICA8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTBjMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRkYjIzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUdWUgQXByIDIyIDE1OjIyOjA1IEdNVC0wNTowMCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NGRhYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogLgotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU7dXNlczo9Im9yZy5vc2dpLmZyYW1ld29yayxvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsOwotICB1c2VzOj0ib3JnLmFwYWNoZS54bWwudXRpbHMsCi0gICBvcmcudzNjLmRvbS50cmF2ZXJzYWwsCi0gICBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMsCi0gICBvcmcudzNjLmRvbSwKLSAgIG9yZy5hcGFjaGUueHBhdGguY29tcGlsZXIiCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbXBhdGliaWxpdHk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5hcGFjaGUueGFsYW47YnVuZGxlLXZlcnNpb249IlsyLjcuMSwyLjguMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IjMuNS4wIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWFmNGFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jICBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0jICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgIENvbnRyaWJ1dG9yczoKLSMgICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMKLSMgJElkOiBidWlsZC5wcm9wZXJ0aWVzLHYgMS45IDIwMTAvMDQvMTMgMTM6MDI6MDkgZGFjYXJ2ZXIgRXhwICQKLQotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYmluLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IC4KLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmQxNDU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyAgQ29weXJpZ2h0IChjKSAyMDA4LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jICBDb250cmlidXRvcnM6Ci0jICAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jCi0jICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjQgMjAxMC8wNC8yOSAwMTozNTo1MCBuaXRpbmQgRXhwICQKLQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lID0gWFBhdGggQ29yZQotcHJvdmlkZXJOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjY0M2EzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgotPHBsdWdpbj4KLSAgPGV4dGVuc2lvbgotICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KLSAgICAgPGluaXRpYWxpemVyCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIj4KLSAgICAgPC9pbml0aWFsaXplcj4KLSAgPC9leHRlbnNpb24+CQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL1hQYXRoQ29yZVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS9YUGF0aENvcmVQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyOTA3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL1hQYXRoQ29yZVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhDb3JlUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZSI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgWFBhdGhDb3JlUGx1Z2luIHBsdWdpbjsKLQkKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBYUGF0aENvcmVQbHVnaW4oKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhQYXRoQ29yZVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS9YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ODViZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS9YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZTsKLQotLyoqCi0gKiBYUGF0aCBQcm9jZXNzb3IgcHJlZmVyZW5jZXMKLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcyB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF8xXzBfUFJPQ0VTU09SID0gIlhQQVRIMS4wIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF8yXzBfUFJPQ0VTU09SID0gIlhQQVRIMi4wIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9PVEhFUiA9ICJPVEhFUiI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL2ludGVybmFsL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlNTBjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL2ludGVybmFsL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZXIgZm9yIFhTTCBjb3JlIHByZWZlcmVuY2VzLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICovCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKLXsKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKLQl7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKFhQYXRoQ29yZVBsdWdpbi5QTFVHSU5fSUQpOwotCQlub2RlLnB1dEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF8xXzBfUFJPQ0VTU09SLCB0cnVlKTsKLQkJbm9kZS5wdXRCb29sZWFuKFhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuWFBBVEhfMl8wX1BST0NFU1NPUiwgZmFsc2UpOwotCQlub2RlLnB1dEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF9PVEhFUiwgZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9Ob2RlTGlzdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9Ob2RlTGlzdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMjNmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvTm9kZUxpc3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDMxMzk5MiAtIFhQYXRoIGV2YWx1YXRpb24gZG9lcyBub3Qgc2hvdyBhdG9taWNzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotaW1wb3J0IG9yZy53M2MuZG9tLlVzZXJEYXRhSGFuZGxlcjsKLQotLyoqCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBOb2RlTGlzdEltcGwgaW1wbGVtZW50cyBOb2RlTGlzdCB7Ci0KLQlSZXN1bHRTZXF1ZW5jZSByczsKLQkKLQlwdWJsaWMgTm9kZUxpc3RJbXBsKFJlc3VsdFNlcXVlbmNlIHJlc3VsdCkgewotCQlycyA9IHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIGludCBnZXRMZW5ndGgoKSB7Ci0JCXJldHVybiBycy5zaXplKCk7Ci0JfQotCi0JcHVibGljIE5vZGUgaXRlbShpbnQgYXJnMCkgewotCQlmaW5hbCBBbnlUeXBlIHR5cGUgPSBycy5nZXQoYXJnMCk7Ci0JCWlmICh0eXBlIGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCU5vZGVUeXBlIG5vZGVUeXBlID0gKE5vZGVUeXBlKSB0eXBlOwotCQkJcmV0dXJuIG5vZGVUeXBlLm5vZGVfdmFsdWUoKTsKLQkJfQotCQlyZXR1cm4gY3JlYXRlVGV4dE5vZGUodHlwZS5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTm9kZSBjcmVhdGVUZXh0Tm9kZShmaW5hbCBTdHJpbmcgdmFsdWUpIHsKLQkJcmV0dXJuIG5ldyBUZXh0KCkgewotCQkJcHVibGljIHZvaWQgYXBwZW5kRGF0YShTdHJpbmcgYXJnMCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRlbGV0ZURhdGEoaW50IGFyZzAsIGludCBhcmcxKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBnZXREYXRhKCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIHZhbHVlOwotCQkJfQotCi0JCQlwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKLQkJCQlyZXR1cm4gZ2V0RGF0YSgpLmxlbmd0aCgpOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnNlcnREYXRhKGludCBhcmcwLCBTdHJpbmcgYXJnMSkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHJlcGxhY2VEYXRhKGludCBhcmcwLCBpbnQgYXJnMSwgU3RyaW5nIGFyZzIpCi0JCQkJCXRocm93cyBET01FeGNlcHRpb24gewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBzZXREYXRhKFN0cmluZyBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBzdWJzdHJpbmdEYXRhKGludCBiZWdpbkluZGV4LCBpbnQgZW5kSW5kZXgpIHRocm93cyBET01FeGNlcHRpb24gewotCQkJCXJldHVybiBnZXREYXRhKCkuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGVuZEluZGV4KTsKLQkJCX0KLQotCQkJcHVibGljIE5vZGUgYXBwZW5kQ2hpbGQoTm9kZSBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIE5vZGUgY2xvbmVOb2RlKGJvb2xlYW4gYXJnMCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgc2hvcnQgY29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQotCQkJcHVibGljIE5hbWVkTm9kZU1hcCBnZXRBdHRyaWJ1dGVzKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgU3RyaW5nIGdldEJhc2VVUkkoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBOb2RlTGlzdCBnZXRDaGlsZE5vZGVzKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgT2JqZWN0IGdldEZlYXR1cmUoU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBOb2RlIGdldEZpcnN0Q2hpbGQoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBOb2RlIGdldExhc3RDaGlsZCgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBnZXRMb2NhbE5hbWUoKSB7Ci0JCQkJcmV0dXJuICIjdGV4dCI7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgTm9kZSBnZXROZXh0U2libGluZygpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBnZXROb2RlTmFtZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIHNob3J0IGdldE5vZGVUeXBlKCkgewotCQkJCXJldHVybiBURVhUX05PREU7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0Tm9kZVZhbHVlKCkgdGhyb3dzIERPTUV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIGdldERhdGEoKTsKLQkJCX0KLQotCQkJcHVibGljIERvY3VtZW50IGdldE93bmVyRG9jdW1lbnQoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBOb2RlIGdldFBhcmVudE5vZGUoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgTm9kZSBnZXRQcmV2aW91c1NpYmxpbmcoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dENvbnRlbnQoKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gZ2V0RGF0YSgpOwotCQkJfQotCi0JCQlwdWJsaWMgT2JqZWN0IGdldFVzZXJEYXRhKFN0cmluZyBhcmcwKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBib29sZWFuIGhhc0F0dHJpYnV0ZXMoKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZE5vZGVzKCkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQotCQkJcHVibGljIE5vZGUgaW5zZXJ0QmVmb3JlKE5vZGUgYXJnMCwgTm9kZSBhcmcxKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gaXNEZWZhdWx0TmFtZXNwYWNlKFN0cmluZyBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBpc0VxdWFsTm9kZShOb2RlIGFyZzApIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBib29sZWFuIGlzU2FtZU5vZGUoTm9kZSBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZChTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKFN0cmluZyBhcmcwKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgbG9va3VwUHJlZml4KFN0cmluZyBhcmcwKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIG5vcm1hbGl6ZSgpIHsKLQkJCX0KLQotCQkJcHVibGljIE5vZGUgcmVtb3ZlQ2hpbGQoTm9kZSBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIE5vZGUgcmVwbGFjZUNoaWxkKE5vZGUgYXJnMCwgTm9kZSBhcmcxKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgc2V0Tm9kZVZhbHVlKFN0cmluZyBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgc2V0UHJlZml4KFN0cmluZyBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgc2V0VGV4dENvbnRlbnQoU3RyaW5nIGFyZzApIHRocm93cyBET01FeGNlcHRpb24gewotCQkJfQotCi0JCQlwdWJsaWMgT2JqZWN0IHNldFVzZXJEYXRhKFN0cmluZyBhcmcwLCBPYmplY3QgYXJnMSwKLQkJCQkJVXNlckRhdGFIYW5kbGVyIGFyZzIpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBnZXRXaG9sZVRleHQoKSB7Ci0JCQkJcmV0dXJuIGdldERhdGEoKTsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gaXNFbGVtZW50Q29udGVudFdoaXRlc3BhY2UoKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgVGV4dCByZXBsYWNlV2hvbGVUZXh0KFN0cmluZyBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFRleHQgc3BsaXRUZXh0KGludCBhcmcwKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvWFBhdGgyMEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hQYXRoMjBIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA5OTgxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvWFBhdGgyMEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIyNjI0NSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsOwotCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5KRmxleEN1cFBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyRXhjZXB0aW9uOwotCi0vKioKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhQYXRoMjBIZWxwZXIgewotCi0JcHVibGljIFhQYXRoMjBIZWxwZXIoKSB7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb21waWxlKFN0cmluZyB4cGF0aEV4cCkgdGhyb3dzIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlYUGF0aFBhcnNlciB4cGF0aFBhcnNlciA9IG5ldyBKRmxleEN1cFBhcnNlcigpOwotCQkJeHBhdGhQYXJzZXIucGFyc2UoeHBhdGhFeHApOwotCQl9IGNhdGNoIChYUGF0aFBhcnNlckV4Y2VwdGlvbiBleCkgewotCQkJdGhyb3cgbmV3IFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvWFBhdGhDb3JlSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvWFBhdGhDb3JlSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMmVmOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hQYXRoQ29yZUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBjbGFzcyBYUGF0aENvcmVIZWxwZXIgewotCi0JcHVibGljIHN0YXRpYyBQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmcyA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFJvb3ROb2RlKCk7Ci0JCXJldHVybiBwcmVmcy5ub2RlKERlZmF1bHRTY29wZS5TQ09QRSkubm9kZShYUGF0aENvcmVQbHVnaW4uUExVR0lOX0lEKTsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hTTFRYUGF0aEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvY29yZS91dGlsL1hTTFRYUGF0aEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmUzNWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvdXRpbC9YU0xUWFBhdGhIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnV0aWxzLlByZWZpeFJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnV0aWxzLlByZWZpeFJlc29sdmVyRGVmYXVsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguWFBhdGhDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguY29tcGlsZXIuRnVuY3Rpb25UYWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLmpheHAuSkFYUFByZWZpeFJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0OwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS50cmF2ZXJzYWwuTm9kZUl0ZXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgWFNMVFhQYXRoSGVscGVyIHsKLQotCS8qKgotCSAqIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgc2luZ2xlIG5vZGUuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLQkgKiByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0IG5vZGUsIHdoaWNoIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCAoc2VlIHRoZQotCSAqIG5leHQgbWV0aG9kKS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEByZXR1cm4gVGhlIGZpcnN0IG5vZGUgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBYUGF0aCwgb3IgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBOb2RlIHNlbGVjdFNpbmdsZU5vZGUoTm9kZSBjb250ZXh0Tm9kZSwgU3RyaW5nIHN0cikKLQkJCXRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0JCXJldHVybiBzZWxlY3RTaW5nbGVOb2RlKGNvbnRleHROb2RlLCBzdHIsIGNvbnRleHROb2RlKTsKLQl9Ci0KLQkvKioKLQkgKiBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIHNpbmdsZSBub2RlLiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEBwYXJhbSBuYW1lc3BhY2VOb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvCi0JICogICAgICAgICAgICBuYW1lc3BhY2VzLgotCSAqIEByZXR1cm4gVGhlIGZpcnN0IG5vZGUgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBYUGF0aCwgb3IgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBOb2RlIHNlbGVjdFNpbmdsZU5vZGUoTm9kZSBjb250ZXh0Tm9kZSwgU3RyaW5nIHN0ciwKLQkJCU5vZGUgbmFtZXNwYWNlTm9kZSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQotCQkvLyBIYXZlIHRoZSBYT2JqZWN0IHJldHVybiBpdHMgcmVzdWx0IGFzIGEgTm9kZVNldERUTS4KLQkJTm9kZUl0ZXJhdG9yIG5sID0gc2VsZWN0Tm9kZUl0ZXJhdG9yKGNvbnRleHROb2RlLCBzdHIsIG5hbWVzcGFjZU5vZGUpOwotCi0JCS8vIFJldHVybiB0aGUgZmlyc3Qgbm9kZSwgb3IgbnVsbAotCQlyZXR1cm4gbmwubmV4dE5vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgY29udGV4dE5vZGUuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcmV0dXJuIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyBOb2RlSXRlcmF0b3Igc2VsZWN0Tm9kZUl0ZXJhdG9yKE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIpCi0JCQl0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCQlyZXR1cm4gc2VsZWN0Tm9kZUl0ZXJhdG9yKGNvbnRleHROb2RlLCBzdHIsIGNvbnRleHROb2RlKTsKLQl9Ci0KLQkvKioKLQkgKiBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEBwYXJhbSBuYW1lc3BhY2VOb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvCi0JICogICAgICAgICAgICBuYW1lc3BhY2VzLgotCSAqIEByZXR1cm4gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLgotCSAqIAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIE5vZGVJdGVyYXRvciBzZWxlY3ROb2RlSXRlcmF0b3IoTm9kZSBjb250ZXh0Tm9kZSwgU3RyaW5nIHN0ciwKLQkJCU5vZGUgbmFtZXNwYWNlTm9kZSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQotCQkvLyBFeGVjdXRlIHRoZSBYUGF0aCwgYW5kIGhhdmUgaXQgcmV0dXJuIHRoZSByZXN1bHQKLQkJWE9iamVjdCBsaXN0ID0gZXZhbChjb250ZXh0Tm9kZSwgc3RyLCBuYW1lc3BhY2VOb2RlKTsKLQotCQkvLyBIYXZlIHRoZSBYT2JqZWN0IHJldHVybiBpdHMgcmVzdWx0IGFzIGEgTm9kZVNldERUTS4KLQkJcmV0dXJuIGxpc3Qubm9kZXNldCgpOwotCX0KLQotCS8qKgotCSAqIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLQkgKiByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEByZXR1cm4gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLgotCSAqIAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIE5vZGVMaXN0IHNlbGVjdE5vZGVMaXN0KE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIpCi0JCQl0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCQlyZXR1cm4gc2VsZWN0Tm9kZUxpc3QoY29udGV4dE5vZGUsIHN0ciwgY29udGV4dE5vZGUpOwotCX0KLQotCS8qKgotCSAqIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLQkgKiByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0Tm9kZQotCSAqICAgICAgICAgICAgVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgQSB2YWxpZCBYUGF0aCBzdHJpbmcuCi0JICogQHBhcmFtIG5hbWVzcGFjZU5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIGZyb20gd2hpY2ggcHJlZml4ZXMgaW4gdGhlIFhQYXRoIHdpbGwgYmUgcmVzb2x2ZWQgdG8KLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZXMuCi0JICogQHJldHVybiBBIE5vZGVJdGVyYXRvciwgc2hvdWxkIG5ldmVyIGJlIG51bGwuCi0JICogCi0JICogQHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTm9kZUxpc3Qgc2VsZWN0Tm9kZUxpc3QoTm9kZSBjb250ZXh0Tm9kZSwgU3RyaW5nIHN0ciwKLQkJCU5vZGUgbmFtZXNwYWNlTm9kZSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQotCQkvLyBFeGVjdXRlIHRoZSBYUGF0aCwgYW5kIGhhdmUgaXQgcmV0dXJuIHRoZSByZXN1bHQKLQkJWE9iamVjdCBsaXN0ID0gZXZhbChjb250ZXh0Tm9kZSwgc3RyLCBuYW1lc3BhY2VOb2RlKTsKLQotCQkvLyBSZXR1cm4gYSBOb2RlTGlzdC4KLQkJcmV0dXJuIGxpc3Qubm9kZWxpc3QoKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBYUGF0aCBzdHJpbmcgdG8gYW4gWE9iamVjdC4gVXNpbmcgdGhpcyBtZXRob2QsIFhQYXRoIG5hbWVzcGFjZQotCSAqIHByZWZpeGVzIHdpbGwgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gY29udGV4dE5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLgotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIEEgdmFsaWQgWFBhdGggc3RyaW5nLgotCSAqIEByZXR1cm4gQW4gWE9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEgc3RyaW5nLCBudW1iZXIsCi0JICogICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0Ci0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE51bGwKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YQm9vbGVhbgotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhOdW1iZXIKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YU3RyaW5nCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWFJUcmVlRnJhZwotCSAqIAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhPYmplY3QgZXZhbChOb2RlIGNvbnRleHROb2RlLCBTdHJpbmcgc3RyKQotCQkJdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGV2YWwoY29udGV4dE5vZGUsIHN0ciwgY29udGV4dE5vZGUpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0JICogcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLQkgKiBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotCSAqIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotCSAqIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0Tm9kZQotCSAqICAgICAgICAgICAgVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgQSB2YWxpZCBYUGF0aCBzdHJpbmcuCi0JICogQHBhcmFtIG5hbWVzcGFjZU5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIGZyb20gd2hpY2ggcHJlZml4ZXMgaW4gdGhlIFhQYXRoIHdpbGwgYmUgcmVzb2x2ZWQgdG8KLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZXMuCi0JICogQHJldHVybiBBbiBYT2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYSBzdHJpbmcsIG51bWJlciwKLQkgKiAgICAgICAgIG5vZGVsaXN0LCBldGMsIHNob3VsZCBuZXZlciBiZSBudWxsLgotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3QKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YTnVsbAotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhCb29sZWFuCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE51bWJlcgotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhTdHJpbmcKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YUlRyZWVGcmFnCi0JICogCi0JICogQHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWE9iamVjdCBldmFsKE5vZGUgY29udGV4dE5vZGUsIFN0cmluZyBzdHIsIE5vZGUgbmFtZXNwYWNlTm9kZSkKLQkJCXRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0KLQkJLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIFhNTCBQYXJzZXIgaW52b2x2ZWQgaGVyZSwgaW5zdGFsbCBzb21lIGRlZmF1bHQKLQkJLy8gc3VwcG9ydAotCQkvLyBmb3IgdGhpbmdzIGxpa2UgbmFtZXNwYWNlcywgZXRjLgotCQkvLyAoQ2hhbmdlZCBmcm9tOiBYUGF0aENvbnRleHQgeHBhdGhTdXBwb3J0ID0gbmV3IFhQYXRoQ29udGV4dCgpOwotCQkvLyBiZWNhdXNlIFhQYXRoQ29udGV4dCBpcyB3ZWFrIGluIGEgbnVtYmVyIG9mIGFyZWFzLi4uIHBlcmhhcHMKLQkJLy8gWFBhdGhDb250ZXh0IHNob3VsZCBiZSBkb25lIGF3YXkgd2l0aC4pCi0JCVhQYXRoQ29udGV4dCB4cGF0aFN1cHBvcnQgPSBuZXcgWFBhdGhDb250ZXh0KCk7Ci0KLQkJLy8gQ3JlYXRlIGFuIG9iamVjdCB0byByZXNvbHZlIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkJLy8gWFBhdGggbmFtZXNwYWNlcyBhcmUgcmVzb2x2ZWQgZnJvbSB0aGUgaW5wdXQgY29udGV4dCBub2RlJ3MgZG9jdW1lbnQKLQkJLy8gZWxlbWVudAotCQkvLyBpZiBpdCBpcyBhIHJvb3Qgbm9kZSwgb3IgZWxzZSB0aGUgY3VycmVudCBjb250ZXh0IG5vZGUgKGZvciBsYWNrIG9mIGEKLQkJLy8gYmV0dGVyCi0JCS8vIHJlc29sdXRpb24gc3BhY2UsIGdpdmVuIHRoZSBzaW1wbGljaXR5IG9mIHRoaXMgc2FtcGxlIGNvZGUpLgkJCi0JCVByZWZpeFJlc29sdmVyRGVmYXVsdCBwcmVmaXhSZXNvbHZlciA9IG5ldyBQcmVmaXhSZXNvbHZlckRlZmF1bHQoCi0JCQkJKG5hbWVzcGFjZU5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX05PREUpID8gKChEb2N1bWVudCkgbmFtZXNwYWNlTm9kZSkKLQkJCQkJCS5nZXREb2N1bWVudEVsZW1lbnQoKQotCQkJCQkJOiBuYW1lc3BhY2VOb2RlKTsKLQotCQkvLyBDcmVhdGUgdGhlIFhQYXRoIG9iamVjdC4KLQkJWFBhdGggeHBhdGggPSBuZXcgWFBhdGgoc3RyLCBudWxsLCBwcmVmaXhSZXNvbHZlciwgWFBhdGguU0VMRUNULCBudWxsLAotCQkJCWdldEZ1bmN0aW9uVGFibGUoKSk7Ci0KLQkJLy8gRXhlY3V0ZSB0aGUgWFBhdGgsIGFuZCBoYXZlIGl0IHJldHVybiB0aGUgcmVzdWx0Ci0JCS8vIHJldHVybiB4cGF0aC5leGVjdXRlKHhwYXRoU3VwcG9ydCwgY29udGV4dE5vZGUsIHByZWZpeFJlc29sdmVyKTsKLQkJaW50IGN0eHROb2RlID0geHBhdGhTdXBwb3J0LmdldERUTUhhbmRsZUZyb21Ob2RlKGNvbnRleHROb2RlKTsKLQotCQlyZXR1cm4geHBhdGguZXhlY3V0ZSh4cGF0aFN1cHBvcnQsIGN0eHROb2RlLCBwcmVmaXhSZXNvbHZlcik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLQkgKiByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpcyBhIGxpdHRsZQotCSAqIHNsb3csIHNpbmNlIGl0IGNyZWF0ZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCi0JICogY291bGQgYmUgb3B0aW1pemVkIHRvIGtlZXAgdGhlIHNhbWUgb2JqZWN0cyBhcm91bmQsIGJ1dCB0aGVuCi0JICogdGhyZWFkLXNhZmV0eSBpc3N1ZXMgd291bGQgYXJpc2UuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHROb2RlCi0JICogICAgICAgICAgICBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS4KLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBBIHZhbGlkIFhQYXRoIHN0cmluZy4KLQkgKiBAcGFyYW0gcHJlZml4UmVzb2x2ZXIKLQkgKiAgICAgICAgICAgIFdpbGwgYmUgY2FsbGVkIGlmIHRoZSBwYXJzZXIgZW5jb3VudGVycyBuYW1lc3BhY2UgcHJlZml4ZXMsIHRvCi0JICogICAgICAgICAgICByZXNvbHZlIHRoZSBwcmVmaXhlcyB0byBVUkxzLgotCSAqIEByZXR1cm4gQW4gWE9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEgc3RyaW5nLCBudW1iZXIsCi0JICogICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4KLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0Ci0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE51bGwKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YQm9vbGVhbgotCSAqIEBzZWUgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhOdW1iZXIKLQkgKiBAc2VlIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YU3RyaW5nCi0JICogQHNlZSBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWFJUcmVlRnJhZwotCSAqIAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhPYmplY3QgZXZhbChOb2RlIGNvbnRleHROb2RlLCBTdHJpbmcgc3RyLAotCQkJUHJlZml4UmVzb2x2ZXIgcHJlZml4UmVzb2x2ZXIpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0KLQkJLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIFhNTCBQYXJzZXIgaW52b2x2ZWQgaGVyZSwgaW5zdGFsbCBzb21lIGRlZmF1bHQKLQkJLy8gc3VwcG9ydAotCQkvLyBmb3IgdGhpbmdzIGxpa2UgbmFtZXNwYWNlcywgZXRjLgotCQkvLyAoQ2hhbmdlZCBmcm9tOiBYUGF0aENvbnRleHQgeHBhdGhTdXBwb3J0ID0gbmV3IFhQYXRoQ29udGV4dCgpOwotCQkvLyBiZWNhdXNlIFhQYXRoQ29udGV4dCBpcyB3ZWFrIGluIGEgbnVtYmVyIG9mIGFyZWFzLi4uIHBlcmhhcHMKLQkJLy8gWFBhdGhDb250ZXh0IHNob3VsZCBiZSBkb25lIGF3YXkgd2l0aC4pCi0JCS8vIENyZWF0ZSB0aGUgWFBhdGggb2JqZWN0LgotCQlYUGF0aCB4cGF0aCA9IG5ldyBYUGF0aChzdHIsIG51bGwsIHByZWZpeFJlc29sdmVyLCBYUGF0aC5TRUxFQ1QsIG51bGwsCi0JCQkJZ2V0RnVuY3Rpb25UYWJsZSgpKTsKLQotCQkvLyBFeGVjdXRlIHRoZSBYUGF0aCwgYW5kIGhhdmUgaXQgcmV0dXJuIHRoZSByZXN1bHQKLQkJWFBhdGhDb250ZXh0IHhwYXRoU3VwcG9ydCA9IG5ldyBYUGF0aENvbnRleHQoKTsKLQkJaW50IGN0eHROb2RlID0geHBhdGhTdXBwb3J0LmdldERUTUhhbmRsZUZyb21Ob2RlKGNvbnRleHROb2RlKTsKLQotCQlyZXR1cm4geHBhdGguZXhlY3V0ZSh4cGF0aFN1cHBvcnQsIGN0eHROb2RlLCBwcmVmaXhSZXNvbHZlcik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvbXBpbGUoU3RyaW5nIGV4cHJlc3Npb24pCi0JCQl0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCW5ldyBYUGF0aChleHByZXNzaW9uLCBudWxsLCBudWxsLCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoLlNFTEVDVCwKLQkJCQkJbnVsbCwgZ2V0RnVuY3Rpb25UYWJsZSgpKTsKLQkJfSBjYXRjaCAoamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbiB0ZSkgewotCQkJdGhyb3cgbmV3IFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbih0ZSk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgRnVuY3Rpb25UYWJsZSBnZXRGdW5jdGlvblRhYmxlKCkgewotCQlGdW5jdGlvblRhYmxlIGZ1bmN0aW9uVGFibGUgPSBuZXcgRnVuY3Rpb25UYWJsZSgpOwotCQlmdW5jdGlvblRhYmxlLmluc3RhbGxGdW5jdGlvbigia2V5IiwKLQkJCQlvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5GdW5jS2V5LmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oImZvcm1hdC1udW1iZXIiLAotCQkJCW9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkZ1bmNGb3JtYXROdW1iLmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oImRvY3VtZW50IiwKLQkJCQlvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5GdW5jRG9jdW1lbnQuY2xhc3MpOwotCQlmdW5jdGlvblRhYmxlLmluc3RhbGxGdW5jdGlvbigiZWxlbWVudC1hdmFpbGFibGUiLAotCQkJCW9yZy5hcGFjaGUueHBhdGguZnVuY3Rpb25zLkZ1bmNFeHRFbGVtZW50QXZhaWxhYmxlLmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oImZ1bmN0aW9uLWF2YWlsYWJsZSIsCi0JCQkJb3JnLmFwYWNoZS54cGF0aC5mdW5jdGlvbnMuRnVuY0V4dEZ1bmN0aW9uQXZhaWxhYmxlLmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oImN1cnJlbnQiLAotCQkJCW9yZy5hcGFjaGUueHBhdGguZnVuY3Rpb25zLkZ1bmNDdXJyZW50LmNsYXNzKTsKLQkJZnVuY3Rpb25UYWJsZS5pbnN0YWxsRnVuY3Rpb24oInVucGFyc2VkLWVudGl0eS1zdHJpbmciLAotCQkJCW9yZy5hcGFjaGUueHBhdGguZnVuY3Rpb25zLkZ1bmNVbnBhcnNlZEVudGl0eVVSSS5jbGFzcyk7Ci0JCWZ1bmN0aW9uVGFibGUuaW5zdGFsbEZ1bmN0aW9uKCJnZW5lcmF0ZS1pZCIsCi0JCQkJb3JnLmFwYWNoZS54cGF0aC5mdW5jdGlvbnMuRnVuY0dlbmVyYXRlSWQuY2xhc3MpOwotCQlmdW5jdGlvblRhYmxlLmluc3RhbGxGdW5jdGlvbigic3lzdGVtLXByb3BlcnR5IiwKLQkJCQlvcmcuYXBhY2hlLnhwYXRoLmZ1bmN0aW9ucy5GdW5jU3lzdGVtUHJvcGVydHkuY2xhc3MpOwotCQlyZXR1cm4gZnVuY3Rpb25UYWJsZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgWFBhdGggZXhwcmVzc2lvbiBnaXZlbiBhIERPTSBOb2RlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBUaGUgRE9NIE5vZGUgdG8gY3JlYXRlIHRoZSBYUGF0aCBleHByZXNzaW9uLgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBjYWxjdWxhdGVYUGF0aFRvTm9kZShOb2RlIG5vZGUpIHsKLQkJTm9kZSB4cGF0aE5vZGUgPSBub2RlOwotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXdoaWxlICh4cGF0aE5vZGUgIT0gbnVsbCkgewotCQkJc3dpdGNoICh4cGF0aE5vZGUuZ2V0Tm9kZVR5cGUoKSkgewotCQkJY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFOgotCQkJCXNiLmluc2VydCgwLCB4cGF0aE5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0JCQkJc2IuaW5zZXJ0KDAsICIvQCIpOyAvLyROT04tTkxTLTEkCi0JCQkJeHBhdGhOb2RlID0gKChBdHRyKSB4cGF0aE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLQkJCQlOb2RlIHNpYmxpbmcgPSB4cGF0aE5vZGU7Ci0JCQkJaW50IHBvc2l0aW9uID0gMTsKLQkJCQl3aGlsZSAoKHNpYmxpbmcgPSBzaWJsaW5nLmdldFByZXZpb3VzU2libGluZygpKSAhPSBudWxsKSB7Ci0JCQkJCWlmIChzaWJsaW5nLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUKLQkJCQkJCQkmJiBzaWJsaW5nLmdldE5vZGVOYW1lKCkuZXF1YWxzKHhwYXRoTm9kZS5nZXROb2RlTmFtZSgpKSkgewotCQkJCQkJKytwb3NpdGlvbjsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAocG9zaXRpb24gPiAxKSB7Ci0JCQkJCXNiLmluc2VydCgwLCAiWyIgKyBwb3NpdGlvbiArICJdIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJc2libGluZyA9IHhwYXRoTm9kZS5nZXROZXh0U2libGluZygpOwotCQkJCQlib29sZWFuIGZvbGxvd2luZyA9IGZhbHNlOwotCQkJCQl3aGlsZSAoc2libGluZyAhPSBudWxsKSB7Ci0JCQkJCQlpZiAoc2libGluZy5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFCi0JCQkJCQkJCSYmIHNpYmxpbmcuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoCi0JCQkJCQkJCQkJeHBhdGhOb2RlLmdldE5vZGVOYW1lKCkpKSB7Ci0JCQkJCQkJZm9sbG93aW5nID0gdHJ1ZTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJCXNpYmxpbmcgPSBzaWJsaW5nLmdldE5leHRTaWJsaW5nKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKGZvbGxvd2luZykgewotCQkJCQkJc2IuaW5zZXJ0KDAsICJbMV0iKTsgLy8kTk9OLU5MUy0xJAotCQkJCQl9Ci0JCQkJfQotCQkJCXNiLmluc2VydCgwLCB4cGF0aE5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0JCQkJc2IuaW5zZXJ0KDAsICIvIik7IC8vJE5PTi1OTFMtMSQKLQkJCQl4cGF0aE5vZGUgPSB4cGF0aE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl4cGF0aE5vZGUgPSB4cGF0aE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0NTI0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGNsYXNzcGF0aD4NCi0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+DQotCQk8YWNjZXNzcnVsZXM+DQotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3htbC8qKiIvPg0KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC9zc2UvKioiLz4NCi0JCTwvYWNjZXNzcnVsZXM+DQotCTwvY2xhc3NwYXRoZW50cnk+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCi0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQotPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjdhMTdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjFjOTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaHUgRGVjIDE3IDE3OjU1OjE1IEdNVC0wNTowMCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL1hQYXRoQ29tcHV0ZXIuamF2YT1VVEYtOAotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Yjc1NzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLSNUdWUgRmViIDEwIDA1OjM2OjQwIEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5jb21wYXJpbmdJZGVudGljYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDJiZmU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotI1N1biBTZXAgMDkgMjE6NTk6MDggQ0VTVCAyMDA3Ci1jbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKLWNsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQotY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz1mYWxzZQotY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKLWNsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKLWNsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQotY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQotY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCi1jbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQotY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCi1jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCi1jbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9ZmFsc2UKLWNsZWFudXAuZm9ybWF0X2NvbW1lbnQ9dHJ1ZQotY2xlYW51cC5mb3JtYXRfamF2YWRvYz10cnVlCi1jbGVhbnVwLmZvcm1hdF9tdWx0aV9saW5lX2NvbW1lbnQ9dHJ1ZQotY2xlYW51cC5mb3JtYXRfc2luZ2xlX2xpbmVfY29tbWVudD10cnVlCi1jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCi1jbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQotY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9ZmFsc2UKLWNsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCi1jbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPWZhbHNlCi1jbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKLWNsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCi1jbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQotY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQotY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQotY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCi1jbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCi1jbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQotY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQotY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQotY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQotY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQotY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz1mYWxzZQotY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKLWNsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQotY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCi1jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCi1jbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQotY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKLWNsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKLWNsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCi1jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCi1jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKLWNsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCi1jbGVhbnVwX3Byb2ZpbGU9X1NTRSBUZWFtIFN0eWxlcwotY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThhNTExMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSNUaHUgTWF5IDA4IDE0OjMyOjE4IEdNVC0wNTowMCAyMDA4Ci1jb21waWxlcnMuZi51bnJlc29sdmVkLWZlYXR1cmVzPTEKLWNvbXBpbGVycy5mLnVucmVzb2x2ZWQtcGx1Z2lucz0xCi1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuZGlzY291cmFnZWQtY2xhc3M9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAuaW50ZXJuYWw9MQotY29tcGlsZXJzLnAubWlzc2luZy1idW5kbGUtY2xhc3NwYXRoLWVudHJpZXM9MQotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0yCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1pZGVudGlmaWVyPTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy5zLmNyZWF0ZS1kb2NzPWZhbHNlCi1jb21waWxlcnMucy5kb2MtZm9sZGVyPWRvYwotY29tcGlsZXJzLnMub3Blbi10YWdzPTEKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGI1NjhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJUGx1Z2luCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQ7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMy4xMDAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMTAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IjMuNS4wIiwKLSBvcmcuYXBhY2hlLnhhbGFuO2J1bmRsZS12ZXJzaW9uPSIyLjcuMSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yO2J1bmRsZS12ZXJzaW9uPSIxLjEuMSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbXBhdGliaWxpdHk7YnVuZGxlLXZlcnNpb249IjMuMi4wIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmhhbmRsZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnByZWZlcmVuY2VzO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC50ZW1wbGF0ZXM7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9OZXdGaWxlLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9OZXdGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhMTZkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvTmV3RmlsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dGVzdCB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iPgotPHNvbWV0aGluZy8+Ci08L3Rlc3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjUxMDE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVtcGxhdGVzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9hbmNlc3Rvci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9hbmNlc3Rvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5N2RiODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvYW5jZXN0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZGlyZWN0aW9uYWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZGlyZWN0aW9uYWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFhZDE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RpcmVjdGlvbmFsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RsY2wxNi9jb2xsYXBzZWFsbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kbGNsMTYvY29sbGFwc2VhbGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGMwZGU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RsY2wxNi9jb2xsYXBzZWFsbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kbGNsMTYvc3luY2VkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RsY2wxNi9zeW5jZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjllNTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RsY2wxNi9zeW5jZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZWxjbDE2L2NvbGxhcHNlYWxsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2VsY2wxNi9jb2xsYXBzZWFsbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZDgwYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZWxjbDE2L2NvbGxhcHNlYWxsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2VsY2wxNi9zeW5jZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZWxjbDE2L3N5bmNlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1Y2VmZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZWxjbDE2L3N5bmNlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9mYW1pbHkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZmFtaWx5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkxN2YzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9mYW1pbHkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODFmZDY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2Z1bmN0aW9uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL29wZXJhdGlvbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9vcGVyYXRpb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVkOWUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL29wZXJhdGlvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC92YXJpYWJsZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC92YXJpYWJsZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZDgzY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvdmFyaWFibGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwveHBhdGguZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwveHBhdGguZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTNlZjU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL3hwYXRoLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9yZWZyZXNoLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9yZWZyZXNoLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM4MzE0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvcmVmcmVzaC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvcnVuLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9ydW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2Y0MTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9ydW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzZiM2JmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIE9yYW5nZXZvbHQgKHd3dy5vcmFuZ2V2b2x0LmNvbSkKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3Jhbmdldm9sdCAod3d3Lm9yYW5nZXZvbHQuY29tKSAtIFhTTFQgc3VwcG9ydAotIyAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIHJlZmFjdG9yZWQgT3Jhbmdldm9sdCBYU0xUIHN1cHBvcnQgaW50byBXU1QKLSMgICAgIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWU9WFBhdGggVUkKLXhtbENhdGVnb3J5TmFtZT1YTUwKLXhwYXRoVmlld05hbWU9WFBhdGgKLWNvbnRleHRUeXBlLmF4aXMgPSBheGlzCi1jb250ZXh0VHlwZS5leHNsdCA9IGV4c2x0Ci1jb250ZXh0VHlwZS54cGF0aCA9IHhwYXRoCi1jb250ZXh0VHlwZS54cGF0aDJvID0geHBhdGggMi4wCi1jb250ZXh0VHlwZS5vcGVyYXRvciA9IG9wZXJhdG9yCi1jb250ZXh0VHlwZS5jdXN0b20gPSBjdXN0b20KLXBhZ2VOYW1lWHBhdGggPSBYUGF0aAotcGFnZW5hbWVYUGF0aFRlbXBsYXRlcyA9IFhQYXRoIFRlbXBsYXRlcwoteHBhdGhWaWV3LmVkaXRuYW1lc3BhY2UgPSAmRWRpdCBOYW1lc3BhY2UgUHJlZml4ZXMKLXhwYXRodmlldy54cGF0aHByb2Nlc3Nvci5uYW1lID0gWFBhdGggMS4wCi14cGF0aHZpZXcueHBhdGgycHJvY2Vzc29yLm5hbWUgPSBYUGF0aCAyLjAKLXhwYXRodmlldy54cGF0aHByb2Nlc3NvciA9IFByb2Nlc3NvcnMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDUyZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQotIDwhLS0gQWRkaXRpb24gdG8gdGhlIFhNTCBwZXJzcGVjdGl2ZSAtLT4KLSA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgotCTxwZXJzcGVjdGl2ZUV4dGVuc2lvbiB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wZXJzcGVjdGl2ZSI+Ci0JCTwhLS0gUHJvamVjdEV4cGxvcmVyIG9uIHRoZSBsZWZ0LCBYUGF0aCBvbiB0aGUgImJvdHRvbSBsZWZ0IiAtLT4KLQkJPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3IiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgcmVsYXRpb25zaGlwPSJib3R0b20iIHJhdGlvPSIwLjU1IiAvPgotCQk8dmlld1Nob3J0Y3V0IGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldyIvPgotCTwvcGVyc3BlY3RpdmVFeHRlbnNpb24+Ci0gPC9leHRlbnNpb24+Ci0KLSAgIAk8IS0tIFhQYXRoIHRlbXBsYXRlcyAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRlbXBsYXRlcyI+Ci0JCTxjb250ZXh0VHlwZQotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYTUwiCi0JCQlpZD0ieHBhdGhfYXhpcyIgbmFtZT0iJWNvbnRleHRUeXBlLmF4aXMiPgotCQk8L2NvbnRleHRUeXBlPgotCQk8Y29udGV4dFR5cGUKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWE1MIgotCQkJaWQ9ImV4c2x0X2Z1bmN0aW9uIiBuYW1lPSIlY29udGV4dFR5cGUuZXhzbHQiPgotCQk8L2NvbnRleHRUeXBlPgotCQk8Y29udGV4dFR5cGUKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWE1MIgotCQkJaWQ9InhzbF94cGF0aCIgbmFtZT0iJWNvbnRleHRUeXBlLnhwYXRoIj4KLQkJPC9jb250ZXh0VHlwZT4KLQkJPGNvbnRleHRUeXBlCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhNTCIKLQkJCWlkPSJ4cGF0aF8yIiBuYW1lPSIlY29udGV4dFR5cGUueHBhdGgybyI+Ci0JCTwvY29udGV4dFR5cGU+Ci0JCTxjb250ZXh0VHlwZQotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYTUwiCi0JCQlpZD0ieHBhdGhfb3BlcmF0b3IiIG5hbWU9IiVjb250ZXh0VHlwZS5vcGVyYXRvciI+Ci0JCTwvY29udGV4dFR5cGU+Ci0JCTxjb250ZXh0VHlwZQotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYTUwiCi0JCQlpZD0iZXh0ZW5zaW9uX2Z1bmN0aW9uIiBuYW1lPSIlY29udGV4dFR5cGUuY3VzdG9tIj4KLQkJPC9jb250ZXh0VHlwZT4KLQkJPGluY2x1ZGUgZmlsZT0idGVtcGxhdGVzL3hwYXRoX3RlbXBsYXRlcy54bWwiLz4KLQkJPGluY2x1ZGUgZmlsZT0idGVtcGxhdGVzL3hwYXRoX29wZXJhdG9yX3RlbXBsYXRlcy54bWwiLz4KLQkJPGluY2x1ZGUgZmlsZT0idGVtcGxhdGVzL3hwYXRoX2F4aXNfdGVtcGxhdGVzLnhtbCIvPgotCTwvZXh0ZW5zaW9uPgotICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLQkgIDxwYWdlCi0JICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wcmVmZXJlbmNlcy54bWwiCi0JICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YUGF0aFByZWZlbmNlUGFnZSIKLQkgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoUHJlZmVyZW5jZVBhZ2UiCi0JICAgICAgICBuYW1lPSIlcGFnZU5hbWVYcGF0aCI+Ci0JICA8L3BhZ2U+Ci0JCTxwYWdlIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoUHJlZmVyZW5jZVBhZ2UiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YUGF0aFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5YUGF0aCIgCi0JCQluYW1lPSIlcGFnZW5hbWVYUGF0aFRlbXBsYXRlcyI+Ci0JCTwvcGFnZT4JCi0JPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0gICAgICA8Y2F0ZWdvcnkgICAgICAKLSAgICAgICAgICAgIG5hbWU9IiV4bWxDYXRlZ29yeU5hbWUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbCIvPgotICAgIDx2aWV3Ci0gICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54bWwiCi0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudmlld3MuWFBhdGhWaWV3IgotICAgICAgICAgIGljb249IiRubCQvaWNvbnMvZnVsbC94cGF0aC5naWYiCi0gICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3IgotICAgICAgICAgIG5hbWU9IiV4cGF0aFZpZXdOYW1lIi8+Ci0gPC9leHRlbnNpb24+Ci0JICAgIAotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotICAgIDxjYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciCi0gICAgICAgICAgICBuYW1lPSIleHBhdGhWaWV3TmFtZSI+Ci0gICAgPC9jYXRlZ29yeT4KLSAgICA8Y29tbWFuZCBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldy5wcmVmaXhlcyIKLSAgICAgICAgICAgIG5hbWU9IiV4cGF0aFZpZXcuZWRpdG5hbWVzcGFjZSI+Ci0gICAgPC9jb21tYW5kPgotICAgIDxjb21tYW5kIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3IgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3LnByb2Nlc3Nvci54cGF0aHByb2Nlc3NvciIKLSAgICAgICAgICAgIG5hbWU9IlhQYXRoIFByb2Nlc3NvciIKLSAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmhhbmRsZXIuWFBhdGhQcm9jZXNzb3JIYW5kbGVyIj4KLSAgICAgICAgICAgCi0JICAgPGNvbW1hbmRQYXJhbWV0ZXIKLQkgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZVBhcmFtZXRlciIKLQkgICAgICAgICBuYW1lPSJTdGF0ZSIKLQkgICAgICAgICBvcHRpb25hbD0iZmFsc2UiPgotCSAgIDwvY29tbWFuZFBhcmFtZXRlcj4gCi0JICAgPHN0YXRlCi0JICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLlJhZGlvU3RhdGU6eHBhdGgxMCIKLQkgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZSI+Ci0JICAgPC9zdGF0ZT4KLSAgICA8L2NvbW1hbmQ+Ci08L2V4dGVuc2lvbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPgotCTxoYW5kbGVyIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXcucHJlZml4ZXMiCi0JCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmhhbmRsZXIuUHJlZml4SGFuZGxlciI+Ci0JCTxhY3RpdmVXaGVuPgotCQkJPHdpdGggdmFyaWFibGU9ImFjdGl2ZVBhcnRJZCI+Ci0JCQkJPGVxdWFscyB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciLz4KLQkJCTwvd2l0aD4KLQkJPC9hY3RpdmVXaGVuPgotICAgIDwvaGFuZGxlcj4KLTwvZXh0ZW5zaW9uPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+Ci0gICAgPG1lbnVDb250cmlidXRpb24gbG9jYXRpb25VUkk9Im1lbnU6b3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciPgotCQk8Y29tbWFuZAotICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3LnByZWZpeGVzIgotICAgICAgICBzdHlsZT0icHVzaCI+Ci0JCTwvY29tbWFuZD4KLQkJPHNlcGFyYXRvciBuYW1lPSJhZGRpdGlvbnMiIHZpc2libGU9InRydWUiIC8+Ci0JICA8bWVudSBsYWJlbD0iJXhwYXRodmlldy54cGF0aHByb2Nlc3NvciI+Ci0JICAgICA8Y29tbWFuZAotCSAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldy5wcm9jZXNzb3IueHBhdGhwcm9jZXNzb3IiCi0JICAgICAgICAgICBsYWJlbD0iJXhwYXRodmlldy54cGF0aHByb2Nlc3Nvci5uYW1lIgotCSAgICAgICAgICAgc3R5bGU9InJhZGlvIj4KLQkgICAgICAgICA8cGFyYW1ldGVyCi0JICAgICAgICAgICAgICAgbmFtZT0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZVBhcmFtZXRlciIKLQkgICAgICAgICAgICAgICB2YWx1ZT0ieHBhdGgxMCI+Ci0JICAgICAgICAgPC9wYXJhbWV0ZXI+IAkgICAgICAgICAgIAotCSAgICAgPC9jb21tYW5kPgotCSAgICAgPGNvbW1hbmQKLQkgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXcucHJvY2Vzc29yLnhwYXRocHJvY2Vzc29yIgotCSAgICAgICAgICAgbGFiZWw9IiV4cGF0aHZpZXcueHBhdGgycHJvY2Vzc29yLm5hbWUiCi0JICAgICAgICAgICBzdHlsZT0icmFkaW8iPgotCSAgICAgICAgIDxwYXJhbWV0ZXIKLQkgICAgICAgICAgICAgICBuYW1lPSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcy5yYWRpb1N0YXRlUGFyYW1ldGVyIgotCSAgICAgICAgICAgICAgIHZhbHVlPSJ4cGF0aDIiPgotCSAgICAgICAgIDwvcGFyYW1ldGVyPiAJICAgICAgICAgICAKLQkgICAgIDwvY29tbWFuZD4KLQkgIDwvbWVudT4KLQk8L21lbnVDb250cmlidXRpb24+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzZGQ3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBiYXNlZCBvZmYgd3N0LnhtbC51aS5DdXN0b21UZW1wbGF0ZVByb3Bvc2FsCi0gKiAgICAgRG91ZyBTYXRjaHdlbGwgLSByZWZhY3RvcmVkIHRvIGludGVybmFsIHBhY2thZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhDb21wdXRlcl8wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoQ29tcHV0ZXJfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfODsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdBY3Rpb25zXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhWaWV3QWN0aW9uc18xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoUHJlZmVuY2VQYWdlXzA7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9YUGF0aF9OYXZpZ2F0b3I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9YUGF0aF9FdmFsX0ZhaWxlZDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX0NvbnRleHQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX0RvY3VtZW50OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfRE9NX1RyZWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfVGV4dDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfWFBhdGhfU2hvd19Jbl9Tb3VyY2VfRmFpbGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzOwotCi0Jc3RhdGljIHsKLQkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL1hQYXRoVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9YUGF0aFVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODIxZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL1hQYXRoVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2MTU4OCAtIEFkZCBFZGl0IE5hbWVzcGFjZSBzdXBwb3J0IGZvciBYUGF0aCB2aWV3Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5XZWFrSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuQ29udGV4dFR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5wZXJzaXN0ZW5jZS5UZW1wbGF0ZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMudGV4dC50ZW1wbGF0ZXMuQ29udHJpYnV0aW9uQ29udGV4dFR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRleHQudGVtcGxhdGVzLkNvbnRyaWJ1dGlvblRlbXBsYXRlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZVRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aFVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBYUGF0aFVJUGx1Z2luIHBsdWdpbjsKLQotCS8qKgotCSAqIFRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgeHBhdGguCi0JICovCi0JcHJpdmF0ZSBUZW1wbGF0ZVN0b3JlIGZYUGF0aFRlbXBsYXRlU3RvcmU7Ci0KLQkvKioKLQkgKiBUaGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aC4KLQkgKi8KLQlwcml2YXRlIENvbnRyaWJ1dGlvbkNvbnRleHRUeXBlUmVnaXN0cnkgZlhQYXRoQ29udGV4dFR5cGVSZWdpc3RyeTsKLQkKLQlwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8TmFtZXNwYWNlSW5mbz4+IG5hbWVzcGFjZUluZm8gPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBMaXN0PE5hbWVzcGFjZUluZm8+PigpOwotCQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFhQYXRoVUlQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZQotCSAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUKLQkgKiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFBhdGhVSVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coRXhjZXB0aW9uIGUpIHsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZygKLQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgMCwgIiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCWdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coZS5nZXRTdGF0dXMoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXMuCi0JICogCi0JICogQHJldHVybiB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXMKLQkgKi8KLQlwdWJsaWMgVGVtcGxhdGVTdG9yZSBnZXRYUGF0aFRlbXBsYXRlU3RvcmUoKSB7Ci0JCWlmIChmWFBhdGhUZW1wbGF0ZVN0b3JlID09IG51bGwpIHsKLQkJCWZYUGF0aFRlbXBsYXRlU3RvcmUgPSBuZXcgQ29udHJpYnV0aW9uVGVtcGxhdGVTdG9yZSgKLQkJCQkJZ2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpLCBnZXRQcmVmZXJlbmNlU3RvcmUoKSwKLQkJCQkJIm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkueHBhdGhfY3VzdG9tX3RlbXBsYXRlcyIpOyAvLyROT04tTkxTLTEkCi0JCQl0cnkgewotCQkJCWZYUGF0aFRlbXBsYXRlU3RvcmUubG9hZCgpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JCXJldHVybiBmWFBhdGhUZW1wbGF0ZVN0b3JlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGNvbnRleHQgdHlwZSByZWdpc3RyeSBmb3IgeHBhdGgKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHhwYXRoCi0JICovCi0JcHVibGljIENvbnRleHRUeXBlUmVnaXN0cnkgZ2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpIHsKLQkJaWYgKGZYUGF0aENvbnRleHRUeXBlUmVnaXN0cnkgPT0gbnVsbCkgewotCQkJQ29udHJpYnV0aW9uQ29udGV4dFR5cGVSZWdpc3RyeSByZWdpc3RyeSA9IG5ldyBDb250cmlidXRpb25Db250ZXh0VHlwZVJlZ2lzdHJ5KCk7Ci0JCQlyZWdpc3RyeS5hZGRDb250ZXh0VHlwZSgieHNsX3hwYXRoIik7IC8vJE5PTi1OTFMtMSQKLQkJCXJlZ2lzdHJ5LmFkZENvbnRleHRUeXBlKCJ4cGF0aF9vcGVyYXRvciIpOyAvLyROT04tTkxTLTEkCi0JCQlyZWdpc3RyeS5hZGRDb250ZXh0VHlwZSgieHBhdGhfYXhpcyIpOyAvLyROT04tTkxTLTEkCi0JCQlyZWdpc3RyeS5hZGRDb250ZXh0VHlwZSgiZXhzbHRfZnVuY3Rpb24iKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVnaXN0cnkuYWRkQ29udGV4dFR5cGUoInhwYXRoXzIiKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVnaXN0cnkuYWRkQ29udGV4dFR5cGUoImV4dGVuc2lvbl9mdW5jdGlvbiIpOyAvLyROT04tTkxTLTEkCi0JCQlmWFBhdGhDb250ZXh0VHlwZVJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCX0KLQotCQlyZXR1cm4gZlhQYXRoQ29udGV4dFR5cGVSZWdpc3RyeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VJbmZvKE1hcDxTdHJpbmcsIExpc3Q8TmFtZXNwYWNlSW5mbz4+IG5hbWVzcGFjZUluZm8pIHsKLQkJdGhpcy5uYW1lc3BhY2VJbmZvID0gbmFtZXNwYWNlSW5mbzsKLQl9Ci0KLQlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxOYW1lc3BhY2VJbmZvPj4gZ2V0TmFtZXNwYWNlSW5mbygpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZUluZm87Ci0JfQotCi0JcHVibGljIExpc3Q8TmFtZXNwYWNlSW5mbz4gZ2V0TmFtZXNwYWNlSW5mbyhJRE9NRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJWFBhdGhVSVBsdWdpbiBwbHVnaW4gPSBYUGF0aFVJUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJU3RyaW5nIG1vZGVsSUQgPSBkb2N1bWVudC5nZXRNb2RlbCgpLmdldElkKCk7Ci0JCU1hcDxTdHJpbmcsIExpc3Q8TmFtZXNwYWNlSW5mbz4+IG5hbWVzcGFjZUluZm8gPSBwbHVnaW4uZ2V0TmFtZXNwYWNlSW5mbygpOwotCQlMaXN0PE5hbWVzcGFjZUluZm8+IGluZm8gPSBuYW1lc3BhY2VJbmZvLmdldChtb2RlbElEKTsKLQotCQlpZiAoaW5mbyA9PSBudWxsKSB7Ci0JCQlpZiAoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkgIT0gbnVsbCkgewotCQkJCWluZm8gPSBuZXcgQXJyYXlMaXN0PE5hbWVzcGFjZUluZm8+KCk7Ci0JCQkJTmFtZXNwYWNlVGFibGUgbmFtZXNwYWNlVGFibGUgPSBuZXcgTmFtZXNwYWNlVGFibGUoZG9jdW1lbnQpOwotCQkJCW5hbWVzcGFjZVRhYmxlLnZpc2l0RWxlbWVudChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0JCQkJQ29sbGVjdGlvbjw/PiBuYW1lc3BhY2VzID0gbmFtZXNwYWNlVGFibGUKLQkJCQkJCS5nZXROYW1lc3BhY2VJbmZvQ29sbGVjdGlvbigpOwotCQkJCWluZm8uYWRkQWxsKChDb2xsZWN0aW9uPE5hbWVzcGFjZUluZm8+KSBuYW1lc3BhY2VzKTsKLQkJCQluYW1lc3BhY2VJbmZvLnB1dChtb2RlbElELCBpbmZvKTsKLQkJCQlwbHVnaW4uc2V0TmFtZXNwYWNlSW5mbyhuYW1lc3BhY2VJbmZvKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW5mbzsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9DdXN0b21UZW1wbGF0ZVByb3Bvc2FsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9DdXN0b21UZW1wbGF0ZVByb3Bvc2FsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFlM2U3NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGJhc2VkIG9mZiB3c3QueG1sLnVpLkN1c3RvbVRlbXBsYXRlUHJvcG9zYWwKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSVJlbGV2YW5jZUNvbXBsZXRpb25Qcm9wb3NhbDsKLQotLyoqCi0gKiBQdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gbWFrZSB0aGUgYWRkaXRpb25hbCBwcm9wb3NhbCBpbmZvIGludG8gY29udGVudAotICogZml0IGZvciBhbiBIVE1MIHZpZXdlciAoYnkgZXNjYXBpbmcgY2hhcmFjdGVycykKLSAqLwotQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKLXB1YmxpYyBjbGFzcyBDdXN0b21UZW1wbGF0ZVByb3Bvc2FsIGV4dGVuZHMgVGVtcGxhdGVQcm9wb3NhbCBpbXBsZW1lbnRzCi0JCUlSZWxldmFuY2VDb21wbGV0aW9uUHJvcG9zYWwgewotCi0JcHJpdmF0ZSBmaW5hbCBUZW1wbGF0ZSBmVGVtcGxhdGU7Ci0KLQlwdWJsaWMgQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbChUZW1wbGF0ZSB0ZW1wbGF0ZSwgVGVtcGxhdGVDb250ZXh0IGNvbnRleHQsCi0JCQlJUmVnaW9uIHJlZ2lvbiwgSW1hZ2UgaW1hZ2UsIGludCByZWxldmFuY2UpIHsKLQkJc3VwZXIodGVtcGxhdGUsIGNvbnRleHQsIHJlZ2lvbiwgaW1hZ2UsIHJlbGV2YW5jZSk7Ci0JCXRoaXMuZlRlbXBsYXRlID0gdGVtcGxhdGU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXREaXNwbGF5U3RyaW5nKCkgewotCQlyZXR1cm4gZlRlbXBsYXRlLmdldE5hbWUoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldEFkZGl0aW9uYWxQcm9wb3NhbEluZm8oKSB7Ci0JCXJldHVybiBTdHJpbmdVdGlscy5jb252ZXJ0VG9IVE1MQ29udGVudChmVGVtcGxhdGUuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFBhdGhUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGYyN2JkOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFBhdGhUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gaW5pdGlhbCBBUEkgYmFzZWQgb2ZmIFhNTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvcgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5Db250ZXh0VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZVByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLnBlcnNpc3RlbmNlLlRlbXBsYXRlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5SZXBsYWNlTmFtZVRlbXBsYXRlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLlhQYXRoVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudXRpbC5YUGF0aFBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudXRpbC5YUGF0aFBsdWdpbkltYWdlczsKLQotLyoqCi0gKiBDb21wbGV0aW9uIHByb2Nlc3NvciBmb3IgWE1MIFRlbXBsYXRlcy4gTW9zdCBvZiB0aGUgd29yayBpcyBhbHJlYWR5IGRvbmUgYnkKLSAqIHRoZSBYTUwgQ29udGVudCBBc3Npc3QgcHJvY2Vzc29yLCBzbyBieSB0aGUgdGltZSB0aGUKLSAqIFhNTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciBpcyBhc2tlZCBmb3IgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzLCB0aGUgWE1MCi0gKiBjb250ZW50IGFzc2lzdCBwcm9jZXNzb3IgaGFzIGFscmVhZHkgc2V0IHRoZSBjb250ZXh0IHR5cGUgZm9yIHRlbXBsYXRlcy4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yIGV4dGVuZHMKLQkJVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBQcm9wb3NhbENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yLAotCQkJU2VyaWFsaXphYmxlIHsKLQotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxNjg2NTg4NjA5MzkwNzQ3NTM2TDsKLQotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCXJldHVybiAoKFRlbXBsYXRlUHJvcG9zYWwpIG8yKS5nZXRSZWxldmFuY2UoKQotCQkJCQktICgoVGVtcGxhdGVQcm9wb3NhbCkgbzEpLmdldFJlbGV2YW5jZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29tcGFyYXRvciBmZ1Byb3Bvc2FsQ29tcGFyYXRvciA9IG5ldyBQcm9wb3NhbENvbXBhcmF0b3IoKTsKLQlwcml2YXRlIFN0cmluZyBmQ29udGV4dFR5cGVJZCA9IG51bGw7Ci0KLQkvKgotCSAqIENvcGllZCBmcm9tIHN1cGVyIGNsYXNzIGV4Y2VwdCBpbnN0ZWFkIG9mIGNhbGxpbmcgY3JlYXRlQ29udGV4dCh2aWV3ZXIsCi0JICogcmVnaW9uKSBjYWxsIGNyZWF0ZUNvbnRleHQodmlld2VyLCByZWdpb24sIG9mZnNldCkgaW5zdGVhZAotCSAqLwotCXB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMoSVRleHRWaWV3ZXIgdmlld2VyLAotCQkJaW50IG9mZnNldCkgewotCi0JCUlUZXh0U2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJVGV4dFNlbGVjdGlvbikgdmlld2VyCi0JCQkJLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0KLQkJLy8gYWRqdXN0IG9mZnNldCB0byBlbmQgb2Ygbm9ybWFsaXplZCBzZWxlY3Rpb24KLQkJaWYgKHNlbGVjdGlvbi5nZXRPZmZzZXQoKSA9PSBvZmZzZXQpIHsKLQkJCW9mZnNldCA9IHNlbGVjdGlvbi5nZXRPZmZzZXQoKSArIHNlbGVjdGlvbi5nZXRMZW5ndGgoKTsKLQkJfQotCi0JCVN0cmluZyBwcmVmaXggPSBleHRyYWN0UHJlZml4KHZpZXdlciwgb2Zmc2V0KTsKLQkJUmVnaW9uIHJlZ2lvbiA9IG5ldyBSZWdpb24ob2Zmc2V0IC0gcHJlZml4Lmxlbmd0aCgpLCBwcmVmaXgubGVuZ3RoKCkpOwotCQlUZW1wbGF0ZUNvbnRleHQgY29udGV4dCA9IGNyZWF0ZUNvbnRleHQodmlld2VyLCByZWdpb24sIG9mZnNldCk7Ci0JCWlmIChjb250ZXh0ID09IG51bGwpIHsKLQkJCXJldHVybiBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFswXTsKLQkJfQotCi0JCS8vIG5hbWUgb2YgdGhlIHNlbGVjdGlvbiB2YXJpYWJsZXMge2xpbmUsIHdvcmR9X3NlbGVjdGlvbgotCQljb250ZXh0LnNldFZhcmlhYmxlKCJzZWxlY3Rpb24iLCBzZWxlY3Rpb24uZ2V0VGV4dCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCVRlbXBsYXRlW10gdGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzKGNvbnRleHQuZ2V0Q29udGV4dFR5cGUoKS5nZXRJZCgpKTsKLQotCQlMaXN0IG1hdGNoZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1tpXTsKLQkJCXRyeSB7Ci0JCQkJY29udGV4dC5nZXRDb250ZXh0VHlwZSgpLnZhbGlkYXRlKHRlbXBsYXRlLmdldFBhdHRlcm4oKSk7Ci0JCQl9IGNhdGNoIChUZW1wbGF0ZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAodGVtcGxhdGUubWF0Y2hlcyhwcmVmaXgsIGNvbnRleHQuZ2V0Q29udGV4dFR5cGUoKS5nZXRJZCgpKSkgewotCQkJCW1hdGNoZXMuYWRkKGNyZWF0ZVByb3Bvc2FsKHRlbXBsYXRlLCBjb250ZXh0LCAoSVJlZ2lvbikgcmVnaW9uLAotCQkJCQkJZ2V0UmVsZXZhbmNlKHRlbXBsYXRlLCBwcmVmaXgpKSk7Ci0JCQl9Ci0JCX0KLQotCQlDb2xsZWN0aW9ucy5zb3J0KG1hdGNoZXMsIGZnUHJvcG9zYWxDb21wYXJhdG9yKTsKLQotCQlyZXR1cm4gKElDb21wbGV0aW9uUHJvcG9zYWxbXSkgbWF0Y2hlcwotCQkJCS50b0FycmF5KG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW21hdGNoZXMuc2l6ZSgpXSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIGNvbmNyZXRlIHRlbXBsYXRlIGNvbnRleHQgZm9yIHRoZSBnaXZlbiByZWdpb24gaW4gdGhlIGRvY3VtZW50LgotCSAqIFRoaXMgaW52b2x2ZXMgZmluZGluZyBvdXQgd2hpY2ggY29udGV4dCB0eXBlIGlzIHZhbGlkIGF0IHRoZSBnaXZlbgotCSAqIGxvY2F0aW9uLCBhbmQgdGhlbiBjcmVhdGluZyBhIGNvbnRleHQgb2YgdGhpcyB0eXBlLiBUaGUgZGVmYXVsdAotCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgYSA8Y29kZT5TbWFydFJlcGxhY2VUZW1wbGF0ZUNvbnRleHQ8L2NvZGU+IGZvciB0aGUKLQkgKiBjb250ZXh0IHR5cGUgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLiBUaGlzIHRha2VzIHRoZSBvZmZzZXQgYXQgd2hpY2gKLQkgKiBjb250ZW50IGFzc2lzdCB3YXMgaW52b2tlZCBpbnRvIGNvbnNpZGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGhlIHZpZXdlciBmb3Igd2hpY2ggdGhlIGNvbnRleHQgaXMgY3JlYXRlZAotCSAqIEBwYXJhbSByZWdpb24KLQkgKiAgICAgICAgICAgIHRoZSByZWdpb24gaW50byA8Y29kZT5kb2N1bWVudDwvY29kZT4gZm9yIHdoaWNoIHRoZSBjb250ZXh0IGlzCi0JICogICAgICAgICAgICBjcmVhdGVkCi0JICogQHBhcmFtIG9mZnNldAotCSAqICAgICAgICAgICAgdGhlIG9yaWdpbmFsIG9mZnNldCB3aGVyZSBjb250ZW50IGFzc2lzdCB3YXMgaW52b2tlZAotCSAqIEByZXR1cm4gYSB0ZW1wbGF0ZSBjb250ZXh0IHRoYXQgY2FuIGhhbmRsZSB0ZW1wbGF0ZSBpbnNlcnRpb24gYXQgdGhlCi0JICogICAgICAgICBnaXZlbiBsb2NhdGlvbiwgb3IgPGNvZGU+bnVsbDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIFRlbXBsYXRlQ29udGV4dCBjcmVhdGVDb250ZXh0KElUZXh0Vmlld2VyIHZpZXdlciwgSVJlZ2lvbiByZWdpb24sCi0JCQlpbnQgb2Zmc2V0KSB7Ci0JCS8vIHByZXR0eSBtdWNoIHNhbWUgY29kZSBhcyBzdXBlci5jcmVhdGVDb250ZXh0IGV4Y2VwdCBjcmVhdGUKLQkJLy8gU21hcnRSZXBsYWNlVGVtcGxhdGVDb250ZXh0Ci0JCVRlbXBsYXRlQ29udGV4dFR5cGUgY29udGV4dFR5cGUgPSBnZXRDb250ZXh0VHlwZSh2aWV3ZXIsIHJlZ2lvbik7Ci0JCWlmIChjb250ZXh0VHlwZSAhPSBudWxsKSB7Ci0JCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJCXJldHVybiBuZXcgUmVwbGFjZU5hbWVUZW1wbGF0ZUNvbnRleHQoY29udGV4dFR5cGUsIGRvY3VtZW50LCByZWdpb24KLQkJCQkJLmdldE9mZnNldCgpLCByZWdpb24uZ2V0TGVuZ3RoKCksIG9mZnNldCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIElDb21wbGV0aW9uUHJvcG9zYWwgY3JlYXRlUHJvcG9zYWwoVGVtcGxhdGUgdGVtcGxhdGUsCi0JCQlUZW1wbGF0ZUNvbnRleHQgY29udGV4dCwgSVJlZ2lvbiByZWdpb24sIGludCByZWxldmFuY2UpIHsKLQkJcmV0dXJuIG5ldyBDdXN0b21UZW1wbGF0ZVByb3Bvc2FsKHRlbXBsYXRlLCBjb250ZXh0LCByZWdpb24sCi0JCQkJZ2V0SW1hZ2UodGVtcGxhdGUpLCByZWxldmFuY2UpOwotCX0KLQotCXByb3RlY3RlZCBUZW1wbGF0ZUNvbnRleHRUeXBlIGdldENvbnRleHRUeXBlKElUZXh0Vmlld2VyIHZpZXdlciwKLQkJCUlSZWdpb24gcmVnaW9uKSB7Ci0JCVRlbXBsYXRlQ29udGV4dFR5cGUgdHlwZSA9IG51bGw7Ci0KLQkJQ29udGV4dFR5cGVSZWdpc3RyeSByZWdpc3RyeSA9IGdldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCk7Ci0JCWlmIChyZWdpc3RyeSAhPSBudWxsKSB7Ci0JCQl0eXBlID0gcmVnaXN0cnkuZ2V0Q29udGV4dFR5cGUoZkNvbnRleHRUeXBlSWQpOwotCQl9Ci0KLQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JcHJvdGVjdGVkIEltYWdlIGdldEltYWdlKFRlbXBsYXRlIHRlbXBsYXRlKSB7Ci0JCWlmIChUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguQVhJUwotCQkJCS5lcXVhbHModGVtcGxhdGUuZ2V0Q29udGV4dFR5cGVJZCgpKSkgewotCQkJcmV0dXJuIFhQYXRoUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgKLQkJCQkJWFBhdGhQbHVnaW5JbWFnZXMuSU1HX1hQQVRIX0FYSVMpOwotCQl9Ci0KLQkJaWYgKFRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aC5YUEFUSC5lcXVhbHModGVtcGxhdGUKLQkJCQkuZ2V0Q29udGV4dFR5cGVJZCgpKSkgewotCQkJcmV0dXJuIFhQYXRoUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgKLQkJCQkJWFBhdGhQbHVnaW5JbWFnZXMuSU1HX1hQQVRIX0ZVTkNUSU9OKTsKLQkJfQotCi0JCWlmIChUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguT1BFUkFUT1IuZXF1YWxzKHRlbXBsYXRlCi0JCQkJLmdldENvbnRleHRUeXBlSWQoKSkpIHsKLQkJCXJldHVybiBYUGF0aFBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoCi0JCQkJCVhQYXRoUGx1Z2luSW1hZ2VzLklNR19PUEVSQVRPUik7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIENvbnRleHRUeXBlUmVnaXN0cnkgZ2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnkoKSB7Ci0JCXJldHVybiBYUGF0aFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCk7Ci0JfQotCi0JcHJvdGVjdGVkIFRlbXBsYXRlW10gZ2V0VGVtcGxhdGVzKFN0cmluZyBjb250ZXh0VHlwZUlkKSB7Ci0JCVRlbXBsYXRlIHRlbXBsYXRlc1tdID0gbnVsbDsKLQotCQlUZW1wbGF0ZVN0b3JlIHN0b3JlID0gZ2V0VGVtcGxhdGVTdG9yZSgpOwotCQlpZiAoc3RvcmUgIT0gbnVsbCkgewotCQkJdGVtcGxhdGVzID0gc3RvcmUuZ2V0VGVtcGxhdGVzKGNvbnRleHRUeXBlSWQpOwotCQl9Ci0KLQkJcmV0dXJuIHRlbXBsYXRlczsKLQl9Ci0KLQlwcml2YXRlIFRlbXBsYXRlU3RvcmUgZ2V0VGVtcGxhdGVTdG9yZSgpIHsKLQkJcmV0dXJuIFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFhQYXRoVGVtcGxhdGVTdG9yZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENvbnRleHRUeXBlKFN0cmluZyBjb250ZXh0VHlwZUlkKSB7Ci0JCWZDb250ZXh0VHlwZUlkID0gY29udGV4dFR5cGVJZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvaGFuZGxlci9QcmVmaXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvaGFuZGxlci9QcmVmaXhIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTllOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2hhbmRsZXIvUHJlZml4SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuaGFuZGxlcjsNCi0NCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGF0aEVkaXRvcklucHV0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzLkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2c7DQotDQotLyoqDQotICogVGhlIHByZWZpeCBoYW5kbGVyIGhhbmRsZXMgY29tbWFuZHMgZm9yIGVkaXRpbmcgdGhlIG5hbWVzcGFjZXMgYXNzb2ljYXRlZA0KLSAqIHdpdGggWFBhdGggcXVpZXJpZXMgaW4gdGhlIFhQYXRoIHZpZXcuICAgSWYgYW4gaXRlbSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQNCi0gKiBuYW1lc3BhY2UgaXQgc3RpbGwgbmVlZHMgYSBwcmVmaXggZm9yIFhQYXRoIHRvIHdvcmsgd2l0aCBpdC4NCi0gKiANCi0gKiBAYXV0aG9yIGRjYXJ2ZXINCi0gKg0KLSAqLw0KLXB1YmxpYyBjbGFzcyBQcmVmaXhIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIGltcGxlbWVudHMgSUhhbmRsZXIgew0KLQkNCi0JLyoqDQotCSAqIFRoaXMgd2lsbCB1c2UgdGhlIGFjdGl2ZSBlZGl0b3IsIGFuZCB0cnkgYW5kIHJldHJpZXZlIGEgc3RydWN0dXJlZA0KLQkgKiBtb2RlbCBmcm9tIGl0LiAgSWYgc3VjY2Vzc2Z1bCwgaXQgc2V0dXBzIHRoZSBuYW1lc3BhY2UgZWRpdCBkaWFsb2cNCi0JICogdG8gY2FwdHVyZSB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uLg0KLQkgKi8NCi0JcHVibGljIE9iamVjdCBleGVjdXRlKEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCi0JCVhQYXRoVUlQbHVnaW4gcGx1Z2luID0gWFBhdGhVSVBsdWdpbi5nZXREZWZhdWx0KCk7DQotCQkNCi0JCUlFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvciA9IEhhbmRsZXJVdGlsLmdldEFjdGl2ZUVkaXRvcihldmVudCk7DQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBhY3RpdmVFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKS5nZXRBZGFwdGVyKA0KLQkJCQlJRmlsZS5jbGFzcyk7DQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7DQotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQltb2RlbCA9IChJRE9NTW9kZWwpIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7DQotCQkJSURPTURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsNCi0NCi0JCQlpZiAoZG9jdW1lbnQgIT0gbnVsbCkgew0KLQkJCQlMaXN0PE5hbWVzcGFjZUluZm8+IGluZm8gPSBwbHVnaW4uZ2V0TmFtZXNwYWNlSW5mbyhkb2N1bWVudCk7DQotDQotCQkJCUlQYXRoRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSAoSVBhdGhFZGl0b3JJbnB1dCkgYWN0aXZlRWRpdG9yDQotCQkJCQkJLmdldEVkaXRvcklucHV0KCk7DQotDQotCQkJCUVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cgZGxnID0gbmV3IEVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2coDQotCQkJCQkJYWN0aXZlRWRpdG9yLmdldFNpdGUoKS5nZXRTaGVsbCgpLCBlZGl0b3JJbnB1dA0KLQkJCQkJCQkJLmdldFBhdGgoKSk7DQotCQkJCWRsZy5zZXROYW1lc3BhY2VJbmZvTGlzdChpbmZvKTsNCi0JCQkJaWYgKFNXVC5PSyA9PSBkbGcub3BlbigpKSB7DQotCQkJCQkvLyBBcHBseSBjaGFuZ2VzDQotCQkJCX0NCi0JCQl9DQotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCi0NCi0JCX0gZmluYWxseSB7DQotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIG51bGw7DQotCX0JDQotfQ0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9oYW5kbGVyL1hQYXRoUHJvY2Vzc29ySGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2hhbmRsZXIvWFBhdGhQcm9jZXNzb3JIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYWYyNzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2hhbmRsZXIvWFBhdGhQcm9jZXNzb3JIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSQ0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5oYW5kbGVyOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5SYWRpb1N0YXRlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGhDb3JlSGVscGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLlhQYXRoVUlQbHVnaW47DQotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLlByZWZlcmVuY2VzOw0KLQ0KLQ0KLXB1YmxpYyBjbGFzcyBYUGF0aFByb2Nlc3NvckhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgew0KLQ0KLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gew0KLQkJaWYgKEhhbmRsZXJVdGlsLm1hdGNoZXNSYWRpb1N0YXRlKGV2ZW50KSkgew0KLQkJCXJldHVybiBudWxsOw0KLQkJfQ0KLQkJDQotCQlTdHJpbmcgeHBhdGhTdGF0ZSA9IGV2ZW50LmdldFBhcmFtZXRlcihSYWRpb1N0YXRlLlBBUkFNRVRFUl9JRCk7DQotDQotCQl0b2dnbGVTdGF0ZSh4cGF0aFN0YXRlKTsNCi0JCQ0KLQkJSGFuZGxlclV0aWwudXBkYXRlUmFkaW9TdGF0ZShldmVudC5nZXRDb21tYW5kKCksIHhwYXRoU3RhdGUpOw0KLQkJcmV0dXJuIG51bGw7DQotCX0NCi0NCi0JcHJvdGVjdGVkIHZvaWQgdG9nZ2xlU3RhdGUoU3RyaW5nIHhwYXRoU3RhdGUpIHsNCi0JCVByZWZlcmVuY2VzIG9zZ2lQcmVmcyA9IFhQYXRoQ29yZUhlbHBlci5nZXRQcmVmZXJlbmNlcygpOw0KLQkJaWYgKHhwYXRoU3RhdGUuZXF1YWxzKCJ4cGF0aDEwIikpIHsNCi0JCQlvc2dpUHJlZnMucHV0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIXzFfMF9QUk9DRVNTT1IsIHRydWUpOw0KLQkJCW9zZ2lQcmVmcy5wdXRCb29sZWFuKFhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuWFBBVEhfMl8wX1BST0NFU1NPUiwgZmFsc2UpOw0KLQkJfSBlbHNlIGlmICh4cGF0aFN0YXRlLmVxdWFscygieHBhdGgyIikpIHsNCi0JCQlvc2dpUHJlZnMucHV0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIXzFfMF9QUk9DRVNTT1IsIGZhbHNlKTsNCi0JCQlvc2dpUHJlZnMucHV0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIXzJfMF9QUk9DRVNTT1IsIHRydWUpOw0KLQkJfQ0KLQkJDQotCQl0cnkgew0KLQkJCW9zZ2lQcmVmcy5mbHVzaCgpOw0KLQkJfSBjYXRjaCAoQmFja2luZ1N0b3JlRXhjZXB0aW9uIGV4KSB7DQotCQkJWFBhdGhVSVBsdWdpbi5sb2coZXgpOw0KLQkJfQ0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Nzk4NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1YUGF0aENvbXB1dGVyXzA9SVN0cnVjdHVyZWRNb2RlbCBkaWQgbm90IGFkYXB0IHRvIGEgRG9jdW1lbnQKLVhQYXRoQ29tcHV0ZXJfNT1SZWZyZXNoaW5nIFhQYXRoIFZpZXcKLVhQYXRoVmlld18wPUxvY2F0aW9uOiAKLVhQYXRoVmlld18xPVhQYXRoIGV4cHJlc3Npb246Ci1YUGF0aFZpZXdfMj1TaGVldCAKLVhQYXRoVmlld184PS8KLVhQYXRoVmlld0FjdGlvbnNfMD1Db2xsYXBzZSBBbGwKLVhQYXRoVmlld0FjdGlvbnNfMT1MaW5rIHdpdGggRWRpdG9yCi1YUGF0aFByZWZlbmNlUGFnZV8wPUV4cGFuZCB0aGUgdHJlZSB0byBlZGl0IHRoZSBmZWF0dXJlcyBmb3IgYSBwYXJ0aWN1bGFyIFhQYXRoIGZlYXR1cmUuCi0KLSMgVUkgUHJlZmVyZW5jZSBTZXR0aW5ncyBmb3Igdmlld3M6Ci1YUGF0aE5hdmlnYXRvcl9YUGF0aF9OYXZpZ2F0b3I9WFBhdGggTmF2aWdhdG9yCi1YUGF0aE5hdmlnYXRvcl9TZWxlY3Rfc291cmNlX2ZpcnN0PVNlbGVjdCBYTUwgU291cmNlIGRvY3VtZW50IGZpcnN0LgotWFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQ9WFBhdGggRXhwcmVzc2lvbiBldmFsdWF0aW9uIGZhaWxlZCA6XHJcbgotWFBhdGhOYXZpZ2F0b3JfWE1MX1NvdXJjZV9Eb2N1bWVudD1YTUwgU291cmNlIERvY3VtZW50OgotWFBhdGhOYXZpZ2F0b3JfQ29udGV4dD1YUGF0aCBDb250ZXh0OgotWFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uPVNlbGVjdGlvbgotWFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQ9RG9jdW1lbnQKLVhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb249WFBhdGggRXhwcmVzc2lvbjoKLVhQYXRoTmF2aWdhdG9yX0RPTV9UcmVlPURPTSBUcmVlCi1YUGF0aE5hdmlnYXRvcl9UZXh0PVRleHQKLVhQYXRoTmF2aWdhdG9yX1J1bl9YUGF0aF9RdWVyeT1SdW4gWFBhdGggUXVlcnkKLVhQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZD1SdW4gWFBhdGggUXVlcnkgb24gc2VsZWN0ZWRcbmRvY3VtZW50IGNvbnRleHQKLVhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3M9UmVmcmVzaCBYTUwgU291cmNlIERvY3VtZW50cwotWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXA9UmVmcmVzaCBYTUwgU291cmNlIERvY3VtZW50IGxpc3QKLVhQYXRoTmF2aWdhdG9yX1Nob3dfSW5fU291cmNlPVNob3cgaW4gU291cmNlCi1YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZV9UaXA9R28gdG8gc2VsZWN0aW9uIGluIFhNTCBTb3VyY2UgRG9jdW1lbnQuCi1YUGF0aE5hdmlnYXRvcl9Ob2RlX2NvdWxkX25vdF9iZV9zZWxlY3RlZD1Ob2RlIGNvdWxkIG5vdCBiZSBzZWxlY3RlZC4KLVhQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQ9Tm90aGluZyBzZWxlY3RlZC4KLVhQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZD1Db3VsZCBub3QgZmluZCBzb3VyY2UgcG9zaXRpb24gOlxyXG4KLVhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXM9UHJlZml4ZXMuLi4KLVhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXNfVGlwPUVkaXQgbmFtZXNwYWNlIHByZWZpeGVzIHVzZWQgaW4gdGhlIFhQYXRoIGV4cHJlc3Npb24uLi4KLVhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZV9QcmVmaXhlcz1OYW1lc3BhY2UgcHJlZml4ZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YUGF0aFByZWZlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hQYXRoUHJlZmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNDNkZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hQYXRoUHJlZmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5BYnN0cmFjdFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCi1wdWJsaWMgY2xhc3MgWFBhdGhQcmVmZW5jZVBhZ2UgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VQYWdlIHsKLQotCS8qKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuQWJzdHJhY3RQcmVmZXJlbmNlUGFnZSNjcmVhdGVDb250ZW50cyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBjcmVhdGVTY3JvbGxlZENvbXBvc2l0ZShwYXJlbnQpOwotCi0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IE1lc3NhZ2VzLlhQYXRoUHJlZmVuY2VQYWdlXzA7Ci0JCVRleHQgdGV4dCA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7Ci0JCS8vIHNvbWUgdGhlbWVzIG9uIEdUSyBoYXZlIGRpZmZlcmVudCBiYWNrZ3JvdW5kIGNvbG9ycyBmb3IgVGV4dCBhbmQKLQkJLy8gTGFiZWxzCi0JCXRleHQuc2V0QmFja2dyb3VuZChjb21wb3NpdGUuZ2V0QmFja2dyb3VuZCgpKTsKLQkJdGV4dC5zZXRUZXh0KGRlc2NyaXB0aW9uKTsKLQotCQlzZXRTaXplKGNvbXBvc2l0ZSk7Ci0JCXJldHVybiBjb21wb3NpdGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNTUzZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MVGVtcGxhdGVQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLlhQYXRoVUlQbHVnaW47Ci0KLS8qKgotICogWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSBzZXRzIHVwIHRoZSB0ZW1wbGF0ZSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBjb250YWlucwotICogdGhlIHRlbXBsYXRlcyBmb3IgeHBhdGgsIHhwYXRoIDIuMCwgYXhpcywgb3BlcmF0b3JzLCBhbmQgZXhzbHQgZnVuY3Rpb25zLgotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhUZW1wbGF0ZVByZWZlcmVuY2VQYWdlIGV4dGVuZHMgWE1MVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgWFBhdGhUZW1wbGF0ZVByZWZlcmVuY2VQYWdlKCkgewotCQlzZXRQcmVmZXJlbmNlU3RvcmUoWFBhdGhVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOwotCQlzZXRUZW1wbGF0ZVN0b3JlKFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFhQYXRoVGVtcGxhdGVTdG9yZSgpKTsKLQkJc2V0Q29udGV4dFR5cGVSZWdpc3RyeShYUGF0aFVJUGx1Z2luLmdldERlZmF1bHQoKQotCQkJCS5nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCkpOwotCX0KLQotCS8qKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VQYWdlI3BlcmZvcm1PaygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgewotCQlib29sZWFuIG9rID0gc3VwZXIucGVyZm9ybU9rKCk7Ci0JCVhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlyZXR1cm4gb2s7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3RlbXBsYXRlcy9UZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC90ZW1wbGF0ZXMvVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZkNjE2NWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3RlbXBsYXRlcy9UZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIxMzg0OSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC50ZW1wbGF0ZXM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgbmFtZXMgYW5kIHZhbHVlcyBmb3IgdGhlIFhTTCBDb250ZW54dFR5cGVzIGZvciB0aGUKLSAqIFhQYXRoIGNvbXBsZXRpb24gcHJvcG9zYWxzLgotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoIHsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEggPSBnZXRYUGF0aCgpOwotCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFkb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSDIgPSBnZXRYUGF0aDIoKTsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVhJUyA9IGdldEFYSVMoKTsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFQgPSBnZXRFWFNMVCgpOwotCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFkb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRPUiA9IGdldE9wZXJhdG9yKCk7Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YWRvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENVU1RPTSA9IGdldEN1c3RvbSgpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFhQYXRoKCkgewotCQlyZXR1cm4gInhzbF94cGF0aCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0WFBhdGgyKCkgewotCQlyZXR1cm4gInhwYXRoXzIiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEFYSVMoKSB7Ci0JCXJldHVybiAieHBhdGhfYXhpcyI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RVhTTFQoKSB7Ci0JCXJldHVybiAiZXhzbHRfZnVuY3Rpb25zIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRPcGVyYXRvcigpIHsKLQkJcmV0dXJuICJ4cGF0aF9vcGVyYXRvciI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0Q3VzdG9tKCkgewotCQlyZXR1cm4gImV4dGVuc2lvbl9mdW5jdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdXRpbC9YUGF0aFBsdWdpbkltYWdlSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdXRpbC9YUGF0aFBsdWdpbkltYWdlSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE0ZmI0MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3V0aWwvWFBhdGhQbHVnaW5JbWFnZUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIxMzg0OSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuWFBhdGhVSVBsdWdpbjsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdG8gaGFuZGxlIGltYWdlcyBwcm92aWRlZCBieSB0aGlzIHBsdWctaW4uCi0gKiAKLSAqIE5PVEU6IEZvciBpbnRlcm5hbCB1c2Ugb25seS4gRm9yIGltYWdlcyB1c2VkIGV4dGVybmFsbHksIHBsZWFzZSB1c2UgdGhlCi0gKiBTaGFyZWQqKipJbWFnZUhlbHBlciBjbGFzcyBpbnN0ZWFkLgotICogCi0gKiBAYXV0aG9yIGRhdmlkIGNhcnZlciBiYXNlZCBvbiB3b3JrIGJ5IGFteXd1Ci0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aFBsdWdpbkltYWdlSGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBYUGF0aFBsdWdpbkltYWdlSGVscGVyIGluc3RhbmNlID0gbnVsbDsKLQotCS8qKgotCSAqIEdldHMgdGhlIGluc3RhbmNlLgotCSAqIAotCSAqIEByZXR1cm4gUmV0dXJucyBhIFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgWFBhdGhQbHVnaW5JbWFnZUhlbHBlciBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFhQYXRoUGx1Z2luSW1hZ2VIZWxwZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JLy8gc2F2ZSBhIGRlc2NyaXB0b3IgZm9yIGVhY2ggaW1hZ2UKLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIEhhc2hNYXAgZkltYWdlRGVzY1JlZ2lzdHJ5ID0gbnVsbDsKLQotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIFBMVUdJTklEID0gWFBhdGhVSVBsdWdpbi5QTFVHSU5fSUQ7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGltYWdlIGZyb20gdGhlIGdpdmVuIHJlc291cmNlIGFuZCBhZGRzIHRoZSBpbWFnZSB0byB0aGUgaW1hZ2UKLQkgKiByZWdpc3RyeS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiBAcmV0dXJuIEltYWdlCi0JICovCi0JcHJpdmF0ZSBJbWFnZSBjcmVhdGVJbWFnZShTdHJpbmcgcmVzb3VyY2UpIHsKLQkJSW1hZ2VEZXNjcmlwdG9yIGRlc2MgPSBnZXRJbWFnZURlc2NyaXB0b3IocmVzb3VyY2UpOwotCQlJbWFnZSBpbWFnZSA9IG51bGw7Ci0KLQkJaWYgKGRlc2MgIT0gbnVsbCkgewotCQkJaW1hZ2UgPSBkZXNjLmNyZWF0ZUltYWdlKCk7Ci0JCQkvLyBkb250IGFkZCB0aGUgbWlzc2luZyBpbWFnZSBkZXNjcmlwdG9yIGltYWdlIHRvIHRoZSBpbWFnZQotCQkJLy8gcmVnaXN0cnkKLQkJCWlmICghZGVzYy5lcXVhbHMoSW1hZ2VEZXNjcmlwdG9yLmdldE1pc3NpbmdJbWFnZURlc2NyaXB0b3IoKSkpIHsKLQkJCQlnZXRJbWFnZVJlZ2lzdHJ5KCkucHV0KHJlc291cmNlLCBpbWFnZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGltYWdlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmcm9tIHRoZSBnaXZlbiBpbWFnZUZpbGVQYXRoIGFuZCBhZGRzIHRoZQotCSAqIGltYWdlIGRlc2NyaXB0b3IgdG8gdGhlIGltYWdlIGRlc2NyaXB0b3IgcmVnaXN0cnkuIElmIGFuIGltYWdlIGRlc2NyaXB0b3IKLQkgKiBjb3VsZCBub3QgYmUgY3JlYXRlZCwgdGhlIGRlZmF1bHQgIm1pc3NpbmciIGltYWdlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQKLQkgKiBidXQgbm90IGFkZGVkIHRvIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5LgotCSAqIAotCSAqIEBwYXJhbSBpbWFnZUZpbGVQYXRoCi0JICogQHJldHVybiBJbWFnZURlc2NyaXB0b3IgaW1hZ2UgZGVzY3JpcHRvciBmb3IgaW1hZ2VGaWxlUGF0aCBvciBkZWZhdWx0Ci0JICogICAgICAgICAibWlzc2luZyIgaW1hZ2UgZGVzY3JpcHRvciBpZiByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQKLQkgKi8KLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIEltYWdlRGVzY3JpcHRvciBjcmVhdGVJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGltYWdlRmlsZVBhdGgpIHsKLQkJSW1hZ2VEZXNjcmlwdG9yIGltYWdlRGVzY3JpcHRvciA9IEFic3RyYWN0VUlQbHVnaW4KLQkJCQkuaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihYUGF0aFVJUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJCWltYWdlRmlsZVBhdGgpOwotCQlpZiAoaW1hZ2VEZXNjcmlwdG9yICE9IG51bGwpIHsKLQkJCWdldEltYWdlRGVzY3JpcHRvclJlZ2lzdHJ5KCkucHV0KGltYWdlRmlsZVBhdGgsIGltYWdlRGVzY3JpcHRvcik7Ci0JCX0gZWxzZSB7Ci0JCQlpbWFnZURlc2NyaXB0b3IgPSBJbWFnZURlc2NyaXB0b3IuZ2V0TWlzc2luZ0ltYWdlRGVzY3JpcHRvcigpOwotCQl9Ci0KLQkJcmV0dXJuIGltYWdlRGVzY3JpcHRvcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBmcm9tIHRoZSBpbWFnZSByZWdpc3RyeS4gSWYKLQkgKiB0aGUgaW1hZ2UgY2Fubm90IGJlIHJldHJpZXZlZCwgYXR0ZW1wdCB0byBmaW5kIGFuZCBsb2FkIHRoZSBpbWFnZSBhdCB0aGUKLQkgKiBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gcmVzb3VyY2UuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlCi0JICogICAgICAgICAgICB0aGUgaW1hZ2UgdG8gcmV0cmlldmUKLQkgKiBAcmV0dXJuIEltYWdlIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2Ugb3IgbnVsbCBpZiBvbmUgY291bGQgbm90Ci0JICogICAgICAgICBiZSBmb3VuZAotCSAqLwotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShTdHJpbmcgcmVzb3VyY2UpIHsKLQkJSW1hZ2UgaW1hZ2UgPSBnZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KHJlc291cmNlKTsKLQkJaWYgKGltYWdlID09IG51bGwpIHsKLQkJCS8vIGNyZWF0ZSBhbiBpbWFnZQotCQkJaW1hZ2UgPSBjcmVhdGVJbWFnZShyZXNvdXJjZSk7Ci0JCX0KLQkJcmV0dXJuIGltYWdlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2UgZnJvbSB0aGUgaW1hZ2UKLQkgKiBkZXNjcmlwdG9yIHJlZ2lzdHJ5LiBJZiB0aGUgaW1hZ2UgZGVzY3JpcHRvciBjYW5ub3QgYmUgcmV0cmlldmVkLCBhdHRlbXB0Ci0JICogdG8gZmluZCBhbmQgbG9hZCB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGluCi0JICogcmVzb3VyY2UuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlCi0JICogICAgICAgICAgICB0aGUgaW1hZ2UgZGVzY3JpcHRvciB0byByZXRyaWV2ZQotCSAqIEByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGFzc29jYXRlZCB3aXRoIHJlc291cmNlIG9yCi0JICogICAgICAgICB0aGUgZGVmYXVsdCAibWlzc2luZyIgaW1hZ2UgZGVzY3JpcHRvciBpZiBvbmUgY291bGQgbm90IGJlIGZvdW5kCi0JICovCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSBudWxsOwotCQlPYmplY3QgbyA9IGdldEltYWdlRGVzY3JpcHRvclJlZ2lzdHJ5KCkuZ2V0KHJlc291cmNlKTsKLQkJaWYgKG8gPT0gbnVsbCkgewotCQkJLy8gY3JlYXRlIGEgZGVzY3JpcHRvcgotCQkJaW1hZ2VEZXNjcmlwdG9yID0gY3JlYXRlSW1hZ2VEZXNjcmlwdG9yKHJlc291cmNlKTsKLQkJfSBlbHNlIHsKLQkJCWltYWdlRGVzY3JpcHRvciA9IChJbWFnZURlc2NyaXB0b3IpIG87Ci0JCX0KLQkJcmV0dXJuIGltYWdlRGVzY3JpcHRvcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbi4KLQkgKiAKLQkgKiBAcmV0dXJuIEhhc2hNYXAgLSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbgotCSAqLwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgSGFzaE1hcCBnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpIHsKLQkJaWYgKGZJbWFnZURlc2NSZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlmSW1hZ2VEZXNjUmVnaXN0cnkgPSBuZXcgSGFzaE1hcCgpOwotCQl9Ci0JCXJldHVybiBmSW1hZ2VEZXNjUmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW1hZ2UgcmVnaXN0cnkgZm9yIHRoaXMgcGx1Z2luLgotCSAqIAotCSAqIEByZXR1cm4gSW1hZ2VSZWdpc3RyeSAtIGltYWdlIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbgotCSAqLwotCXByaXZhdGUgSW1hZ2VSZWdpc3RyeSBnZXRJbWFnZVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gSkZhY2VSZXNvdXJjZXMuZ2V0SW1hZ2VSZWdpc3RyeSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC91dGlsL1hQYXRoUGx1Z2luSW1hZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdXRpbC9YUGF0aFBsdWdpbkltYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2OTg1MjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC91dGlsL1hQYXRoUGx1Z2luSW1hZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTM4NDkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWw7Ci0KLS8qKgotICogQnVuZGxlIG9mIG1vc3QgaW1hZ2VzIHVzZWQgYnkgdGhlIFhTTCBQbHVnaW5zCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aFBsdWdpbkltYWdlcyB7Ci0KLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3QKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfWFBBVEhfRlVOQ1RJT04gPSAiaWNvbnMvZnVsbC9mdW5jdGlvbi5naWYiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3QKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfWFBBVEhfQVhJUyA9ICJpY29ucy9mdWxsL2RpcmVjdGlvbmFsLmdpZiI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19WQVJJQUJMRVMgPSAiaWNvbnMvZnVsbC92YXJpYWJsZS5naWYiOyAvLyROT04tTkxTLTEkCQotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX09QRVJBVE9SID0gImljb25zL2Z1bGwvb3BlcmF0aW9uLmdpZiI7IC8vJE5PTi1OTFMtMSQJCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9EZWZhdWx0TmFtZXNwYWNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0RlZmF1bHROYW1lc3BhY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5M2EzMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0RlZmF1bHROYW1lc3BhY2VDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI2MTU4OCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudmlld3M7DQotDQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLQ0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLk5hbWVzcGFjZUNvbnRleHQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOw0KLQ0KLS8qKg0KLSAqIFByb3ZpZGVzIGEgamF4cCBOYW1lc3BhY2VDb250ZXh0IGluZm9ybWF0aW9uIGJhc2VkIG9uIGluZm9ybWF0aW9uDQotICogZnJvbSB0aGUgTmFtZXNwYWNlSW5mbyBjbGFzcy4NCi0gKiBAYXV0aG9yIGRjYXJ2ZXINCi0gKg0KLSAqLw0KLXB1YmxpYyBjbGFzcyBEZWZhdWx0TmFtZXNwYWNlQ29udGV4dCBpbXBsZW1lbnRzIE5hbWVzcGFjZUNvbnRleHQgew0KLQ0KLQlMaXN0PE5hbWVzcGFjZUluZm8+IG5zaW5mb0xpc3Q7DQotCXB1YmxpYyBEZWZhdWx0TmFtZXNwYWNlQ29udGV4dChMaXN0PE5hbWVzcGFjZUluZm8+IG5hbWVzcGFjZUluZm8pIHsNCi0JCW5zaW5mb0xpc3QgPSBuYW1lc3BhY2VJbmZvOw0KLQl9DQotCQ0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSShTdHJpbmcgcHJlZml4KSB7DQotCQlmb3IgKE5hbWVzcGFjZUluZm8gbmkgOiBuc2luZm9MaXN0KSB7DQotCQkJaWYgKHByZWZpeC5lcXVhbHMobmkucHJlZml4KSkgew0KLQkJCQlyZXR1cm4gbmkudXJpOw0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBudWxsOw0KLQl9DQotDQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KFN0cmluZyB1cmkpIHsNCi0JCWZvciAoTmFtZXNwYWNlSW5mbyBuaSA6IG5zaW5mb0xpc3QpIHsNCi0JCQlpZiAodXJpLmVxdWFscyhuaS51cmkpKSB7DQotCQkJCXJldHVybiBuaS5wcmVmaXg7DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIG51bGw7DQotCX0NCi0NCi0JcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gZ2V0UHJlZml4ZXMoU3RyaW5nIHVyaSkgew0KLQkJTGlzdDxTdHJpbmc+IHByZWZpeGVzID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOw0KLQkJZm9yIChOYW1lc3BhY2VJbmZvIG5pIDogbnNpbmZvTGlzdCkgew0KLQkJCWlmICh1cmkuZXF1YWxzKG5pLnVyaSkpIHsNCi0JCQkJcHJlZml4ZXMuYWRkKG5pLnByZWZpeCk7DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIHByZWZpeGVzLml0ZXJhdG9yKCk7DQotCX0NCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0VkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiODQwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0VkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9ycyAoYWRhcHRlZCBmcm9tIEVkaXRTY2hlbWFJbmZvRGlhbG9nKToKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gRXh0cmFjdGVkIGZvciB1c2UgaW4gWFBhdGggTmF2aWdhdG9yIHZpZXcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5kaWFsb2dzLk5hbWVzcGFjZUluZm9FcnJvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuVXBkYXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5uc2VkaXQuQ29tbW9uRWRpdE5hbWVzcGFjZXNEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIEVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cgZXh0ZW5kcyBEaWFsb2cgaW1wbGVtZW50cyBVcGRhdGVMaXN0ZW5lciB7Ci0JLy8gcHJvdGVjdGVkIE5hbWVzcGFjZUluZm9UYWJsZSBuYW1lc3BhY2VJbmZvVGFibGU7Ci0JcHJvdGVjdGVkIExhYmVsIGVycm9yTWVzc2FnZUxhYmVsOwotCXByb3RlY3RlZCBMaXN0PE5hbWVzcGFjZUluZm8+IG5hbWVzcGFjZUluZm9MaXN0OwotCXByb3RlY3RlZCBJUGF0aCByZXNvdXJjZUxvY2F0aW9uOwotCi0JcHVibGljIEVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIElQYXRoIHJlc291cmNlTG9jYXRpb24pIHsKLQkJc3VwZXIocGFyZW50U2hlbGwpOwotCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCQl0aGlzLnJlc291cmNlTG9jYXRpb24gPSByZXNvdXJjZUxvY2F0aW9uOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkgewotCQljcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELCBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotCQkJCXRydWUpOwotCQljcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwKLQkJCQlJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCwgZmFsc2UpOwotCX0KLQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgZGlhbG9nQXJlYSA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLQkJLy8gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChkaWFsb2dBcmVhLAotCQkvLyBYTUxDb21tb25VSUNvbnRleHRJZHMuWENVSV9TQ0hFTUFfSU5GT19ESUFMT0cpOwotCi0JCUNvbW1vbkVkaXROYW1lc3BhY2VzRGlhbG9nIGVkaXROYW1lc3BhY2VzQ29udHJvbCA9IG5ldyBDb21tb25FZGl0TmFtZXNwYWNlc0RpYWxvZygKLQkJCQlkaWFsb2dBcmVhLCByZXNvdXJjZUxvY2F0aW9uLAotCQkJCU1lc3NhZ2VzLlhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZV9QcmVmaXhlcywgZmFsc2UsIHRydWUpOwotCQllZGl0TmFtZXNwYWNlc0NvbnRyb2wuc2V0TmFtZXNwYWNlSW5mb0xpc3QobmFtZXNwYWNlSW5mb0xpc3QpOwotCi0JCWVkaXROYW1lc3BhY2VzQ29udHJvbC51cGRhdGVFcnJvck1lc3NhZ2UobmFtZXNwYWNlSW5mb0xpc3QpOwotCi0JCWdldFNoZWxsKCkuc2V0VGV4dChNZXNzYWdlcy5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXMpOwotCQlyZXR1cm4gZGlhbG9nQXJlYTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQ29udHJvbCBnZXREaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJcmV0dXJuIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxOYW1lc3BhY2VJbmZvPiBnZXROYW1lc3BhY2VJbmZvTGlzdCgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZUluZm9MaXN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZUluZm9MaXN0KExpc3Q8TmFtZXNwYWNlSW5mbz4gbGlzdCkgewotCQluYW1lc3BhY2VJbmZvTGlzdCA9IGxpc3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgdXBkYXRlRXJyb3JNZXNzYWdlKExpc3Q8TmFtZXNwYWNlSW5mbz4gbmFtZXNwYWNlSW5mb0xpc3QpIHsKLQkJTmFtZXNwYWNlSW5mb0Vycm9ySGVscGVyIGhlbHBlciA9IG5ldyBOYW1lc3BhY2VJbmZvRXJyb3JIZWxwZXIoKTsKLQkJU3RyaW5nIGVycm9yTWVzc2FnZSA9IGhlbHBlci5jb21wdXRlRXJyb3JNZXNzYWdlKG5hbWVzcGFjZUluZm9MaXN0LAotCQkJCW51bGwpOwotCQllcnJvck1lc3NhZ2VMYWJlbC5zZXRUZXh0KGVycm9yTWVzc2FnZSAhPSBudWxsID8gZXJyb3JNZXNzYWdlIDogIiIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHVibGljIHZvaWQgdXBkYXRlT2NjdXJlZChPYmplY3Qgb2JqZWN0LCBPYmplY3QgYXJnKSB7Ci0JCXVwZGF0ZUVycm9yTWVzc2FnZSgoTGlzdDxOYW1lc3BhY2VJbmZvPikgYXJnKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvRW1wdHlOb2RlTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0VtcHR5Tm9kZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlNjdhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvRW1wdHlOb2RlTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czsKLQotcHVibGljIGNsYXNzIEVtcHR5Tm9kZUxpc3QgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0pGYWNlTm9kZUNvbnRlbnRQcm92aWRlclhQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyWFBhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFhYTVlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyWFBhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudmlld3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5Gb250UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSUpGYWNlTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyWFBhdGggaW1wbGVtZW50cyBJVHJlZUNvbnRlbnRQcm92aWRlciB7Ci0KLQlwcm90ZWN0ZWQgSUpGYWNlTm9kZUFkYXB0ZXIgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlKSB7Ci0JCWlmIChhZGFwdGFibGUgaW5zdGFuY2VvZiBJTm9kZU5vdGlmaWVyKSB7Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9ICgoSU5vZGVOb3RpZmllcikgYWRhcHRhYmxlKQotCQkJCQkuZ2V0QWRhcHRlckZvcihJSkZhY2VOb2RlQWRhcHRlci5jbGFzcyk7Ci0JCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElKRmFjZU5vZGVBZGFwdGVyKSB7Ci0JCQkJcmV0dXJuIChJSkZhY2VOb2RlQWRhcHRlcikgYWRhcHRlcjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7Ci0JCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKG9iamVjdCk7Ci0JCWlmIChhZGFwdGVyICE9IG51bGwpIHsKLQkJCXJldHVybiBhZGFwdGVyLmdldENoaWxkcmVuKG9iamVjdCk7Ci0JCX0KLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElET01Nb2RlbCkgewotCQkJT2JqZWN0IHRvcE5vZGUgPSAoKElET01Nb2RlbCkgb2JqZWN0KS5nZXREb2N1bWVudCgpOwotCQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIodG9wTm9kZSk7Ci0JCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIGFkYXB0ZXIuZ2V0RWxlbWVudHModG9wTm9kZSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZUxpc3QpIHsKLQkJCU5vZGVMaXN0IG5vZGVMaXN0ID0gKE5vZGVMaXN0KSBvYmplY3Q7Ci0JCQlpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkgewotCQkJCXJldHVybiBuZXcgT2JqZWN0W10geyBuZXcgRW1wdHlOb2RlTGlzdCgpIH07Ci0JCQl9IGVsc2UgewotCQkJCU5vZGVbXSBub2RlcyA9IG5ldyBOb2RlW25vZGVMaXN0LmdldExlbmd0aCgpXTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCW5vZGVzW2ldID0gbm9kZUxpc3QuaXRlbShpKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIG5vZGVzOwotCQkJfQotCQl9Ci0JCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKLQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIob2JqZWN0KTsKLQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIGFkYXB0ZXIuZ2V0UGFyZW50KG9iamVjdCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgewotCQlJSkZhY2VOb2RlQWRhcHRlciBhZGFwdGVyID0gZ2V0QWRhcHRlcihvYmplY3QpOwotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYWRhcHRlci5oYXNDaGlsZHJlbihvYmplY3QpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvSkZhY2VOb2RlTGFiZWxQcm92aWRlclhQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvSkZhY2VOb2RlTGFiZWxQcm92aWRlclhQYXRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjY4NGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0pGYWNlTm9kZUxhYmVsUHJvdmlkZXJYUGF0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODQzMDYgLSByZW1vdmVkIHRydW5jYXRpb24gb2Ygc3RyaW5nIHZhbHVlLgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMzAzMzQ5IC0gZml4IE5QRSB3aGVuIEFkYXB0b3Igbm90IGZvdW5kLgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMzEzOTkyIC0gWFBhdGggZXZhbHVhdGlvbiBkb2VzIG5vdCBzaG93IGF0b21pY3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuRm9udFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUZvbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLklKRmFjZU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEpGYWNlTm9kZUxhYmVsUHJvdmlkZXJYUGF0aCBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cwotCQlJRm9udFByb3ZpZGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fTUFUQ0hFUyA9ICI8Tm8gTWF0Y2hlcz4iOwotCUZvbnRSZWdpc3RyeSByZWdpc3RyeSA9IG5ldyBGb250UmVnaXN0cnkoKTsKLQotCXByb3RlY3RlZCBJSkZhY2VOb2RlQWRhcHRlciBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGUpIHsKLQkJaWYgKGFkYXB0YWJsZSBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpIHsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gKChJTm9kZU5vdGlmaWVyKSBhZGFwdGFibGUpCi0JCQkJCS5nZXRBZGFwdGVyRm9yKElKRmFjZU5vZGVBZGFwdGVyLmNsYXNzKTsKLQkJCWlmIChhZGFwdGVyIGluc3RhbmNlb2YgSUpGYWNlTm9kZUFkYXB0ZXIpIHsKLQkJCQlyZXR1cm4gKElKRmFjZU5vZGVBZGFwdGVyKSBhZGFwdGVyOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVtcHR5Tm9kZUxpc3QpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKGVsZW1lbnQpOwotCQlyZXR1cm4gYWRhcHRlciAhPSBudWxsID8gYWRhcHRlci5nZXRMYWJlbEltYWdlKGVsZW1lbnQpIDogbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFbXB0eU5vZGVMaXN0KSB7Ci0JCQlyZXR1cm4gTk9fTUFUQ0hFUzsKLQkJfQotCQkKLQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIoZWxlbWVudCk7Ci0JCWlmIChhZGFwdGVyID09IG51bGwpIHsKLQkJCS8vIENvdWxkIGJlIG91ciBmYWtlICJBbnlWYWx1ZSIgVGV4dCBub2RlCi0JCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRleHQpIHsKLQkJCQlyZXR1cm4gKChUZXh0KWVsZW1lbnQpLmdldERhdGEoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTsKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihhZGFwdGVyLmdldExhYmVsVGV4dChlbGVtZW50KSk7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkgewotCQkJRWxlbWVudCBpbXBsID0gKEVsZW1lbnQpIGVsZW1lbnQ7Ci0JCQlOYW1lZE5vZGVNYXAgbm5tID0gaW1wbC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlpZiAobm5tLmdldExlbmd0aCgpID4gMCkgewotCQkJCUF0dHIgYSA9IChBdHRyKSBubm0uaXRlbSgwKTsKLQkJCQlTdHJpbmcgdmFsID0gYS5nZXROb2RlVmFsdWUoKTsKLQkJCQlzYi5hcHBlbmQoIiAiKS5hcHBlbmQoYS5nZXROYW1lKCkpLmFwcGVuZCgiPSIpLmFwcGVuZCh2YWwpOwotCQkJfQotCQl9Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgRm9udCBnZXRGb250KE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRW1wdHlOb2RlTGlzdCkgewotCQkJcmV0dXJuIHJlZ2lzdHJ5LmdldEl0YWxpYyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRTeXN0ZW1Gb250KCkKLQkJCQkJLmdldEZvbnREYXRhKClbMF0uZ2V0TmFtZSgpKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvTmFtZXNwYWNlU2VsZWN0aW9uQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL05hbWVzcGFjZVNlbGVjdGlvbkFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA0NGVmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvTmFtZXNwYWNlU2VsZWN0aW9uQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5NYXA7DQotaW1wb3J0IGphdmEudXRpbC5XZWFrSGFzaE1hcDsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50QWRhcHRlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhdGhFZGl0b3JJbnB1dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnRTaXRlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JrYmVuY2g7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsNCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7DQotDQotcHVibGljIGNsYXNzIE5hbWVzcGFjZVNlbGVjdGlvbkFkYXB0ZXIgZXh0ZW5kcyBTZWxlY3Rpb25BZGFwdGVyIHsNCi0NCi0JcHJvdGVjdGVkIE1hcDxEb2N1bWVudCwgTGlzdDxOYW1lc3BhY2VJbmZvPj4gbmFtZXNwYWNlSW5mbzsNCi0NCi0JcHVibGljIE5hbWVzcGFjZVNlbGVjdGlvbkFkYXB0ZXIoTWFwPERvY3VtZW50LCBMaXN0PE5hbWVzcGFjZUluZm8+PiBuYW1lc3BhY2VzKSB7DQotCQluYW1lc3BhY2VJbmZvID0gbmFtZXNwYWNlczsNCi0JfQ0KLQ0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgew0KLQkJSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yID0gV29ya2JlbmNoLmdldEluc3RhbmNlKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOw0KLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgYWN0aXZlRWRpdG9yLmdldEVkaXRvcklucHV0KCkuZ2V0QWRhcHRlcigNCi0JCQkJSUZpbGUuY2xhc3MpOw0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOw0KLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsNCi0JCXRyeSB7DQotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOw0KLQkJCUlET01Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7DQotDQotCQkJaWYgKGRvY3VtZW50ICE9IG51bGwpIHsNCi0JCQkJTGlzdDxOYW1lc3BhY2VJbmZvPiBpbmZvID0gY3JlYXRlTmFtZXNwYWNlSW5mbyhkb2N1bWVudCk7DQotDQotCQkJCUlQYXRoRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSAoSVBhdGhFZGl0b3JJbnB1dCkgYWN0aXZlRWRpdG9yDQotCQkJCQkJLmdldEVkaXRvcklucHV0KCk7DQotDQotCQkJCUVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cgZGxnID0gbmV3IEVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2coDQotCQkJCQkJYWN0aXZlRWRpdG9yLmdldFNpdGUoKS5nZXRTaGVsbCgpLCBlZGl0b3JJbnB1dA0KLQkJCQkJCQkJLmdldFBhdGgoKSk7DQotCQkJCWRsZy5zZXROYW1lc3BhY2VJbmZvTGlzdChpbmZvKTsNCi0JCQkJaWYgKFNXVC5PSyA9PSBkbGcub3BlbigpKSB7DQotCQkJCQkvLyBBcHBseSBjaGFuZ2VzDQotCQkJCX0NCi0JCQl9DQotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCi0NCi0JCX0gZmluYWxseSB7DQotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCXByaXZhdGUgTGlzdDxOYW1lc3BhY2VJbmZvPiBjcmVhdGVOYW1lc3BhY2VJbmZvKERvY3VtZW50IGRvY3VtZW50KSB7DQotCQlMaXN0PE5hbWVzcGFjZUluZm8+IGluZm8gPSBuYW1lc3BhY2VJbmZvLmdldChkb2N1bWVudCk7DQotCQlpZiAoaW5mbyA9PSBudWxsKSB7DQotCQkJaW5mbyA9IG5ldyBBcnJheUxpc3Q8TmFtZXNwYWNlSW5mbz4oKTsNCi0JCQlOYW1lc3BhY2VUYWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBOYW1lc3BhY2VUYWJsZShkb2N1bWVudCk7DQotCQkJbmFtZXNwYWNlVGFibGUudmlzaXRFbGVtZW50KGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpKTsNCi0JCQlDb2xsZWN0aW9uPD8+IG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VUYWJsZQ0KLQkJCQkJLmdldE5hbWVzcGFjZUluZm9Db2xsZWN0aW9uKCk7DQotCQkJaW5mby5hZGRBbGwoKENvbGxlY3Rpb248TmFtZXNwYWNlSW5mbz4pIG5hbWVzcGFjZXMpOw0KLQkJCW5hbWVzcGFjZUluZm8ucHV0KGRvY3VtZW50LCBpbmZvKTsNCi0JCX0NCi0JCXJldHVybiBpbmZvOw0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9YUGF0aENvbXB1dGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvWFBhdGhDb21wdXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJkMTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9YUGF0aENvbXB1dGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2MTQyOCAtIFhQYXRoIFZpZXcgbm90IHJlc3BlY3RpbmcgbmFtZXNwYWNlcy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDMxMzk5MiAtIFhQYXRoIGV2YWx1YXRpb24gZG9lcyBub3Qgc2hvdyBhdG9taWNzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoOwotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aENvbnN0YW50czsKLWltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uOwotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLmpheHAuWFBhdGhGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5JV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLk5vZGVMaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aDIwSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoQ29yZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLlhQYXRoVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkV2YWx1YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDaGVja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uWFNDdHJMaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZWZhdWx0UmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYUGF0aENvbXB1dGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVVBEQVRFX0RFTEFZID0gNTAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBYUEFUSF9MT0NLID0gbmV3IGJ5dGVbMF07Ci0JcHJpdmF0ZSBib29sZWFuIHhwYXRoMjAgPSB0cnVlOwotCXByaXZhdGUgWFBhdGhWaWV3IHhwYXRoVmlldzsKLQlwcml2YXRlIElNb2RlbFN0YXRlTGlzdGVuZXIgbW9kZWxTdGF0ZUxpc3RlbmVyID0gbmV3IElNb2RlbFN0YXRlTGlzdGVuZXIoKSB7Ci0KLQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vZGVsQWJvdXRUb0JlUmVpbml0aWFsaXplZChJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgbW9kZWxDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCXVwZGF0ZVhQYXRoKCk7Ci0JCQljb21wdXRlKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBtb2RlbERpcnR5U3RhdGVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsCi0JCQkJYm9vbGVhbiBpc0RpcnR5KSB7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBtb2RlbFJlaW5pdGlhbGl6ZWQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VEZWxldGVkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VNb3ZlZChJU3RydWN0dXJlZE1vZGVsIG9sZE1vZGVsLAotCQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwpIHsKLQkJfQotCX07Ci0JcHJpdmF0ZSBOb2RlIG5vZGU7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIG1vZGVsOwotCXByaXZhdGUgU3RyaW5nIGV4cHJlc3Npb247Ci0JcHJpdmF0ZSBTdHJpbmcgdGV4dDsKLQlwcml2YXRlIE5vZGVMaXN0IG5vZGVMaXN0OwotCi0JcHVibGljIFhQYXRoQ29tcHV0ZXIoWFBhdGhWaWV3IHhwYXRoVmlldykgewotCQl0aGlzLnhwYXRoVmlldyA9IHhwYXRoVmlldzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNb2RlbChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCWlmICh0aGlzLm1vZGVsICE9IG51bGwpIHsKLQkJCXRoaXMubW9kZWwucmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKG1vZGVsU3RhdGVMaXN0ZW5lcik7Ci0JCX0KLQkJdGhpcy5tb2RlbCA9IG1vZGVsOwotCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJbW9kZWwuYWRkTW9kZWxTdGF0ZUxpc3RlbmVyKG1vZGVsU3RhdGVMaXN0ZW5lcik7Ci0JCQl1cGRhdGVYUGF0aCgpOwotCQl9IGVsc2UgewotCQkJbm9kZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlWFBhdGgoKSB7Ci0JCURvY3VtZW50IGRvYyA9IChEb2N1bWVudCkgbW9kZWwuZ2V0QWRhcHRlcihEb2N1bWVudC5jbGFzcyk7Ci0JCWlmIChkb2MgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJdHJ5IHsKLQkJCXVwZGF0ZUV4cHJlc3Npb24oKTsKLQkJfSBjYXRjaCAoWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIGUpIHsKLQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZUV4cHJlc3Npb24oKSB0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIHsKLQkJc3luY2hyb25pemVkIChYUEFUSF9MT0NLKSB7Ci0JCQlpZiAodGV4dCAhPSBudWxsKSB7Ci0JCQkJaWYgKHhwYXRoMjApIHsKLQkJCQkJWFBhdGgyMEhlbHBlci5jb21waWxlKHRleHQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVhTTFRYUGF0aEhlbHBlci5jb21waWxlKHRleHQpOwotCQkJCX0KLQkJCQl0aGlzLmV4cHJlc3Npb24gPSB0ZXh0OwotCQkJfSBlbHNlIHsKLQkJCQl0aGlzLmV4cHJlc3Npb24gPSBudWxsOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkgdGhyb3dzIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB7Ci0JCXRoaXMudGV4dCA9IHRleHQ7Ci0JCXVwZGF0ZUV4cHJlc3Npb24oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZE5vZGUoTm9kZSBub2RlKSB7Ci0JCXRoaXMubm9kZSA9IG5vZGU7Ci0JfQotCi0JcHVibGljIHZvaWQgY29tcHV0ZSgpIHsKLQkJZmluYWwgU3RyaW5nW10geHBzID0gbmV3IFN0cmluZ1sxXTsKLQkJc3luY2hyb25pemVkIChYUEFUSF9MT0NLKSB7Ci0JCQl4cHNbMF0gPSBleHByZXNzaW9uOwotCQl9Ci0JCUpvYiByZWZyZXNoID0gbmV3IEpvYihNZXNzYWdlcy5YUGF0aENvbXB1dGVyXzUpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCWlmICgheHBzWzBdLmVxdWFscyhleHByZXNzaW9uKSkgewotCQkJCQlyZXR1cm4gU3RhdHVzLkNBTkNFTF9TVEFUVVM7Ci0JCQkJfQotCQkJCXJldHVybiBkb0NvbXB1dGUoeHBzWzBdKTsKLQkJCX0KLQkJfTsKLQkJcmVmcmVzaC5zZXRTeXN0ZW0odHJ1ZSk7Ci0JCXJlZnJlc2guc2V0UHJpb3JpdHkoSm9iLlNIT1JUKTsKLQkJSVdvcmtiZW5jaFNpdGVQcm9ncmVzc1NlcnZpY2Ugc2VydmljZSA9IChJV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZSkgeHBhdGhWaWV3Ci0JCQkJLmdldFNpdGUoKS5nZXRTZXJ2aWNlKElXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzKTsKLQkJc2VydmljZS5zY2hlZHVsZShyZWZyZXNoLCBVUERBVEVfREVMQVkpOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyBkb0NvbXB1dGUoU3RyaW5nIHhwKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gZXhlY3V0ZVhQYXRoKHhwKTsKLQotCQl4cGF0aFZpZXcueHBhdGhSZWNvbXB1dGVkKG5vZGVMaXN0KTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgZXhlY3V0ZVhQYXRoKFN0cmluZyB4cCkgewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5DQU5DRUxfU1RBVFVTOwotCQl4cGF0aDIwID0gWFBhdGhDb3JlSGVscGVyLmdldFByZWZlcmVuY2VzKCkuZ2V0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIXzJfMF9QUk9DRVNTT1IsIGZhbHNlKTsKLQkJdHJ5IHsKLQkJCWlmICgoeHAgIT0gbnVsbCkgJiYgKG5vZGUgIT0gbnVsbCkpIHsKLQkJCQlzeW5jaHJvbml6ZWQgKFhQQVRIX0xPQ0spIHsKLQkJCQkJCi0JCQkJCWlmICh4cGF0aDIwKSB7Ci0JCQkJCQlzdGF0dXMgPSBldmFsdWF0ZVhQYXRoMih4cCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdGF0dXMgPSBldmFsdWF0ZVhQYXRoKHhwKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXByb3RlY3RlZCBJU3RhdHVzIGV2YWx1YXRlWFBhdGgoU3RyaW5nIHhwKSB0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIHsKLQkJWFBhdGggbmV3WFBhdGggPSBuZXcgWFBhdGhGYWN0b3J5SW1wbCgpLm5ld1hQYXRoKCk7Ci0JCUlET01Eb2N1bWVudCBkb2MgPSBudWxsOwotCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRE9DVU1FTlRfTk9ERSkgewotCQkJZG9jID0gKElET01Eb2N1bWVudCkgbm9kZTsKLQkJfSBlbHNlIHsKLQkJCWRvYyA9IChJRE9NRG9jdW1lbnQpIG5vZGUuZ2V0T3duZXJEb2N1bWVudCgpOwotCQl9Ci0JCWZpbmFsIExpc3Q8TmFtZXNwYWNlSW5mbz4gbmFtZXNwYWNlcyA9IFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJLmdldE5hbWVzcGFjZUluZm8oZG9jKTsKLQkJaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCkgewotCQkJbmV3WFBhdGgKLQkJCQkJLnNldE5hbWVzcGFjZUNvbnRleHQobmV3IERlZmF1bHROYW1lc3BhY2VDb250ZXh0KG5hbWVzcGFjZXMpKTsKLQkJfQotCQlYUGF0aEV4cHJlc3Npb24geHBFeHAgPSBuZXdYUGF0aC5jb21waWxlKHhwKTsKLQotCQl0cnkgewotCQkJdGhpcy5ub2RlTGlzdCA9IChOb2RlTGlzdCkgeHBFeHAuZXZhbHVhdGUobm9kZSwKLQkJCQkJWFBhdGhDb25zdGFudHMuTk9ERVNFVCk7Ci0JCX0gY2F0Y2ggKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB4ZWUpIHsKLQkJCWlmICh4ZWUuZ2V0Q2F1c2UoKSAhPSBudWxsICYmIHhlZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKS5pbmRleE9mKCJDYW4gbm90IGNvbnZlcnQgIikgPj0gMCkgewotCQkJCXRyeSB7Ci0JCQkJCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpIHhwRXhwLmV2YWx1YXRlKG5vZGUsIFhQYXRoQ29uc3RhbnRzLlNUUklORyk7Ci0JCQkJCXRoaXMubm9kZUxpc3QgPSBuZXcgTm9kZUxpc3RJbXBsKG5ldyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UobmV3IFhTU3RyaW5nKHZhbHVlKSkpOwotCQkJCX0gY2F0Y2ggKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB4ZWUyKSB7Ci0JCQkJCXJldHVybiBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKLQkJCX0KLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0YXR1cyBldmFsdWF0ZVhQYXRoMihTdHJpbmcgeHApIHRocm93cyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gewotCi0JCUlET01Eb2N1bWVudCBkb2M7Ci0JCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7Ci0JCQlkb2MgPSAoSURPTURvY3VtZW50KSBub2RlOwotCQl9IGVsc2UgewotCQkJZG9jID0gKElET01Eb2N1bWVudCkgbm9kZS5nZXRPd25lckRvY3VtZW50KCk7Ci0JCX0KLQotCQkvLyBJbml0aWFsaXppbmcgdGhlIER5bmFtaWNDb250ZXh0LgotCQlEeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQobnVsbCwgZG9jKTsKLQkJZmluYWwgTGlzdDxOYW1lc3BhY2VJbmZvPiBuYW1lc3BhY2VzID0gWFBhdGhVSVBsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkuZ2V0TmFtZXNwYWNlSW5mbyhkb2MpOwotCQlkYy5hZGRfbmFtZXNwYWNlKCJ4cyIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCi0JCWlmIChuYW1lc3BhY2VzICE9IG51bGwpIHsKLQkJCS8vIEFkZCB0aGUgZGVmaW5lZCBuYW1lc3BhY2VzCi0JCQlmb3IgKE5hbWVzcGFjZUluZm8gbmFtZXNwYWNlaW5mbyA6IG5hbWVzcGFjZXMpIHsKLQkJCQlkYy5hZGRfbmFtZXNwYWNlKG5hbWVzcGFjZWluZm8ucHJlZml4LCBuYW1lc3BhY2VpbmZvLnVyaSk7Ci0JCQl9Ci0JCX0KLQotCQlkYy5hZGRfZnVuY3Rpb25fbGlicmFyeShuZXcgRm5GdW5jdGlvbkxpYnJhcnkoKSk7Ci0JCWRjLmFkZF9mdW5jdGlvbl9saWJyYXJ5KG5ldyBYU0N0ckxpYnJhcnkoKSk7Ci0JCQotCQlYUGF0aFBhcnNlciB4cHAgPSBuZXcgSkZsZXhDdXBQYXJzZXIoKTsKLQkJCi0JCSB0cnkgewotCQkJIC8vIFBhcnNlcyB0aGUgWFBhdGggZXhwcmVzc2lvbi4KLQkJCSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIHhwYXRoID0geHBwLnBhcnNlKHhwKTsKLQkJCSAKLQkJCSBTdGF0aWNDaGVja2VyIG5hbWVjaGVjayA9IG5ldyBTdGF0aWNOYW1lUmVzb2x2ZXIoZGMpOwotCQkJIG5hbWVjaGVjay5jaGVjayh4cGF0aCk7Ci0JCQkgCi0JCQkgLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uIOKAmUhlbGxvIFdvcmxkIeKAmSBuYW1lY2hlY2suY2hlY2soeHApOwotCQkJIC8qKgotCQkJICAqIEV2YWx1YXRlIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbgotIAkJCSAgKi8KLQkJCSAKLQkJCSAvLyBJbml0aWFsaXppbmcgdGhlIGV2YWx1YXRvciB3aXRoIER5bmFtaWNDb250ZXh0IGFuZCB0aGUgbmFtZQotCQkJIC8vIG9mIHRoZSBYTUwgZG9jdW1lbnQgWFBleGFtcGxlLnhtbCBhcyBwYXJhbWV0ZXJzLgotCQkJIEV2YWx1YXRvciBldmFsID0gbmV3IERlZmF1bHRFdmFsdWF0b3IoZGMsIGRvYyk7Ci0JCQkgCi0JCQkgUmVzdWx0U2VxdWVuY2UgcnMgPSBldmFsLmV2YWx1YXRlKHhwYXRoKTsKLQkJCSAKLQkJCSB0aGlzLm5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0SW1wbChycyk7Ci0JCQkgCi0JCSB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCSB0aHJvdyBuZXcgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uKGV4KTsKLQkJIH0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJbW9kZWwucmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKG1vZGVsU3RhdGVMaXN0ZW5lcik7Ci0JCQltb2RlbCA9IG51bGw7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvWFBhdGhWaWV3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvWFBhdGhWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YjYwNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL1hQYXRoVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYxNTg4IC0gQWRkIEVkaXQgTmFtZXNwYWNlIHN1cHBvcnQgZm9yIFhQYXRoIHZpZXcKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gYnVnIDI0NjExMCAtIENsZWFuIHVwIFhQYXRoIFVJLgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjcxMjg4IC0gU2V0IENvbnRleHROb2RlIGZvciBYUGF0aCBFdmFsdWF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAzMTM5OTIgLSBYUGF0aCBldmFsdWF0aW9uIGRvZXMgbm90IHNob3cgYXRvbWljcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudmlld3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5MaXN0ZW5lckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlNhZmVSdW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZUNvbG9yczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlNhZmVSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklQb3N0U2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTaG93SW5Tb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2hvd0luVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNob3dJblRhcmdldExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5TaG93SW5Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhQYXRoVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKLQotCXByaXZhdGUgYm9vbGVhbiBpc0ZpcmluZ1NlbGVjdGlvbiA9IGZhbHNlOwotCXByaXZhdGUgSVBhcnRMaXN0ZW5lcjIgcGFydExpc3RlbmVyMiA9IG5ldyBYUGF0aFBhcnRMaXN0ZW5lcigpOwotCXByaXZhdGUgSVNlbGVjdGlvbkxpc3RlbmVyIHNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IElTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJaWYgKHBhcnQgPT0gZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSkgewotCQkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQljdXJyZW50U2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQkJCWlmICghc2VsZWN0aW9uLmlzRW1wdHkoKQotCQkJCQkJCSYmIChjdXJyZW50U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpIGluc3RhbmNlb2YgTm9kZSkpIHsKLQkJCQkJCXJlY2FsY3VsYXRlTG9jYXRpb24oKE5vZGUpIGN1cnJlbnRTZWxlY3Rpb24KLQkJCQkJCQkJLmdldEZpcnN0RWxlbWVudCgpKTsKLQkJCQkJCWJvb2xlYW4gaXNMaW5rZWQgPSB4cGF0aFZpZXdBY3Rpb25zCi0JCQkJCQkJCS5pc0xpbmtlZFdpdGhFZGl0b3IodHJlZVZpZXdlcik7Ci0JCQkJCQlpZiAoaXNMaW5rZWQpIHsKLQkJCQkJCQl0cmVlVmlld2VyLnNldFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uLCB0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJlY2FsY3VsYXRlTG9jYXRpb24obnVsbCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9OwotCXByaXZhdGUgVHJlZVZpZXdlciB0cmVlVmlld2VyOwotCXByaXZhdGUgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yOwotCXByaXZhdGUgVGV4dCB0ZXh0OwotCS8vIHByaXZhdGUgSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyWFBhdGggY29udGVudFByb3ZpZGVyOwotCXByaXZhdGUgWFBhdGhDb21wdXRlciB4cGF0aENvbXB1dGVyOwotCXByaXZhdGUgVGV4dCBsb2NhdGlvblRleHQ7Ci0JcHJpdmF0ZSBYUGF0aFZpZXdBY3Rpb25zIHhwYXRoVmlld0FjdGlvbnMgPSBuZXcgWFBhdGhWaWV3QWN0aW9ucygpOwotCXByaXZhdGUgSVBvc3RTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlciA9IG5ldyBTZWxlY3Rpb25Qcm92aWRlcigpOwotCXByaXZhdGUgU3RyaW5nIGxvY2F0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIFN0cmluZyBtZXNzYWdlOwotCXByaXZhdGUgYm9vbGVhbiBleHByZXNzaW9uVmFsaWQgPSB0cnVlOwotCXByaXZhdGUgSW50ZWdlciBjdXJyZW50U2hlZXQgPSBJbnRlZ2VyLnZhbHVlT2YoMCk7Ci0JcHJpdmF0ZSBNYXA8SW50ZWdlciwgU3RyaW5nPiBzaGVldE1hcDsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0JcHJpdmF0ZSBOb2RlIGNvbnRleHROb2RlID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhcmVudENvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoMSwgZmFsc2UpOwotCQlnbC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0JCWdsLnZlcnRpY2FsU3BhY2luZyA9IDA7Ci0JCWdsLm1hcmdpbkhlaWdodCA9IDA7Ci0JCWdsLm1hcmdpbldpZHRoID0gMDsKLQkJcGFyZW50Q29tcC5zZXRMYXlvdXQoZ2wpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULk5PTkUsIHRydWUsIGZhbHNlLCAyLCAxKTsKLQkJcGFyZW50Q29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50Q29tcCwgU1dULk5PTkUpOwotCQljb21wLnNldExheW91dChuZXcgR3JpZExheW91dCgxLCBmYWxzZSkpOwotCQljb21wLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpKTsKLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuWFBhdGhWaWV3XzEpOwotCi0JCXRoaXMudGV4dCA9IG5ldyBUZXh0KGNvbXAsIFNXVC5CT1JERVIpOwotCi0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpOwotCQl0ZXh0LnNldExheW91dERhdGEoZ2QpOwotCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJCXJlY29tcHV0ZVhQYXRoKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXRoaXMubG9jYXRpb25UZXh0ID0gbmV3IFRleHQoY29tcCwgU1dULlJFQURfT05MWSB8IFNXVC5GVUxMX1NFTEVDVElPTik7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpOwotCQlsb2NhdGlvblRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJdGhpcy50cmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIocGFyZW50Q29tcCwgU1dULk5PTkUpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldExheW91dERhdGEoZ2QpOwotCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEpGYWNlTm9kZUxhYmVsUHJvdmlkZXJYUGF0aCgpKTsKLQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEpGYWNlTm9kZUNvbnRlbnRQcm92aWRlclhQYXRoKCkpOwotCQl0cmVlVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCkgPT0gWFBhdGhWaWV3LnRoaXMpIHsKLQkJCQkJaGFuZGxlVHJlZVNlbGVjdGlvbigoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50Ci0JCQkJCQkJLmdldFNlbGVjdGlvbigpLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJdHJlZVZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpIHsKLQotCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBldmVudCkgewotCQkJCWhhbmRsZVRyZWVTZWxlY3Rpb24oCi0JCQkJCQkoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpLCB0cnVlKTsKLQkJCX0KLQotCQl9KTsKLQotCQlmaW5hbCBDVGFiRm9sZGVyIGZvbGRlciA9IG5ldyBDVGFiRm9sZGVyKHBhcmVudENvbXAsIFNXVC5CT1RUT00KLQkJCQl8IFNXVC5GTEFUKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5OT05FLCB0cnVlLCBmYWxzZSk7Ci0JCWdkLmhlaWdodEhpbnQgPSAwOwotCQlmb2xkZXIuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWZvbGRlci5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlDVGFiSXRlbSBpdGVtID0gKENUYWJJdGVtKSBlLml0ZW07Ci0JCQkJc2hlZXRNYXAucHV0KGN1cnJlbnRTaGVldCwgdGV4dC5nZXRUZXh0KCkpOwotCQkJCXBhZ2VDaGFuZ2UoZm9sZGVyLmluZGV4T2YoaXRlbSkpOwotCQkJfQotCQl9KTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotCQkJQ1RhYkl0ZW0gaXRlbSA9IG5ldyBDVGFiSXRlbShmb2xkZXIsIFNXVC5OT05FLCBpKTsKLQkJCS8vIGl0ZW0uc2V0Q29udHJvbChjb21wKTsKLQkJCWl0ZW0uc2V0VGV4dChNZXNzYWdlcy5YUGF0aFZpZXdfMiArIChpICsgMSkpOwotCQl9Ci0JCWZvbGRlci5zZXRTZWxlY3Rpb24oY3VycmVudFNoZWV0KTsKLQkJcGFnZUNoYW5nZShjdXJyZW50U2hlZXQpOwotCi0JCXRoaXMueHBhdGhDb21wdXRlciA9IG5ldyBYUGF0aENvbXB1dGVyKHRoaXMpOwotCQljcmVhdGVNZW51KCk7Ci0JCWNyZWF0ZVRvb2xiYXIoKTsKLQkJY3JlYXRlQ29udGV4dE1lbnUoKTsKLQotCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIoc2VsZWN0aW9uUHJvdmlkZXIpOwotCi0JCWluaXRFZGl0b3JMaXN0ZW5lcigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBoYW5kbGVUcmVlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwKLQkJCWJvb2xlYW4gcmV2ZWFsKSB7Ci0JCWlmIChhY3RpdmVFZGl0b3IgIT0gbnVsbCkgewotCQkJaXNGaXJpbmdTZWxlY3Rpb24gPSB0cnVlOwotCQkJaWYgKHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKSAhPSBudWxsKSB7Ci0JCQkJT2JqZWN0IGVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkJCQlJRE9NTm9kZSBub2RlID0gKElET01Ob2RlKSBlbGVtZW50OwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBhY3RpdmVFZGl0b3IKLQkJCQkJCQkuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0KLQkJCQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgewotCQkJCQkJZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKQotCQkJCQkJCQkuYnJpbmdUb1RvcCh0ZXh0RWRpdG9yKTsKLQkJCQkJCWlmIChyZXZlYWwpIHsKLQkJCQkJCQl0ZXh0RWRpdG9yCi0JCQkJCQkJCQkuc2VsZWN0QW5kUmV2ZWFsKG5vZGUuZ2V0U3RhcnRPZmZzZXQoKSwKLQkJCQkJCQkJCQkJbm9kZS5nZXRFbmRPZmZzZXQoKQotCQkJCQkJCQkJCQkJCS0gbm9kZS5nZXRTdGFydE9mZnNldCgpKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJdGV4dEVkaXRvci5zZXRIaWdobGlnaHRSYW5nZShub2RlLmdldFN0YXJ0T2Zmc2V0KCksCi0JCQkJCQkJCQkwLCB0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlzRmlyaW5nU2VsZWN0aW9uID0gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGV4dE1lbnUoKSB7Ci0JCU1lbnVNYW5hZ2VyIG1lbnVNZ3IgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3B1cE1lbnUiKTsgLy8kTk9OLU5MUy0xJAotCQltZW51TWdyLnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKLQkJbWVudU1nci5hZGRNZW51TGlzdGVuZXIobmV3IElNZW51TGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1hbmFnZXIpIHsKLQkJCQl4cGF0aFZpZXdBY3Rpb25zLmZpbGxDb250ZXh0TWVudShtYW5hZ2VyKTsKLQkJCX0KLQkJfSk7Ci0JCU1lbnUgbWVudSA9IG1lbnVNZ3IuY3JlYXRlQ29udGV4dE1lbnUodHJlZVZpZXdlci5nZXRDb250cm9sKCkpOwotCQl0cmVlVmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOwotCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShtZW51TWdyLCB0cmVlVmlld2VyKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGFnZUNoYW5nZShpbnQgaW5kZXgpIHsKLQkJY3VycmVudFNoZWV0ID0gaW5kZXg7Ci0JCVN0cmluZyBleHAgPSBzaGVldE1hcC5nZXQoaW5kZXgpOwotCQlpZiAoZXhwICE9IG51bGwpIHsKLQkJCXRleHQuc2V0VGV4dChleHApOwotCQl9IGVsc2UgewotCQkJdGV4dC5zZXRUZXh0KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVNZW51KCkgewotCQlJTWVudU1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJSUFjdGlvbltdIGl0ZW1zID0geHBhdGhWaWV3QWN0aW9ucy5jcmVhdGVNZW51Q29udHJpYnV0aW9ucyh0cmVlVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgewotCQkJSUFjdGlvbiBpdGVtID0gaXRlbXNbaV07Ci0JCQltZ3IuYWRkKGl0ZW0pOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRvb2xiYXIoKSB7Ci0JCUlUb29sQmFyTWFuYWdlciBtZ3IgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKS5nZXRUb29sQmFyTWFuYWdlcigpOwotCQlJQWN0aW9uW10gaXRlbXMgPSB4cGF0aFZpZXdBY3Rpb25zCi0JCQkJLmNyZWF0ZVRvb2xiYXJDb250cmlidXRpb25zKHRyZWVWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQWN0aW9uIGl0ZW0gPSBpdGVtc1tpXTsKLQkJCW1nci5hZGQoaXRlbSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVjYWxjdWxhdGVMb2NhdGlvbihOb2RlIHNlbGVjdGVkKSB7Ci0JCXRoaXMubG9jYXRpb24gPSBYU0xUWFBhdGhIZWxwZXIuY2FsY3VsYXRlWFBhdGhUb05vZGUoc2VsZWN0ZWQpOwotCQljb250ZXh0Tm9kZSA9IHNlbGVjdGVkOwotCQl1cGRhdGVMb2NhdGlvblRleHQoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVjb21wdXRlWFBhdGgoKSB7Ci0JCWlmIChhY3RpdmVFZGl0b3IgIT0gbnVsbCkgewotCQkJYm9vbGVhbiB2YWxpZCA9IGV4cHJlc3Npb25WYWxpZDsKLQkJCXRyeSB7Ci0JCQkJaWYgKGNvbnRleHROb2RlICE9IG51bGwpIHsKLQkJCQkJeHBhdGhDb21wdXRlci5zZXRTZWxlY3RlZE5vZGUoY29udGV4dE5vZGUpOwotCQkJCX0KLQkJCQl4cGF0aENvbXB1dGVyLnNldFRleHQodGV4dC5nZXRUZXh0KCkpOwotCQkJCXhwYXRoQ29tcHV0ZXIuY29tcHV0ZSgpOwotCQkJCXZhbGlkID0gdHJ1ZTsKLQkJCX0gY2F0Y2ggKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJdmFsaWQgPSBmYWxzZTsKLQkJCQlpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpIHsKLQkJCQkJbWVzc2FnZSA9IGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWVzc2FnZSA9ICJJbnZhbGlkIFhQYXRoIGV4cHJlc3Npb24iOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJfQotCQkJaWYgKGV4cHJlc3Npb25WYWxpZCAhPSB2YWxpZCkgewotCQkJCWV4cHJlc3Npb25WYWxpZCA9IHZhbGlkOwotCQkJCXVwZGF0ZUxvY2F0aW9uVGV4dCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgeHBhdGhSZWNvbXB1dGVkKGZpbmFsIE5vZGVMaXN0IG5vZGVMaXN0KSB7Ci0JCWlmIChnZXRTaXRlKCkgPT0gbnVsbCkgcmV0dXJuOwotCQlTaGVsbCBzaGVsbCA9IGdldFNpdGUoKS5nZXRTaGVsbCgpOwotCQlpZiAoc2hlbGwgPT0gbnVsbCkgcmV0dXJuOwotCQlEaXNwbGF5IGRpc3BsYXkgPSBzaGVsbC5nZXREaXNwbGF5KCk7Ci0JCWlmIChkaXNwbGF5ID09IG51bGwpIHJldHVybjsKLQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUNvbnRyb2wgcmVmcmVzaENvbnRyb2wgPSB0cmVlVmlld2VyLmdldENvbnRyb2woKTsKLQkJCQlpZiAoKHJlZnJlc2hDb250cm9sICE9IG51bGwpICYmICFyZWZyZXNoQ29udHJvbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQkJcmVmcmVzaENvbnRyb2wuc2V0UmVkcmF3KGZhbHNlKTsKLQkJCQkJdHJlZVZpZXdlci5zZXRJbnB1dChub2RlTGlzdCk7Ci0JCQkJCXRyZWVWaWV3ZXIuc2V0U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24sIHRydWUpOwotCQkJCQlyZWZyZXNoQ29udHJvbC5zZXRSZWRyYXcodHJ1ZSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlTG9jYXRpb25UZXh0KCkgewotCQlpZiAoZXhwcmVzc2lvblZhbGlkKSB7Ci0JCQlsb2NhdGlvblRleHQuc2V0VGV4dChNZXNzYWdlcy5YUGF0aFZpZXdfMCArIGxvY2F0aW9uKTsKLQkJCWxvY2F0aW9uVGV4dC5zZXRGb3JlZ3JvdW5kKG51bGwpOwotCQl9IGVsc2UgewotCQkJbG9jYXRpb25UZXh0LnNldFRleHQobWVzc2FnZSk7Ci0JCQlsb2NhdGlvblRleHQuc2V0Rm9yZWdyb3VuZChKRmFjZUNvbG9ycy5nZXRFcnJvclRleHQobG9jYXRpb25UZXh0Ci0JCQkJCS5nZXREaXNwbGF5KCkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0RWRpdG9yTGlzdGVuZXIoKSB7Ci0JCWdldFNpdGUoKS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcjIpOwotCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCi0JCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJZWRpdG9yQWN0aXZhdGVkKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQl0ZXh0LnNldEZvY3VzKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyMik7Ci0JCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKLQkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIoc2VsZWN0aW9uTGlzdGVuZXIpOwotCQl4cGF0aENvbXB1dGVyLmRpc3Bvc2UoKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBlZGl0b3JBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlpZiAoKHBhcnQgIT0gYWN0aXZlRWRpdG9yKSAmJiAocGFydCBpbnN0YW5jZW9mIElFZGl0b3JQYXJ0KSkgewotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gKElFZGl0b3JQYXJ0KSBwYXJ0OwotCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldEVkaXRvck1vZGVsKGVkaXRvcik7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCWFjdGl2ZUVkaXRvciA9IGVkaXRvcjsKLQkJCQl4cGF0aENvbXB1dGVyLnNldE1vZGVsKG1vZGVsKTsKLQkJCQl4cGF0aENvbXB1dGVyLnNldFNlbGVjdGVkTm9kZSgoRG9jdW1lbnQpIG1vZGVsCi0JCQkJCQkuZ2V0QWRhcHRlcihEb2N1bWVudC5jbGFzcykpOwotCQkJfQotCQkJcmVjb21wdXRlWFBhdGgoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBlZGl0b3JDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlpZiAocGFydCA9PSBhY3RpdmVFZGl0b3IpIHsKLQkJCXRyZWVWaWV3ZXIuc2V0SW5wdXQobnVsbCk7Ci0JCQlsb2NhdGlvblRleHQuc2V0VGV4dCgiIik7Ci0JCQlhY3RpdmVFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldEVkaXRvck1vZGVsKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlyZXR1cm4gKElTdHJ1Y3R1cmVkTW9kZWwpIGVkaXRvci5nZXRBZGFwdGVyKElTdHJ1Y3R1cmVkTW9kZWwuY2xhc3MpOwotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKLQkJT2JqZWN0IGFkYXB0ZXIgPSBudWxsOwotCQlpZiAoa2V5LmVxdWFscyhJU2hvd0luVGFyZ2V0LmNsYXNzKSAmJiAodHJlZVZpZXdlciAhPSBudWxsKSkgewotCQkJYWRhcHRlciA9IG5ldyBJU2hvd0luVGFyZ2V0KCkgewotCQkJCXB1YmxpYyBib29sZWFuIHNob3coU2hvd0luQ29udGV4dCBjb250ZXh0KSB7Ci0JCQkJCXRyZWVWaWV3ZXIuc2V0U2VsZWN0aW9uKGNvbnRleHQuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCQlyZXR1cm4gdHJlZVZpZXdlci5nZXRTZWxlY3Rpb24oKS5lcXVhbHMoCi0JCQkJCQkJY29udGV4dC5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJfQotCQkJfTsKLQkJfSBlbHNlIGlmIChrZXkuZXF1YWxzKElTaG93SW5Tb3VyY2UuY2xhc3MpICYmIChhY3RpdmVFZGl0b3IgIT0gbnVsbCkpIHsKLQkJCWFkYXB0ZXIgPSBuZXcgSVNob3dJblNvdXJjZSgpIHsKLQkJCQlwdWJsaWMgU2hvd0luQ29udGV4dCBnZXRTaG93SW5Db250ZXh0KCkgewotCQkJCQlyZXR1cm4gbmV3IFNob3dJbkNvbnRleHQoYWN0aXZlRWRpdG9yLmdldEVkaXRvcklucHV0KCksCi0JCQkJCQkJYWN0aXZlRWRpdG9yLmdldEVkaXRvclNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpCi0JCQkJCQkJCQkuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCX0KLQkJCX07Ci0JCX0gZWxzZSBpZiAoa2V5LmVxdWFscyhJU2hvd0luVGFyZ2V0TGlzdC5jbGFzcykKLQkJCQkmJiAoYWN0aXZlRWRpdG9yICE9IG51bGwpKSB7Ci0JCQlhZGFwdGVyID0gYWN0aXZlRWRpdG9yLmdldEFkYXB0ZXIoa2V5KTsKLQkJfQotCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7Ci0JCQlhZGFwdGVyID0gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNhdmVTdGF0ZShJTWVtZW50byBtZW1lbnRvKSB7Ci0JCXNoZWV0TWFwLnB1dChjdXJyZW50U2hlZXQsIHRleHQuZ2V0VGV4dCgpKTsKLQkJbWVtZW50by5wdXRJbnRlZ2VyKCJDdXJyZW50U2hlZXQiLCBjdXJyZW50U2hlZXQpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoTWFwLkVudHJ5PEludGVnZXIsIFN0cmluZz4gZW50cnkgOiBzaGVldE1hcC5lbnRyeVNldCgpKSB7Ci0JCQlJTWVtZW50byBjaGlsZCA9IG1lbWVudG8uY3JlYXRlQ2hpbGQoIlNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWNoaWxkLnB1dEludGVnZXIoIkluZGV4IiwgZW50cnkuZ2V0S2V5KCkpOyAvLyROT04tTkxTLTEkCi0JCQljaGlsZC5wdXRTdHJpbmcoIlhQYXRoIiwgZW50cnkuZ2V0VmFsdWUoKSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlib29sZWFuIGxpbmsgPSB4cGF0aFZpZXdBY3Rpb25zLmlzTGlua1dpdGhFZGl0b3IoKTsKLQkJbWVtZW50by5wdXRCb29sZWFuKCJMaW5rV2l0aEVkaXRvciIsIGxpbmspOwotCQlzdXBlci5zYXZlU3RhdGUobWVtZW50byk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc2hlZXRNYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTdHJpbmc+KCk7Ci0JCWlmIChtZW1lbnRvICE9IG51bGwpIHsKLQkJCUlNZW1lbnRvW10gc2hlZXRzID0gbWVtZW50by5nZXRDaGlsZHJlbigiU2hlZXQiKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHNoZWV0cyAhPSBudWxsKSB7Ci0JCQkJY3VycmVudFNoZWV0ID0gbWVtZW50by5nZXRJbnRlZ2VyKCJDdXJyZW50U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWZvciAoSU1lbWVudG8gc2hlZXQgOiBzaGVldHMpIHsKLQkJCQkJc2hlZXRNYXAKLQkJCQkJCQkucHV0KAotCQkJCQkJCQkJc2hlZXQuZ2V0SW50ZWdlcigiSW5kZXgiKSwgc2hlZXQuZ2V0U3RyaW5nKCJYUGF0aCIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJfQotCQkJfQotCQkJQm9vbGVhbiBsaW5rV2l0aEVkaXRvciA9IG1lbWVudG8uZ2V0Qm9vbGVhbigiTGlua1dpdGhFZGl0b3IiKTsKLQkJCWJvb2xlYW4gbGluayA9IGZhbHNlOwotCQkJaWYgKGxpbmtXaXRoRWRpdG9yICE9IG51bGwpIHsKLQkJCQlsaW5rID0gbGlua1dpdGhFZGl0b3IuYm9vbGVhblZhbHVlKCk7Ci0JCQl9Ci0JCQl4cGF0aFZpZXdBY3Rpb25zLnNldExpbmtXaXRoRWRpdG9yKGxpbmspOwotCQl9Ci0JCWlmIChjdXJyZW50U2hlZXQgPT0gbnVsbCkgewotCQkJY3VycmVudFNoZWV0ID0gMDsKLQkJfQotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCXByaXZhdGUgY2xhc3MgWFBhdGhQYXJ0TGlzdGVuZXIgaW1wbGVtZW50cyBJUGFydExpc3RlbmVyMiB7Ci0JCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZikgewotCQkJZWRpdG9yQWN0aXZhdGVkKHBhcnRSZWYuZ2V0UGFydChmYWxzZSkpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKSB7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBwYXJ0SW5wdXRDaGFuZ2VkKElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpIHsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZikgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgcGFydFZpc2libGUoSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZikgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKSB7Ci0JCQllZGl0b3JDbG9zZWQocGFydFJlZi5nZXRQYXJ0KGZhbHNlKSk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZikgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgcGFydEhpZGRlbihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKSB7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFNlbGVjdGlvblByb3ZpZGVyIGltcGxlbWVudHMgSVBvc3RTZWxlY3Rpb25Qcm92aWRlciB7Ci0JCXByaXZhdGUgY2xhc3MgUG9zdFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBpbXBsZW1lbnRzCi0JCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCWlmICghaXNGaXJpbmdTZWxlY3Rpb24oKSkgewotCQkJCQlmaXJlU2VsZWN0aW9uQ2hhbmdlZChldmVudCwgcG9zdExpc3RlbmVycyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZSBjbGFzcyBTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgaW1wbGVtZW50cwotCQkJCUlTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoIWlzRmlyaW5nU2VsZWN0aW9uKCkpIHsKLQkJCQkJZmlyZVNlbGVjdGlvbkNoYW5nZWQoZXZlbnQsIGxpc3RlbmVycyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZSBMaXN0ZW5lckxpc3QgbGlzdGVuZXJzID0gbmV3IExpc3RlbmVyTGlzdCgpOwotCQlwcml2YXRlIExpc3RlbmVyTGlzdCBwb3N0TGlzdGVuZXJzID0gbmV3IExpc3RlbmVyTGlzdCgpOwotCQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgcG9zdFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9IG5ldyBQb3N0U2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCk7Ci0JCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCk7Ci0KLQkJcHVibGljIHZvaWQgYWRkUG9zdFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLQkJCQlJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQlwb3N0TGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCi0JCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBmaXJlU2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQsCi0JCQkJTGlzdGVuZXJMaXN0IGxpc3RlbmVyTGlzdCkgewotCQkJaXNGaXJpbmdTZWxlY3Rpb24gPSB0cnVlOwotCQkJT2JqZWN0W10gbGlzdGVuZXJzID0gbGlzdGVuZXJMaXN0LmdldExpc3RlbmVycygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyArK2kpIHsKLQkJCQlmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGwgPSAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikgbGlzdGVuZXJzW2ldOwotCQkJCVNhZmVSdW5uZXIucnVuKG5ldyBTYWZlUnVubmFibGUoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCWwuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JCQkJCX0KLQkJCQl9KTsKLQkJCX0KLQkJCWlzRmlyaW5nU2VsZWN0aW9uID0gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7Ci0JCQlpZiAodHJlZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIHRyZWVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzRmlyaW5nU2VsZWN0aW9uKCkgewotCQkJcmV0dXJuIGlzRmlyaW5nU2VsZWN0aW9uOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlUG9zdFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLQkJCQlJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQlwb3N0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCi0JCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJCWlmICghaXNGaXJpbmdTZWxlY3Rpb24pIHsKLQkJCQl0cmVlVmlld2VyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL1hQYXRoVmlld0FjdGlvbnMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9YUGF0aFZpZXdBY3Rpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZGIzOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL1hQYXRoVmlld0FjdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuWFBhdGhVSVBsdWdpbjsKLQotY2xhc3MgWFBhdGhWaWV3QWN0aW9ucyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1hZ2VEZXNjcmlwdG9yIENPTExBUFNFX0QgPSBBYnN0cmFjdFVJUGx1Z2luCi0JCQkuaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihYUGF0aFVJUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJImljb25zL2Z1bGwvZGxjbDE2L2NvbGxhcHNlYWxsLmdpZiIpOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIEltYWdlRGVzY3JpcHRvciBDT0xMQVBTRV9FID0gQWJzdHJhY3RVSVBsdWdpbgotCQkJLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oWFBhdGhVSVBsdWdpbi5QTFVHSU5fSUQsCi0JCQkJCSJpY29ucy9mdWxsL2VsY2wxNi9jb2xsYXBzZWFsbC5naWYiKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBJbWFnZURlc2NyaXB0b3IgU1lOQ0VEX0QgPSBBYnN0cmFjdFVJUGx1Z2luCi0JCQkuaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihYUGF0aFVJUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJImljb25zL2Z1bGwvZGxjbDE2L3N5bmNlZC5naWYiKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBJbWFnZURlc2NyaXB0b3IgU1lOQ0VEX0UgPSBBYnN0cmFjdFVJUGx1Z2luCi0JCQkuaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihYUGF0aFVJUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJImljb25zL2Z1bGwvZWxjbDE2L3N5bmNlZC5naWYiKTsKLQotCXByaXZhdGUgYm9vbGVhbiBsaW5rV2l0aEVkaXRvciA9IGZhbHNlOwotCXByaXZhdGUgQ29sbGFwc2VUcmVlQWN0aW9uIGNvbGxhcHNlQWN0aW9uOwotCXByaXZhdGUgVG9nZ2xlTGlua0FjdGlvbiB0b2dnbGVBY3Rpb247Ci0KLQlwcm90ZWN0ZWQgSUFjdGlvbltdIGNyZWF0ZU1lbnVDb250cmlidXRpb25zKFRyZWVWaWV3ZXIgdmlld2VyKSB7Ci0JCXJldHVybiBuZXcgSUFjdGlvbltdIHt9OwotCX0KLQotCXByb3RlY3RlZCBJQWN0aW9uW10gY3JlYXRlVG9vbGJhckNvbnRyaWJ1dGlvbnMoVHJlZVZpZXdlciB2aWV3ZXIpIHsKLQkJdGhpcy5jb2xsYXBzZUFjdGlvbiA9IG5ldyBDb2xsYXBzZVRyZWVBY3Rpb24odmlld2VyKTsKLQkJdGhpcy50b2dnbGVBY3Rpb24gPSBuZXcgVG9nZ2xlTGlua0FjdGlvbigpOwotCQl0b2dnbGVBY3Rpb24uc2V0Q2hlY2tlZChpc0xpbmtXaXRoRWRpdG9yKCkpOwotCQlyZXR1cm4gbmV3IElBY3Rpb25bXSB7IGNvbGxhcHNlQWN0aW9uLCB0b2dnbGVBY3Rpb24gfTsKLQl9Ci0KLQlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oVHJlZVZpZXdlciB2aWV3ZXIsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXJldHVybiBzZWxlY3Rpb247Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNMaW5rZWRXaXRoRWRpdG9yKFRyZWVWaWV3ZXIgdHJlZVZpZXdlcikgewotCQlyZXR1cm4gaXNMaW5rV2l0aEVkaXRvcigpOwotCX0KLQotCXZvaWQgc2V0TGlua1dpdGhFZGl0b3IoYm9vbGVhbiBpc0xpbmtXaXRoRWRpdG9yKSB7Ci0JCWxpbmtXaXRoRWRpdG9yID0gaXNMaW5rV2l0aEVkaXRvcjsKLQl9Ci0KLQl2b2lkIGZpbGxDb250ZXh0TWVudShJTWVudU1hbmFnZXIgbWFuYWdlcikgewotCQltYW5hZ2VyLmFkZChjb2xsYXBzZUFjdGlvbik7Ci0JCW1hbmFnZXIuYWRkKHRvZ2dsZUFjdGlvbik7Ci0JCW1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0xpbmtXaXRoRWRpdG9yKCkgewotCQlyZXR1cm4gbGlua1dpdGhFZGl0b3I7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ29sbGFwc2VUcmVlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHJpdmF0ZSBmaW5hbCBUcmVlVmlld2VyIGZUcmVlVmlld2VyOwotCi0JCXB1YmxpYyBDb2xsYXBzZVRyZWVBY3Rpb24oVHJlZVZpZXdlciB2aWV3ZXIpIHsKLQkJCXN1cGVyKE1lc3NhZ2VzLlhQYXRoVmlld0FjdGlvbnNfMCwgQVNfUFVTSF9CVVRUT04pOwotCQkJc2V0SW1hZ2VEZXNjcmlwdG9yKENPTExBUFNFX0UpOwotCQkJc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoQ09MTEFQU0VfRCk7Ci0JCQlzZXRUb29sVGlwVGV4dChnZXRUZXh0KCkpOwotCQkJZlRyZWVWaWV3ZXIgPSB2aWV3ZXI7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlmVHJlZVZpZXdlci5jb2xsYXBzZUFsbCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBUb2dnbGVMaW5rQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIFRvZ2dsZUxpbmtBY3Rpb24oKSB7Ci0JCQlzdXBlcihNZXNzYWdlcy5YUGF0aFZpZXdBY3Rpb25zXzEsIEFTX0NIRUNLX0JPWCk7Ci0JCQlzZXRUb29sVGlwVGV4dChnZXRUZXh0KCkpOwotCQkJc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoU1lOQ0VEX0QpOwotCQkJc2V0SW1hZ2VEZXNjcmlwdG9yKFNZTkNFRF9FKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXNldExpbmtXaXRoRWRpdG9yKGlzQ2hlY2tlZCgpKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS90ZW1wbGF0ZXMvZm4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy9mbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmVmNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy9mbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS1Ob3ZlbWJlciAxNywgMjAwNi0tPjxicGVsLXhwYXRoLWZ1bmN0aW9ucz4KLQotICAgIDwhLS0gQXNzaXN0YW50cyBhbmQgYXJncyByZXBlYXRlZCBpbiB0aGUgZnVuY3Rpb24gZGVmaW50aW9ucyBiZWxvdyAtLT4KLQotICAgIDxhc3Npc3RhbnQgbmFtZT0iU2ltcGxlRGF0ZUZvcm1hdCIgdHlwZT0iMSI+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IiZxdW90O3l5eXkuTU0uZGQgRyAnYXQnIEhIOm1tOnNzIHomcXVvdDsiPjIwMDEuMDcuMDQgQUQgYXQgMTI6MDg6NTYgUERUPC9vcHRpb24+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IiZxdW90O0VFRSwgTU1NIGQsICcneXkmcXVvdDsiPldlZCwgSnVsIDQsICcwMTwvb3B0aW9uPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSImcXVvdDtoOm1tIGEmcXVvdDsiPjEyOjA4IFBNPC9vcHRpb24+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IiZxdW90O2hoICdvJydjbG9jaycgYSwgenp6eiZxdW90OyI+MTIgbydjbG9jayBQTSwgUGFjaWZpYyBEYXlsaWdodCBUaW1lPC9vcHRpb24+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IiZxdW90O0s6bW0gYSwgeiZxdW90OyI+MDowOCBQTSwgUERUPC9vcHRpb24+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IiZxdW90O3l5eXl5Lk1NTU1NLmRkIEdHRyBoaDptbSBhYWEmcXVvdDsiPjAyMDAxLkp1bHkuMDQgQUQgMTI6MDggUE08L29wdGlvbj4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJnF1b3Q7RUVFLCBkIE1NTSB5eXl5IEhIOm1tOnNzIFomcXVvdDsiPldlZCwgNCBKdWwgMjAwMSAxMjowODo1NiAtMDcwMDwvb3B0aW9uPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSImcXVvdDt5eU1NZGRISG1tc3NaJnF1b3Q7Ij4wMTA3MDQxMjA4NTYtMDcwMDwvb3B0aW9uPgotICAgIDwvYXNzaXN0YW50PgotCi0gICAgIDxhc3Npc3RhbnQgbmFtZT0iTERBUFNjb3BlIj4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJ3N1YnRyZWUnIj5TdWJ0cmVlIFNlYXJjaCAoc3RhcnRpbmcgYXQgdGhlIGdpdmVuIERpc3Rpbmd1aXNoZWQgTmFtZSk8L29wdGlvbj4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJ29uZWxldmVsJyI+T25lbGV2ZWwgU2VhcmNoIChzaWJsaW5ncyBvZiBnaXZlbiBEaXN0aW5ndWlzaGVkIE5hbWUgb25seSk8L29wdGlvbj4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJ29iamVjdCciPk9iamVjdCBTZWFyY2ggKGdpdmVuIERpc3Rpbmd1aXNoZWQgTmFtZSBvbmx5KTwvb3B0aW9uPgotICAgIDwvYXNzaXN0YW50PgotCi0gICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImRhdGVGb3JtYXQiIG9wdGlvbmFsPSJ0cnVlIiB0eXBlPSJzdHJpbmciPgotICAgICAgICA8Y29tbWVudD5Db250YWlucyBhIHN0cmluZyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0IGZvcm1hdC48L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJTaW1wbGVEYXRlRm9ybWF0Ii8+Ci0gICAgPC9hcmc+Ci0KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ibGRhcGZpbHRlciIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgPGNvbW1lbnQ+QW4gTERBUCBmaWx0ZXIuIDwvY29tbWVudD4KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iJ3N1YnRyZWUnIiBuYW1lPSJsZGFwc2NvcGUiIG9wdGlvbmFsPSJ0cnVlIiB0eXBlPSJzdHJpbmciPgotICAgICAgICA8Y29tbWVudD5BbiBMREFQIHNlYXJjaCBzY29wZS4gVmFsdWVzIGFyZSBvYmplY3Qsb25lbGV2ZWwsc3VidHJlZS48L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJMREFQU2NvcGUiLz4KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJwYXNzd29yZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgPGNvbW1lbnQ+VGhlIHVzZXIgcGFzc3dvcmQuPC9jb21tZW50PgotICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLQotICAgIDwvYXJnPgotCi0gICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImZpbGVOYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICA8Y29tbWVudD5GaWxlIG5hbWUgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uIE5vdGUgdGhhdCB0aGlzIGZpbGUgbmFtZSBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgT3JhY2xlIEJQRUwgUHJvY2VzcyBNYW5hZ2VyLjwvY29tbWVudD4KLSAgICAgICAgPGFzc2lzdGFudCByZWY9ImZpbGVQaWNrZXIiLz4KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJ4cGF0aCIgb3B0aW9uYWw9InRydWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgIDxjb21tZW50PkFuIFhQYXRoIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyBpbiBhbiBXM0MgWE1MIERPTSBFbGVtZW50IG5vZGU8L2NvbW1lbnQ+Ci0gICAgPC9hcmc+Ci0KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0idGVtcGxhdGVVUkkiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgIDxjb21tZW50PkEgVVJJIHRvIHRoZSB0ZW1wbGF0ZS4gPC9jb21tZW50PgotICAgICAgICA8YXNzaXN0YW50IHJlZj0idXJpUGlja2VyIi8+Ci0gICAgPC9hcmc+Ci0KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ieHNsdElucHV0IiB0eXBlPSJub2RlIj4KLSAgICAgICAgPGNvbW1lbnQ+QSBXM0MgWE1MIERPTSBlbGVtZW50LiA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgIDwvYXJnPgotCi0gICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9InhxdWVyeUNvbnRleHQiIG9wdGlvbmFsPSJ0cnVlIiB0eXBlPSJub2RlIj4KLSAgICAgICAgPGNvbW1lbnQ+QSBXM0MgWE1MIERPTSBlbGVtZW50LiA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgIDwvYXJnPgotCi0gICAgPGFyZyBkZWZhdWx0PSInMSciIG5hbWU9Iml0ZW0iIHR5cGU9Im51bWJlciI+Ci0gICAgICAgIDxjb21tZW50Pkl0ZW0gaW4gYXJyYXk8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgIDwvYXJnPgotCi0gICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9InByb3BlcnRpZXMiIG9wdGlvbmFsPSJ0cnVlIiB0eXBlPSJub2RlIj4KLSAgICAgICAgPGNvbW1lbnQ+QSBXM0MgWE1MIERPTSBlbGVtZW50LiA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgIDwvYXJnPgotCi0gICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImVsZW1lbnQxIiB0eXBlPSJub2RlIj4KLSAgICAgICAgPGNvbW1lbnQ+QSBXM0MgWE1MIERPTSBlbGVtZW50LiAgPC9jb21tZW50PgotICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLQotICAgIDwvYXJnPgotCi0gICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImVsZW1lbnQyIiB0eXBlPSJub2RlIj4KLSAgICAgICAgPGNvbW1lbnQ+QSBXM0MgWE1MIERPTSBlbGVtZW50LiAgPC9jb21tZW50PgotICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLQotICAgIDwvYXJnPgotCi0KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0idmFyaWFibGVOYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICA8Y29tbWVudD5UaGUgc291cmNlIHZhcmlhYmxlIGZvciB0aGUgZGF0YTwvY29tbWVudD4KLSAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJwYXJ0TmFtZSIgb3B0aW9uYWw9InRydWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgIDxjb21tZW50PlRoZSBwYXJ0IHRvIHNlbGVjdCBmcm9tIHRoZSB2YXJpYWJsZTwvY29tbWVudD4KLSAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0KLSAgICA8L2FyZz4KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ibG9jYXRpb25QYXRoIiBvcHRpb25hbD0idHJ1ZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgPGNvbW1lbnQ+UHJvdmlkZXMgYW4gYWJzb2x1dGUgbG9jYXRpb24gcGF0aCAod2l0aCAnLycgbWVhbmluZyB0aGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQgZnJhZ21lbnQgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgcGFydCkgdG8gaWRlbnRpZnkgdGhlIHJvb3Qgb2YgYSBzdWJ0cmVlIHdpdGhpbiB0aGUgZG9jdW1lbnQgZnJhZ21lbnQgcmVwcmVzZW50aW5nIHRoZSBwYXJ0LjwvY29tbWVudD4KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJpbmRleCIgb3B0aW9uYWw9InRydWUiIHR5cGU9Im51bWJlciI+Ci0gICAgICAgIDxjb21tZW50PkR5bmFtaWMgaW5kZXggdmFsdWU8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotCi0gICAgPC9hcmc+Ci0KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0iYU5vZGUiIHR5cGU9Im5vZGUiPgotICAgICAgICA8Y29tbWVudD5BbiBYTUwgRE9NIG5vZGUuIDwvY29tbWVudD4KLSAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgPC9hcmc+Ci0KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ieG1sQ29udGVudFN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgPGNvbW1lbnQ+WE1MIENvbnRlbnQgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLiA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJmdW5jdGlvbnMiLz4KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJub2RlU2V0IiB0eXBlPSJub2RlLXNldCI+Ci0gICAgICAgIDxjb21tZW50PkFuIFhNTCBET00gTm9kZS1TZXQgPC9jb21tZW50PgotICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICA8L2FyZz4KLQotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJhTm9kZVNldCIgb3B0aW9uYWw9InRydWUiIHR5cGU9Im5vZGUtc2V0Ij4KLSAgICAgICAgPGNvbW1lbnQ+QW4gWE1MIERPTSBOb2RlLVNldCA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgIDwvYXJnPgotICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJvYmplY3QiIHR5cGU9Im9iamVjdCI+Ci0gICAgICAgIDxjb21tZW50PkFueSBXM0MgWE1MIERPTSBvYmplY3Qgb3Igbm9kZS1zZXQuPC9jb21tZW50PgotICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICA8L2FyZz4KLSAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0iYUJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotICAgICAgICA8Y29tbWVudD5BIGJvb2xlYW4gdmFsdWUgZXhwcmVzc2lvbiBvciBjb25zdGFudDwvY29tbWVudD4KLSAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgPC9hcmc+Ci0gICAgCi0gICAgPCEtLSBCUEVMIGZ1bmN0aW9ucyAtLT4KLQotICAgIAotICAgIDxmdW5jdGlvbiBpZD0ibGFzdCIgcmV0dXJucz0ibnVtYmVyIiB2aXN1YWw9IjEiPgotICAgICAgICA8aGVscD5SZXR1cm5zIGEgbnVtYmVyIGVxdWFsIHRvIGNvbnRleHQgc2l6ZSBvZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGNvbnRleHQuCi0gICAgICAgIDwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVsgUmV0dXJucyBhIG51bWJlciBlcXVhbCB0byBjb250ZXh0IHNpemUgb2YgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBjb250ZXh0LiBdXT4KLSAgICAgICAgPC9jb21tZW50PgotICAgIDwvZnVuY3Rpb24+Ci0KLSAgICA8ZnVuY3Rpb24gaWQ9InBvc2l0aW9uIiByZXR1cm5zPSJudW1iZXIiPgotICAgICAgICA8aGVscD5SZXR1cm5zIHRoZSBpbmRleCBudW1iZXIgb2YgdGhlIG5vZGUgd2l0aGluIHRoZSBwYXJlbnQuCi0gICAgICAgICAgICBUaGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgaXMgaXMgMS1iYXNlZCwgc28gdGhlIGZpcnN0IG5vZGUgcmV0dXJucyBhIHBvc2l0aW9uIG9mIDEuIDwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVsgUmV0dXJucyB0aGUgcG9zaXRpb24sIG9yIGluZGV4IG51bWJlciwgb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIGFsbCB0aGUgc2VsZWN0ZWQgbm9kZXMgaW4gdGhlIG5vZGUgbGlzdC4KLSAgICAgICAgVGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlIGlzIGlzIDEtYmFzZWQsIHNvIHRoZSBmaXJzdCBub2RlIHJldHVybnMgYSBwb3NpdGlvbiBvZiAxLl1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0gICAgPC9mdW5jdGlvbj4KLQotICAgIDxmdW5jdGlvbiBpZD0iY291bnQiIHJldHVybnM9Im51bWJlciI+Ci0gICAgICAgIDxoZWxwPlRoaXMgWFBhdGggMS4wIGRlZmluZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgY291bnQgb2Ygbm9kZXMKLSAgICAgICAgICAgIHByZXNlbnQgaW4gdGhlIHN1cHBsaWVkIG5vZGUtc2V0PC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWyBUaGlzIFhQYXRoIDEuMCBkZWZpbmVkIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvdW50IG9mIG5vZGVzCi0gICAgICAgICBwcmVzZW50IGluIHRoZSBzdXBwbGllZCBub2RlLXNldCBdXT4KLSAgICAgICAgPC9jb21tZW50PgotICAgICAgICA8YXJnIHJlZj0iYU5vZGVTZXQiLz4KLSAgICA8L2Z1bmN0aW9uPgotCi0KLSAgICA8ZnVuY3Rpb24gaWQ9ImlkIiByZXR1cm5zPSJub2RlLXNldCI+Ci0gICAgICAgIDxoZWxwPlNlbGVjdHMgZWxlbWVudHMgYnkgdGhlaXIgdW5pcXVlIElEPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWyBTZWxlY3RzIGVsZW1lbnRzIGJ5IHRoZWlyIHVuaXF1ZSBJRCwgPHA+Ci0gICAgICAgICAgV2hlbiB0aGUgYXJndW1lbnQgaXMgb2YgdHlwZSBub2RlLXNldCwgdGhlIHJlc3VsdCBpcyB0aGUgdW5pb24gb2YgdGhlCi0gICAgICAgICAgcmVzdWx0IG9mIGFwcGx5aW5nIGlkKCkgdG8gdGhlIHN0cmluZyB2YWx1ZSBvZiBlYWNoIG9mIHRoZSBub2RlcyBpbgotICAgICAgICAgIHRoZSBub2RlLXNldCBhcmd1bWVudC4KLTxwPgotV2hlbiB0aGUgYXJndW1lbnQgaXMgb2YgYW55IG90aGVyIHR5cGUsIGl0IGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZwotYW5kIHRoZW4gc3BsaXQgaW50byBhIHdoaXRlIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHRva2VucyAod2hpdGUgc3BhY2UgaXMKLWFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG1hdGNoaW5nIHRoZSBwcm9kdWN0aW9uKTsgdGhlIHJlc3VsdAotaXMgYSBub2RlLXNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcyB0aGUgY29udGV4dAotbm9kZSB0aGF0IGhhdmUgYSB1bmlxdWUgSUQgZXF1YWwgdG8gYW55IG9mIHRoZSB0b2tlbnMgaW4gdGhlIGxpc3QuIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9Im9iamVjdCIgdHlwZT0ib2JqZWN0Ij4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBvYmplY3Qgb3Igb2JqZWN0cyB0byBhcHBseSB0aGUgaWQgZnVuY3Rpb24gdG8uPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0ibG9jYWwtbmFtZSIgcmV0dXJucz0ic3RyaW5nIj4KLSAgICAgICAgPGhlbHA+UmV0dXJucyB0aGUgbG9jYWwgcGFydCBvZiB0aGUgZXhwYW5kZWQgbmFtZSBvZiB0aGUgbm9kZSBpbiB0aGUgbm9kZS1zZXQgYXJndW1lbnQgdGhhdCBpcyBmaXJzdCBpbiBkb2N1bWVudCBvcmRlcjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVsgUmV0dXJucyB0aGUgbG9jYWwgcGFydCBvZiB0aGUgZXhwYW5kZWQgbmFtZSBvZiB0aGUgbm9kZSBpbiB0aGUgbm9kZS1zZXQKLSAgICAgICAgYXJndW1lbnQgdGhhdCBpcyBmaXJzdCBpbiBkb2N1bWVudCBvcmRlci4gPHA+Ci0KLSAgICBdXT4KLSAgICAgICAgPC9jb21tZW50PgotICAgICAgICA8YXJnIHJlZj0ibm9kZVNldCIvPgotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0ibmFtZXNwYWNlLXVyaSIgcmV0dXJucz0ic3RyaW5nIj4KLSAgICAgICAgPGhlbHA+UmV0dXJucyB0aGUgbmFtZXNwYWNlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBvZiB0aGUgZXhwYW5kZWQgbmFtZSBvZiB0aGUgbm9kZQotICAgICAgICAgICAgaW4gdGhlIG5vZGUtc2V0IGFyZ3VtZW50IHRoYXQgaXMgZmlyc3QgaW4gZG9jdW1lbnQgb3JkZXIuPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWyBSZXR1cm5zIHRoZSBuYW1lc3BhY2UgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyCi0gICAgICAgIChVUkkpIG9mIHRoZSBleHBhbmRlZCBuYW1lIG9mIHRoZSBub2RlIGluIHRoZSBub2RlLXNldAotICAgICAgICBhcmd1bWVudCB0aGF0IGlzIGZpcnN0IGluIGRvY3VtZW50IG9yZGVyLgotCi0gICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhcmcgcmVmPSJub2RlU2V0Ii8+Ci0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJuYW1lIiByZXR1cm5zPSJzdHJpbmciPgotICAgICAgICA8aGVscD5SZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBRTmFtZSByZXByZXNlbnRpbmcgdGhlIGV4cGFuZGVkCi0gICAgICAgICAgICBuYW1lIG9mIHRoZSBub2RlIGluIHRoZSBub2RlLXNldCBhcmd1bWVudCB0aGF0IGlzIGZpcnN0IGluIGRvY3VtZW50Ci0gICAgICAgICAgICBvcmRlci4KLSAgICAgICAgPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBRTmFtZSByZXByZXNlbnRpbmcKLSAgICAgICAgdGhlIGV4cGFuZGVkIG5hbWUgb2YgdGhlIG5vZGUgaW4gdGhlIG5vZGUtc2V0IGFyZ3VtZW50Ci0gICAgICAgIHRoYXQgaXMgZmlyc3QgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhcmcgcmVmPSJub2RlU2V0Ii8+Ci0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJzdHJpbmciIHJldHVybnM9InN0cmluZyIgdmlzdWFsPSIxIj4KLSAgICAgICAgPGhlbHA+Q29udmVydHMgYW4gb2JqZWN0IHRvIGEgc3RyaW5nLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVtDb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBzdHJpbmcuIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhcmcgcmVmPSJvYmplY3QiLz4KLSAgICA8L2Z1bmN0aW9uPgotCi0gICAgPGZ1bmN0aW9uIGlkPSJjb25jYXQiIHJldHVybnM9InN0cmluZyI+Ci0gICAgICAgIDxoZWxwPlRoaXMgWFBhdGggMS4wIGRlZmluZWQgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHNldmVyYWwgc3RyaW5ncyB0b2dldGhlci48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbIFRoaXMgWFBhdGggMS4wIGRlZmluZWQgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHNldmVyYWwgc3RyaW5ncyB0b2dldGhlci5dXT4KLSAgICAgICAgPC9jb21tZW50PgotCi0gICAgICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJmaXJzdFN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PkZpcnN0IHN0cmluZyB0byBjb25jYXRlbmF0ZSB3aXRoPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ibmV4dFN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50Pk5leHQgc3RyaW5nIHRvIGNvbmNhdGVuYXRlIHdpdGg8L2NvbW1lbnQ+Ci0gICAgICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICAgICAgPC9hcmc+Ci0gICAgICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJvbmVNb3JlU3RyaW5nIiBvcHRpb25hbD0iKiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50Pk9uZSBtb3JlIHN0cmluZy4gWW91IGNhbiBjb25jYXRlbmF0ZSBzZXZlcmFsIHN0cmluZ3MgYXQgb25jZS48L2NvbW1lbnQ+Ci0gICAgICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICAgICAgPC9hcmc+Ci0gICAgPC9mdW5jdGlvbj4KLQotICAgIDxmdW5jdGlvbiBpZD0iY29udGFpbnMiIHJldHVybnM9InN0cmluZyI+Ci0gICAgICAgIDxoZWxwPkNoZWNrcyB3aGV0aGVyIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcgY29udGFpbnMKLSAgICAgICAgICAgIHRoZSBzZWNvbmQgYXJndW1lbnQgc3RyaW5nLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVsgQ2hlY2tzIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZwotICAgICAgICBjb250YWlucyB0aGUgc2Vjb25kIGFyZ3VtZW50IHN0cmluZy4gXV0+Ci0gICAgICAgIDwvY29tbWVudD4KLQotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0iYVN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzdHJpbmcgdG8gaW5zcGVjdDwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9InNlYXJjaFN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzZWFyY2ggc3RyaW5nIDwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLSAgICA8L2Z1bmN0aW9uPgotCi0KLSAgICA8ZnVuY3Rpb24gaWQ9InN1YnN0cmluZy1iZWZvcmUiIHJldHVybnM9InN0cmluZyI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHRoYXQKLSAgICAgICAgICAgIHByZWNlZGVzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgc3RyaW5nCi0gICAgICAgICAgICBpbiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nLCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmCi0gICAgICAgICAgICB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlY29uZCBhcmd1bWVudAotICAgICAgICAgICAgc3RyaW5nLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVs8ZGl2IGNsYXNzPSJ4cGF0aEhlbHAiPgotICA8SDEgY2xhc3M9ZHRIMT5zdWJzdHJpbmctYmVmb3JlIEZ1bmN0aW9uPC9IMT4KLSAgPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHRoYXQgcHJlY2VkZXMgdGhlIGZpcnN0Ci0gIG9jY3VycmVuY2Ugb2YgdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZywgb3IgdGhlCi0gIGVtcHR5IHN0cmluZyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlY29uZCBhcmd1bWVudAotICBzdHJpbmcuPC9QPjxQUkUgY2xhc3M9c3ludGF4PjxJPnN0cmluZzwvST4gc3Vic3RyaW5nLWJlZm9yZSg8ST5zdHJpbmc8L0k+LCA8ST5zdHJpbmc8L0k+KTwvUFJFPgotICA8SDQgY2xhc3M9ZHRIND5SZW1hcmtzPC9IND4KLSAgPFAgY2xhc3M9ZHRQPklmIGFuIGFyZ3VtZW50IGlzIG5vdCBvZiB0eXBlIDxJPnN0cmluZyw8L0k+IGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhCi0gIHN0cmluZyBhbmQgdGhlbiBldmFsdWF0ZWQuPC9QPgotICA8UCBjbGFzcz1kdFA+VGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYWxsIHJldHVybnMgIjE5OTkiOjwvUD48UFJFIGNsYXNzPWNvZGU+c3Vic3RyaW5nLWJlZm9yZSgiMTk5OS8wNC8wMSIsIi8iKTwvUFJFPgotICA8UCBjbGFzcz1kdFA+VGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYWxsIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nICIiOjwvUD48UFJFIGNsYXNzPWNvZGU+c3Vic3RyaW5nLWJlZm9yZSgiMTk5OS8wNC8wMSIsIjIiKTwvUFJFPgotICA8L2Rpdj4KLQotICAgICAgICBdXT4KLSAgICAgICAgPC9jb21tZW50PgotCi0gICAgICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJhU3RyaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGNvbW1lbnQ+VGhlIHN0cmluZyB0byBzZWFyY2ggaW48L2NvbW1lbnQ+Ci0gICAgICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICAgICAgPC9hcmc+Ci0gICAgICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJzZWFyY2hTdHJpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8Y29tbWVudD5UaGUgc2VhcmNoIHN0cmluZyA8L2NvbW1lbnQ+Ci0gICAgICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICAgICAgPC9hcmc+Ci0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJzdWJzdHJpbmctYWZ0ZXIiIHJldHVybnM9InN0cmluZyI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHRoYXQKLSAgICAgICAgICAgIGZvbGxvd3MgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcKLSAgICAgICAgICAgIGluIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYKLSAgICAgICAgICAgIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc2Vjb25kIGFyZ3VtZW50Ci0gICAgICAgICAgICBzdHJpbmcuPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWzxkaXYgY2xhc3M9InhwYXRoSGVscCI+Ci0KLSAgPEgxIGNsYXNzPWR0SDE+c3Vic3RyaW5nLWFmdGVyIEZ1bmN0aW9uPC9IMT4KLSAgPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHRoYXQgZm9sbG93cyB0aGUgZmlyc3QKLSAgb2NjdXJyZW5jZSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IHN0cmluZyBpbiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nLCBvciB0aGUKLSAgZW1wdHkgc3RyaW5nIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc2Vjb25kIGFyZ3VtZW50Ci0gIHN0cmluZy48L1A+PFBSRSBjbGFzcz1zeW50YXg+PEk+c3RyaW5nPC9JPiBzdWJzdHJpbmctYWZ0ZXIoPEk+c3RyaW5nPC9JPiwgPEk+c3RyaW5nPC9JPik8L1BSRT4KLSAgPEg0IGNsYXNzPWR0SDQ+UmVtYXJrczwvSDQ+Ci0gIDxQIGNsYXNzPWR0UD5JZiBhbiBhcmd1bWVudCBpcyBub3Qgb2YgdHlwZSA8ST5zdHJpbmcsPC9JPiBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYQotICBzdHJpbmcgYW5kIHRoZW4gZXZhbHVhdGVkLjwvUD4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCByZXR1cm5zICIwNC8wMSI6PC9QPjxQUkUgY2xhc3M9Y29kZT5zdWJzdHJpbmctYWZ0ZXIoIjE5OTkvMDQvMDEiLCIvIik8L1BSRT4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCByZXR1cm5zICI5OS8wNC8wMSI6PC9QPjxQUkUgY2xhc3M9Y29kZT5zdWJzdHJpbmctYWZ0ZXIoIjE5OTkvMDQvMDEiLCIxOSIpPC9QUkU+Ci0gIDxQIGNsYXNzPWR0UD5UaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbGwgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgIiI6PC9QPjxQUkUgY2xhc3M9Y29kZT5zdWJzdHJpbmctYWZ0ZXIoIjE5OTkvMDQvMDEiLCIyIik8L1BSRT4KLSAgPC9kaXY+Ci0gICAgICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImFTdHJpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8Y29tbWVudD5UaGUgc3RyaW5nIHRvIHNlYXJjaCBpbjwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9InNlYXJjaFN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzZWFyY2ggc3RyaW5nIDwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLSAgICA8L2Z1bmN0aW9uPgotCi0gICAgPGZ1bmN0aW9uIGlkPSJzdGFydHMtd2l0aCIgcmV0dXJucz0iYm9vbGVhbiI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHN0YXJ0cyB3aXRoCi0gICAgICAgICAgICB0aGUgc2Vjb25kIGFyZ3VtZW50IHN0cmluZzsgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWzxkaXYgY2xhc3M9InhwYXRoSGVscCI+Ci0gIDxIMSBjbGFzcz1kdEgxPnN0YXJ0cy13aXRoIEZ1bmN0aW9uPC9IMT4KLSAgPFAgY2xhc3M9ZHRQPlJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQKLSAgc3RyaW5nOyBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS48L1A+PFBSRSBjbGFzcz1zeW50YXg+PEk+Ym9vbGVhbjwvST4gc3RhcnRzLXdpdGgoPEk+c3RyaW5nPC9JPiwgPEk+c3RyaW5nPC9JPik8L1BSRT4KLSAgPEg0IGNsYXNzPWR0SDQ+UmVtYXJrczwvSDQ+Ci0gIDxQIGNsYXNzPWR0UD5JZiBhbiBhcmd1bWVudCBpcyBub3Qgb2YgdHlwZSA8ST5zdHJpbmcsPC9JPiBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYQotICBzdHJpbmcgYW5kIHRoZW4gZXZhbHVhdGVkLiBUaGUgZnVuY3Rpb24gaXMgY2FzZS1zZW5zaXRpdmUuPC9QPgotICA8L2Rpdj4KLSAgICAgICAgXV0+Ci0gICAgICAgIDwvY29tbWVudD4KLQotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0iYVN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzdHJpbmcgdG8gc2VhcmNoIGluPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ic2VhcmNoU3RyaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGNvbW1lbnQ+VGhlIHNlYXJjaCBzdHJpbmcgPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0ic3Vic3RyaW5nIiByZXR1cm5zPSJzdHJpbmciPgotICAgICAgICA8aGVscD5SZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIGZpcnN0IGFyZ3VtZW50Ci0gICAgICAgICAgICBzdGFydGluZyBhdCB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQKLSAgICAgICAgICAgIGFuZCB0aGUgbGVuZ3RoIHNwZWNpZmllZCBpbiB0aGUgdGhpcmQgYXJndW1lbnQuPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWzxkaXYgY2xhc3M9InhwYXRoSGVscCI+Ci0gIDxIMSBjbGFzcz1kdEgxPnN1YnN0cmluZyBGdW5jdGlvbjwvSDE+Ci0gIDxQIGNsYXNzPWR0UD5SZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHN0YXJ0aW5nIGF0IHRoZSBwb3NpdGlvbgotICBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBhbmQgdGhlIGxlbmd0aCBzcGVjaWZpZWQgaW4gdGhlIHRoaXJkCi0gIGFyZ3VtZW50LjwvUD48UFJFIGNsYXNzPXN5bnRheD48ST5zdHJpbmc8L0k+IHN1YnN0cmluZyg8ST5zdHJpbmc8L0k+LCA8ST5udW1iZXI8L0k+LCA8ST5udW1iZXI8L0k+Pyk8L1BSRT4KLSAgPEg0IGNsYXNzPWR0SDQ+UmVtYXJrczwvSDQ+Ci0gIDxQIGNsYXNzPWR0UD5FYWNoIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIG51bWVyaWMgcG9zaXRpb246IHRoZQotICBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIDEsIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIGNoYXJhY3RlciBpcyAyLAotICBhbmQgc28gb24uPC9QPgotICA8UCBjbGFzcz1kdFA+SWYgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IHJldHVybnMgdGhlIHN1YnN0cmluZyBzdGFydGluZyBhdAotICB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgYW5kIGNvbnRpbnVpbmcgdG8gdGhlIGVuZCBvZiB0aGUKLSAgc3RyaW5nLjwvUD4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCByZXR1cm5zICIyMzQiOjwvUD48UFJFIGNsYXNzPWNvZGU+c3Vic3RyaW5nKCIxMjM0NSIsMiwzKSA8L1BSRT4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCByZXR1cm5zICIyMzQ1Ijo8L1A+PFBSRSBjbGFzcz1jb2RlPnN1YnN0cmluZygiMTIzNDUiLDIpIDwvUFJFPgotICA8UCBjbGFzcz1kdFA+VGhlIHJldHVybmVkIHN1YnN0cmluZyBjb250YWlucyB0aG9zZSBjaGFyYWN0ZXJzIGZvciB3aGljaCB0aGUgcG9zaXRpb24gb2YKLSAgdGhlIGNoYXJhY3RlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJvdW5kZWQgdmFsdWUgb2YgdGhlIHNlY29uZAotICBhcmd1bWVudCwgYW5kIGlmIHRoZSB0aGlyZCBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIGxlc3MgdGhhbiB0aGUgc3VtIG9mIHRoZQotICByb3VuZGVkIHZhbHVlIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgYW5kIHRoZSByb3VuZGVkIHZhbHVlIG9mIHRoZSB0aGlyZAotICBhcmd1bWVudC4gVGhlIGNvbXBhcmlzb25zIGFuZCBhZGRpdGlvbiB1c2VkIGZvciB0aGUgcHJlY2VkaW5nIGZvbGxvdyB0aGUKLSAgc3RhbmRhcmQgSUVFRSA3NTQgcnVsZXM7IHJvdW5kaW5nIGlzIGRvbmUgYXMgaWYgYnkgYSBjYWxsIHRvIHRoZSA8Q09ERQotICBjbGFzcz1jZT5yb3VuZCgpPC9DT0RFPiBmdW5jdGlvbi48L1A+Ci0gIDxQIGNsYXNzPWR0UD5UaGUgZm9sbG93aW5nIGV4YW1wbGVzIGlsbHVzdHJhdGUgdW51c3VhbCBjYXNlcy48L1A+Ci0gIDxCTE9DS1FVT1RFIGNsYXNzPWR0QmxvY2s+PENPREUgY2xhc3M9Y2U+c3Vic3RyaW5nKCIxMjM0NSIsIDEuNSwgMi42KTwvQ09ERT4KLSAgcmV0dXJucyAiPENPREUgY2xhc3M9Y2U+MjM0PC9DT0RFPiI8L0JMT0NLUVVPVEU+Ci0gIDxCTE9DS1FVT1RFIGNsYXNzPWR0QmxvY2s+PENPREUgY2xhc3M9Y2U+c3Vic3RyaW5nKCIxMjM0NSIsIDAsIDMpPC9DT0RFPiByZXR1cm5zCi0gICI8Q09ERSBjbGFzcz1jZT4xMjwvQ09ERT4iPC9CTE9DS1FVT1RFPgotICA8QkxPQ0tRVU9URSBjbGFzcz1kdEJsb2NrPjxDT0RFIGNsYXNzPWNlPnN1YnN0cmluZygiMTIzNDUiLCAwIGRpdiAwLCAzKTwvQ09ERT4KLSAgcmV0dXJucyA8Q09ERSBjbGFzcz1jZT4iIjwvQ09ERT48L0JMT0NLUVVPVEU+Ci0gIDxCTE9DS1FVT1RFIGNsYXNzPWR0QmxvY2s+PENPREUgY2xhc3M9Y2U+c3Vic3RyaW5nKCIxMjM0NSIsIDEsIDAgZGl2IDApPC9DT0RFPgotICByZXR1cm5zIDxDT0RFIGNsYXNzPWNlPiIiPC9DT0RFPjwvQkxPQ0tRVU9URT4KLSAgPEJMT0NLUVVPVEUgY2xhc3M9ZHRCbG9jaz48Q09ERSBjbGFzcz1jZT5zdWJzdHJpbmcoIjEyMzQ1IiwgLTQyLCAxIGRpdiAwKTwvQ09ERT4KLSAgcmV0dXJucyA8Q09ERSBjbGFzcz1jZT4iMTIzNDUiPC9DT0RFPjwvQkxPQ0tRVU9URT4KLSAgPEJMT0NLUVVPVEUgY2xhc3M9ZHRCbG9jaz48Q09ERSBjbGFzcz1jZT5zdWJzdHJpbmcoIjEyMzQ1IiwgLTEgZGl2IDAsIDEgZGl2IDApPC9DT0RFPiByZXR1cm5zIDxDT0RFIGNsYXNzPWNlPiIiPC9DT0RFPjwvQkxPQ0tRVU9URT4KLSAgPC9kaXY+Ci0gICAgICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImFTdHJpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8Y29tbWVudD5UaGUgc3RyaW5nIHRvIGNvbXB1dGUgc3Vic3RyaW5nIG9uPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ic3RhcnRQb3NpdGlvbiIgdHlwZT0ibnVtYmVyIj4KLSAgICAgICAgICAgIDxjb21tZW50PlN0YXJ0IFBvc2l0aW9uIChmaXJzdCBwb3NpdGlvbiBpcyBpbmRleCA9PSAxKTwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9Imxlbmd0aCIgb3B0aW9uYWw9InRydWUiIHR5cGU9Im51bWJlciI+Ci0gICAgICAgICAgICA8Y29tbWVudD5MZW5ndGggb2YgY2hhcmFjdGVycyB0byBleHRyYWN0PC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotCi0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJzdHJpbmctbGVuZ3RoIiByZXR1cm5zPSJudW1iZXIiPgotICAgICAgICA8aGVscD5SZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVs8ZGl2IGNsYXNzPSJ4cGF0aEhlbHAiPgotICA8SDEgY2xhc3M9ZHRIMT5zdHJpbmctbGVuZ3RoIEZ1bmN0aW9uPC9IMT4KLSAgPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcuPC9QPjxQUkUgY2xhc3M9c3ludGF4PjxJPm51bWJlcjwvST4gc3RyaW5nLWxlbmd0aCg8ST5zdHJpbmc8L0k+KTwvUFJFPgotICA8SDQgY2xhc3M9ZHRIND5SZW1hcmtzPC9IND4KLSAgPFAgY2xhc3M9ZHRQPklmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUKLSAgc3RyaW5nLXZhbHVlIG9mIHRoZSBjb250ZXh0IG5vZGUuPC9QPgotICA8UCBjbGFzcz1kdFA+VGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYWxsIHJldHVybnMgNDo8L1A+PFBSRSBjbGFzcz1jb2RlPnN0cmluZy1sZW5ndGgoImFiY2QiKTwvUFJFPgotICA8UCBjbGFzcz1kdFA+VGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYWxsIHJldHVybnMgNTo8L1A+PFBSRSBjbGFzcz1jb2RlPnN0cmluZy1sZW5ndGgoImFiIGNkIik8L1BSRT4KLSAgPFAgY2xhc3M9ZHRQPklmIGFuIGFyZ3VtZW50IGlzIG5vdCBvZiB0eXBlIDxJPnN0cmluZyw8L0k+IGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhCi0gIHN0cmluZyBhbmQgdGhlbiBldmFsdWF0ZWQuPC9QPgotICA8L2Rpdj4KLSAgICAgICAgXV0+Ci0gICAgICAgIDwvY29tbWVudD4KLQotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0iYVN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzdHJpbmcgdG8gY29tcHV0ZSB0aGUgbGVuZ3RoIG9uPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotCi0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJub3JtYWxpemUtc3BhY2UiIHJldHVybnM9InN0cmluZyI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdGhlIGFyZ3VtZW50IHN0cmluZyB3aXRoIHRoZSB3aGl0ZSBzcGFjZSBzdHJpcHBlZC48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbPGRpdiBjbGFzcz0ieHBhdGhIZWxwIj4KLSAgPEgxIGNsYXNzPWR0SDE+bm9ybWFsaXplLXNwYWNlIEZ1bmN0aW9uPC9IMT4KLSAgPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIGFyZ3VtZW50IHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nLCB0cmFpbGluZywgYW5kIHJlcGVhdGluZyB3aGl0ZQotICBzcGFjZXMgc3RyaXBwZWQuPC9QPjxQUkUgY2xhc3M9c3ludGF4PjxJPnN0cmluZzwvST4gbm9ybWFsaXplLXNwYWNlKDxJPnN0cmluZzwvST4pPC9QUkU+Ci0gIDxINCBjbGFzcz1kdEg0PlJlbWFya3M8L0g0PgotICA8UCBjbGFzcz1kdFA+V2hpdGUgc3BhY2UgaXMgbm9ybWFsaXplZCBieSBzdHJpcHBpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UgYW5kCi0gIHJlcGxhY2luZyBzZXF1ZW5jZXMgb2Ygd2hpdGUgc3BhY2UgY2hhcmFjdGVycyB3aXRoIGEgc2luZ2xlIHNwYWNlLiBJZiB0aGUKLSAgYXJndW1lbnQgaXMgb21pdHRlZCwgdGhlIHN0cmluZy12YWx1ZSBvZiB0aGUgY29udGV4dCBub2RlIGlzIG5vcm1hbGl6ZWQgYW5kCi0gIHJldHVybmVkLjwvUD4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCByZXR1cm5zICJhYmMgZGVmIjo8L1A+PFBSRSBjbGFzcz1jb2RlPm5vcm1hbGl6ZS1zcGFjZSgiICBhYmMgICAgZGVmICAiKTwvUFJFPgotICA8UCBjbGFzcz1kdFA+SWYgYW4gYXJndW1lbnQgaXMgbm90IG9mIHRoZSB0eXBlIHN0cmluZzxJPiw8L0k+IGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhCi0gIHN0cmluZyBhbmQgdGhlbiBldmFsdWF0ZWQuIFNlZSB0aGUgZXhhbXBsZSBiZWxvdy48L1A+Ci0KLSAgPC9kaXY+Ci0gICAgICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImFTdHJpbmciIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8Y29tbWVudD5UaGUgc3RyaW5nIHRvIG5vcm1hbGl6ZTwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLQotICAgIDwvZnVuY3Rpb24+Ci0KLSAgICA8ZnVuY3Rpb24gaWQ9InRyYW5zbGF0ZSIgcmV0dXJucz0ic3RyaW5nIj4KLSAgICAgICAgPGhlbHA+UmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHdpdGggb2NjdXJyZW5jZXMKLSAgICAgICAgICAgIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcgcmVwbGFjZWQgYnkKLSAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24gaW4gdGhlIHRoaXJkCi0gICAgICAgICAgICBhcmd1bWVudCBzdHJpbmcuPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWzxkaXYgY2xhc3M9InhwYXRoSGVscCI+Ci0gIDxIMSBjbGFzcz1kdEgxPnRyYW5zbGF0ZSBGdW5jdGlvbjwvSDE+Ci0gIDxQIGNsYXNzPWR0UD5SZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcgd2l0aCBvY2N1cnJlbmNlcyBvZiBjaGFyYWN0ZXJzIGluIHRoZQotICBzZWNvbmQgYXJndW1lbnQgc3RyaW5nIHJlcGxhY2VkIGJ5IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24KLSAgaW4gdGhlIHRoaXJkIGFyZ3VtZW50IHN0cmluZy48L1A+PFBSRSBjbGFzcz1zeW50YXg+PEk+c3RyaW5nPC9JPiB0cmFuc2xhdGUoPEk+c3RyaW5nPC9JPiwgPEk+c3RyaW5nPC9JPiwgPEk+c3RyaW5nPC9JPik8L1BSRT4KLSAgPEg0IGNsYXNzPWR0SDQ+UmVtYXJrczwvSDQ+Ci0gIDxQIGNsYXNzPWR0UD5UaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWFwcGluZyBvZiBjaGFyYWN0ZXJzIG9uIHRoZSBmaXJzdCBhcmd1bWVudC4gVGhlCi0gIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIGRlc2NyaWJlcyB0aGUgc2NoZW1lIG9mIHRoZSBtYXBwaW5nLiA8L1A+Ci0gIDxQIGNsYXNzPWR0UD5UaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbGwgcmV0dXJucyAiQkFyIjo8L1A+PFBSRSBjbGFzcz1jb2RlPnRyYW5zbGF0ZSgiYmFyIiwiYWJjIiwiQUJDIik8L1BSRT4KLSAgPFAgY2xhc3M9ZHRQPklmIHRoZXJlIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgc3RyaW5nIHdpdGggbm8gY2hhcmFjdGVyIGF0IGEKLSAgY29ycmVzcG9uZGluZyBwb3NpdGlvbiBpbiB0aGUgdGhpcmQgYXJndW1lbnQgc3RyaW5nIChiZWNhdXNlIHRoZSBzZWNvbmQgYXJndW1lbnQKLSAgc3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSB0aGlyZCBhcmd1bWVudCBzdHJpbmcpLCBvY2N1cnJlbmNlcyBvZiB0aGF0IGNoYXJhY3RlcgotICBpbiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIGFyZSByZW1vdmVkLjwvUD4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCByZXR1cm5zICJBQUEiOjwvUD48UFJFIGNsYXNzPWNvZGU+dHJhbnNsYXRlKCItLWFhYS0tIiwiYWJjLSIsIkFCQyIpPC9QUkU+Ci0gIDxQIGNsYXNzPWR0UD5JZiBhIGNoYXJhY3RlciBvY2N1cnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcsIHRoZSBmaXJzdAotICBvY2N1cnJlbmNlIGRldGVybWluZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gSWYgdGhlIHRoaXJkIGFyZ3VtZW50IHN0cmluZyBpcwotICBsb25nZXIgdGhhbiB0aGUgc2Vjb25kIGFyZ3VtZW50IHN0cmluZywgZXhjZXNzIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuPC9QPgotICA8UCBjbGFzcz1kdFA+SWYgYW4gYXJndW1lbnQgaXMgbm90IG9mIHR5cGUgPEk+c3RyaW5nLDwvST4gaXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGEKLSAgc3RyaW5nIGFuZCB0aGVuIGV2YWx1YXRlZC48L1A+Ci0KLQotICA8L2Rpdj4KLSAgICAgICAgXV0+Ci0gICAgICAgIDwvY29tbWVudD4KLQotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0iYVN0cmluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzdHJpbmcgdG8gdHJhbnNsYXRlPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotCi0gICAgICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJzdHJPY2N1ciIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxjb21tZW50PlRoZSBzdHJpbmcgdG8gdHJhbnNsYXRlIGZyb208L2NvbW1lbnQ+Ci0gICAgICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICAgICAgPC9hcmc+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9InN0clJlcGwiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8Y29tbWVudD5UaGUgc3RyaW5nIHRvIHRyYW5zbGF0ZSB0bzwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLQotICAgIDwvZnVuY3Rpb24+Ci0KLQotCi0gICAgPCEtLSBCb29sZWFuIGZ1bmN0aW9ucyAtLT4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJib29sZWFuIiByZXR1cm5zPSJib29sZWFuIiB2aXN1YWw9IjEiPgotICAgICAgICA8aGVscD5Db252ZXJ0cyB0aGUgYXJndW1lbnQgdG8gYSBCb29sZWFuLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVs8ZGl2IGNsYXNzPSJ4cGF0aEhlbHAiPgotICA8SDEgY2xhc3M9ZHRIMT5ib29sZWFuIEZ1bmN0aW9uPC9IMT4KLSAgPFAgY2xhc3M9ZHRQPkNvbnZlcnRzIHRoZSBhcmd1bWVudCB0byBhIEJvb2xlYW4uPC9QPjxQUkUgY2xhc3M9c3ludGF4PjxJPmJvb2xlYW48L0k+IGJvb2xlYW4oPEk+dmFsdWU8L0k+KTwvUFJFPgotICA8SDQgY2xhc3M9ZHRIND5SZW1hcmtzPC9IND4KLSAgPFAgY2xhc3M9ZHRQPkNvbnZlcnRzIGFyZ3VtZW50IHRvIGEgQm9vbGVhbiBhcyBmb2xsb3dzLgotICA8VUwgdHlwZT1kaXNjPgotICA8TEk+QSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBudW1iZXIgaXMgdHJ1ZTxDT0RFIGNsYXNzPWNlPiA8L0NPREU+YW5kIGFueSB2YWx1ZQotICB0aGF0IGNvbnRhaW5zIGVpdGhlciB6ZXJvIG9yIGEgTmFOIHZhbHVlCi0gIGlzIGZhbHNlLgotICA8TEk+QSBub2RlLXNldCBpcyBmYWxzZSBpZiBlbXB0eSBhbmQgb25seSB0cnVlIGlmIGl0IGlzIG5vbmVtcHR5LgotICA8TEk+QSBzdHJpbmcgaXMgZmFsc2UgaWYgaXQgaXMgemVyby1sZW5ndGggYW5kIG9ubHkgdHJ1ZTxDT0RFIGNsYXNzPWNlPgotICA8L0NPREU+aWYgaXRzIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVyby4KLSAgPExJPkFuIG9iamVjdCBvZiBhIHR5cGUgb3RoZXIgdGhhbiB0aGUgZm91ciBiYXNpYyB0eXBlcyBpcyBjb252ZXJ0ZWQgdG8gYQotICBCb29sZWFuIGluIGEgd2F5IHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoYXQgdHlwZS4gPC9MST48L1VMPgotCi0gIDwvZGl2PgotICAgICAgICBdXT4KLSAgICAgICAgPC9jb21tZW50PgotICAgICAgICA8YXJnIHJlZj0ib2JqZWN0Ii8+Ci0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJub3QiIHJldHVybnM9ImJvb2xlYW4iPgotICAgICAgICA8aGVscD5SZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlOyBvdGhlcndpc2UgZmFsc2UuPC9oZWxwPgotICAgICAgICA8Y29tbWVudD4KLSAgICAgICAgICAgIDwhW0NEQVRBWzxkaXYgY2xhc3M9InhwYXRoSGVscCI+Ci0gIDxIMSBjbGFzcz1kdEgxPm5vdCBGdW5jdGlvbjwvSDE+Ci0gIDxQIGNsYXNzPWR0PlJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgZmFsc2U7IG90aGVyd2lzZSBmYWxzZS48L1A+PFBSRSBjbGFzcz1zeW50YXg+PEk+Ym9vbGVhbjwvST4gbm90KGJvb2xlYW4pPC9QUkU+Ci0KLSAgPC9kaXY+Ci0gICAgICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0gICAgICAgIDxhcmcgcmVmPSJhQm9vbGVhbiIvPgotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0idHJ1ZSIgcmV0dXJucz0iYm9vbGVhbiI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdHJ1ZS48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbPGRpdiBjbGFzcz0ieHBhdGhIZWxwIj4KLSAgPEgxIGNsYXNzPWR0SDE+dHJ1ZSBGdW5jdGlvbjwvSDE+Ci0gIDxQIGNsYXNzPWR0UD5SZXR1cm5zIHRydWUuPC9QPjxQUkUgY2xhc3M9c3ludGF4PjxJPmJvb2xlYW48L0k+IHRydWUoKTwvUFJFPgotCi0gIDwvZGl2PgotICAgICAgICBdXT4KLSAgICAgICAgPC9jb21tZW50PgotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0iZmFsc2UiIHJldHVybnM9ImJvb2xlYW4iPgotICAgICAgICA8aGVscD5SZXR1cm5zIGZhbHNlLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVs8ZGl2IGNsYXNzPSJ4cGF0aEhlbHAiPgotICA8SDEgY2xhc3M9ZHRIMT5mYWxzZSBGdW5jdGlvbjwvSDE+Ci0gIDxQIGNsYXNzPWR0UD5SZXR1cm5zIGZhbHNlLjwvUD48UFJFIGNsYXNzPXN5bnRheD48ST5ib29sZWFuPC9JPiBmYWxzZSgpPC9QUkU+Ci0KLSAgPC9kaXY+Ci0gICAgICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0gICAgPC9mdW5jdGlvbj4KLQotCi0gICAgPGZ1bmN0aW9uIGlkPSJsYW5nIiByZXR1cm5zPSJib29sZWFuIj4KLSAgICAgICAgPGhlbHA+UmV0dXJucyB0cnVlIGlmIHRoZSB4bWw6bGFuZyBhdHRyaWJ1dGUgb2YgdGhlCi0gICAgICAgICAgICBjb250ZXh0IG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIGFyZ3VtZW50IHN0cmluZy48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbPGRpdiBjbGFzcz0ieHBhdGhIZWxwIj4KLSAgPEgxIGNsYXNzPWR0SDE+bGFuZyBGdW5jdGlvbjwvSDE+Ci0gIDxQIGNsYXNzPWR0UD5SZXR1cm5zIHRydWUgaWYgdGhlIDxDT0RFIGNsYXNzPWNlPnhtbDpsYW5nPC9DT0RFPiBhdHRyaWJ1dGUgb2YgdGhlIGNvbnRleHQKLSAgbm9kZSBpcyB0aGUgc2FtZSBhcyBhIHN1Ymxhbmd1YWdlIG9mIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50Ci0gIHN0cmluZy48L1A+Ci0gIDxINCBjbGFzcz1kdEg0PlN5bnRheDwvSDQ+PFBSRSBjbGFzcz1zeW50YXg+PEk+Ym9vbGVhbjwvST4gbGFuZyg8ST5zdHJpbmc8L0k+KTwvUFJFPgotICA8SDQgY2xhc3M9ZHRIND5SZW1hcmtzPC9IND4KLSAgPFAgY2xhc3M9ZHRQPlRoZSBsYW5ndWFnZSBvZiB0aGUgY29udGV4dCBub2RlIGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSA8Q09ERQotICBjbGFzcz1jZT54bWw6bGFuZzwvQ09ERT4gYXR0cmlidXRlIG9uIHRoZSBjb250ZXh0IG5vZGUsIG9yIGlmIHRoZSBjb250ZXh0IG5vZGUKLSAgaGFzIG5vIDxDT0RFIGNsYXNzPWNlPnhtbDpsYW5nPC9DT0RFPiBhdHRyaWJ1dGUsIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgPENPREUKLSAgY2xhc3M9Y2U+eG1sOmxhbmc8L0NPREU+IGF0dHJpYnV0ZSBvbiB0aGUgbmVhcmVzdCBhbmNlc3RvciBvZiB0aGUgY29udGV4dCBub2RlCi0gIHRoYXQgaGFzIGFuIDxDT0RFIGNsYXNzPWNlPnhtbDpsYW5nPC9DT0RFPiBhdHRyaWJ1dGUuIElmIHRoZXJlIGlzIG5vIHN1Y2gKLSAgYXR0cmlidXRlLCA8Q09ERSBjbGFzcz1jZT5sYW5nKCk8L0NPREU+IHJldHVybnMgZmFsc2UuIElmIHRoZXJlIGlzIHN1Y2ggYW4KLSAgYXR0cmlidXRlLCA8Q09ERSBjbGFzcz1jZT5sYW5nKCk8L0NPREU+IHJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIHZhbHVlIGlzCi0gIGVxdWFsIHRvIHRoZSBhcmd1bWVudCAoaWdub3JpbmcgY2FzZSkgb3IgaWYgdGhlcmUgaXMgYSBzdWZmaXggc3RhcnRpbmcgd2l0aAotICAiPENPREUgY2xhc3M9Y2U+LTwvQ09ERT4iLCBzdWNoIHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyBlcXVhbCB0byB0aGUKLSAgYXJndW1lbnQsIGlnbm9yaW5nIHRoZSBzdWZmaXggb2YgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgaWdub3JpbmcgY2FzZS48L1A+Ci0gIDxQIGNsYXNzPWR0UD5HaXZlbiB0aGUgZm9sbG93aW5nIFhNTCBlbGVtZW50czo8L1A+PFBSRSBjbGFzcz1jb2RlPiZsdDtwYXJhIHhtbDpsYW5nPSJlbiIvJmd0OwotICAmbHQ7ZGl2IHhtbDpsYW5nPSJlbiImZ3Q7Jmx0O3BhcmEvJmd0OyZsdDsvZGl2Jmd0OwotICAmbHQ7cGFyYSB4bWw6bGFuZz0iRU4iLyZndDsKLSAgJmx0O3BhcmEgeG1sOmxhbmc9ImVuLXVzIi8mZ3Q7PC9QUkU+Ci0gIDxQIGNsYXNzPWR0UD5UaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbGwgcmV0dXJucyB0cnVlIGZvciBhbGw6PC9QPjxQUkUgY2xhc3M9Y29kZT5sYW5nKCJlbiIpPC9QUkU+Ci0KLSAgPC9kaXY+Ci0gICAgICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyByZWY9ImFTdHJpbmciLz4KLSAgICA8L2Z1bmN0aW9uPgotCi0KLSAgICA8IS0tIE51bWJlciBmdW5jdGlvbnMgLS0+Ci0KLSAgICA8ZnVuY3Rpb24gaWQ9Im51bWJlciIgcmV0dXJucz0ibnVtYmVyIiB2aXN1YWw9IjEiPgotICAgICAgICA8aGVscD5FdmFsdWF0ZXMgdGhlIGFyZ3VtZW50IGV4cHJlc3Npb25zIHRvIG9idGFpbiBhIG51bWVyaWMgcmVzdWx0LjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVs8ZGl2IGNsYXNzPSJ4cGF0aEhlbHAiPgotICA8SDEgY2xhc3M9ZHRIMT5udW1iZXIgRnVuY3Rpb248L0gxPgotICA8UCBjbGFzcz1kdFA+Q29udmVydHMgdGhlIGFyZ3VtZW50IHRvIGEgbnVtYmVyLjwvUD48UFJFIGNsYXNzPXN5bnRheD48ST5udW1iZXI8L0k+IG51bWJlcig8ST5vYmplY3Q8L0k+Pyk8L1BSRT4KLSAgPEg0IGNsYXNzPWR0SDQ+UmVtYXJrczwvSDQ+Ci0gIDxQIGNsYXNzPWR0UD5Db252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBudW1iZXIgYXMgZm9sbG93cy4KLSAgPFVMIHR5cGU9ZGlzYz4KLSAgPExJPkEgc3RyaW5nIHRoYXQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgd2hpdGUgc3BhY2UgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgbWludXMKLSAgc2lnbiBmb2xsb3dlZCBieSBhIG51bWJlciBmb2xsb3dlZCBieSB3aGl0ZSBzcGFjZSBpcyBjb252ZXJ0ZWQgdG8gdGhlIElFRUUgNzU0Ci0gIG51bWJlciB0aGF0IGlzIG5lYXJlc3QgKGFjY29yZGluZyB0byB0aGUgSUVFRSA3NTQgcm91bmQtdG8tbmVhcmVzdCBydWxlKSB0byB0aGUKLSAgbWF0aGVtYXRpY2FsIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBzdHJpbmc7IGFueSBvdGhlciBzdHJpbmcgaXMgY29udmVydGVkIHRvCi0gIE5hTi4KLSAgPExJPkJvb2xlYW4gdHJ1ZSBpcyBjb252ZXJ0ZWQgdG8gMTsgQm9vbGVhbiBmYWxzZSBpcyBjb252ZXJ0ZWQgdG8gMC4KLSAgPExJPkEgbm9kZS1zZXQgaXMgZmlyc3QgY29udmVydGVkIHRvIGEgc3RyaW5nIGFuZCB0aGVuIGNvbnZlcnRlZCBpbiB0aGUgc2FtZSB3YXkKLSAgYXMgYSBzdHJpbmcgYXJndW1lbnQuCi0gIDxMST5BbiBvYmplY3Qgb2YgYSB0eXBlIG90aGVyIHRoYW4gdGhlIGZvdXIgYmFzaWMgdHlwZXMgKG5vZGUtc2V0LCBCb29sZWFuLAotICBudW1iZXIsIG9yIHN0cmluZykgaXMgY29udmVydGVkIHRvIGEgbnVtYmVyIGluIGEgd2F5IHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoYXQKLSAgdHlwZS4gPC9MST48L1VMPgotICA8UCBjbGFzcz1kdFA+SWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgbm9kZS1zZXQgd2l0aCB0aGUgY29udGV4dCBub2RlCi0gIGFzIGl0cyBvbmx5IG1lbWJlci48L1A+Ci0gIDxCTE9DS1FVT1RFIGNsYXNzPWR0QmxvY2s+PEIgY2xhc3M9bGU+Tm90ZSZuYnNwOyZuYnNwOyZuYnNwOzwvQj5UaGUgPENPREUKLSAgY2xhc3M9Y2U+bnVtYmVyKCk8L0NPREU+IGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgY29udmVyc2lvbiBvZiBudW1lcmljCi0gIGRhdGEgb2NjdXJyaW5nIGluIGFuIGVsZW1lbnQgaW4gYW4gWE1MIGRvY3VtZW50IHVubGVzcyB0aGUgZWxlbWVudCBpcyBvZiBhIHR5cGUKLSAgdGhhdCByZXByZXNlbnRzIG51bWVyaWMgZGF0YSBpbiBhIGxhbmd1YWdlLW5ldXRyYWwgZm9ybWF0ICh0aGF0IHdvdWxkIHR5cGljYWxseQotICBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgbGFuZ3VhZ2Utc3BlY2lmaWMgZm9ybWF0IGZvciBwcmVzZW50YXRpb24gdG8gYSB1c2VyKS4gSW4KLSAgYWRkaXRpb24sIHRoZSA8Q09ERSBjbGFzcz1jZT5udW1iZXIoKTwvQ09ERT4gZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdW5sZXNzIHRoZQotICBsYW5ndWFnZS1uZXV0cmFsIGZvcm1hdCB1c2VkIGJ5IHRoZSBlbGVtZW50IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgWE1MIFBhdGgKLSAgTGFuZ3VhZ2UgKFhQYXRoKSBzeW50YXggZm9yIGEgbnVtYmVyLjwvQkxPQ0tRVU9URT4KLQotICA8L2Rpdj4KLSAgICAgICAgXV0+Ci0gICAgICAgIDwvY29tbWVudD4KLQotICAgICAgICA8YXJnIGRlZmF1bHQ9IiIgbmFtZT0ib2JqZWN0IiBvcHRpb25hbD0idHJ1ZSIgdHlwZT0ib2JqZWN0Ij4KLSAgICAgICAgICAgIDxjb21tZW50PkFueSBXM0MgWE1MIERPTSBvYmplY3Qgb3Igbm9kZS1zZXQuPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotICAgIDwvZnVuY3Rpb24+Ci0KLSAgICA8ZnVuY3Rpb24gaWQ9InN1bSIgcmV0dXJucz0ibnVtYmVyIj4KLSAgICAgICAgPGhlbHA+UmV0dXJucyB0aGUgc3VtIG9mIGFsbCBub2RlcyBpbiB0aGUgbm9kZS1zZXQuIEVhY2ggbm9kZQotICAgICAgICAgICAgaXMgZmlyc3QgY29udmVydGVkIHRvIGEgbnVtYmVyIHZhbHVlIGJlZm9yZSBzdW1taW5nLjwvaGVscD4KLSAgICAgICAgPGNvbW1lbnQ+Ci0gICAgICAgICAgICA8IVtDREFUQVs8SDEgY2xhc3M9ZHRIMT5zdW0gRnVuY3Rpb248L0gxPgotPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIHN1bSBvZiBhbGwgbm9kZXMgaW4gdGhlIG5vZGUtc2V0LiBFYWNoIG5vZGUgaXMgZmlyc3QgY29udmVydGVkIHRvCi1hIG51bWJlciB2YWx1ZSBiZWZvcmUgc3VtbWluZy48L1A+PFBSRSBjbGFzcz1zeW50YXg+PEk+bnVtYmVyPC9JPiBzdW0oPEk+bm9kZS1zZXQ8L0k+KTwvUFJFPgotICAgICAgICAgICAgXV0+Ci0gICAgICAgIDwvY29tbWVudD4KLQotICAgICAgICA8YXJnIHJlZj0ibm9kZVNldCIvPiZndDsKLQotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0iZmxvb3IiIHJldHVybnM9Im51bWJlciI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGlzIG5vdCBncmVhdGVyCi0gICAgICAgICAgICB0aGFuIHRoZSBhcmd1bWVudC48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbPEgxIGNsYXNzPWR0SDE+Zmxvb3IgRnVuY3Rpb248L0gxPgotPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGlzIG5vdAotZ3JlYXRlciB0aGFuIHRoZSBhcmd1bWVudC48L1A+Ci08UFJFIGNsYXNzPXN5bnRheD48ST5udW1iZXI8L0k+IGZsb29yKDxJPm51bWJlcjwvST4pPC9QUkU+Ci0gIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImFOdW1iZXIiIHR5cGU9Im51bWJlciI+Ci0gICAgICAgICAgICA8Y29tbWVudD5OdW1iZXIgdG8gY29tcHV0ZSB0aGUgZmxvb3Igb2Y8L2NvbW1lbnQ+Ci0gICAgICAgICAgICA8YXNzaXN0YW50IHJlZj0ieHBhdGhQaWNrZXIiLz4KLSAgICAgICAgPC9hcmc+Ci0KLSAgICA8L2Z1bmN0aW9uPgotCi0KLSAgICA8ZnVuY3Rpb24gaWQ9ImNlaWxpbmciIHJldHVybnM9Im51bWJlciI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgdGhhdCBpcyBub3QgbGVzcyB0aGFuIHRoZSBhcmd1bWVudC48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbCi0gICAgPEgxIGNsYXNzPWR0SDE+Y2VpbGluZyBGdW5jdGlvbjwvSDE+Ci0gICAgPFAgY2xhc3M9ZHRQPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgdGhhdCBpcyBub3QKLSAgICBsZXNzIHRoYW4gdGhlIGFyZ3VtZW50LjwvUD4KLSAgICA8UFJFIGNsYXNzPXN5bnRheD48ST5udW1iZXI8L0k+IGNlaWxpbmcoPEk+bnVtYmVyPC9JPik8L1BSRT4KLQotICAgIF1dPgotICAgICAgICA8L2NvbW1lbnQ+Ci0KLSAgICAgICAgPGFyZyBkZWZhdWx0PSIiIG5hbWU9ImFOdW1iZXIiIHR5cGU9Im51bWJlciI+Ci0gICAgICAgICAgICA8Y29tbWVudD5OdW1iZXIgdG8gY29tcHV0ZSB0aGUgY2VpbGluZyBvZjwvY29tbWVudD4KLSAgICAgICAgICAgIDxhc3Npc3RhbnQgcmVmPSJ4cGF0aFBpY2tlciIvPgotICAgICAgICA8L2FyZz4KLQotICAgIDwvZnVuY3Rpb24+Ci0KLQotICAgIDxmdW5jdGlvbiBpZD0icm91bmQiIHJldHVybnM9Im51bWJlciI+Ci0gICAgICAgIDxoZWxwPlJldHVybnMgYW4gaW50ZWdlciBjbG9zZXN0IGluIHZhbHVlIHRvIHRoZSBhcmd1bWVudC48L2hlbHA+Ci0gICAgICAgIDxjb21tZW50PgotICAgICAgICAgICAgPCFbQ0RBVEFbCi0gICAgPEgxIGNsYXNzPWR0SDE+cm91bmQgRnVuY3Rpb248L0gxPgotICAgIDxQIGNsYXNzPWR0UD5SZXR1cm5zIGFuIGludGVnZXIgY2xvc2VzdCBpbiB2YWx1ZSB0byB0aGUgYXJndW1lbnQuPC9QPjxQUkUgY2xhc3M9c3ludGF4PjxJPm51bWJlcjwvST4gcm91bmQoPEk+bnVtYmVyPC9JPik8L1BSRT4KLSAgICA8SDQgY2xhc3M9ZHRIND5SZW1hcmtzPC9IND4KLSAgICA8UCBjbGFzcz1kdFA+SWYgdGhlcmUgYXJlIHR3byBzdWNoIG51bWJlcnMsIHRoZSBvbmUgdGhhdCBpcyBjbG9zZXN0IHRvIHBvc2l0aXZlIGluZmluaXR5Ci0gICAgaXMgcmV0dXJuZWQuPC9QPgotICAgIDxQIGNsYXNzPWR0UD5JZiB0aGUgYXJndW1lbnQgaXMgTmFOLCBOYU4gaXMgcmV0dXJuZWQuPC9QPgotICAgIDxQIGNsYXNzPWR0UD5JZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLjwvUD4KLSAgICA8UCBjbGFzcz1kdFA+SWYgdGhlIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIGluZmluaXR5LCBuZWdhdGl2ZSBpbmZpbml0eSBpcyByZXR1cm5lZC48L1A+Ci0gICAgPFAgY2xhc3M9ZHRQPklmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSB6ZXJvLCBwb3NpdGl2ZSB6ZXJvIGlzIHJldHVybmVkLjwvUD4KLSAgICA8UCBjbGFzcz1kdFA+SWYgdGhlIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIHplcm8sIG5lZ2F0aXZlIHplcm8gaXMgcmV0dXJuZWQuPC9QPgotICAgIDxQIGNsYXNzPWR0UD5JZiB0aGUgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHplcm8gYnV0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAtMC41LCBuZWdhdGl2ZQotICAgIHplcm8gaXMgcmV0dXJuZWQuPC9QPgotICAgIDxQIGNsYXNzPWR0UD5Gb3IgdGhlIGxhc3QgdHdvIGNhc2VzLCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIDxDT0RFCi0gICAgY2xhc3M9Y2U+cm91bmQoKTwvQ09ERT4gZnVuY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSByZXN1bHQgb2YgYWRkaW5nIDAuNSBhbmQKLSAgICB0aGVuIGNhbGxpbmcgdGhlIDxDT0RFIGNsYXNzPWNlPmZsb29yKCk8L0NPREU+IGZ1bmN0aW9uIGJlY2F1c2UgcG9zaXRpdmUgemVybwotICAgIHdpbGwgYmUgcmV0dXJuZWQgaW4gc3VjaCBjYXNlcy48L1A+Ci0KLSAgICBdXT4KLSAgICAgICAgPC9jb21tZW50PgotCi0gICAgICAgIDxhcmcgZGVmYXVsdD0iIiBuYW1lPSJhTnVtYmVyIiB0eXBlPSJudW1iZXIiPgotICAgICAgICAgICAgPGNvbW1lbnQ+TnVtYmVyIHRvIHJvdW5kIHVwPC9jb21tZW50PgotICAgICAgICAgICAgPGFzc2lzdGFudCByZWY9InhwYXRoUGlja2VyIi8+Ci0gICAgICAgIDwvYXJnPgotCi0gICAgPC9mdW5jdGlvbj4KLQotCi08L2JwZWwteHBhdGgtZnVuY3Rpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS90ZW1wbGF0ZXMveHBhdGhfYXhpc190ZW1wbGF0ZXMueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy94cGF0aF9heGlzX3RlbXBsYXRlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNTQ1YTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy94cGF0aF9heGlzX3RlbXBsYXRlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRlbXBsYXRlcz4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5heGlzLmNoaWxkIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9heGlzIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlRoZSBjaGlsZCBheGlzIGNvbnRhaW5zIHRoZSBjaGlsZHJlbiBvZiB0aGUgY29udGV4dCBub2RlIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJjaGlsZDo6Ij5jaGlsZDo6JHtjdXJzb3J9PC90ZW1wbGF0ZT4KLSAgIAk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5heGlzLmRlc2NlbmRhbnQiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX2F4aXMiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIGRlc2NlbmRhbnQgYXhpcyBjb250YWlucyB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZTsgYSBkZXNjZW5kYW50IGlzIGEgY2hpbGQgb3IgYSBjaGlsZCBvZiBhIGNoaWxkIGFuZCBzbyBvbjsgdGh1cyB0aGUgZGVzY2VuZGFudCBheGlzIG5ldmVyIGNvbnRhaW5zIGF0dHJpYnV0ZSBvciBuYW1lc3BhY2Ugbm9kZXMiCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImRlc2NlbmRhbnQ6OiI+ZGVzY2VuZGFudDo6JHtjdXJzb3J9PC90ZW1wbGF0ZT4JICAgICAgICAgIAotICAgCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLmF4aXMucGFyZW50IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9heGlzIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlRoZSBwYXJlbnQgYXhpcyBjb250YWlucyB0aGUgcGFyZW50IG9mIHRoZSBjb250ZXh0IG5vZGUsIGlmIHRoZXJlIGlzIG9uZS4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InBhcmVudDo6Ij5wYXJlbnQ6OiR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5wYXJlbnRzaG9ydGN1dCIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSIuLiBpcyBhIHNob3J0Y3V0IGZvciB0aGUgcGFyZW50OjogYXhpcy4gVGhlIHBhcmVudCBheGlzIGNvbnRhaW5zIHRoZSBwYXJlbnQgb2YgdGhlIGNvbnRleHQgbm9kZSwgaWYgdGhlcmUgaXMgb25lLiIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iLi4iPi4uLyR7Y3Vyc29yfTwvdGVtcGxhdGU+CSAgICAgICAgICAKLQkgICAgICAgICAgCi0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5hbmNlc3RvciIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgYW5jZXN0b3IgYXhpcyBjb250YWlucyB0aGUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGU7IHRoZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZSBjb25zaXN0IG9mIHRoZSBwYXJlbnQgb2YgY29udGV4dCBub2RlIGFuZCB0aGUgcGFyZW50J3MgcGFyZW50IGFuZCBzbyBvbjsgdGh1cywgdGhlIGFuY2VzdG9yIGF4aXMgd2lsbCBhbHdheXMgaW5jbHVkZSB0aGUgcm9vdCBub2RlLCB1bmxlc3MgdGhlIGNvbnRleHQgbm9kZSBpcyB0aGUgcm9vdCBub2RlLiIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iYW5jZXN0b3I6OiI+YW5jZXN0b3I6OiR7Y3Vyc29yfTwvdGVtcGxhdGU+CSAgICAgICAgICAKLSAgIAk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5heGlzLmZvbGxvd2luZ3NpYmxpbmciCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX2F4aXMiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIGZvbGxvd2luZy1zaWJsaW5nIGF4aXMgY29udGFpbnMgYWxsIHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2YgdGhlIGNvbnRleHQgbm9kZTsgaWYgdGhlIGNvbnRleHQgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgbm9kZSBvciBuYW1lc3BhY2Ugbm9kZSwgdGhlIGZvbGxvd2luZy1zaWJsaW5nIGF4aXMgaXMgZW1wdHkiCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImZvbGxvd2luZy1zaWJsaW5nOjoiPmZvbGxvd2luZy1zaWJsaW5nOjoke2N1cnNvcn08L3RlbXBsYXRlPgkgICAgICAgICAgCi0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5wcmVjZWRpbmctc2libGluZyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgcHJlY2VkaW5nLXNpYmxpbmcgYXhpcyBjb250YWlucyBhbGwgdGhlIHByZWNlZGluZyBzaWJsaW5ncyBvZiB0aGUgY29udGV4dCBub2RlOyBpZiB0aGUgY29udGV4dCBub2RlIGlzIGFuIGF0dHJpYnV0ZSBub2RlIG9yIG5hbWVzcGFjZSBub2RlLCB0aGUgcHJlY2VkaW5nLXNpYmxpbmcgYXhpcyBpcyBlbXB0eS4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InByZWNlZGluZy1zaWJsaW5nOjoiPnByZWNlZGluZy1zaWJsaW5nOjoke2N1cnNvcn08L3RlbXBsYXRlPgkgICAgICAgICAgCi0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5mb2xsb3dpbmciCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX2F4aXMiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIGZvbGxvd2luZyBheGlzIGNvbnRhaW5zIGFsbCBub2RlcyBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcyB0aGUgY29udGV4dCBub2RlIHRoYXQgYXJlIGFmdGVyIHRoZSBjb250ZXh0IG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIsIGV4Y2x1ZGluZyBhbnkgZGVzY2VuZGFudHMgYW5kIGV4Y2x1ZGluZyBhdHRyaWJ1dGUgbm9kZXMgYW5kIG5hbWVzcGFjZSBub2Rlcy4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImZvbGxvd2luZzo6Ij5mb2xsb3dpbmc6OiR7Y3Vyc29yfTwvdGVtcGxhdGU+CSAgICAgICAgICAKLSAgIAk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5heGlzLnByZWNlZGluZyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgcHJlY2VkaW5nIGF4aXMgY29udGFpbnMgYWxsIG5vZGVzIGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoZSBjb250ZXh0IG5vZGUgdGhhdCBhcmUgYmVmb3JlIHRoZSBjb250ZXh0IG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIsIGV4Y2x1ZGluZyBhbnkgYW5jZXN0b3JzIGFuZCBleGNsdWRpbmcgYXR0cmlidXRlIG5vZGVzIGFuZCBuYW1lc3BhY2Ugbm9kZXMuIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJwcmVjZWRpbmc6OiI+cHJlY2VkaW5nOjoke2N1cnNvcn08L3RlbXBsYXRlPgkgICAgICAgICAgCi0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5hdHRyaWJ1dGUiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX2F4aXMiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIGF0dHJpYnV0ZSBheGlzIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjb250ZXh0IG5vZGU7IHRoZSBheGlzIHdpbGwgYmUgZW1wdHkgdW5sZXNzIHRoZSBjb250ZXh0IG5vZGUgaXMgYW4gZWxlbWVudC4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImF0dHJpYnV0ZTo6Ij5hdHRyaWJ1dGU6OiR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5hdHRyaWJ1dGVzaG9ydGN1dCIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJAIGlzIGEgc2hvcnQgY3V0IGZvciB0aGUgYXR0cmlidXRlOjogYXhpcy4gVGhlIGF0dHJpYnV0ZSBheGlzIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjb250ZXh0IG5vZGU7IHRoZSBheGlzIHdpbGwgYmUgZW1wdHkgdW5sZXNzIHRoZSBjb250ZXh0IG5vZGUgaXMgYW4gZWxlbWVudC4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9IkAiPkAke2N1cnNvcn08L3RlbXBsYXRlPgkgICAgICAgICAgCi0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5uYW1lc3BhY2UiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX2F4aXMiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIG5hbWVzcGFjZSBheGlzIGNvbnRhaW5zIHRoZSBuYW1lc3BhY2Ugbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZTsgdGhlIGF4aXMgd2lsbCBiZSBlbXB0eSB1bmxlc3MgdGhlIGNvbnRleHQgbm9kZSBpcyBhbiBlbGVtZW50LiIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0ibmFtZXNwYWNlOjoiPmF0dHJpYnV0ZTo6JHtjdXJzb3J9PC90ZW1wbGF0ZT4JICAgICAgICAgIAotICAgCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLmF4aXMuc2VsZiIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgc2VsZiBheGlzIGNvbnRhaW5zIGp1c3QgdGhlIGNvbnRleHQgbm9kZSBpdHNlbGYuIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJzZWxmOjoiPnNlbGY6OiR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5zZWxmc2hvcnRjdXQiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX2F4aXMiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iLiBpcyBhIHNob3J0IGN1dCBmb3IgdGhlIHNlbGY6OiBheGlzLiBUaGUgc2VsZiBheGlzIGNvbnRhaW5zIGp1c3QgdGhlIGNvbnRleHQgbm9kZSBpdHNlbGYuIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSIuIj4uJHtjdXJzb3J9PC90ZW1wbGF0ZT4JICAgICAgICAgIAotICAgCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLmF4aXMuZGVzY2VuZGFudG9yc2VsZiIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgZGVzY2VuZGFudC1vci1zZWxmIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb250ZXh0IG5vZGUuIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJkZXNjZW5kYW50LW9yLXNlbGY6OiI+ZGVzY2VuZGFudC1vci1zZWxmOjoke2N1cnNvcn08L3RlbXBsYXRlPgkgICAgICAgICAgCi0gICAJPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguYXhpcy5hbmNlc3Rvcm9yc2VsZiIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfYXhpcyIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJ0aGUgYW5jZXN0b3Itb3Itc2VsZiBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZTsgdGh1cywgdGhlIGFuY2VzdG9yIGF4aXMgd2lsbCBhbHdheXMgaW5jbHVkZSB0aGUgcm9vdCBub2RlLiIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iYW5jZXN0b3Itb3Itc2VsZjo6Ij5hbmNlc3Rvci1vci1zZWxmOjoke2N1cnNvcn08L3RlbXBsYXRlPgkgICAgICAgICAgCi0JICAgICAgICAgIAkgICAgICAgICAgCi08L3RlbXBsYXRlcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvdGVtcGxhdGVzL3hwYXRoX29wZXJhdG9yX3RlbXBsYXRlcy54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvdGVtcGxhdGVzL3hwYXRoX29wZXJhdG9yX3RlbXBsYXRlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjY2E5YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy94cGF0aF9vcGVyYXRvcl90ZW1wbGF0ZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0ZW1wbGF0ZXM+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3IuYWRkaXRpb24iCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IkFkZGl0aW9uIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSIrIj4rICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3Iuc3VidHJhY3Rpb24iCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlN1YnRyYWN0aW9uIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSItIj4tICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3IubXVsdGlwbGljYXRpb24iCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249Ik11bHRpcGxpY2F0aW9uIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSIqIj4qICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3IuZGl2aXNpb24iCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IkRpdmlzaW9uIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJkaXYiPmRpdiAke2N1cnNvcn08L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLm9wZXJhdG9yLmVxdWFsIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9vcGVyYXRvciIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJFcXVhbCIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iPSI+PSAke2N1cnNvcn08L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLm9wZXJhdG9yLm5vdGVxdWFsIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9vcGVyYXRvciIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJOb3QgRXF1YWwiCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9IiE9Ij4hPSAke2N1cnNvcn08L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLm9wZXJhdG9yLmxlc3N0aGFuIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9vcGVyYXRvciIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJMZXNzIFRoYW4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9IiZsdDsiPiZhbXA7bHQ7ICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3IubGVzc3RoYW5vcmVxdWFsIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9vcGVyYXRvciIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJMZXNzIFRoYW4gb3IgZXF1YWwgdG8iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9IiZsdDsiPiZhbXA7bHQ7PSAke2N1cnNvcn08L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLm9wZXJhdG9yLmdyZWF0ZXJ0aGFuIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4cGF0aF9vcGVyYXRvciIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJHcmVhdGVyIHRoYW4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9Ij4iPj4gJHtjdXJzb3J9PC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5vcGVyYXRvci5ncmVhdGVydGhhbm9yZXF1YWwiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IkdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iPj0iPj49ICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3Iub3IiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249Im9yIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJvciI+b3IgJHtjdXJzb3J9PC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5vcGVyYXRvci5hbmQiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249ImFuZCIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iYW5kIj5hbmQgJHtjdXJzb3J9PC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5zdHJpbmciCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhwYXRoX29wZXJhdG9yIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249Ik1vZHVsdXMgKGRpdmlzaW9uIHJlbWFpbmRlcikiCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9Im1vZCI+bW9kICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgub3BlcmF0b3Iub3Jub2RlcyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHBhdGhfb3BlcmF0b3IiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcHV0ZXMgdHdvIG5vZGUgc2V0cy4gaS5lLiAvL2Jvb2sgfCAvL2NkIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJ8Ij58ICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JICAgICAgICAgIAotPC90ZW1wbGF0ZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy94cGF0aF90ZW1wbGF0ZXMueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3RlbXBsYXRlcy94cGF0aF90ZW1wbGF0ZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDUyMjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS90ZW1wbGF0ZXMveHBhdGhfdGVtcGxhdGVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLSAgRGVzY3JpcHRpb25zIGZvciB0aGUgWFBhdGggZnVuY3Rpb25zIGNvbWUgZnJvbSB0aGUgWFBhdGggMS4wIHNwZWNpZmljYXRpb24KLSAgbWFpbnRhaW5lZCBieSB0aGUgV29yZCBXaWRlIFdlYiBDb25zb3J0aXVtLiAgVGhlIHNwZWNpZmljYXRpb24gY2FuIGJlIGZvdW5kCi0gIGF0OgotICAKLSAgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgKLSAtLT4KLTx0ZW1wbGF0ZXM+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgubGFzdCIKLQkJYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkJZGVzY3JpcHRpb249IlRoZSBsYXN0IGZ1bmN0aW9uIHJldHVybnMgYSBudW1iZXIgZXF1YWwgdG8gdGhlIGNvbnRleHQgc2l6ZSBmcm9tIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gY29udGV4dC4iCi0JCWVuYWJsZWQ9InRydWUiIG5hbWU9Imxhc3QoKSI+bGFzdCgpPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5wb3N0aW9uIgotCQlhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCQlkZXNjcmlwdGlvbj0iVGhlIHBvc2l0aW9uIGZ1bmN0aW9uIHJldHVybnMgYSBudW1iZXIgZXF1YWwgdG8gdGhlIGNvbnRleHQgcG9zaXRpb24gZnJvbSB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGNvbnRleHQuIgotCQllbmFibGVkPSJ0cnVlIiBuYW1lPSJwb3NpdGlvbigpIj5wb3NpdGlvbigpPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5jb3VudCIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieG1sX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IiIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iY291bnQobm9kZS1zZXQpIj5jb3VudCgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5pZCIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlRoZSBpZCBmdW5jdGlvbiBzZWxlY3RzIGVsZW1lbnRzIGJ5IHRoZWlyIHVuaXF1ZSBJRC4gV2hlbiB0aGUgYXJndW1lbnQgdG8gaWQgaXMgb2YgdHlwZSBub2RlLXNldCwgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSB1bmlvbiBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGlkIHRvIHRoZSBzdHJpbmctdmFsdWUgb2YgZWFjaCBvZiB0aGUgbm9kZXMgaW4gdGhlIGFyZ3VtZW50IG5vZGUtc2V0LiBXaGVuIHRoZSBhcmd1bWVudCB0byBpZCBpcyBvZiBhbnkgb3RoZXIgdHlwZSwgdGhlIGFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZyBhcyBpZiBieSBhIGNhbGwgdG8gdGhlIHN0cmluZyBmdW5jdGlvbjsgdGhlIHN0cmluZyBpcyBzcGxpdCBpbnRvIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0b2tlbnMgKHdoaXRlc3BhY2UgaXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgbWF0Y2hpbmcgdGhlIHByb2R1Y3Rpb24gUyk7IHRoZSByZXN1bHQgaXMgYSBub2RlLXNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcyB0aGUgY29udGV4dCBub2RlIHRoYXQgaGF2ZSBhIHVuaXF1ZSBJRCBlcXVhbCB0byBhbnkgb2YgdGhlIHRva2VucyBpbiB0aGUgbGlzdC4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImlkKG5vZGUtc2V0KSI+aWQoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgubG9jYWxfbmFtZSIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlRoZSBsb2NhbC1uYW1lIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvY2FsIHBhcnQgb2YgdGhlIGV4cGFuZGVkLW5hbWUgb2YgdGhlIG5vZGUgaW4gdGhlIGFyZ3VtZW50IG5vZGUtc2V0IHRoYXQgaXMgZmlyc3QgaW4gZG9jdW1lbnQgb3JkZXIuIElmIHRoZSBhcmd1bWVudCBub2RlLXNldCBpcyBlbXB0eSBvciB0aGUgZmlyc3Qgbm9kZSBoYXMgbm8gZXhwYW5kZWQtbmFtZSwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBub2RlLXNldCB3aXRoIHRoZSBjb250ZXh0IG5vZGUgYXMgaXRzIG9ubHkgbWVtYmVyLiIKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0ibG9jYWwtbmFtZShub2RlLXNldCkiPmxvY2FsLW5hbWUoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgubmFtZXNwYWNlX3VyaSIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlRoZSBuYW1lc3BhY2UtdXJpIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGV4cGFuZGVkLW5hbWUgb2YgdGhlIG5vZGUgaW4gdGhlIGFyZ3VtZW50IG5vZGUtc2V0IHRoYXQgaXMgZmlyc3QgaW4gZG9jdW1lbnQgb3JkZXIuIElmIHRoZSBhcmd1bWVudCBub2RlLXNldCBpcyBlbXB0eSwgdGhlIGZpcnN0IG5vZGUgaGFzIG5vIGV4cGFuZGVkLW5hbWUsIG9yIHRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBleHBhbmRlZC1uYW1lIGlzIG51bGwsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgbm9kZS1zZXQgd2l0aCB0aGUgY29udGV4dCBub2RlIGFzIGl0cyBvbmx5IG1lbWJlci4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9Im5hbWVzcGFjZV91cmkobm9kZS1zZXQpIj5uYW1lc3BhY2VfdXJpKCR7Y3Vyc29yfSk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLm5hbWUiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgbmFtZSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBRTmFtZSByZXByZXNlbnRpbmcgdGhlIGV4cGFuZGVkLW5hbWUgb2YgdGhlIG5vZGUgaW4gdGhlIGFyZ3VtZW50IG5vZGUtc2V0IHRoYXQgaXMgZmlyc3QgaW4gZG9jdW1lbnQgb3JkZXIuIFRoZSBRTmFtZSBtdXN0IHJlcHJlc2VudCB0aGUgZXhwYW5kZWQtbmFtZSB3aXRoIHJlc3BlY3QgdG8gdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgaW4gZWZmZWN0IG9uIHRoZSBub2RlIHdob3NlIGV4cGFuZGVkLW5hbWUgaXMgYmVpbmcgcmVwcmVzZW50ZWQuIFR5cGljYWxseSwgdGhpcyB3aWxsIGJlIHRoZSBRTmFtZSB0aGF0IG9jY3VycmVkIGluIHRoZSBYTUwgc291cmNlLiBUaGlzIG5lZWQgbm90IGJlIHRoZSBjYXNlIGlmIHRoZXJlIGFyZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGluIGVmZmVjdCBvbiB0aGUgbm9kZSB0aGF0IGFzc29jaWF0ZSBtdWx0aXBsZSBwcmVmaXhlcyB3aXRoIHRoZSBzYW1lIG5hbWVzcGFjZS4gSG93ZXZlciwgYW4gaW1wbGVtZW50YXRpb24gbWF5IGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIHByZWZpeCBpbiBpdHMgcmVwcmVzZW50YXRpb24gb2Ygbm9kZXM7IGluIHRoaXMgY2FzZSwgYW4gaW1wbGVtZW50YXRpb24gY2FuIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBRTmFtZSB1c2VkIGluIHRoZSBYTUwgc291cmNlLiBJZiB0aGUgYXJndW1lbnQgbm9kZS1zZXQgaXMgZW1wdHkgb3IgdGhlIGZpcnN0IG5vZGUgaGFzIG5vIGV4cGFuZGVkLW5hbWUsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGl0IG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgbm9kZS1zZXQgd2l0aCB0aGUgY29udGV4dCBub2RlIGFzIGl0cyBvbmx5IG1lbWJlci4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9Im5hbWUobm9kZS1zZXQpIj5uYW1lKCR7Y3Vyc29yfSk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnN0cmluZyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249IlJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBjb3VsZCBiZSBhIG51bWJlciwgYm9vbGVhbiwgb3Igbm9kZS1zZXQiCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InN0cmluZyhhcmcpIj5zdHJpbmcoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguY29uY2F0IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIGNvbmNhdCBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIGl0cyBhcmd1bWVudHMuIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJjb25jYXQoc3RyaW5nLCBzdHJpbmcsIHN0cmluZyopIj5jb25jYXQoJHtjdXJzb3J9LCApPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5zdGFydHN3aXRoIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhlIHN0YXJ0cy13aXRoIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgc3RyaW5nLCBhbmQgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuIgotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJzdGFydHMtd2l0aChhcmcsIGFyZykiPnN0YXJ0cy13aXRoKCR7Y3Vyc29yfSwgKTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguY29udGFpbnMiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGUgY29udGFpbnMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcgY29udGFpbnMgdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcsIGFuZCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4iCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImNvbnRhaW5zKHN0cmluZywgc3RyaW5nKSI+Y29udGFpbnMoJHtjdXJzb3J9LCApPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5zdWJzdHJpbmdiZWZvcmUiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGUgc3Vic3RyaW5nLWJlZm9yZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZyB0aGF0IHByZWNlZGVzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgc3RyaW5nIGluIHRoZSBmaXJzdCBhcmd1bWVudCBzdHJpbmcsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRoZSBzZWNvbmQgYXJndW1lbnQgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3Vic3RyaW5nLWJlZm9yZSgiMTk5OS8wNC8wMSIsIi8iKSByZXR1cm5zIDE5OTkuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJzdWJzdHJpbmctYmVmb3JlKHN0cmluZywgc3RyaW5nKSI+c3Vic3RyaW5nLWJlZm9yZSgke2N1cnNvcn0sICk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnN1YnN0cmluZ2FmdGVyIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nVGhlIHN1YnN0cmluZy1hZnRlciBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZyB0aGF0IGZvbGxvd3MgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZywgb3IgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcuIEZvciBleGFtcGxlLCBzdWJzdHJpbmctYWZ0ZXIoIjE5OTkvMDQvMDEiLCIvIikgcmV0dXJucyAwNC8wMSwgYW5kIHN1YnN0cmluZy1hZnRlcigiMTk5OS8wNC8wMSIsIjE5IikgcmV0dXJucyA5OS8wNC8wMS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InN1YnN0cmluZy1hZnRlcihzdHJpbmcsIHN0cmluZykiPnN1YnN0cmluZy1hZnRlcigke2N1cnNvcn0sICk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnN1YnN0cmluZyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1RoZSBzdWJzdHJpbmcgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBzdGFydGluZyBhdCB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgd2l0aCBsZW5ndGggc3BlY2lmaWVkIGluIHRoZSB0aGlyZCBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIHN1YnN0cmluZygiMTIzNDUiLDIsMykgcmV0dXJucyAiMjM0Ii4gSWYgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IHJldHVybnMgdGhlIHN1YnN0cmluZyBzdGFydGluZyBhdCB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgYW5kIGNvbnRpbnVpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3Vic3RyaW5nKCIxMjM0NSIsMikgcmV0dXJucyAiMjM0NSIuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJzdWJzdHJpbmcoc3RyaW5nLCBudW1iZXIsIG51bWJlcj8pIj5zdWJzdHJpbmcoJHtjdXJzb3J9LCApPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5zdHJpbmdsZW5ndGgiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGUgc3RyaW5nLWxlbmd0aCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLiBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGNvbnRleHQgbm9kZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIGluIG90aGVyIHdvcmRzIHRoZSBzdHJpbmctdmFsdWUgb2YgdGhlIGNvbnRleHQgbm9kZS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InN0cmluZy1sZW5ndGgoc3RyaW5nPykiPnN0cmluZy1sZW5ndGgoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgubm9ybWFsaXplc3BhY2UiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGUgbm9ybWFsaXplLXNwYWNlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFyZ3VtZW50IHN0cmluZyB3aXRoIHdoaXRlc3BhY2Ugbm9ybWFsaXplZCBieSBzdHJpcHBpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjaW5nIHNlcXVlbmNlcyBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYnkgYSBzaW5nbGUgc3BhY2UuIFdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgYWxsb3dlZCBieSB0aGUgUyBwcm9kdWN0aW9uIGluIFhNTC4gSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBjb250ZXh0IG5vZGUgY29udmVydGVkIHRvIGEgc3RyaW5nLCBpbiBvdGhlciB3b3JkcyB0aGUgc3RyaW5nLXZhbHVlIG9mIHRoZSBjb250ZXh0IG5vZGUuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJub3JtYWxpemUtc3BhY2Uoc3RyaW5nPykiPm5vcm1hbGl6ZS1zcGFjZSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC50cmFuc2xhdGUiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGUgdHJhbnNsYXRlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IHN0cmluZyB3aXRoIG9jY3VycmVuY2VzIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBzdHJpbmcgcmVwbGFjZWQgYnkgdGhlIGNoYXJhY3RlciBhdCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbiBpbiB0aGUgdGhpcmQgYXJndW1lbnQgc3RyaW5nLicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0idHJhbnNsYXRlKHN0cmluZywgc3RyaW5nLCBzdHJpbmcpIj50cmFuc2xhdGUoJHtjdXJzb3J9LCAsICk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLmJvb2xlYW4iCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBmb3IgYSBudW1iZXIsIHN0cmluZywgb3Igbm9kZS1zZXQnCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImJvb2xlYW4oYXJnKSI+Ym9vbGVhbigke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5ub3QiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGUgbm90IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBpdHMgYXJndW1lbnQgaXMgZmFsc2UsIGFuZCBmYWxzZSBvdGhlcndpc2UuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJub3QoYm9vbGVhbikiPm5vdCgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC50cnVlIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nUmV0dXJucyBhIGJvb2xlYW4gdHJ1ZSB2YWx1ZS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InRydWUoKSI+dHJ1ZSgpJHtjdXJzb3J9PC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5mYWxzZSIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1JldHVybnMgYSBib29sZWFuIGZhbHNlIHZhbHVlLicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iZmFsc2UoKSI+ZmFsc2UoKSR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgubGFuZyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1RoZSBsYW5nIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRleHQgbm9kZSBhcyBzcGVjaWZpZWQgYnkgeG1sOmxhbmcgYXR0cmlidXRlcyBpcyB0aGUgc2FtZSBhcyBvciBpcyBhIHN1Ymxhbmd1YWdlIG9mIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50IHN0cmluZy4gVGhlIGxhbmd1YWdlIG9mIHRoZSBjb250ZXh0IG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2YgdGhlIHhtbDpsYW5nIGF0dHJpYnV0ZSBvbiB0aGUgY29udGV4dCBub2RlLCBvciwgaWYgdGhlIGNvbnRleHQgbm9kZSBoYXMgbm8geG1sOmxhbmcgYXR0cmlidXRlLCBieSB0aGUgdmFsdWUgb2YgdGhlIHhtbDpsYW5nIGF0dHJpYnV0ZSBvbiB0aGUgbmVhcmVzdCBhbmNlc3RvciBvZiB0aGUgY29udGV4dCBub2RlIHRoYXQgaGFzIGFuIHhtbDpsYW5nIGF0dHJpYnV0ZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBhdHRyaWJ1dGUsIHRoZW4gbGFuZyByZXR1cm5zIGZhbHNlLiBJZiB0aGVyZSBpcyBzdWNoIGFuIGF0dHJpYnV0ZSwgdGhlbiBsYW5nIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBhcmd1bWVudCBpZ25vcmluZyBjYXNlLCBvciBpZiB0aGVyZSBpcyBzb21lIHN1ZmZpeCBzdGFydGluZyB3aXRoIC0gc3VjaCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIGFyZ3VtZW50IGlnbm9yaW5nIHRoYXQgc3VmZml4IG9mIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIGlnbm9yaW5nIGNhc2UuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJsYW5nKHN0cmluZykiPmxhbmcoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgubnVtYmVyIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nUmV0dXJucyBhIGJvb2xlYW4gZmFsc2UgdmFsdWUuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJudW1iZXIoYXJnKSI+bnVtYmVyKCR7Y3Vyc29yfSk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLm51bWJlciIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1JldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIGFyZ3VtZW50LiBUaGUgYXJndW1lbnQgY291bGQgYmUgYSBib29sZWFuLCBzdHJpbmcsIG9yIG5vZGUtc2V0LicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0ibnVtYmVyKGFyZykiPm51bWJlcigke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5zdW0iCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdUaGUgc3VtIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN1bSwgZm9yIGVhY2ggbm9kZSBpbiB0aGUgYXJndW1lbnQgbm9kZS1zZXQsIG9mIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgc3RyaW5nLXZhbHVlcyBvZiB0aGUgbm9kZSB0byBhIG51bWJlci4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InN1bShub2RlLXNldCkiPnN1bSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5mbG9vciIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1RoZSBmbG9vciBmdW5jdGlvbiByZXR1cm5zIHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvIHBvc2l0aXZlIGluZmluaXR5KSBudW1iZXIgdGhhdCBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBhcmd1bWVudCBhbmQgdGhhdCBpcyBhbiBpbnRlZ2VyLicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iZmxvb3IobnVtYmVyKSI+Zmxvb3IoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGguY2VpbGluZyIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1RoZSBjZWlsaW5nIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNtYWxsZXN0IChjbG9zZXN0IHRvIG5lZ2F0aXZlIGluZmluaXR5KSBudW1iZXIgdGhhdCBpcyBub3QgbGVzcyB0aGFuIHRoZSBhcmd1bWVudCBhbmQgdGhhdCBpcyBhbiBpbnRlZ2VyLicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iY2VpbGluZyhudW1iZXIpIj5jZWlsaW5nKCR7Y3Vyc29yfSk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnJvdW5kIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nVGhlIHJvdW5kIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIGFyZ3VtZW50IGFuZCB0aGF0IGlzIGFuIGludGVnZXIuIElmIHRoZXJlIGFyZSB0d28gc3VjaCBudW1iZXJzLCB0aGVuIHRoZSBvbmUgdGhhdCBpcyBjbG9zZXN0IHRvIHBvc2l0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgTmFOLCB0aGVuIE5hTiBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlIGluZmluaXR5LCB0aGVuIHBvc2l0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgbmVnYXRpdmUgaW5maW5pdHksIHRoZW4gbmVnYXRpdmUgaW5maW5pdHkgaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSB6ZXJvLCB0aGVuIHBvc2l0aXZlIHplcm8gaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcyBuZWdhdGl2ZSB6ZXJvLCB0aGVuIG5lZ2F0aXZlIHplcm8gaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcyBsZXNzIHRoYW4gemVybywgYnV0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAtMC41LCB0aGVuIG5lZ2F0aXZlIHplcm8gaXMgcmV0dXJuZWQuJwotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJyb3VuZChudW1iZXIpIj5yb3VuZCgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC5yb3VuZCIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1RoZSByb3VuZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBhcmd1bWVudCBhbmQgdGhhdCBpcyBhbiBpbnRlZ2VyLiBJZiB0aGVyZSBhcmUgdHdvIHN1Y2ggbnVtYmVycywgdGhlbiB0aGUgb25lIHRoYXQgaXMgY2xvc2VzdCB0byBwb3NpdGl2ZSBpbmZpbml0eSBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzIE5hTiwgdGhlbiBOYU4gaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSBpbmZpbml0eSwgdGhlbiBwb3NpdGl2ZSBpbmZpbml0eSBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIGluZmluaXR5LCB0aGVuIG5lZ2F0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUgemVybywgdGhlbiBwb3NpdGl2ZSB6ZXJvIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgbmVnYXRpdmUgemVybywgdGhlbiBuZWdhdGl2ZSB6ZXJvIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHplcm8sIGJ1dCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gLTAuNSwgdGhlbiBuZWdhdGl2ZSB6ZXJvIGlzIHJldHVybmVkLicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0icm91bmQobnVtYmVyKSI+cm91bmQoJHtjdXJzb3J9KTwvdGVtcGxhdGU+Ci0JICAgICAgICAgIAotCTwhLS0gWFNMIFhQYXRoIEV4dGVuc2lvbnMgLS0+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgueHNsa2V5IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGtleSBmdW5jdGlvbiBkb2VzIGZvciBrZXlzIHdoYXQgdGhlIGlkIGZ1bmN0aW9uIGRvZXMgZm9yIElEcy4gVGhlIGZpcnN0IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUga2V5LiBUaGUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IG11c3QgYmUgYSBRTmFtZSwgd2hpY2ggaXMgZXhwYW5kZWQgYXMgZGVzY3JpYmVkIGluIFsyLjQgUXVhbGlmaWVkIE5hbWVzXS4gV2hlbiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBrZXkgZnVuY3Rpb24gaXMgb2YgdHlwZSBub2RlLXNldCwgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSB1bmlvbiBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBrZXkgZnVuY3Rpb24gdG8gdGhlIHN0cmluZyB2YWx1ZSBvZiBlYWNoIG9mIHRoZSBub2RlcyBpbiB0aGUgYXJndW1lbnQgbm9kZS1zZXQuIFdoZW4gdGhlIHNlY29uZCBhcmd1bWVudCB0byBrZXkgaXMgb2YgYW55IG90aGVyIHR5cGUsIHRoZSBhcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgYXMgaWYgYnkgYSBjYWxsIHRvIHRoZSBzdHJpbmcgZnVuY3Rpb247IGl0IHJldHVybnMgYSBub2RlLXNldCBjb250YWluaW5nIHRoZSBub2RlcyBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcyB0aGUgY29udGV4dCBub2RlIHRoYXQgaGF2ZSBhIHZhbHVlIGZvciB0aGUgbmFtZWQga2V5IGVxdWFsIHRvIHRoaXMgc3RyaW5nLiAnCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImtleShzdHJpbmcsIGFyZykiPmtleSgke2N1cnNvcn0sICk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnhzbGRvY3VtZW50IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjpUaGUgZG9jdW1lbnQgZnVuY3Rpb24gYWxsb3dzIGFjY2VzcyB0byBYTUwgZG9jdW1lbnRzIG90aGVyIHRoYW4gdGhlIG1haW4gc291cmNlIGRvY3VtZW50LicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iZG9jdW1lbnQoYXJnLCBub2RlLXNldD8pIj5kb2N1bWVudCgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xmb3JtYXRudW1iZXIiCi0JICAgICAgICAgIGF1dG9pbnNlcnQ9InRydWUiIGNvbnRleHQ9InhzbF94cGF0aCIgZGVsZXRlZD0iZmFsc2UiCi0JICAgICAgICAgIGRlc2NyaXB0aW9uPSdYU0wgWFBhdGggRXh0ZW5zaW9uIEZ1bmN0aW9uOiBUaGUgZm9ybWF0LW51bWJlciBmdW5jdGlvbiBjb252ZXJ0cyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIGZvcm1hdCBwYXR0ZXJuIHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBhcmd1bWVudCBhbmQgdGhlIGRlY2ltYWwtZm9ybWF0IG5hbWVkIGJ5IHRoZSB0aGlyZCBhcmd1bWVudCwgb3IgdGhlIGRlZmF1bHQgZGVjaW1hbC1mb3JtYXQsIGlmIHRoZXJlIGlzIG5vIHRoaXJkIGFyZ3VtZW50LicKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iZm9ybWF0LW51bWJlcihudW1iZXIsIHN0cmluZywgc3RyaW5nPykiPmZvcm1hdC1udW1iZXIoJHtjdXJzb3J9LCApPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xjdXJyZW50IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucyBhIG5vZGUtc2V0IHRoYXQgaGFzIHRoZSBjdXJyZW50IG5vZGUgYXMgaXRzIG9ubHkgbWVtYmVyLiBGb3IgYW4gb3V0ZXJtb3N0IGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gbm90IG9jY3VycmluZyB3aXRoaW4gYW5vdGhlciBleHByZXNzaW9uKSwgdGhlIGN1cnJlbnQgbm9kZSBpcyBhbHdheXMgdGhlIHNhbWUgYXMgdGhlIGNvbnRleHQgbm9kZS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImN1cnJlbnQoKSI+Y3VycmVudCgpICR7Y3Vyc29yfTwvdGVtcGxhdGU+Ci0JPHRlbXBsYXRlIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHBhdGgueHNsdW5wYXJzZWVudGl0eXVyaSIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1hTTCBYUGF0aCBFeHRlbnNpb24gRnVuY3Rpb246IFRoZSB1bnBhcnNlZC1lbnRpdHktdXJpIHJldHVybnMgdGhlIFVSSSBvZiB0aGUgdW5wYXJzZWQgZW50aXR5IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoZSBjb250ZXh0IG5vZGUgKHNlZSBbMy4zIFVucGFyc2VkIEVudGl0aWVzXSkuIEl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBzdWNoIGVudGl0eS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9InVucGFyc2VkLWVudGl0eS11cmkoc3RyaW5nKSI+dW5wYXJzZWQtZW50aXR5LXVyaSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xnZW5lcmF0ZWlkIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGdlbmVyYXRlLWlkIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBub2RlIGluIHRoZSBhcmd1bWVudCBub2RlLXNldCB0aGF0IGlzIGZpcnN0IGluIGRvY3VtZW50IG9yZGVyLiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgbXVzdCBjb25zaXN0IG9mIEFTQ0lJIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIuIFRodXMsIHRoZSBzdHJpbmcgaXMgc3ludGFjdGljYWxseSBhbiBYTUwgbmFtZS4gQW4gaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byBnZW5lcmF0ZSBhbiBpZGVudGlmaWVyIGluIGFueSBjb252ZW5pZW50IHdheSBwcm92aWRlZCB0aGF0IGl0IGFsd2F5cyBnZW5lcmF0ZXMgdGhlIHNhbWUgaWRlbnRpZmllciBmb3IgdGhlIHNhbWUgbm9kZSBhbmQgdGhhdCBkaWZmZXJlbnQgaWRlbnRpZmllcnMgYXJlIGFsd2F5cyBnZW5lcmF0ZWQgZnJvbSBkaWZmZXJlbnQgbm9kZXMuIEFuIGltcGxlbWVudGF0aW9uIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gZ2VuZXJhdGUgdGhlIHNhbWUgaWRlbnRpZmllcnMgZWFjaCB0aW1lIGEgZG9jdW1lbnQgaXMgdHJhbnNmb3JtZWQuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgZ2VuZXJhdGVkIHVuaXF1ZSBpZGVudGlmaWVyIHdpbGwgYmUgZGlzdGluY3QgZnJvbSBhbnkgdW5pcXVlIElEcyBzcGVjaWZpZWQgaW4gdGhlIHNvdXJjZSBkb2N1bWVudC4gSWYgdGhlIGFyZ3VtZW50IG5vZGUtc2V0IGlzIGVtcHR5LCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGNvbnRleHQgbm9kZS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImdlbmVyYXRlLWlkKG5vZGUtc2V0PykiPmdlbmVyYXRlLWlkKCR7Y3Vyc29yfSk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnhzbHN5c3RlbXByb3BlcnR5IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGFyZ3VtZW50IG11c3QgZXZhbHVhdGUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhIFFOYW1lLiBUaGUgUU5hbWUgaXMgZXhwYW5kZWQgaW50byBhIG5hbWUgdXNpbmcgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgaW4gc2NvcGUgZm9yIHRoZSBleHByZXNzaW9uLiBUaGUgc3lzdGVtLXByb3BlcnR5IGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBwcm9wZXJ0eSBpZGVudGlmaWVkIGJ5IHRoZSBuYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIHN5c3RlbSBwcm9wZXJ0eSwgdGhlIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgcmV0dXJuZWQuJwkKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0ic3lzdGVtLXByb3BlcnR5KHN0cmluZykiPnN5c3RlbS1wcm9wZXJ0eSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xlbGVtZW50YXZhaWxhYmxlIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGFyZ3VtZW50IG11c3QgZXZhbHVhdGUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhIFFOYW1lLiBUaGUgUU5hbWUgaXMgZXhwYW5kZWQgaW50byBhbiBleHBhbmRlZC1uYW1lIHVzaW5nIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGluIHNjb3BlIGZvciB0aGUgZXhwcmVzc2lvbi4gVGhlIGVsZW1lbnQtYXZhaWxhYmxlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXhwYW5kZWQtbmFtZSBpcyB0aGUgbmFtZSBvZiBhbiBpbnN0cnVjdGlvbi4gSWYgdGhlIGV4cGFuZGVkLW5hbWUgaGFzIGEgbmFtZXNwYWNlIFVSSSBlcXVhbCB0byB0aGUgWFNMVCBuYW1lc3BhY2UgVVJJLCB0aGVuIGl0IHJlZmVycyB0byBhbiBlbGVtZW50IGRlZmluZWQgYnkgWFNMVC4gT3RoZXJ3aXNlLCBpdCByZWZlcnMgdG8gYW4gZXh0ZW5zaW9uIGVsZW1lbnQuIElmIHRoZSBleHBhbmRlZC1uYW1lIGhhcyBhIG51bGwgbmFtZXNwYWNlIFVSSSwgdGhlIGVsZW1lbnQtYXZhaWxhYmxlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlLiAnCQotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJlbGVtZW50LWF2YWlsYWJsZShzdHJpbmcpIj5lbGVtZW50LWF2YWlsYWJsZSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xmdW5jdGlvbmF2YWlsYWJsZSIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1hTTCBYUGF0aCBFeHRlbnNpb24gRnVuY3Rpb246IFRoZSBhcmd1bWVudCBtdXN0IGV2YWx1YXRlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYSBRTmFtZS4gVGhlIFFOYW1lIGlzIGV4cGFuZGVkIGludG8gYW4gZXhwYW5kZWQtbmFtZSB1c2luZyB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBpbiBzY29wZSBmb3IgdGhlIGV4cHJlc3Npb24uIFRoZSBmdW5jdGlvbi1hdmFpbGFibGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBleHBhbmRlZC1uYW1lIGlzIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIGZ1bmN0aW9uIGxpYnJhcnkuIElmIHRoZSBleHBhbmRlZC1uYW1lIGhhcyBhIG5vbi1udWxsIG5hbWVzcGFjZSBVUkksIHRoZW4gaXQgcmVmZXJzIHRvIGFuIGV4dGVuc2lvbiBmdW5jdGlvbjsgb3RoZXJ3aXNlLCBpdCByZWZlcnMgdG8gYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IFhQYXRoIG9yIFhTTFQuJwkKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iZnVuY3Rpb24tYXZhaWxhYmxlKHN0cmluZykiPmZ1bmN0aW9uLWF2YWlsYWJsZSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLSAgCi08L3RlbXBsYXRlcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM4ZTYwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGV4Y2x1ZGluZz0iKiovKi5sZXh8KiovKi5jdXAiIGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlY2U4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1saWIKLS5leHRlcm5hbFRvb2xCdWlsZGVycwotLmJ5ZWN5Y2xlCi1KYXZhQ1VQLWR1bXAudHh0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDY5YjI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjNGE5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMzg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGNvbXBvbmVudCBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiB2ZXJzaW9uPSIyIj4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EZWZhdWx0RHluYW1pY0NvbnRleHQuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ibm9kZV9wb3NpdGlvbihOb2RlKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0idHooKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X2RvYyhTdHJpbmcpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0R5bmFtaWNDb250ZXh0LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzc2NzMzNiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDT0RFUE9JTlRfQ09MTEFUSU9OIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldF9jb2xsYXRpb24oU3RyaW5nKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ0eigpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImN1cnJlbnRfZGF0ZV90aW1lKCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X2RvYyhVUkkpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV2YWx1YXRlX2Z1bmN0aW9uKFFOYW1lLCBDb2xsZWN0aW9uKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRfdmFyaWFibGUoUU5hbWUsIEFueVR5cGUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRlZmF1bHRfY29sbGF0aW9uX25hbWUoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJyZXNvbHZlX3VyaShTdHJpbmcpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldF92YXJpYWJsZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0VmFyaWFibGUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldF92YXJpYWJsZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0X3ZhcmlhYmxlKFFOYW1lLCBBbnlUeXBlKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ0eigpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV2YWx1YXRlX2Z1bmN0aW9uKFFOYW1lLCBDb2xsZWN0aW9uKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJub2RlX3Bvc2l0aW9uKE5vZGUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldF9kb2MoU3RyaW5nKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDb250ZXh0LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ij4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGVyaXZlc19mcm9tKE5vZGVUeXBlLCBYU1R5cGVEZWZpbml0aW9uKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRlbF92YXJpYWJsZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ2YXJpYWJsZV9pbl9zY29wZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJtYWtlX2F0b21pYyhRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImVsZW1lbnRfZGVjbGFyZWQoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0X2NvbGxlY3Rpb25zKCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJzZXRfY29sbGVjdGlvbnMoTWFwKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV4cGFuZF9lbGVtX3R5cGVfcW5hbWUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0X2NvbGxlY3Rpb25zKE1hcCZsdDtTdHJpbmcsTGlzdCZsdDtEb2N1bWVudCZndDsmZ3Q7KSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRlcml2ZXNfZnJvbShOb2RlVHlwZSwgUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0X2Jhc2VfdXJpKFN0cmluZykiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ2YXJpYWJsZV9leGlzdHMoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iYWRkX3ZhcmlhYmxlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InR5cGVfZGVmaW5lZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhdHRyaWJ1dGVfZGVjbGFyZWQoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZWxlbWVudF90eXBlX2RlZmluaXRpb24oUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0X2NvbGxlY3Rpb25zKE1hcCZsdDtTdHJpbmcsTGlzdCZndDspIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDAzODA0MjA0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX3FuYW1lKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV4cGFuZF9mdW5jdGlvbl9xbmFtZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJmdW5jdGlvbl9leGlzdHMoUU5hbWUsIGludCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ2YXJpYWJsZV9leGlzdHMoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGVsX3ZhcmlhYmxlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV4cGFuZF9lbGVtX3R5cGVfcW5hbWUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iYWRkX3ZhcmlhYmxlKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImZ1bmN0aW9uX2V4aXN0cyhRTmFtZSwgaW50KSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImVsZW1lbnRfdHlwZV9kZWZpbml0aW9uKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImVsZW1lbnRfZGVjbGFyZWQoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZXhwYW5kX3FuYW1lKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im1ha2VfYXRvbWljKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV4cGFuZF9mdW5jdGlvbl9xbmFtZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ2YXJpYWJsZV9pbl9zY29wZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uKFFOYW1lKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQwNTkwMTQxMCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImF0dHJpYnV0ZV9kZWNsYXJlZChRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJkZXJpdmVzX2Zyb20oTm9kZVR5cGUsIFhTVHlwZURlZmluaXRpb24pIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNDA1OTAxNDEwIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGVyaXZlc19mcm9tKE5vZGVUeXBlLCBRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MDU5MDE0MTAiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ0eXBlX2RlZmluZWQoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNjQzODQ2MTYxIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iUU5hbWUiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJkZWxfdmFyaWFibGUoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iNjQzODQ2MTYxIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iUU5hbWUiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iU3RhdGljQ29udGV4dCIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ0eXBlX2RlZmluZWQoUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iMTIxMTEwNTI4NCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InNldF9jb2xsZWN0aW9ucyhNYXApIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBpZD0iMTIxMTEwNTI4NCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImV4cGFuZF9xbmFtZShRTmFtZSkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGlkPSIxMjExMTA1Mjg0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZWxlbWVudF90eXBlX2RlZmluaXRpb24oUU5hbWUpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uL0ZuRnVuY3Rpb25MaWJyYXJ5LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeSI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjM4ODE5NDM4OCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJYUEFUSF9GVU5DVElPTlNfTlMiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvMjAwNC8xMC94cGF0aC1mdW5jdGlvbnMiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhhNjhjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jVHVlIEZlYiAxMCAwNTozNDo1MSBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU3luY2hyb25pemVkT25Jbmhlcml0ZWRNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmMDJjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMTAwLnF1YWxpZmllcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjkuMCwzLjAuMCkiLAotIGphdmFfY3VwLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IjAuMTAuMCIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjguMCw1LjAuMCkiO3Jlc29sdXRpb246PW9wdGlvbmFsCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGgyUGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7eC1pbnRlcm5hbDo9dHJ1ZQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDMwMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5BdWd1c3QsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzQwMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotc3JjLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBncmFtbWFycy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE3MDE0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IS0tCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjgzMjE0IC0gZml4IElGIFRIRU4gRUxTRSBwYXJzaW5nIGFuZCB1cGRhdGUgZ3JhbW1hcnMgCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDMxMTQ4MCAtIG1vcmUgZGVidWcgaW5mbywgYmV0dGVyIGNsZWFudXAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0tLT4KLTxwcm9qZWN0IG5hbWU9InByb2oxIiBkZWZhdWx0PSJnZW5lcmF0ZV9wYXJzZXIiIGJhc2VkaXI9Ii4iPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMiIGxvY2F0aW9uPSIke2Jhc2VkaXJ9Ii8+ICAgCi0gICAgPHByb3BlcnR5IG5hbWU9ImN1cEphciIgbG9jYXRpb249IiR7YmFzZWRpcn0vbGliL2phdmFjdXAxMC5qYXIiLz4KLSAgICA8ZGVzY3JpcHRpb24+Ci0gICAgQnVpbGQgRmlsZSBmb3IgQ29tcGlsZXIgUHJvamVjdAotPC9kZXNjcmlwdGlvbj4KLQotCTx0YXNrZGVmIGNsYXNzbmFtZT0iSkZsZXguYW50dGFzay5KRmxleFRhc2siIG5hbWU9ImpmbGV4IiBjbGFzc3BhdGg9IiR7YmFzZWRpcn0vbGliL0pGbGV4LmphciIgLz4KLQotCTx0YXJnZXQgbmFtZT0iZ2VuZXJhdGVfcGFyc2VyIj4KLQkJPGpmbGV4IGZpbGU9ImdyYW1tYXJzL3hwYXRoLmxleCIgZGVzdGRpcj0iZ3JhbW1hcnMvZ2VuZXJhdGVkIi8+Ci0JICAgIDxqYXZhIGphcj0iJHtjdXBKYXJ9IiBpbnB1dD0iZ3JhbW1hcnMveHBhdGguY3VwIiBvdXRwdXQ9IiR7YmFzZWRpcn0vSmF2YUNVUC1kdW1wLnR4dCIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAJPGFyZyB2YWx1ZT0iLXBhcnNlciIvPgotCSAgICAJPGFyZyB2YWx1ZT0iWFBhdGhDdXAiLz4KLQkgICAgCTxhcmcgdmFsdWU9Ii1zeW1ib2xzIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSJYcGF0aFN5bSIvPgotCSAgICAJPGFyZyB2YWx1ZT0iLXBhY2thZ2UiLz4KLQkgICAgCTxhcmcgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIvPgotCSAgICAJPGFyZyB2YWx1ZT0iLWR1bXAiLz4gICAgCQotCSAgICA8L2phdmE+Ci0JCTxtb3ZlIHRvZmlsZT0iJHtiYXNlZGlyfS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoQ3VwLmphdmEiIGZpbGU9IlhQYXRoQ3VwLmphdmEiLz4KLQkJPG1vdmUgdG9maWxlPSIke2Jhc2VkaXJ9L3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWHBhdGhTeW0uamF2YSIgZmlsZT0iWHBhdGhTeW0uamF2YSIvPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMvZ2VuZXJhdGVkL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL2dlbmVyYXRlZC9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhGbGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODE4YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMvZ2VuZXJhdGVkL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMTUgKzAsMCBAQAotLyogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBnZW5lcmF0ZWQgYnkgSkZsZXggMS40LjMgb24gMTIvMTQvMDkgMjowMiBBTSAqLwotCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0vLyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAqCi0vLyAqIENvbnRyaWJ1dG9yczoKLS8vICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLS8vICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA5ODcgLSBmaXhlZCBsaXRlcmFsIGlzc3VlcyBmb3IgaW50ZWdlciBhbmQgZGVjaW1hbAotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBJRiBUSEVOIEVMU0UgcGFyc2luZyBhbmQgdXBkYXRlIGdyYW1tYXJzCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzY2FubmVyIGdlbmVyYXRlZCBieSAKLSAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuamZsZXguZGUvIj5KRmxleDwvYT4gMS40LjMKLSAqIG9uIDEyLzE0LzA5IDI6MDIgQU0gZnJvbSB0aGUgc3BlY2lmaWNhdGlvbiBmaWxlCi0gKiA8dHQ+L1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLTMuNU01L29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXg8L3R0PgotICovCi1jbGFzcyBYUGF0aEZsZXggaW1wbGVtZW50cyBqYXZhX2N1cC5ydW50aW1lLlNjYW5uZXIgewotCi0gIC8qKiBUaGlzIGNoYXJhY3RlciBkZW5vdGVzIHRoZSBlbmQgb2YgZmlsZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZWUVPRiA9IC0xOwotCi0gIC8qKiBpbml0aWFsIHNpemUgb2YgdGhlIGxvb2thaGVhZCBidWZmZXIgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX0JVRkZFUlNJWkUgPSAxNjM4NDsKLQotICAvKiogbGV4aWNhbCBzdGF0ZXMgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWVlJTklUSUFMID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NTUVOVCA9IDI7Ci0KLSAgLyoqCi0gICAqIFpaX0xFWFNUQVRFW2xdIGlzIHRoZSBzdGF0ZSBpbiB0aGUgREZBIGZvciB0aGUgbGV4aWNhbCBzdGF0ZSBsCi0gICAqIFpaX0xFWFNUQVRFW2wrMV0gaXMgdGhlIHN0YXRlIGluIHRoZSBERkEgZm9yIHRoZSBsZXhpY2FsIHN0YXRlIGwKLSAgICogICAgICAgICAgICAgICAgICBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQotICAgKiBsIGlzIG9mIHRoZSBmb3JtIGwgPSAyKmssIGsgYSBub24gbmVnYXRpdmUgaW50ZWdlcgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX0xFWFNUQVRFW10gPSB7IAotICAgICAwLCAgMCwgIDEsIDEKLSAgfTsKLQotICAvKiogCi0gICAqIFRyYW5zbGF0ZXMgY2hhcmFjdGVycyB0byBjaGFyYWN0ZXIgY2xhc3NlcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0NNQVBfUEFDS0VEID0gCi0gICAgIlwxMVwwXDFcMVwxXDFcMlwwXDFcMVwyMlwwXDFcMVwxXDIyXDFcMlwxXDAiKwotICAgICJcMVwzMFwyXDBcMVwzXDFcMTJcMVwxNlwxXDE3XDFcN1wxXDI3XDFcMTFcMVw1IisKLSAgICAiXDFcMjVcMTJcNFwxXDEzXDFcMFwxXDIzXDFcMjFcMVwyNFwxXDMxXDFcMjZcNFwxMCIrCi0gICAgIlwxXDZcMjVcMTBcMVwxNFwxXDBcMVwxNVwxXDBcMVwxMFwxXDBcMVw0MlwxXDQ1IisKLSAgICAiXDFcMzJcMVwzNlwxXDM3XDFcNDdcMVw1MlwxXDMzXDFcMzRcMlwxMFwxXDM1XDFcNTMiKwotICAgICJcMVw0MVwxXDUwXDFcNTRcMVw1NVwxXDQ0XDFcNDBcMVw0M1wxXDQ2XDFcNTZcMVw1MSIrCi0gICAgIlwxXDU3XDFcNjBcMVwxMFwxXDBcMVwyMFx1ZmY4M1wwIjsKLQotICAvKiogCi0gICAqIFRyYW5zbGF0ZXMgY2hhcmFjdGVycyB0byBjaGFyYWN0ZXIgY2xhc3NlcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBbXSBaWl9DTUFQID0genpVbnBhY2tDTWFwKFpaX0NNQVBfUEFDS0VEKTsKLQotICAvKiogCi0gICAqIFRyYW5zbGF0ZXMgREZBIHN0YXRlcyB0byBhY3Rpb24gc3dpdGNoIGxhYmVscy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBbXSBaWl9BQ1RJT04gPSB6elVucGFja0FjdGlvbigpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9BQ1RJT05fUEFDS0VEXzAgPQotICAgICJcMlwwXDFcMVwxXDJcMlwxXDFcM1wxXDRcMVw1XDFcNiIrCi0gICAgIlwxXDdcMVwxMFwxXDExXDFcMTJcMVwxM1wxXDE0XDFcMTVcMVwxNiIrCi0gICAgIlwxXDE3XDFcMVwxXDIwXDFcMjFcMVwyMlwxXDIzXDFcMjRcMVwyNSIrCi0gICAgIlwxXDI2XDIwXDVcMlwyXDFcMFwxXDI3XDFcMFwxXDI3XDFcMzAiKwotICAgICJcMVwwXDFcMzFcMVwzMlwxXDMzXDFcMzRcMVwzNVwxXDM2XDFcMzciKwotICAgICJcMVw0MFwxXDQxXDRcNVwxXDQyXDFcNDNcMVw1XDFcNDRcMVw0NSIrCi0gICAgIlwxXDQ2XDVcNVwxXDQ3XDZcNVwxXDUwXDJcNVwxXDUxXDVcNSIrCi0gICAgIlwxXDUyXDRcNVwxXDUzXDFcNTRcMVw1NVwxXDU2XDNcNVwxXDU3IisKLSAgICAiXDFcNjBcMVw2MVwxXDBcN1w1XDFcNjJcMTZcNVwxXDYzXDEwXDUiKwotICAgICJcMVw2NFwxXDY1XDRcNVwxXDY2XDFcNVwxXDY3XDJcNVwxXDcwIisKLSAgICAiXDNcNVwxXDcxXDRcNVwxXDcyXDFcNVwxXDczXDFcNVwxXDc0IisKLSAgICAiXDJcNVwxXDc1XDFcNzZcMTBcNVwxXDc3XDEwXDVcMVwxMDBcNlw1IisKLSAgICAiXDFcMTAxXDJcNVwxXDEwMlwxNFw1XDFcMTAzXDZcNVwxXDEwNFwxXDUiKwotICAgICJcMVwxMDVcM1w1XDFcMTA2XDRcNVwxXDEwN1wxMlw1XDFcMTEwXDFcMTExIisKLSAgICAiXDEwXDVcMVwxMTJcNVw1XDFcMTEzXDVcNVwxXDExNFwxXDExNVwxXDUiKwotICAgICJcMVwxMTZcMVw1XDFcMTE3XDFcMTIwXDFcNVwxXDEyMVw1XDVcMVwxMjIiKwotICAgICJcMjZcNVwxXDEyM1wxMFw1XDFcMTI0XDFcMTI1XDE0XDVcMVwxMjZcMVwxMjciKwotICAgICJcNFw1XDFcMTMwXDFcMTMxXDFcNVwxXDEzMlw0XDVcMVwxMzMiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja0FjdGlvbigpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFszMzNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrQWN0aW9uKFpaX0FDVElPTl9QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tBY3Rpb24oU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyByZXN1bHRbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIGEgc3RhdGUgdG8gYSByb3cgaW5kZXggaW4gdGhlIHRyYW5zaXRpb24gdGFibGUKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBbXSBaWl9ST1dNQVAgPSB6elVucGFja1Jvd01hcCgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9ST1dNQVBfUEFDS0VEXzAgPQotICAgICJcMFwwXDBcNjFcMFwxNDJcMFwxNDJcMFwyMjNcMFwzMDRcMFwzNjVcMFx1MDEyNiIrCi0gICAgIlwwXHUwMTU3XDBcMTQyXDBcMTQyXDBcdTAxODhcMFx1MDFiOVwwXDE0MlwwXDE0MlwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXDE0MlwwXDE0MlwwXHUwMWVhXDBcdTAyMWJcMFx1MDI0Y1wwXHUwMjdkXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcMTQyXDBcMTQyXDBcdTAyYWVcMFx1MDJkZlwwXHUwMzEwXDBcdTAzNDFcMFx1MDM3MiIrCi0gICAgIlwwXHUwM2EzXDBcdTAzZDRcMFx1MDQwNVwwXHUwNDM2XDBcdTA0NjdcMFx1MDQ5OFwwXHUwNGM5XDBcdTA0ZmEiKwotICAgICJcMFx1MDUyYlwwXHUwNTVjXDBcdTA1OGRcMFx1MDViZVwwXHUwNWVmXDBcMjIzXDBcdTA2MjBcMFwzMDQiKwotICAgICJcMFx1MDY1MVwwXHUwNjgyXDBcdTA2YjNcMFwxNDJcMFwxNDJcMFwxNDJcMFwxNDJcMFwxNDIiKwotICAgICJcMFwxNDJcMFwxNDJcMFwxNDJcMFwxNDJcMFx1MDZlNFwwXHUwNzE1XDBcdTA3NDZcMFx1MDc3NyIrCi0gICAgIlwwXHUwMTU3XDBcdTA3YThcMFx1MDdkOVwwXHUwMTU3XDBcdTAxNTdcMFx1MDE1N1wwXHUwODBhXDBcdTA4M2IiKwotICAgICJcMFx1MDg2Y1wwXHUwODlkXDBcdTA4Y2VcMFx1MDE1N1wwXHUwOGZmXDBcdTA5MzBcMFx1MDk2MVwwXHUwOTkyIisKLSAgICAiXDBcdTA5YzNcMFx1MDlmNFwwXHUwMTU3XDBcdTBhMjVcMFx1MGE1NlwwXHUwMTU3XDBcdTBhODdcMFx1MGFiOCIrCi0gICAgIlwwXHUwYWU5XDBcdTBiMWFcMFx1MGI0YlwwXHUwMTU3XDBcdTBiN2NcMFx1MGJhZFwwXHUwYmRlXDBcdTBjMGYiKwotICAgICJcMFx1MDE1N1wwXHUwMTU3XDBcdTAxNTdcMFx1MDE1N1wwXHUwYzQwXDBcdTBjNzFcMFx1MGNhMlwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXHUwY2QzXDBcdTBjZDNcMFx1MGQwNFwwXHUwZDM1XDBcdTBkNjZcMFx1MGQ5N1wwXHUwZGM4IisKLSAgICAiXDBcdTBkZjlcMFx1MGUyYVwwXHUwMTU3XDBcdTBlNWJcMFx1MGU4Y1wwXHUwZWJkXDBcdTBlZWVcMFx1MGYxZiIrCi0gICAgIlwwXHUwZjUwXDBcdTBmODFcMFx1MGZiMlwwXHUwZmUzXDBcdTEwMTRcMFx1MTA0NVwwXHUxMDc2XDBcdTEwYTciKwotICAgICJcMFx1MTBkOFwwXHUwMTU3XDBcdTExMDlcMFx1MTEzYVwwXHUxMTZiXDBcdTExOWNcMFx1MTFjZFwwXHUxMWZlIisKLSAgICAiXDBcdTEyMmZcMFx1MTI2MFwwXHUwMTU3XDBcdTAxNTdcMFx1MTI5MVwwXHUxMmMyXDBcdTEyZjNcMFx1MTMyNCIrCi0gICAgIlwwXHUxMzU1XDBcdTEzODZcMFx1MDE1N1wwXHUxM2I3XDBcdTEzZThcMFx1MDE1N1wwXHUxNDE5XDBcdTE0NGEiKwotICAgICJcMFx1MTQ3YlwwXHUwMTU3XDBcdTE0YWNcMFx1MTRkZFwwXHUxNTBlXDBcdTE1M2ZcMFx1MDE1N1wwXHUxNTcwIisKLSAgICAiXDBcdTAxNTdcMFx1MTVhMVwwXHUwMTU3XDBcdTE1ZDJcMFx1MTYwM1wwXHUwMTU3XDBcdTAxNTdcMFx1MTYzNCIrCi0gICAgIlwwXHUxNjY1XDBcdTE2OTZcMFx1MTZjN1wwXHUxNmY4XDBcdTE3MjlcMFx1MTc1YVwwXHUxNzhiXDBcdTAxNTciKwotICAgICJcMFx1MTdiY1wwXHUxN2VkXDBcdTE4MWVcMFx1MTg0ZlwwXHUxODgwXDBcdTE4YjFcMFx1MThlMlwwXHUxOTEzIisKLSAgICAiXDBcdTAxNTdcMFx1MTk0NFwwXHUxOTc1XDBcdTE5YTZcMFx1MTlkN1wwXHUxYTA4XDBcdTFhMzlcMFx1MDE1NyIrCi0gICAgIlwwXHUxYTZhXDBcdTFhOWJcMFx1MDE1N1wwXHUxYWNjXDBcdTFhZmRcMFx1MWIyZVwwXHUxYjVmXDBcdTFiOTAiKwotICAgICJcMFx1MWJjMVwwXHUxYmYyXDBcdTFjMjNcMFx1MWM1NFwwXHUxYzg1XDBcdTFjYjZcMFx1MWNlN1wwXHUwMTU3IisKLSAgICAiXDBcdTFkMThcMFx1MWQ0OVwwXHUxZDdhXDBcdTFkYWJcMFx1MWRkY1wwXHUxZTBkXDBcdTAxNTdcMFx1MWUzZSIrCi0gICAgIlwwXHUwMTU3XDBcdTFlNmZcMFx1MWVhMFwwXHUxZWQxXDBcdTAxNTdcMFx1MWYwMlwwXHUxZjMzXDBcdTFmNjQiKwotICAgICJcMFx1MWY5NVwwXHUwMTU3XDBcdTFmYzZcMFx1MWZmN1wwXHUyMDI4XDBcdTIwNTlcMFx1MjA4YVwwXHUyMGJiIisKLSAgICAiXDBcdTIwZWNcMFx1MjExZFwwXHUyMTRlXDBcdTIxN2ZcMFx1MDE1N1wwXHUwMTU3XDBcdTIxYjBcMFx1MjFlMSIrCi0gICAgIlwwXHUyMjEyXDBcdTIyNDNcMFx1MjI3NFwwXHUyMmE1XDBcdTIyZDZcMFx1MjMwN1wwXHUyMzM4XDBcdTIzNjkiKwotICAgICJcMFx1MjM5YVwwXHUyM2NiXDBcdTIzZmNcMFx1MjQyZFwwXHUwMTU3XDBcdTI0NWVcMFx1MjQ4ZlwwXHUyNGMwIisKLSAgICAiXDBcdTI0ZjFcMFx1MjUyMlwwXHUwMTU3XDBcdTAxNTdcMFx1MjU1M1wwXHUwMTU3XDBcdTI1ODRcMFx1MjViNSIrCi0gICAgIlwwXHUyNWU2XDBcdTI2MTdcMFx1MjY0OFwwXHUyNjc5XDBcdTI2YWFcMFx1MjZkYlwwXHUyNzBjXDBcdTI3M2QiKwotICAgICJcMFx1MDE1N1wwXHUyNzZlXDBcdTI3OWZcMFx1MjdkMFwwXHUyODAxXDBcdTI4MzJcMFx1Mjg2M1wwXHUyODk0IisKLSAgICAiXDBcdTI4YzVcMFx1MjhmNlwwXHUyOTI3XDBcdTI5NThcMFx1Mjk4OVwwXHUyOWJhXDBcdTI5ZWJcMFx1MmExYyIrCi0gICAgIlwwXHUyYTRkXDBcdTJhN2VcMFx1MmFhZlwwXHUyYWUwXDBcdTJiMTFcMFx1MmI0MlwwXHUyYjczXDBcdTAxNTciKwotICAgICJcMFx1MmJhNFwwXHUyYmQ1XDBcdTJjMDZcMFx1MmMzN1wwXHUyYzY4XDBcdTJjOTlcMFx1MmNjYVwwXHUyY2ZiIisKLSAgICAiXDBcdTAxNTdcMFx1MDE1N1wwXHUyZDJjXDBcdTJkNWRcMFx1MmQ4ZVwwXHUyZGJmXDBcdTJkZjBcMFx1MmUyMSIrCi0gICAgIlwwXHUyZTUyXDBcdTJlODNcMFx1MmViNFwwXHUyZWU1XDBcdTJmMTZcMFx1MmY0N1wwXHUwMTU3XDBcdTAxNTciKwotICAgICJcMFx1MmY3OFwwXHUyZmE5XDBcdTJmZGFcMFx1MzAwYlwwXHUwMTU3XDBcdTAxNTdcMFx1MzAzY1wwXHUwMTU3IisKLSAgICAiXDBcdTMwNmRcMFx1MzA5ZVwwXHUzMGNmXDBcdTMxMDBcMFx1MDE1NyI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrUm93TWFwKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzMzM107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tSb3dNYXAoWlpfUk9XTUFQX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja1Jvd01hcChTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgaGlnaCA9IHBhY2tlZC5jaGFyQXQoaSsrKSA8PCAxNjsKLSAgICAgIHJlc3VsdFtqKytdID0gaGlnaCB8IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotICAvKiogCi0gICAqIFRoZSB0cmFuc2l0aW9uIHRhYmxlIG9mIHRoZSBERkEKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBbXSBaWl9UUkFOUyA9IHp6VW5wYWNrVHJhbnMoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfVFJBTlNfUEFDS0VEXzAgPQotICAgICJcMVwzXDFcNFwxXDVcMVw2XDFcN1wxXDEwXDFcMTFcMVwxMiIrCi0gICAgIlwxXDExXDFcMTNcMVwxNFwxXDE1XDFcMTZcMVwxN1wxXDIwXDFcMjEiKwotICAgICJcMVwyMlwxXDIzXDFcMjRcMVwyNVwxXDI2XDFcMjdcMVwzMFwxXDMxIisKLSAgICAiXDFcMzJcMVwzM1wxXDM0XDFcMTFcMVwzNVwxXDM2XDFcMzdcMVw0MCIrCi0gICAgIlwxXDQxXDFcNDJcMVw0M1wxXDQ0XDFcNDVcMVwxMVwxXDQ2XDFcNDciKwotICAgICJcMVw1MFwxXDExXDFcNTFcMVw1MlwxXDUzXDRcMTFcMTJcNFwxXDU0IisKLSAgICAiXDFcNTVcNDVcNFw2MVwwXDJcNTZcMVw1N1w1Nlw1NlwzXDYwXDFcNjEiKwotICAgICJcNTVcNjBcNFwwXDFcN1wxXDYyXDFcNjNcMzBcMFwxXDYzXDI1XDAiKwotICAgICJcMVw2MlwxXDY0XDU3XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDI3XDExIisKLSAgICAiXDEzXDBcMVw2NVw2MFwwXDFcNjZcNjZcMFwxXDY3XDYwXDBcMVw3MCIrCi0gICAgIlwxXDBcMVw3MVw1NlwwXDFcNzJcMlwwXDFcNzNcNjFcMFwxXDc0IisKLSAgICAiXDM3XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcMTFcMVw3NVw2XDExIisKLSAgICAiXDFcNzZcNVwxMVwxXDc3XDEwXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNFwxMVwxXDEwMFwxXDExXDFcMTAxXDFcMTAyXDFcMTFcMVwxMDMiKwotICAgICJcM1wxMVwxXDEwNFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwxMDVcM1wxMVwxXDEwNlwxNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDJcMTFcMVwxMDdcMlwxMVwxXDExMFwxMFwxMVwxXDExMSIrCi0gICAgIlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTFcMVwxMTIiKwotICAgICJcMTVcMTFcMVwxMTNcMVwxMVwxXDExNFwxXDExNVwxXDExNlwxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMVwxMTdcNFwxMVwxXDEyMFwyXDExIisKLSAgICAiXDFcMTIxXDVcMTFcMVwxMjJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMTIzXDJcMTFcMVwxMjRcNVwxMVwxXDEyNVwxMFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwxMjZcMVwxMjciKwotICAgICJcMVwxMVwxXDEzMFwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDFcMTFcMVwxMzFcM1wxMVwxXDEzMlw0XDExXDFcMTMzXDNcMTFcMVwxMzQiKwotICAgICJcN1wxMVwxXDEzNVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVwxMzZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExIisKLSAgICAiXDFcMTM3XDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTEiKwotICAgICJcMVwxNDBcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMSIrCi0gICAgIlwxXDE0MVwyXDExXDFcMTQyXDExXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDE0M1wzXDExXDFcMTQ0XDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTZcMTFcMVwxNDVcMTBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMFwxMVwxXDE0NlwxXDExXDFcMTQ3XDE0XDExIisKLSAgICAiXDEzXDBcMVwxNTBcNjNcMFwxXDE1MVw0NFwwXDFcNTZcNjFcMFwxXDYwIisKLSAgICAiXDYxXDBcMVw2MlwxXDBcMVw2M1wzMFwwXDFcNjNcMjVcMFwxXDE1MiIrCi0gICAgIlwyXDBcMVwxNTNcMVwwXDFcMTUzXDUzXDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwxNTRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw2XDExXDFcMTU1XDIwXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjFcMTFcMVwxNTZcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwxNTdcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw2XDExXDFcMTYwXDJcMTFcMVwxNjFcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMTYyXDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjRcMTFcMVwxNjNcMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVwxNjRcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxXDE2NVwyNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVwxNjZcMVwxNjdcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDE3MFw0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDE3MVwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDFcMTcyXDI2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwxMVwxXDE3M1wyNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDNcMTFcMVwxNzRcMjNcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxMVwxMVwxXDE3NVwxNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDIxXDExXDFcMTc2XDVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwyMVwxMVwxXDE3N1w1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNFwxMVwxXDIwMFwyMlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDFcMjAxXDNcMTFcMVwyMDJcMjJcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDIwM1wxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyMDRcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyNVwxMVwxXDIwNVwxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDIwNlwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMjA3XDRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDIxMFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDJcMTFcMVwyMTFcMjRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwzXDExXDFcMjEyXDZcMTFcMVwyMTNcMTRcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw0XDExXDFcMjE0XDIyXDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTFcMVwyMTVcMTRcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjE2XDEwXDExIisKLSAgICAiXDFcMjE3XDEwXDExXDRcMFwxXDE1Mlw2MFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwzXDExXDFcMjIwXDIzXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwyMjFcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyMVwxMVwxXDIyMlw1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjRcMTFcMVwyMjNcMlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMjI0XDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDIyNVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDIxXDExXDFcMjI2XDVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxXDIyN1wyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE0XDExXDFcMjMwXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMjFcMTFcMVwyMzFcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyMzJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDIzM1wxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEyXDExXDFcMjM0XDE0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzNVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyMzZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxNVwxMVwxXDIzN1wxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDJcMTFcMVwyNDBcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQxXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0MlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDNcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQ0XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTJcMTFcMVwyNDVcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw3XDExXDFcMjQ2XDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTFcMTFcMVwyNDdcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMFwxMVwxXDI1MFwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNTFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxNFwxMVwxXDI1MlwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE2XDExXDFcMjUzXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcM1wxMVwxXDI1NFwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNTVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxXDI1NlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcMjU3IisKLSAgICAiXDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNFwxMVwxXDI2MCIrCi0gICAgIlwyMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMjYxIisKLSAgICAiXDE2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDI2MiIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMjYzIisKLSAgICAiXDE2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTFcMVwyNjQiKwotICAgICJcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjY1IisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjFcMTFcMVwyNjYiKwotICAgICJcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyNjciKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyNlwxMVwxXDI3MCIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDI2XDExXDFcMjcxXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwyNzJcNFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDIxXDExXDFcMjczXDVcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMjc0XDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDI3NVwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwyNzZcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExXDFcMjc3XDI0XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMDBcMTVcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMzAxXDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTFcMVwzMDJcMTRcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzAzXDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTFcMVwzMDRcMTBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzA1XDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDMwNlwyMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwzMDdcMjFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxM1wxMVwxXDMxMFwxM1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTFcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzEyXDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDMxM1wyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTRcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMzE1XDIxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxNlwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMVwxMVwxXDMxN1wyMFwwXDI3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMjBcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMFwxMVwxXDMyMVwxNlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE1XDExXDFcMzIyXDExXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwzMjNcNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzI0XDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTNcMTFcMVwzMjVcMTNcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxN1wxMVwxXDMyNlw3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMyN1wxN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE3XDExXDFcMzMwXDdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMzMVwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDRcMTFcMVwzMzJcMjJcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcMzMzXDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcM1wxMVwxXDMzNFwyM1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzM1XDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMVwzMzZcMjZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcMzM3XDIxXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNFwxMVwxXDM0MFwyMlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDdcMTFcMVwzNDFcMTdcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxMVwxMVwxXDM0MlwxNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDZcMTFcMVwzNDNcMjBcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDFcMTFcMVwzNDRcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNDVcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMFwxMVwxXDM0NlwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDE2XDExXDFcMzQ3XDEwXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTRcMTFcMVwzNTBcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzUxXDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM1MlwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNTNcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw2XDExXDFcMzU0XDIwXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDM1NVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwzNTZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxXDM1N1wyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEwXDExXDFcMzYwXDE2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTFcMTFcMVwzNjFcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMzYyXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDM2M1wyXDExXDFcMzY0XDE2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXDM2NVwyMVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDFcMzY2XDI2XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTJcMTFcMVwzNjdcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDM3MFwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMzcxXDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcN1wxMVwxXDM3MlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDdcMTFcMVwzNzNcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzc0XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwzNzVcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw3XDExXDFcMzc2XDE3XDExXDRcMFwzXDExXDFcMFwxXDExIisKLSAgICAiXDFcMzc3XDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwyM1wxMVwxXHUwMTAwXDNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwzXDExXDFcdTAxMDFcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXHUwMTAyXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNlwxMVwxXHUwMTAzXDIwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXHUwMTA0XDIxXDExXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMDUiKwotICAgICJcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEwNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcdTAxMDciKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMVwxXHUwMTA4IisKLSAgICAiXDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMVwxXHUwMTA5IisKLSAgICAiXDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcdTAxMGEiKwotICAgICJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXHUwMTBiIisKLSAgICAiXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXHUwMTBjIisKLSAgICAiXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTRcMTFcMVx1MDEwZCIrCi0gICAgIlwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVx1MDEwZSIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcdTAxMGYiKwotICAgICJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTEwIisKLSAgICAiXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwxMVwxXHUwMTExIisKLSAgICAiXDI1XDExXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMTJcMjBcMFwyN1wxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTEzXDIwXDBcMjdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMVwxXHUwMTE0XDZcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDFcMTFcMVx1MDExNVwyMFwwXDI3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTZcMTFcMVx1MDExNlwxMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVx1MDExN1wyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIxXDExXDFcdTAxMThcNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEyXDExXDFcdTAxMTlcMTRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXHUwMTFhXDE0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXHUwMTFiXDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXHUwMTFjXDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwxXDExXDFcdTAxMWRcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDE2XDExXDFcdTAxMWVcMTBcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcdTAxMWZcMjJcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw3XDExXDFcdTAxMjBcMTdcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcdTAxMjFcMjFcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwyXDExXDFcdTAxMjJcMjRcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDFcMTFcMVx1MDEyM1wyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXHUwMTI0XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXHUwMTI1XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXHUwMTI2XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTJcMTFcMVx1MDEyN1wxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVx1MDEyOFwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcdTAxMjlcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw3XDExXDFcdTAxMmFcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxM1wxMVwxXHUwMTJiXDEzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNlwxMVwxXHUwMTJjXDIwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTNcMTFcMVx1MDEyZFwxM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEzXDExXDFcdTAxMmVcMTNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw3XDExXDFcdTAxMmZcMTdcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDEzMCIrCi0gICAgIlwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTMxXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTEiKwotICAgICJcMVx1MDEzMlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE0XDExIisKLSAgICAiXDFcdTAxMzNcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxMzRcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxMzVcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxMzZcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExIisKLSAgICAiXDFcdTAxMzdcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExIisKLSAgICAiXDFcdTAxMzhcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTM5XDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMSIrCi0gICAgIlwxXHUwMTNhXDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMlwxMSIrCi0gICAgIlwxXHUwMTNiXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMlwxMSIrCi0gICAgIlwxXHUwMTNjXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTEiKwotICAgICJcMVx1MDEzZFwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzZVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzZlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE1XDExIisKLSAgICAiXDFcdTAxNDBcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExIisKLSAgICAiXDFcdTAxNDFcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExIisKLSAgICAiXDFcdTAxNDJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMSIrCi0gICAgIlwxXHUwMTQzXDE0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMSIrCi0gICAgIlwxXHUwMTQ0XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTEiKwotICAgICJcMVx1MDE0NVw2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTEiKwotICAgICJcMVx1MDE0Nlw2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTRcMTEiKwotICAgICJcMVx1MDE0N1wxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE1XDExIisKLSAgICAiXDFcdTAxNDhcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXHUwMTQ5IisKLSAgICAiXDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVx1MDE0YSIrCi0gICAgIlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTFcMVx1MDE0YiIrCi0gICAgIlwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExXDFcdTAxNGMiKwotICAgICJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcdTAxNGQiKwotICAgICJcMTdcMTEiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja1RyYW5zKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzEyNTkzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja1RyYW5zKFpaX1RSQU5TX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja1RyYW5zKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAgICAgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSBvZmZzZXQ7ICAvKiBpbmRleCBpbiB1bnBhY2tlZCBhcnJheSAqLwotICAgIGludCBsID0gcGFja2VkLmxlbmd0aCgpOwotICAgIHdoaWxlIChpIDwgbCkgewotICAgICAgaW50IGNvdW50ID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgaW50IHZhbHVlID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgdmFsdWUtLTsKLSAgICAgIGRvIHJlc3VsdFtqKytdID0gdmFsdWU7IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLQotICAvKiBlcnJvciBjb2RlcyAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfVU5LTk9XTl9FUlJPUiA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9OT19NQVRDSCA9IDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9QVVNIQkFDS18yQklHID0gMjsKLQotICAvKiBlcnJvciBtZXNzYWdlcyBmb3IgdGhlIGNvZGVzIGFib3ZlICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9FUlJPUl9NU0dbXSA9IHsKLSAgICAiVW5rb3duIGludGVybmFsIHNjYW5uZXIgZXJyb3IiLAotICAgICJFcnJvcjogY291bGQgbm90IG1hdGNoIGlucHV0IiwKLSAgICAiRXJyb3I6IHB1c2hiYWNrIHZhbHVlIHdhcyB0b28gbGFyZ2UiCi0gIH07Ci0KLSAgLyoqCi0gICAqIFpaX0FUVFJJQlVURVthU3RhdGVdIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHN0YXRlIDxjb2RlPmFTdGF0ZTwvY29kZT4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBbXSBaWl9BVFRSSUJVVEUgPSB6elVucGFja0F0dHJpYnV0ZSgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9BVFRSSUJVVEVfUEFDS0VEXzAgPQotICAgICJcMlwwXDJcMTFcNVwxXDJcMTFcMlwxXDZcMTFcNFwxXDRcMTEiKwotICAgICJcMjJcMVwxXDBcMVwxXDFcMFwyXDFcMVwwXDExXDExXDUzXDEiKwotICAgICJcMlwxMVwxXDFcMVwwXDM0MlwxIjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tBdHRyaWJ1dGUoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMzMzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja0F0dHJpYnV0ZShaWl9BVFRSSUJVVEVfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrQXR0cmlidXRlKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAgICAgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSBvZmZzZXQ7ICAvKiBpbmRleCBpbiB1bnBhY2tlZCBhcnJheSAqLwotICAgIGludCBsID0gcGFja2VkLmxlbmd0aCgpOwotICAgIHdoaWxlIChpIDwgbCkgewotICAgICAgaW50IGNvdW50ID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgaW50IHZhbHVlID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgZG8gcmVzdWx0W2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotICAvKiogdGhlIGlucHV0IGRldmljZSAqLwotICBwcml2YXRlIGphdmEuaW8uUmVhZGVyIHp6UmVhZGVyOwotCi0gIC8qKiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgREZBICovCi0gIHByaXZhdGUgaW50IHp6U3RhdGU7Ci0KLSAgLyoqIHRoZSBjdXJyZW50IGxleGljYWwgc3RhdGUgKi8KLSAgcHJpdmF0ZSBpbnQgenpMZXhpY2FsU3RhdGUgPSBZWUlOSVRJQUw7Ci0KLSAgLyoqIHRoaXMgYnVmZmVyIGNvbnRhaW5zIHRoZSBjdXJyZW50IHRleHQgdG8gYmUgbWF0Y2hlZCBhbmQgaXMKLSAgICAgIHRoZSBzb3VyY2Ugb2YgdGhlIHl5dGV4dCgpIHN0cmluZyAqLwotICBwcml2YXRlIGNoYXIgenpCdWZmZXJbXSA9IG5ldyBjaGFyW1paX0JVRkZFUlNJWkVdOwotCi0gIC8qKiB0aGUgdGV4dHBvc2l0aW9uIGF0IHRoZSBsYXN0IGFjY2VwdGluZyBzdGF0ZSAqLwotICBwcml2YXRlIGludCB6ek1hcmtlZFBvczsKLQotICAvKiogdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyICovCi0gIHByaXZhdGUgaW50IHp6Q3VycmVudFBvczsKLQotICAvKiogc3RhcnRSZWFkIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHl5dGV4dCgpIHN0cmluZyBpbiB0aGUgYnVmZmVyICovCi0gIHByaXZhdGUgaW50IHp6U3RhcnRSZWFkOwotCi0gIC8qKiBlbmRSZWFkIG1hcmtzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLCB0aGF0IGhhcyBiZWVuIHJlYWQKLSAgICAgIGZyb20gaW5wdXQgKi8KLSAgcHJpdmF0ZSBpbnQgenpFbmRSZWFkOwotCi0gIC8qKiBudW1iZXIgb2YgbmV3bGluZXMgZW5jb3VudGVyZWQgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVkIHRleHQgKi8KLSAgcHJpdmF0ZSBpbnQgeXlsaW5lOwotCi0gIC8qKiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVkIHRleHQgKi8KLSAgcHJpdmF0ZSBpbnQgeXljaGFyOwotCi0gIC8qKgotICAgKiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGFzdCBuZXdsaW5lIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgCi0gICAqIG1hdGNoZWQgdGV4dAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgeXljb2x1bW47Ci0KLSAgLyoqIAotICAgKiB6ekF0Qk9MID09IHRydWUgPD0+IHRoZSBzY2FubmVyIGlzIGN1cnJlbnRseSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6QXRCT0wgPSB0cnVlOwotCi0gIC8qKiB6ekF0RU9GID09IHRydWUgPD0+IHRoZSBzY2FubmVyIGlzIGF0IHRoZSBFT0YgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6QXRFT0Y7Ci0KLSAgLyoqIGRlbm90ZXMgaWYgdGhlIHVzZXItRU9GLWNvZGUgaGFzIGFscmVhZHkgYmVlbiBleGVjdXRlZCAqLwotICBwcml2YXRlIGJvb2xlYW4genpFT0ZEb25lOwotCi0gIC8qIHVzZXIgY29kZTogKi8KLQlwdWJsaWMgaW50IGxpbmVubygpIHsgcmV0dXJuIHl5bGluZSArIDE7IH0KLQlwdWJsaWMgaW50IGNvbG5vKCkgeyByZXR1cm4geXljb2x1bW4gKyAxOyB9Ci0KLQlwcml2YXRlIFN5bWJvbCBzeW1ib2woaW50IHR5cGUpIHsKLQkJcmV0dXJuIG5ldyBTeW1ib2wodHlwZSwgbGluZW5vKCksIGNvbG5vKCkpOwotCX0KLQlwcml2YXRlIFN5bWJvbCBzeW1ib2woaW50IHR5cGUsIE9iamVjdCB2YWx1ZSkgewotCQlyZXR1cm4gbmV3IFN5bWJvbCh0eXBlLCBsaW5lbm8oKSwgY29sbm8oKSwgdmFsdWUpOwotCX0KLQotCXByaXZhdGUgaW50IGNvbW1lbnRMZXZlbCA9IDA7Ci0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBzY2FubmVyCi0gICAqIFRoZXJlIGlzIGFsc28gYSBqYXZhLmlvLklucHV0U3RyZWFtIHZlcnNpb24gb2YgdGhpcyBjb25zdHJ1Y3Rvci4KLSAgICoKLSAgICogQHBhcmFtICAgaW4gIHRoZSBqYXZhLmlvLlJlYWRlciB0byByZWFkIGlucHV0IGZyb20uCi0gICAqLwotICBYUGF0aEZsZXgoamF2YS5pby5SZWFkZXIgaW4pIHsKLSAgICB0aGlzLnp6UmVhZGVyID0gaW47Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBzY2FubmVyLgotICAgKiBUaGVyZSBpcyBhbHNvIGphdmEuaW8uUmVhZGVyIHZlcnNpb24gb2YgdGhpcyBjb25zdHJ1Y3Rvci4KLSAgICoKLSAgICogQHBhcmFtICAgaW4gIHRoZSBqYXZhLmlvLklucHV0c3RyZWFtIHRvIHJlYWQgaW5wdXQgZnJvbS4KLSAgICovCi0gIFhQYXRoRmxleChqYXZhLmlvLklucHV0U3RyZWFtIGluKSB7Ci0gICAgdGhpcyhuZXcgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcihpbikpOwotICB9Ci0KLSAgLyoqIAotICAgKiBVbnBhY2tzIHRoZSBjb21wcmVzc2VkIGNoYXJhY3RlciB0cmFuc2xhdGlvbiB0YWJsZS4KLSAgICoKLSAgICogQHBhcmFtIHBhY2tlZCAgIHRoZSBwYWNrZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlCi0gICAqIEByZXR1cm4gICAgICAgICB0aGUgdW5wYWNrZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjaGFyIFtdIHp6VW5wYWNrQ01hcChTdHJpbmcgcGFja2VkKSB7Ci0gICAgY2hhciBbXSBtYXAgPSBuZXcgY2hhclsweDEwMDAwXTsKLSAgICBpbnQgaSA9IDA7ICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gMDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgd2hpbGUgKGkgPCAxMzIpIHsKLSAgICAgIGludCAgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBjaGFyIHZhbHVlID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgZG8gbWFwW2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJlZmlsbHMgdGhlIGlucHV0IGJ1ZmZlci4KLSAgICoKLSAgICogQHJldHVybiAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiwgaWZmIHRoZXJlIHdhcyBuZXcgaW5wdXQuCi0gICAqIAotICAgKiBAZXhjZXB0aW9uICAgamF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnMKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB6elJlZmlsbCgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLQotICAgIC8qIGZpcnN0OiBtYWtlIHJvb20gKGlmIHlvdSBjYW4pICovCi0gICAgaWYgKHp6U3RhcnRSZWFkID4gMCkgewotICAgICAgU3lzdGVtLmFycmF5Y29weSh6ekJ1ZmZlciwgenpTdGFydFJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHp6QnVmZmVyLCAwLAotICAgICAgICAgICAgICAgICAgICAgICB6ekVuZFJlYWQtenpTdGFydFJlYWQpOwotCi0gICAgICAvKiB0cmFuc2xhdGUgc3RvcmVkIHBvc2l0aW9ucyAqLwotICAgICAgenpFbmRSZWFkLT0genpTdGFydFJlYWQ7Ci0gICAgICB6ekN1cnJlbnRQb3MtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6TWFya2VkUG9zLT0genpTdGFydFJlYWQ7Ci0gICAgICB6elN0YXJ0UmVhZCA9IDA7Ci0gICAgfQotCi0gICAgLyogaXMgdGhlIGJ1ZmZlciBiaWcgZW5vdWdoPyAqLwotICAgIGlmICh6ekN1cnJlbnRQb3MgPj0genpCdWZmZXIubGVuZ3RoKSB7Ci0gICAgICAvKiBpZiBub3Q6IGJsb3cgaXQgdXAgKi8KLSAgICAgIGNoYXIgbmV3QnVmZmVyW10gPSBuZXcgY2hhclt6ekN1cnJlbnRQb3MqMl07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHp6QnVmZmVyLCAwLCBuZXdCdWZmZXIsIDAsIHp6QnVmZmVyLmxlbmd0aCk7Ci0gICAgICB6ekJ1ZmZlciA9IG5ld0J1ZmZlcjsKLSAgICB9Ci0KLSAgICAvKiBmaW5hbGx5OiBmaWxsIHRoZSBidWZmZXIgd2l0aCBuZXcgaW5wdXQgKi8KLSAgICBpbnQgbnVtUmVhZCA9IHp6UmVhZGVyLnJlYWQoenpCdWZmZXIsIHp6RW5kUmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpCdWZmZXIubGVuZ3RoLXp6RW5kUmVhZCk7Ci0KLSAgICBpZiAobnVtUmVhZCA+IDApIHsKLSAgICAgIHp6RW5kUmVhZCs9IG51bVJlYWQ7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIHVubGlrZWx5IGJ1dCBub3QgaW1wb3NzaWJsZTogcmVhZCAwIGNoYXJhY3RlcnMsIGJ1dCBub3QgYXQgZW5kIG9mIHN0cmVhbSAgICAKLSAgICBpZiAobnVtUmVhZCA9PSAwKSB7Ci0gICAgICBpbnQgYyA9IHp6UmVhZGVyLnJlYWQoKTsKLSAgICAgIGlmIChjID09IC0xKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgenpCdWZmZXJbenpFbmRSZWFkKytdID0gKGNoYXIpIGM7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgIAotICAgIH0KLQotCS8vIG51bVJlYWQgPCAwCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAgIAotICAvKioKLSAgICogQ2xvc2VzIHRoZSBpbnB1dCBzdHJlYW0uCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eWNsb3NlKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgIHp6QXRFT0YgPSB0cnVlOyAgICAgICAgICAgIC8qIGluZGljYXRlIGVuZCBvZiBmaWxlICovCi0gICAgenpFbmRSZWFkID0genpTdGFydFJlYWQ7ICAvKiBpbnZhbGlkYXRlIGJ1ZmZlciAgICAqLwotCi0gICAgaWYgKHp6UmVhZGVyICE9IG51bGwpCi0gICAgICB6elJlYWRlci5jbG9zZSgpOwotICB9Ci0KLQotICAvKioKLSAgICogUmVzZXRzIHRoZSBzY2FubmVyIHRvIHJlYWQgZnJvbSBhIG5ldyBpbnB1dCBzdHJlYW0uCi0gICAqIERvZXMgbm90IGNsb3NlIHRoZSBvbGQgcmVhZGVyLgotICAgKgotICAgKiBBbGwgaW50ZXJuYWwgdmFyaWFibGVzIGFyZSByZXNldCwgdGhlIG9sZCBpbnB1dCBzdHJlYW0gCi0gICAqIDxiPmNhbm5vdDwvYj4gYmUgcmV1c2VkIChpbnRlcm5hbCBidWZmZXIgaXMgZGlzY2FyZGVkIGFuZCBsb3N0KS4KLSAgICogTGV4aWNhbCBzdGF0ZSBpcyBzZXQgdG8gPHR0PlpaX0lOSVRJQUw8L3R0Pi4KLSAgICoKLSAgICogQHBhcmFtIHJlYWRlciAgIHRoZSBuZXcgaW5wdXQgc3RyZWFtIAotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgeXlyZXNldChqYXZhLmlvLlJlYWRlciByZWFkZXIpIHsKLSAgICB6elJlYWRlciA9IHJlYWRlcjsKLSAgICB6ekF0Qk9MICA9IHRydWU7Ci0gICAgenpBdEVPRiAgPSBmYWxzZTsKLSAgICB6ekVPRkRvbmUgPSBmYWxzZTsKLSAgICB6ekVuZFJlYWQgPSB6elN0YXJ0UmVhZCA9IDA7Ci0gICAgenpDdXJyZW50UG9zID0genpNYXJrZWRQb3MgPSAwOwotICAgIHl5bGluZSA9IHl5Y2hhciA9IHl5Y29sdW1uID0gMDsKLSAgICB6ekxleGljYWxTdGF0ZSA9IFlZSU5JVElBTDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGV4aWNhbCBzdGF0ZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBpbnQgeXlzdGF0ZSgpIHsKLSAgICByZXR1cm4genpMZXhpY2FsU3RhdGU7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBFbnRlcnMgYSBuZXcgbGV4aWNhbCBzdGF0ZQotICAgKgotICAgKiBAcGFyYW0gbmV3U3RhdGUgdGhlIG5ldyBsZXhpY2FsIHN0YXRlCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eWJlZ2luKGludCBuZXdTdGF0ZSkgewotICAgIHp6TGV4aWNhbFN0YXRlID0gbmV3U3RhdGU7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIGN1cnJlbnQgcmVndWxhciBleHByZXNzaW9uLgotICAgKi8KLSAgcHVibGljIGZpbmFsIFN0cmluZyB5eXRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmcoIHp6QnVmZmVyLCB6elN0YXJ0UmVhZCwgenpNYXJrZWRQb3MtenpTdGFydFJlYWQgKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYXJhY3RlciBhdCBwb3NpdGlvbiA8dHQ+cG9zPC90dD4gZnJvbSB0aGUgCi0gICAqIG1hdGNoZWQgdGV4dC4gCi0gICAqIAotICAgKiBJdCBpcyBlcXVpdmFsZW50IHRvIHl5dGV4dCgpLmNoYXJBdChwb3MpLCBidXQgZmFzdGVyCi0gICAqCi0gICAqIEBwYXJhbSBwb3MgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgdG8gZmV0Y2guIAotICAgKiAgICAgICAgICAgIEEgdmFsdWUgZnJvbSAwIHRvIHl5bGVuZ3RoKCktMS4KLSAgICoKLSAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIHBvcwotICAgKi8KLSAgcHVibGljIGZpbmFsIGNoYXIgeXljaGFyYXQoaW50IHBvcykgewotICAgIHJldHVybiB6ekJ1ZmZlclt6elN0YXJ0UmVhZCtwb3NdOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaGVkIHRleHQgcmVnaW9uLgotICAgKi8KLSAgcHVibGljIGZpbmFsIGludCB5eWxlbmd0aCgpIHsKLSAgICByZXR1cm4genpNYXJrZWRQb3MtenpTdGFydFJlYWQ7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXBvcnRzIGFuIGVycm9yIHRoYXQgb2NjdXJlZCB3aGlsZSBzY2FubmluZy4KLSAgICoKLSAgICogSW4gYSB3ZWxsZm9ybWVkIHNjYW5uZXIgKG5vIG9yIG9ubHkgY29ycmVjdCB1c2FnZSBvZiAKLSAgICogeXlwdXNoYmFjayhpbnQpIGFuZCBhIG1hdGNoLWFsbCBmYWxsYmFjayBydWxlKSB0aGlzIG1ldGhvZCAKLSAgICogd2lsbCBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoaW5ncyB0aGF0ICJDYW4ndCBQb3NzaWJseSBIYXBwZW4iLgotICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmcKLSAgICogKGUuZy4gYSBKRmxleCBidWcgcHJvZHVjaW5nIGEgZmF1bHR5IHNjYW5uZXIgZXRjLikuCi0gICAqCi0gICAqIFVzdWFsIHN5bnRheC9zY2FubmVyIGxldmVsIGVycm9yIGhhbmRsaW5nIHNob3VsZCBiZSBkb25lCi0gICAqIGluIGVycm9yIGZhbGxiYWNrIHJ1bGVzLgotICAgKgotICAgKiBAcGFyYW0gICBlcnJvckNvZGUgIHRoZSBjb2RlIG9mIHRoZSBlcnJvcm1lc3NhZ2UgdG8gZGlzcGxheQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHp6U2NhbkVycm9yKGludCBlcnJvckNvZGUpIHsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICB0cnkgewotICAgICAgbWVzc2FnZSA9IFpaX0VSUk9SX01TR1tlcnJvckNvZGVdOwotICAgIH0KLSAgICBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2UgPSBaWl9FUlJPUl9NU0dbWlpfVU5LTk9XTl9FUlJPUl07Ci0gICAgfQotCi0gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOwotICB9IAotCi0KLSAgLyoqCi0gICAqIFB1c2hlcyB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGJhY2sgaW50byB0aGUgaW5wdXQgc3RyZWFtLgotICAgKgotICAgKiBUaGV5IHdpbGwgYmUgcmVhZCBhZ2FpbiBieSB0aGVuIG5leHQgY2FsbCBvZiB0aGUgc2Nhbm5pbmcgbWV0aG9kCi0gICAqCi0gICAqIEBwYXJhbSBudW1iZXIgIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZWFkIGFnYWluLgotICAgKiAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4geXlsZW5ndGgoKSEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHl5cHVzaGJhY2soaW50IG51bWJlcikgIHsKLSAgICBpZiAoIG51bWJlciA+IHl5bGVuZ3RoKCkgKQotICAgICAgenpTY2FuRXJyb3IoWlpfUFVTSEJBQ0tfMkJJRyk7Ci0KLSAgICB6ek1hcmtlZFBvcyAtPSBudW1iZXI7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBDb250YWlucyB1c2VyIEVPRi1jb2RlLCB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSwKLSAgICogd2hlbiB0aGUgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHp6RG9FT0YoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKCF6ekVPRkRvbmUpIHsKLSAgICAgIHp6RU9GRG9uZSA9IHRydWU7Ci0gICAgICB5eWNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogUmVzdW1lcyBzY2FubmluZyB1bnRpbCB0aGUgbmV4dCByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZCwKLSAgICogdGhlIGVuZCBvZiBpbnB1dCBpcyBlbmNvdW50ZXJlZCBvciBhbiBJL08tRXJyb3Igb2NjdXJzLgotICAgKgotICAgKiBAcmV0dXJuICAgICAgdGhlIG5leHQgdG9rZW4KLSAgICogQGV4Y2VwdGlvbiAgIGphdmEuaW8uSU9FeGNlcHRpb24gIGlmIGFueSBJL08tRXJyb3Igb2NjdXJzCi0gICAqLwotICBwdWJsaWMgamF2YV9jdXAucnVudGltZS5TeW1ib2wgbmV4dF90b2tlbigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICBpbnQgenpJbnB1dDsKLSAgICBpbnQgenpBY3Rpb247Ci0KLSAgICAvLyBjYWNoZWQgZmllbGRzOgotICAgIGludCB6ekN1cnJlbnRQb3NMOwotICAgIGludCB6ek1hcmtlZFBvc0w7Ci0gICAgaW50IHp6RW5kUmVhZEwgPSB6ekVuZFJlYWQ7Ci0gICAgY2hhciBbXSB6ekJ1ZmZlckwgPSB6ekJ1ZmZlcjsKLSAgICBjaGFyIFtdIHp6Q01hcEwgPSBaWl9DTUFQOwotCi0gICAgaW50IFtdIHp6VHJhbnNMID0gWlpfVFJBTlM7Ci0gICAgaW50IFtdIHp6Um93TWFwTCA9IFpaX1JPV01BUDsKLSAgICBpbnQgW10genpBdHRyTCA9IFpaX0FUVFJJQlVURTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICB6ek1hcmtlZFBvc0wgPSB6ek1hcmtlZFBvczsKLQotICAgICAgYm9vbGVhbiB6elIgPSBmYWxzZTsKLSAgICAgIGZvciAoenpDdXJyZW50UG9zTCA9IHp6U3RhcnRSZWFkOyB6ekN1cnJlbnRQb3NMIDwgenpNYXJrZWRQb3NMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp6Q3VycmVudFBvc0wrKykgewotICAgICAgICBzd2l0Y2ggKHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMXSkgewotICAgICAgICBjYXNlICdcdTAwMEInOgotICAgICAgICBjYXNlICdcdTAwMEMnOgotICAgICAgICBjYXNlICdcdTAwODUnOgotICAgICAgICBjYXNlICdcdTIwMjgnOgotICAgICAgICBjYXNlICdcdTIwMjknOgotICAgICAgICAgIHl5bGluZSsrOwotICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB6elIgPSBmYWxzZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgIHl5bGluZSsrOwotICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB6elIgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgaWYgKHp6UikKLSAgICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgICB5eWNvbHVtbiA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIHl5Y29sdW1uKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHp6UikgewotICAgICAgICAvLyBwZWVrIG9uZSBjaGFyYWN0ZXIgYWhlYWQgaWYgaXQgaXMgXG4gKGlmIHdlIGhhdmUgY291bnRlZCBvbmUgbGluZSB0b28gbXVjaCkKLSAgICAgICAgYm9vbGVhbiB6elBlZWs7Ci0gICAgICAgIGlmICh6ek1hcmtlZFBvc0wgPCB6ekVuZFJlYWRMKQotICAgICAgICAgIHp6UGVlayA9IHp6QnVmZmVyTFt6ek1hcmtlZFBvc0xdID09ICdcbic7Ci0gICAgICAgIGVsc2UgaWYgKHp6QXRFT0YpCi0gICAgICAgICAgenpQZWVrID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGJvb2xlYW4gZW9mID0genpSZWZpbGwoKTsKLSAgICAgICAgICB6ekVuZFJlYWRMID0genpFbmRSZWFkOwotICAgICAgICAgIHp6TWFya2VkUG9zTCA9IHp6TWFya2VkUG9zOwotICAgICAgICAgIHp6QnVmZmVyTCA9IHp6QnVmZmVyOwotICAgICAgICAgIGlmIChlb2YpIAotICAgICAgICAgICAgenpQZWVrID0gZmFsc2U7Ci0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHp6UGVlayA9IHp6QnVmZmVyTFt6ek1hcmtlZFBvc0xdID09ICdcbic7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHp6UGVlaykgeXlsaW5lLS07Ci0gICAgICB9Ci0gICAgICB6ekFjdGlvbiA9IC0xOwotCi0gICAgICB6ekN1cnJlbnRQb3NMID0genpDdXJyZW50UG9zID0genpTdGFydFJlYWQgPSB6ek1hcmtlZFBvc0w7Ci0gIAotICAgICAgenpTdGF0ZSA9IFpaX0xFWFNUQVRFW3p6TGV4aWNhbFN0YXRlXTsKLQotCi0gICAgICB6ekZvckFjdGlvbjogewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgIAotICAgICAgICAgIGlmICh6ekN1cnJlbnRQb3NMIDwgenpFbmRSZWFkTCkKLSAgICAgICAgICAgIHp6SW5wdXQgPSB6ekJ1ZmZlckxbenpDdXJyZW50UG9zTCsrXTsKLSAgICAgICAgICBlbHNlIGlmICh6ekF0RU9GKSB7Ci0gICAgICAgICAgICB6eklucHV0ID0gWVlFT0Y7Ci0gICAgICAgICAgICBicmVhayB6ekZvckFjdGlvbjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBzdG9yZSBiYWNrIGNhY2hlZCBwb3NpdGlvbnMKLSAgICAgICAgICAgIHp6Q3VycmVudFBvcyAgPSB6ekN1cnJlbnRQb3NMOwotICAgICAgICAgICAgenpNYXJrZWRQb3MgICA9IHp6TWFya2VkUG9zTDsKLSAgICAgICAgICAgIGJvb2xlYW4gZW9mID0genpSZWZpbGwoKTsKLSAgICAgICAgICAgIC8vIGdldCB0cmFuc2xhdGVkIHBvc2l0aW9ucyBhbmQgcG9zc2libHkgbmV3IGJ1ZmZlcgotICAgICAgICAgICAgenpDdXJyZW50UG9zTCAgPSB6ekN1cnJlbnRQb3M7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvc0wgICA9IHp6TWFya2VkUG9zOwotICAgICAgICAgICAgenpCdWZmZXJMICAgICAgPSB6ekJ1ZmZlcjsKLSAgICAgICAgICAgIHp6RW5kUmVhZEwgICAgID0genpFbmRSZWFkOwotICAgICAgICAgICAgaWYgKGVvZikgewotICAgICAgICAgICAgICB6eklucHV0ID0gWVlFT0Y7Ci0gICAgICAgICAgICAgIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIHp6SW5wdXQgPSB6ekJ1ZmZlckxbenpDdXJyZW50UG9zTCsrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaW50IHp6TmV4dCA9IHp6VHJhbnNMWyB6elJvd01hcExbenpTdGF0ZV0gKyB6ekNNYXBMW3p6SW5wdXRdIF07Ci0gICAgICAgICAgaWYgKHp6TmV4dCA9PSAtMSkgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgenpTdGF0ZSA9IHp6TmV4dDsKLQotICAgICAgICAgIGludCB6ekF0dHJpYnV0ZXMgPSB6ekF0dHJMW3p6U3RhdGVdOwotICAgICAgICAgIGlmICggKHp6QXR0cmlidXRlcyAmIDEpID09IDEgKSB7Ci0gICAgICAgICAgICB6ekFjdGlvbiA9IHp6U3RhdGU7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvc0wgPSB6ekN1cnJlbnRQb3NMOwotICAgICAgICAgICAgaWYgKCAoenpBdHRyaWJ1dGVzICYgOCkgPT0gOCApIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIHN0b3JlIGJhY2sgY2FjaGVkIHBvc2l0aW9uCi0gICAgICB6ek1hcmtlZFBvcyA9IHp6TWFya2VkUG9zTDsKLQotICAgICAgc3dpdGNoICh6ekFjdGlvbiA8IDAgPyB6ekFjdGlvbiA6IFpaX0FDVElPTlt6ekFjdGlvbl0pIHsKLSAgICAgICAgY2FzZSA3NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFOQ0VTVE9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTI6IGJyZWFrOwotICAgICAgICBjYXNlIDU2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVRFTSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDkzOiBicmVhazsKLSAgICAgICAgY2FzZSA0NjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTQ6IGJyZWFrOwotICAgICAgICBjYXNlIDgxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVTQ0VOREFOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk1OiBicmVhazsKLSAgICAgICAgY2FzZSAxNTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVRVUFMUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk2OiBicmVhazsKLSAgICAgICAgY2FzZSAzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5URUdFUiwgbmV3IEJpZ0ludGVnZXIoeXl0ZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTc6IGJyZWFrOwotICAgICAgICBjYXNlIDM5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVEpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTEVNRU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTk6IGJyZWFrOwotICAgICAgICBjYXNlIDc3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkFNRVNQQUNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAwOiBicmVhazsKLSAgICAgICAgY2FzZSAzNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAxOiBicmVhazsKLSAgICAgICAgY2FzZSAyMzogCi0gICAgICAgICAgeyAvLyBnZXQgcmlkIG9mIHF1b3RlcwotCQkJCVN0cmluZyBzdHIgPSB5eXRleHQoKTsKLQkJCQlhc3NlcnQgc3RyLmxlbmd0aCgpID49IDI7Ci0JCQkJcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TVFJJTkcsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5MaXRlcmFsVXRpbHMudW5xdW90ZShzdHIpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAyOiBicmVhazsKLSAgICAgICAgY2FzZSAxOiAKLSAgICAgICAgICB7IFN0cmluZyBlcnIgPSAiVW5rbm93biBjaGFyYWN0ZXIgYXQgbGluZSAiICsgbGluZW5vKCk7IAotCQllcnIgKz0gIiBjb2wgIiArIGNvbG5vKCk7Ci0JCWVyciArPSAiOiAiICsgeXl0ZXh0KCk7IAotCQkJICAgICAKLQkJdGhyb3cgbmV3IEpGbGV4RXJyb3IoZXJyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAzOiBicmVhazsKLSAgICAgICAgY2FzZSAyMDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTU1BKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTA0OiBicmVhazsKLSAgICAgICAgY2FzZSA3MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDU6IGJyZWFrOwotICAgICAgICBjYXNlIDM4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDY6IGJyZWFrOwotICAgICAgICBjYXNlIDMwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU19MRVNTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTA3OiBicmVhazsKLSAgICAgICAgY2FzZSA2NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRSRUFUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTA4OiBicmVhazsKLSAgICAgICAgY2FzZSAxMzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDk6IGJyZWFrOwotICAgICAgICBjYXNlIDY2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVU5JT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTA6IGJyZWFrOwotICAgICAgICBjYXNlIDIxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9MTEFSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTExOiBicmVhazsKLSAgICAgICAgY2FzZSA4NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNDSEVNQV9FTEVNRU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTEyOiBicmVhazsKLSAgICAgICAgY2FzZSAzNTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTEzOiBicmVhazsKLSAgICAgICAgY2FzZSA0MzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE0OiBicmVhazsKLSAgICAgICAgY2FzZSAyNTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVERPVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UWVBFU1dJVENIKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE2OiBicmVhazsKLSAgICAgICAgY2FzZSA1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkNOQU1FLCB5eXRleHQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExNzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERUNJTUFMLCBuZXcgQmlnRGVjaW1hbCh5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTg6IGJyZWFrOwotICAgICAgICBjYXNlIDE5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVRfU1lNKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE5OiBicmVhazsKLSAgICAgICAgY2FzZSAyOTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NFUVVBTCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjY6IAotICAgICAgICAgIHsgY29tbWVudExldmVsKys7IC8vIGludCBvdmVyZmxvdyA9UAotCQkJICB5eWJlZ2luKENPTU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjE6IGJyZWFrOwotICAgICAgICBjYXNlIDgzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9DVU1FTlRfTk9ERSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIU0xBU0gpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjM6IGJyZWFrOwotICAgICAgICBjYXNlIDE4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SV0FSRF9TTEFTSCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FWENFUFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjU6IGJyZWFrOwotICAgICAgICBjYXNlIDg5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUFJFQ0VESU5HX1NJQkxJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjY6IGJyZWFrOwotICAgICAgICBjYXNlIDczOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5TVEFOQ0UpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjc6IGJyZWFrOwotICAgICAgICBjYXNlIDU3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRUxTRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyOTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDc6IAotICAgICAgICAgIHsgY29tbWVudExldmVsKys7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UTyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMjogYnJlYWs7Ci0gICAgICAgIGNhc2UgODQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTVBUWV9TRVFVRU5DRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMzogYnJlYWs7Ci0gICAgICAgIGNhc2UgODA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzQ6IGJyZWFrOwotICAgICAgICBjYXNlIDMxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1JFQVRFUkVRVUFMKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTM1OiBicmVhazsKLSAgICAgICAgY2FzZSA4NzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFOQ0VTVE9SX09SX1NFTEYpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzY6IGJyZWFrOwotICAgICAgICBjYXNlIDc4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVRUUklCVVRFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTM3OiBicmVhazsKLSAgICAgICAgY2FzZSA4NjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNDSEVNQV9BVFRSSUJVVEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzg6IGJyZWFrOwotICAgICAgICBjYXNlIDc5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9MTE9XSU5HKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTM5OiBicmVhazsKLSAgICAgICAgY2FzZSA1MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QSVBFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQxOiBicmVhazsKLSAgICAgICAgY2FzZSAyMjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlFVRVNUSU9OTUFSSyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0MzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFUlNFQ1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDQ6IGJyZWFrOwotICAgICAgICBjYXNlIDQ4OiAKLSAgICAgICAgICB7IGNvbW1lbnRMZXZlbC0tOyAKLQkJCSAgaWYoY29tbWVudExldmVsID09IDApCi0JCSAgICAgICAgICAJeXliZWdpbihZWUlOSVRJQUwpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDU6IGJyZWFrOwotICAgICAgICBjYXNlIDQ0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT0YpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDY6IGJyZWFrOwotICAgICAgICBjYXNlIDYzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0hJTEQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDc6IGJyZWFrOwotICAgICAgICBjYXNlIDQwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDg6IGJyZWFrOwotICAgICAgICBjYXNlIDU4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0VMRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT0xPTkNPTE9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUwOiBicmVhazsKLSAgICAgICAgY2FzZSA1MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRJVik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1MTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkdfU0lCTElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5URVhUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUzOiBicmVhazsKLSAgICAgICAgY2FzZSA2ODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJFVFVSTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5NT0QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTU6IGJyZWFrOwotICAgICAgICBjYXNlIDY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QTFVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU2OiBicmVhazsKLSAgICAgICAgY2FzZSAyODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5PVEVRVUFMUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSX0dSRUFURVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTg6IGJyZWFrOwotICAgICAgICBjYXNlIDY0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVZFUlkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTk6IGJyZWFrOwotICAgICAgICBjYXNlIDcyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVEFCTEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjA6IGJyZWFrOwotICAgICAgICBjYXNlIDkwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVTQ0VOREFOVF9PUl9TRUxGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYxOiBicmVhazsKLSAgICAgICAgY2FzZSA3NjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNBVElTRklFUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYzOiBicmVhazsKLSAgICAgICAgY2FzZSAxNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NUSEFOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY0OiBicmVhazsKLSAgICAgICAgY2FzZSA1NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNBU1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjU6IGJyZWFrOwotICAgICAgICBjYXNlIDEyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUlBBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjogCi0gICAgICAgICAgeyAvKiBpZ25vcmUgKi8KLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY3OiBicmVhazsKLSAgICAgICAgY2FzZSAxMDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxCUkFDS0VUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY4OiBicmVhazsKLSAgICAgICAgY2FzZSA2MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5PREUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjk6IGJyZWFrOwotICAgICAgICBjYXNlIDU1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSURJVik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET1VCTEUsIG5ldyBEb3VibGUoeXl0ZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTcxOiBicmVhazsKLSAgICAgICAgY2FzZSA2MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRIRU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzI6IGJyZWFrOwotICAgICAgICBjYXNlIDU5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU09NRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QQVJFTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzQ6IGJyZWFrOwotICAgICAgICBjYXNlIDc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5NSU5VUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SQlJBQ0tFVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc5OiBicmVhazsKLSAgICAgICAgY2FzZSA1MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFORCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxQQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxODE6IGJyZWFrOwotICAgICAgICBjYXNlIDk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT0xPTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MjogYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgIGlmICh6eklucHV0ID09IFlZRU9GICYmIHp6U3RhcnRSZWFkID09IHp6Q3VycmVudFBvcykgewotICAgICAgICAgICAgenpBdEVPRiA9IHRydWU7Ci0gICAgICAgICAgICB6ekRvRU9GKCk7Ci0gICAgICAgICAgICAgIHsgcmV0dXJuIG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbChzeW0uRU9GKTsgfQotICAgICAgICAgIH0gCi0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB6elNjYW5FcnJvcihaWl9OT19NQVRDSCk7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmN1cCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmN1cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2MmI3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5jdXAKKysrIC9kZXYvbnVsbApAQCAtMSw3NzEgKzAsMCBAQAotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotLy8gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gKgotLy8gKiBDb250cmlidXRvcnM6Ci0vLyAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0vLyAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjY5ODMzIC0gQSB3b3JrIGFyb3VuZCBmb3IgdGhlIGtleXdvcmQgaW4gbm9kZSBpc3N1ZS4KLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODMyMTQgLSBmaXggSUYgVEhFTiBFTFNFIHBhcnNpbmcgYW5kIHVwZGF0ZSBncmFtbWFycwotLy8gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBGaXhlZCBXaWxkY2FyZCBhbmQgTkNOYW1lIGlzc3VlLiAKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyOTc3MDcgLSBNaXNzaW5nIHRoZSBlbXB0eS1zZXF1ZW5jZSgpIHR5cGUKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAzMTE0ODAgLSBmaXggcHJvYmxlbSB3aXRoIG5hbWUgbWF0Y2hpbmcgb24ga2V5d29yZHMgCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLSAKLXBhcnNlciBjb2RlIAl7OgotCi1wdWJsaWMgdm9pZCByZXBvcnRfZXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBpbmZvKSB7Ci0JU3RyaW5nIGVyciA9ICJQYXJzZXIgZXJyb3I6ICI7Ci0KLQlYUGF0aEZsZXggbGV4ZXIgPSAoWFBhdGhGbGV4KSBnZXRTY2FubmVyKCk7Ci0KLQllcnIgKz0gImxpbmUgIiArIGxleGVyLmxpbmVubygpOwotCWVyciArPSAiIGNvbCAiICsgbGV4ZXIuY29sbm8oKTsKLQllcnIgKz0gIjogIiArIGxleGVyLnl5dGV4dCgpOwotCi0JCi0JdGhyb3cgbmV3IEN1cEVycm9yKGVycik7Ci19Ci06fQotCi0KLQotdGVybWluYWwgTEJSQUNLRVQsIFJCUkFDS0VULCBMUEFSLCBSUEFSOwotdGVybWluYWwgUExVUywgTUlOVVMsIFNUQVIsIFBJUEU7Ci10ZXJtaW5hbCBFUVVBTFMsIE5PVEVRVUFMUywgTEVTU1RIQU4sIExFU1NFUVVBTCwgR1JFQVRFUiwgR1JFQVRFUkVRVUFMOwotdGVybWluYWwgTEVTU19MRVNTLCBHUkVBVEVSX0dSRUFURVI7Ci10ZXJtaW5hbCBGT1JXQVJEX1NMQVNILCBGT1JXQVJEX1NMQVNIU0xBU0g7Ci10ZXJtaW5hbCBDT0xPTkNPTE9OLCBBVF9TWU0sIERPVERPVCwgQ09MT04sIENPTU1BLCBET0xMQVIsIERPVCwgUVVFU1RJT05NQVJLOwotCi10ZXJtaW5hbCBTdHJpbmcgQ0hJTEQsIERFU0NFTkRBTlQsIEFUVFJJQlVURSwgU0VMRiwgREVTQ0VOREFOVF9PUl9TRUxGOwotdGVybWluYWwgU3RyaW5nIEZPTExPV0lOR19TSUJMSU5HLCBGT0xMT1dJTkcsIE5BTUVTUEFDRSwgUEFSRU5UOwotdGVybWluYWwgU3RyaW5nIEFOQ0VTVE9SLCBQUkVDRURJTkdfU0lCTElORywgUFJFQ0VESU5HLCBBTkNFU1RPUl9PUl9TRUxGOwotdGVybWluYWwgRVEsIE5FLCBMVCwgTEUsIEdULCBHRTsKLXRlcm1pbmFsIFN0cmluZyBESVYsIElESVYsIE1PRDsKLXRlcm1pbmFsIFN0cmluZyBVTklPTiwgSU5URVJTRUNULCBFWENFUFQ7Ci10ZXJtaW5hbCBTdHJpbmcgSU5TVEFOQ0UsIE9GLCBUUkVBVCwgQVMsIENBU1RBQkxFLCBDQVNULCBJUzsKLXRlcm1pbmFsIFN0cmluZyBGT1IsIElOLCBSRVRVUk4sIFNBVElTRklFUywgVE87Ci10ZXJtaW5hbCBTdHJpbmcgU09NRSwgRVZFUlk7Ci10ZXJtaW5hbCBTdHJpbmcgSUYsIFRIRU4sIEVMU0U7Ci10ZXJtaW5hbCBTdHJpbmcgQU5ELCBPUjsKLXRlcm1pbmFsIEVNUFRZX1NFUVVFTkNFLCBJVEVNLCBOT0RFLCBET0NVTUVOVF9OT0RFLCBURVhULCBDT01NRU5UOwotdGVybWluYWwgUFJPQ0VTU0lOR19JTlNUUlVDVElPTiwgU0NIRU1BX0FUVFJJQlVURSwgRUxFTUVOVCwgU0NIRU1BX0VMRU1FTlQ7Ci0vLyBVbnVzZWQgaW4gWFBhdGggMiwgYnV0IHJlc2VydmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggWFF1ZXJ5Ci10ZXJtaW5hbCBUWVBFU1dJVENIOwotCi10ZXJtaW5hbCBCaWdJbnRlZ2VyIElOVEVHRVI7Ci10ZXJtaW5hbCBEb3VibGUgRE9VQkxFOwotdGVybWluYWwgQmlnRGVjaW1hbCBERUNJTUFMOwotdGVybWluYWwgU3RyaW5nIFNUUklORywgTkNOQU1FOwotCi0KLW5vbiB0ZXJtaW5hbCBTdHJpbmcgTkNOYW1lLCBVbnJlc2VydmVkTkNOYW1lLCBQcmVmaXgsIExvY2FsUGFydDsKLW5vbiB0ZXJtaW5hbCBTdHJpbmdMaXRlcmFsIFN0cmluZ0xpdGVyYWw7Ci1ub24gdGVybWluYWwgUU5hbWUgRWxlbWVudERlY2xhcmF0aW9uLCBFbGVtZW50TmFtZU9yV2lsZGNhcmQsIFR5cGVOYW1lLCBFbGVtZW50TmFtZTsKLW5vbiB0ZXJtaW5hbCBRTmFtZSBBdHRyaWJ1dGVEZWNsYXJhdGlvbiwgQXR0cmliTmFtZU9yV2lsZGNhcmQsIEF0dHJpYnV0ZU5hbWU7Ci1ub24gdGVybWluYWwgUU5hbWUgQXRvbWljVHlwZSwgUU5hbWUsIFVucmVzZXJ2ZWRRTmFtZSwgVmFyTmFtZSwgV2lsZGNhcmQ7Ci1ub24gdGVybWluYWwgSW50ZWdlciBPY2N1cnJlbmNlSW5kaWNhdG9yLCBSZXZlcnNlQXhpcywgRm9yd2FyZEF4aXMsIE5vZGVDb21wOwotbm9uIHRlcm1pbmFsIEl0ZW1UeXBlIEl0ZW1UeXBlOwotbm9uIHRlcm1pbmFsIENvbGxlY3Rpb24gRnVuY3Rpb25DYWxsTWlkZGxlLCBQYXJlbnRoZXNpemVkRXhwciwgRXhwcjsKLW5vbiB0ZXJtaW5hbCBDb2xsZWN0aW9uIFByZWRpY2F0ZUxpc3QsIFF1YW50aWZpZWRFeHByTWlkZGxlLCBTaW1wbGVGb3JDbGF1c2U7Ci1ub24gdGVybWluYWwgUHJpbWFyeUV4cHIgUHJpbWFyeUV4cHI7Ci1ub24gdGVybWluYWwgTm9kZVRlc3QgTm9kZVRlc3Q7Ci1ub24gdGVybWluYWwgUmV2ZXJzZVN0ZXAgUmV2ZXJzZVN0ZXAsIEFiYnJldlJldmVyc2VTdGVwOwotbm9uIHRlcm1pbmFsIEZvcndhcmRTdGVwIEZvcndhcmRTdGVwLCBBYmJyZXZGb3J3YXJkU3RlcDsKLW5vbiB0ZXJtaW5hbCBTdGVwRXhwciBTdGVwRXhwcjsKLW5vbiB0ZXJtaW5hbCBYUGF0aEV4cHIgUmVsYXRpdmVQYXRoRXhwcjsKLW5vbiB0ZXJtaW5hbCBFeHByIFVuYXJ5RXhwcjsKLW5vbiB0ZXJtaW5hbCBTaW5nbGVUeXBlIFNpbmdsZVR5cGU7Ci1ub24gdGVybWluYWwgU2VxdWVuY2VUeXBlIFNlcXVlbmNlVHlwZTsKLW5vbiB0ZXJtaW5hbCBFeHByIFRyZWF0RXhwciwgQ2FzdGFibGVFeHByLCBJbnN0YW5jZW9mRXhwciwgQ2FzdEV4cHI7Ci1ub24gdGVybWluYWwgRXhwciBVbmlvbkV4cHIsIE11bHRpcGxpY2F0aXZlRXhwciwgSW50ZXJzZWN0RXhjZXB0RXhwciwgRXhwclNpbmdsZTsKLW5vbiB0ZXJtaW5hbCBFeHByIEFkZGl0aXZlRXhwcjsKLW5vbiB0ZXJtaW5hbCBJbnRlZ2VyIEdlbmVyYWxDb21wLCBWYWx1ZUNvbXA7Ci1ub24gdGVybWluYWwgRXhwciBBbmRFeHByLCBPckV4cHIsIFJhbmdlRXhwciwgQ29tcGFyaXNvbkV4cHI7Ci1ub24gdGVybWluYWwgTmFtZVRlc3QgTmFtZVRlc3Q7Ci1ub24gdGVybWluYWwgS2luZFRlc3QgS2luZFRlc3Q7Ci1ub24gdGVybWluYWwgTGl0ZXJhbCBMaXRlcmFsOwotbm9uIHRlcm1pbmFsIFZhclJlZiBWYXJSZWY7Ci1ub24gdGVybWluYWwgQ250eEl0ZW1FeHByIENvbnRleHRJdGVtRXhwcjsKLW5vbiB0ZXJtaW5hbCBGdW5jdGlvbkNhbGwgRnVuY3Rpb25DYWxsOwotbm9uIHRlcm1pbmFsIE51bWVyaWNMaXRlcmFsIE51bWVyaWNMaXRlcmFsOwotbm9uIHRlcm1pbmFsIERlY2ltYWxMaXRlcmFsIERlY2ltYWxMaXRlcmFsOwotbm9uIHRlcm1pbmFsIEludGVnZXJMaXRlcmFsIEludGVnZXJMaXRlcmFsOwotbm9uIHRlcm1pbmFsIERvdWJsZUxpdGVyYWwgRG91YmxlTGl0ZXJhbDsKLW5vbiB0ZXJtaW5hbCBEb2N1bWVudFRlc3QgRG9jdW1lbnRUZXN0Owotbm9uIHRlcm1pbmFsIFRleHRUZXN0IFRleHRUZXN0Owotbm9uIHRlcm1pbmFsIENvbW1lbnRUZXN0IENvbW1lbnRUZXN0Owotbm9uIHRlcm1pbmFsIFBJVGVzdCBQSVRlc3Q7Ci1ub24gdGVybWluYWwgQXR0cmlidXRlVGVzdCBBdHRyaWJ1dGVUZXN0Owotbm9uIHRlcm1pbmFsIEFueUtpbmRUZXN0IEFueUtpbmRUZXN0Owotbm9uIHRlcm1pbmFsIEVsZW1lbnRUZXN0IEVsZW1lbnRUZXN0Owotbm9uIHRlcm1pbmFsIFNjaGVtYUF0dHJUZXN0IFNjaGVtYUF0dHJpYnV0ZVRlc3Q7Ci1ub24gdGVybWluYWwgU2NoZW1hRWxlbVRlc3QgU2NoZW1hRWxlbWVudFRlc3Q7Ci1ub24gdGVybWluYWwgWFBhdGggWFBhdGg7Ci1ub24gdGVybWluYWwgRm9yRXhwciBGb3JFeHByOwotbm9uIHRlcm1pbmFsIFF1YW50aWZpZWRFeHByIFF1YW50aWZpZWRFeHByOwotbm9uIHRlcm1pbmFsIElmRXhwciBJZkV4cHI7Ci1ub24gdGVybWluYWwgWFBhdGhFeHByIFBhdGhFeHByLCBWYWx1ZUV4cHI7Ci1ub24gdGVybWluYWwgQXhpc1N0ZXAgQXhpc1N0ZXA7Ci1ub24gdGVybWluYWwgRmlsdGVyRXhwciBGaWx0ZXJFeHByOwotbm9uIHRlcm1pbmFsIENvbGxlY3Rpb24gUHJlZGljYXRlOwotCi1wcmVjZWRlbmNlIGxlZnQgUExVUywgTUlOVVM7Ci1wcmVjZWRlbmNlIGxlZnQgU1RBUjsKLXByZWNlZGVuY2UgbGVmdCBDT0xPTjsKLXByZWNlZGVuY2UgbGVmdCBDT0xPTkNPTE9OOwotcHJlY2VkZW5jZSBsZWZ0IENISUxELCBERVNDRU5EQU5ULCBBVFRSSUJVVEUsIFNFTEYsIERFU0NFTkRBTlRfT1JfU0VMRjsKLXByZWNlZGVuY2UgbGVmdCBGT0xMT1dJTkdfU0lCTElORywgRk9MTE9XSU5HLCBOQU1FU1BBQ0UsIFBBUkVOVDsKLXByZWNlZGVuY2UgbGVmdCBBTkNFU1RPUiwgUFJFQ0VESU5HX1NJQkxJTkcsIFBSRUNFRElORywgQU5DRVNUT1JfT1JfU0VMRjsKLXByZWNlZGVuY2UgbGVmdCBVTklPTiwgSU5URVJTRUNULCBFWENFUFQ7Ci1wcmVjZWRlbmNlIGxlZnQgSU5TVEFOQ0UsIE9GLCBUUkVBVCwgQVMsIENBU1RBQkxFLCBDQVNULCBJUzsKLXByZWNlZGVuY2UgbGVmdCBGT1IsIElOLCBSRVRVUk4sIFNBVElTRklFUywgVE87Ci1wcmVjZWRlbmNlIGxlZnQgU09NRSwgRVZFUlk7Ci1wcmVjZWRlbmNlIGxlZnQgSUYsIFRIRU4sIEVMU0U7Ci1wcmVjZWRlbmNlIGxlZnQgQU5ELCBPUjsKLXByZWNlZGVuY2UgbGVmdCBESVYsIElESVYsIE1PRDsKLXByZWNlZGVuY2UgbGVmdCBFUSwgTkUsIExULCBMRSwgR1QsIEdFOwotCi0KLQotWFBhdGggICAgICAgICAgICAgOjo9IEV4cHI6ZXhwcyB7OiBSRVNVTFQgPSBuZXcgWFBhdGgoZXhwcyk7IDp9IDsKLQotRXhwciAgICAgICAgICAgICAgOjo9IEV4cHJTaW5nbGU6ZXggCi0JCQl7OiAKLQkJCQlDb2xsZWN0aW9uIGV4cHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJZXhwcy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHM7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICB8IEV4cHI6ZXhwcnMgQ09NTUEgRXhwclNpbmdsZTpleCAKLQkJICAgIAl7OiAKLQkJCQlleHBycy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHJzOwotCQkJOn0gCi0JCSAgICA7Ci0KLUV4cHJTaW5nbGUgICAgICAgIDo6PSBGb3JFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgfCBRdWFudGlmaWVkRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgIHwgSWZFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgfCBPckV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgOwotCi1Gb3JFeHByICAgICAgICAgICA6Oj0gU2ltcGxlRm9yQ2xhdXNlOnBhaXJzIFJFVFVSTiBFeHByU2luZ2xlOmUgCi0JCQl7OgotCQkJCUZvckV4cHIgZmV4cCA9IG5ldyBGb3JFeHByKHBhaXJzLGUpOwotCQkJCVJFU1VMVCA9IGZleHA7Ci0JCQk6fQkKLQkJICAgIDsKLQotU2ltcGxlRm9yQ2xhdXNlICAgOjo9IEZPUiBET0xMQVIgVmFyTmFtZTp2IElOIEV4cHJTaW5nbGU6ZQotCQkJezoKLQkJCQlDb2xsZWN0aW9uIHBhaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwYWlycy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcGFpcnM7Ci0JCQk6fQotCQkJCi0gICAgICAgICAgICAgICAgICAgIHwgU2ltcGxlRm9yQ2xhdXNlOnBzIENPTU1BIERPTExBUiBWYXJOYW1lOnYgSU4gRXhwclNpbmdsZTplCi0JCSAgICAJezoKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcHMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBzOwotCQkJOn0JCi0JCSAgICA7Ci0KLVF1YW50aWZpZWRFeHByICAgICAgIDo6PSBTT01FIERPTExBUiBRdWFudGlmaWVkRXhwck1pZGRsZTpwYWlycyBTQVRJU0ZJRVMgRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLlNPTUUsCi0JCQkJCQkJCSAgICAgICBwYWlycywgZSk7Ci0JCQkJUkVTVUxUID0gcWU7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgICB8IEVWRVJZIERPTExBUiBRdWFudGlmaWVkRXhwck1pZGRsZTpwYWlycyBTQVRJU0ZJRVMgRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLkFMTCwKLQkJCQkJCQkJICAgICAgIHBhaXJzLCBlKTsKLQkJCQlSRVNVTFQgPSBxZTsKLQkJCTp9Ci0JCSAgICAgICA7Ci0KLVF1YW50aWZpZWRFeHByTWlkZGxlIDo6PSBWYXJOYW1lOnYgSU4gRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgUXVhbnRpZmllZEV4cHJNaWRkbGU6cHMgQ09NTUEgRE9MTEFSIFZhck5hbWU6diBJTiBFeHByU2luZ2xlOmUKLQkJICAgICAgIAl7OgotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwcy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcHM7Ci0JCQk6fQotCQkgICAgICAgOwotCi1JZkV4cHIgICAgICAgICAgICA6Oj0gSUYgTFBBUiBFeHByOmV4cHMgUlBBUiBUSEVOIEV4cHJTaW5nbGU6dCBFTFNFIEV4cHJTaW5nbGU6ZQotCQkJezogUkVTVUxUID0gbmV3IElmRXhwcihleHBzLCB0LCBlKTsgOn0KLQkJICAgIDsKLQotT3JFeHByICAgICAgICAgICAgOjo9IEFuZEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fSAKLSAgICAgICAgICAgICAgICAgICAgfCBPckV4cHI6bCBPUiBBbmRFeHByOnIgezogUkVTVUxUID0gbmV3IE9yRXhwcihsLCByKTsgOn0KLQkJICAgIDsKLQotQW5kRXhwciAgICAgICAgICAgOjo9IENvbXBhcmlzb25FeHByOm4gezogUkVTVUxUID0gbjsgOn0gCi0gICAgICAgICAgICAgICAgICAgIHwgQW5kRXhwcjpsIEFORCBDb21wYXJpc29uRXhwcjpyCi0JCSAgICAJezogUkVTVUxUID0gbmV3IEFuZEV4cHIobCwgcik7IDp9Ci0JCSAgICA7Ci0KLUNvbXBhcmlzb25FeHByICAgIDo6PSBSYW5nZUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICB8IFJhbmdlRXhwcjpsIFZhbHVlQ29tcDp0IFJhbmdlRXhwcjpyCi0JCQl7OiBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyA6fQotICAgICAgICAgICAgICAgICAgICB8IFJhbmdlRXhwcjpsIEdlbmVyYWxDb21wOnQgUmFuZ2VFeHByOnIKLQkJCXs6IFJFU1VMVCA9IG5ldyBDbXBFeHByKGwsIHIsIHQuaW50VmFsdWUoKSk7IDp9Ci0gICAgICAgICAgICAgICAgICAgIHwgUmFuZ2VFeHByOmwgTm9kZUNvbXA6dCBSYW5nZUV4cHI6cgotCQkJezogUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgOn0KLQkJICAgIDsKLQotUmFuZ2VFeHByICAgICAgICAgOjo9IEFkZGl0aXZlRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICB8IEFkZGl0aXZlRXhwcjpsIFRPIEFkZGl0aXZlRXhwcjpyCi0JCSAgICAJezogUkVTVUxUID0gbmV3IFJhbmdlRXhwcihsLCByKTsgOn0JCi0JCSAgICA7Ci0KLUFkZGl0aXZlRXhwciAgICAgICAgOjo9IE11bHRpcGxpY2F0aXZlRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGl2ZUV4cHI6bCBQTFVTIE11bHRpcGxpY2F0aXZlRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgQWRkRXhwcihsLCByKTsgOn0KLQkJICAgICAgfCBBZGRpdGl2ZUV4cHI6bCBNSU5VUyBNdWx0aXBsaWNhdGl2ZUV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IFN1YkV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotTXVsdGlwbGljYXRpdmVFeHByICA6Oj0gVW5pb25FeHByOm4gezogUkVTVUxUID0gbjsgOn0gCi0gICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHI6bCBTVEFSIFVuaW9uRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgTXVsRXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwcjpsIERJViBVbmlvbkV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IERpdkV4cHIobCwgcik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHI6bCBJRElWIFVuaW9uRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSURpdkV4cHIobCwgcik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHI6bCBNT0QgVW5pb25FeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBNb2RFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0KLVVuaW9uRXhwciAgICAgICAgICAgOjo9IEludGVyc2VjdEV4Y2VwdEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgVW5pb25FeHByOmwgVU5JT04gSW50ZXJzZWN0RXhjZXB0RXhwcjpyCi0JCSAgICAgICAgezogUkVTVUxUID0gbmV3IFVuaW9uRXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFVuaW9uRXhwcjpsIFBJUEUgSW50ZXJzZWN0RXhjZXB0RXhwcjpyCi0JCSAgICAgICAgezogUkVTVUxUID0gbmV3IFBpcGVFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0KLUludGVyc2VjdEV4Y2VwdEV4cHIgOjo9IEluc3RhbmNlb2ZFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEludGVyc2VjdEV4Y2VwdEV4cHI6bCBJTlRFUlNFQ1QgSW5zdGFuY2VvZkV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVyc2VjdEV4cHIobCwgcik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcnNlY3RFeGNlcHRFeHByOmwgRVhDRVBUIEluc3RhbmNlb2ZFeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBFeGNlcHRFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0KLUluc3RhbmNlb2ZFeHByICAgICAgOjo9IFRyZWF0RXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBUcmVhdEV4cHI6bCBJTlNUQU5DRSBPRiBTZXF1ZW5jZVR5cGU6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEluc3RPZkV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotVHJlYXRFeHByICAgICAgICAgICA6Oj0gQ2FzdGFibGVFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IENhc3RhYmxlRXhwcjpsIFRSRUFUIEFTIFNlcXVlbmNlVHlwZTpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgVHJlYXRBc0V4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotQ2FzdGFibGVFeHByICAgICAgICA6Oj0gQ2FzdEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQ2FzdEV4cHI6bCBDQVNUQUJMRSBBUyBTaW5nbGVUeXBlOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBDYXN0YWJsZUV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotQ2FzdEV4cHIgICAgICAgICAgICA6Oj0gVW5hcnlFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFVuYXJ5RXhwcjpsIENBU1QgQVMgU2luZ2xlVHlwZTpyIAotCQkgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBDYXN0RXhwcihsLCByKTsgOn0KLQkJICAgICAgOwotICAgCi1VbmFyeUV4cHIgICAgICAgICAgIDo6PSBWYWx1ZUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgTUlOVVMgVW5hcnlFeHByOmEgezogUkVTVUxUID0gbmV3IE1pbnVzRXhwcihhKTsgOn0KLQkJICAgICAgfCBQTFVTIFVuYXJ5RXhwcjphIHs6IFJFU1VMVCA9IG5ldyBQbHVzRXhwcihhKTsgOn0KLQkJICAgICAgOwotCi1WYWx1ZUV4cHIgICAgICAgICAgIDo6PSBQYXRoRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1HZW5lcmFsQ29tcCAgICAgICAgIDo6PSBFUVVBTFMKLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuRVFVQUxTKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE5PVEVRVUFMUwotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5OT1RFUVVBTFMpOyA6fQotCQkgICAgICB8IExFU1NUSEFOCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NUSEFOKTsgOn0KLQkJICAgICAgfCBMRVNTRVFVQUwKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU0VRVUFMKTsgOn0gCi0JCSAgICAgIHwgR1JFQVRFUgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSKTsgOn0KLQkJICAgICAgfCBHUkVBVEVSRVFVQUwKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUkVRVUFMKTsgOn0gCi0JCSAgICAgIDsKLQotVmFsdWVDb21wICAgICAgICAgICA6Oj0gRVEJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5FUSk7IDp9IAotICAgICAgICAgICAgICAgICAgICAgIHwgTkUgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLk5FKTsgOn0KLQkJICAgICAgfCBMVCAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTFQpOyA6fQotCQkgICAgICB8IExFICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRSk7IDp9Ci0JCSAgICAgIHwgR1QgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdUKTsgOn0KLQkJICAgICAgfCBHRSAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HRSk7IDp9Ci0JCSAgICAgIDsKLQotTm9kZUNvbXAgICAgICAgICAgICA6Oj0gSVMgCSAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5JUyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBMRVNTX0xFU1MgCQotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRVNTX0xFU1MpOyA6fQotCQkgICAgICB8IEdSRUFURVJfR1JFQVRFUgkKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUl9HUkVBVEVSKTsgOn0KLQkJICAgICAgOwotCi1QYXRoRXhwciAgICAgICAgICAgIDo6PSBGT1JXQVJEX1NMQVNIIHs6IFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMSxudWxsKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEZPUldBUkRfU0xBU0ggUmVsYXRpdmVQYXRoRXhwcjpwCi0JCSAgICAgIAl7OgotCQkJCXAuc2V0X3NsYXNoZXMoMSk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBGT1JXQVJEX1NMQVNIU0xBU0ggUmVsYXRpdmVQYXRoRXhwcjpwCi0JCSAgICAgIAl7OgotCQkJCXAuc2V0X3NsYXNoZXMoMik7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBSZWxhdGl2ZVBhdGhFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1SZWxhdGl2ZVBhdGhFeHByICAgIDo6PSBTdGVwRXhwcjpzIHs6IFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMCwoU3RlcEV4cHIpcyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBSZWxhdGl2ZVBhdGhFeHByOnAgRk9SV0FSRF9TTEFTSCBTdGVwRXhwcjpzCi0JCSAgICAgIAl7OgotCQkJCXAuYWRkX3RhaWwoMSxzKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJOn0KLQkJICAgICAgfCBSZWxhdGl2ZVBhdGhFeHByOnAgRk9SV0FSRF9TTEFTSFNMQVNIIFN0ZXBFeHByOnMKLQkJICAgICAgCXs6Ci0JCQkJcC5hZGRfdGFpbCgyLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQk6fQotCQkgICAgICA7Ci0KLVN0ZXBFeHByICAgICAgICAgICAgOjo9IEF4aXNTdGVwOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEZpbHRlckV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0KLUF4aXNTdGVwICAgICAgICAgICAgOjo9IEZvcndhcmRTdGVwOnMgUHJlZGljYXRlTGlzdDpwIAotCQkJezogUkVTVUxUID0gbmV3IEF4aXNTdGVwKHMsIHApOyA6fQkKLSAgICAgICAgICAgICAgICAgICAgICB8IFJldmVyc2VTdGVwOnMgUHJlZGljYXRlTGlzdDpwCi0JCQl7OiBSRVNVTFQgPSBuZXcgQXhpc1N0ZXAocywgcCk7IDp9CQotCQkgICAgICA7Ci0KLUZvcndhcmRTdGVwICAgICAgICAgOjo9IEZvcndhcmRBeGlzOmEgTm9kZVRlc3Q6bgotCQkJezogUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKGEuaW50VmFsdWUoKSxuKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFiYnJldkZvcndhcmRTdGVwOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1Gb3J3YXJkQXhpcyAgICAgICAgIDo6PSBDSElMRCBDT0xPTkNPTE9OIAotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuQ0hJTEQpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgREVTQ0VOREFOVCBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFUVFJJQlVURSBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5BVFRSSUJVVEUpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgU0VMRiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5TRUxGKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IERFU0NFTkRBTlRfT1JfU0VMRiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UX09SX1NFTEYpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRk9MTE9XSU5HX1NJQkxJTkcgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuRk9MTE9XSU5HX1NJQkxJTkcpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRk9MTE9XSU5HIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkZPTExPV0lORyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBOQU1FU1BBQ0UgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuTkFNRVNQQUNFKTsgOn0KLQkJICAgICAgOwotCi1BYmJyZXZGb3J3YXJkU3RlcCAgIDo6PSBBVF9TWU0gTm9kZVRlc3Q6bgotCQkJezogUkVTVUxUID0gbmV3IEZvcndhcmRTdGVwKEZvcndhcmRTdGVwLkFUX1NZTSwgbik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBOb2RlVGVzdDpuCi0JCQl7OiBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuTk9ORSwgbik7IDp9Ci0JCSAgICAgIDsKLQotUmV2ZXJzZVN0ZXAgICAgICAgICA6Oj0gUmV2ZXJzZUF4aXM6YSBOb2RlVGVzdDpuCi0JCQl7OiAgUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKGEuaW50VmFsdWUoKSwgbik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBYmJyZXZSZXZlcnNlU3RlcDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLQotUmV2ZXJzZUF4aXMgICAgICAgICA6Oj0gUEFSRU5UIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBBUkVOVCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBTkNFU1RPUiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5BTkNFU1RPUik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBQUkVDRURJTkdfU0lCTElORyBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QUkVDRURJTkdfU0lCTElORyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBQUkVDRURJTkcgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUFJFQ0VESU5HKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFOQ0VTVE9SX09SX1NFTEYgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuQU5DRVNUT1JfT1JfU0VMRik7IDp9Ci0JCSAgICAgIDsKLQotQWJicmV2UmV2ZXJzZVN0ZXAgICA6Oj0gRE9URE9UIAotCQkJezogUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKFJldmVyc2VTdGVwLkRPVERPVCxudWxsKTsgOn0KLQkJICAgICAgOwotCi1Ob2RlVGVzdCAgICAgICAgICAgIDo6PSBLaW5kVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBOYW1lVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLSAgIAotTmFtZVRlc3QgICAgICAgICAgICA6Oj0gUU5hbWU6biAgICB7OiBSRVNVTFQgPSBuZXcgTmFtZVRlc3Qobik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBXaWxkY2FyZDpuIHs6IFJFU1VMVCA9IG5ldyBOYW1lVGVzdChuKTsgOn0KLQkJICAgICAgOwotCi0vLyBYWFg6IGhhdmUgc2VwIGNsYXNzIGZvciB3aWxkIGNhcmQuLi4uIG9yIHdoYXRldmVyLi4uCi0vLyBYWFg6IGlzICogPT0gKjoqID8/PwotV2lsZGNhcmQgICAgICAgICAgICA6Oj0gU1RBUiAJCSAgICB7OiBSRVNVTFQgPSBuZXcgUU5hbWUoIioiLCIqIik7IDp9Ci0vLyBYWFg6IHNvbWUxIGRpc2FtYmlndWF0ZSB0aGUgZ3JhbW1hcgotLy8gaS5lLiBnaXZlIGhpZ2hlciBwcmVjZWRlbmNlIHRvIGEgUU5hbWUgcmF0aGVyIHRoYW4gdG8gYSB3aWxkY2FyZAotICAgICAgICAgICAgICAgICAgICAgIHwgTkNOYW1lOm4gQ09MT04gU1RBUiB7OiBSRVNVTFQgPSBuZXcgUU5hbWUobiwgIioiKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFNUQVIgQ09MT04gTkNOYW1lOm4gezogUkVTVUxUID0gbmV3IFFOYW1lKCIqIiwgbik7IDp9Ci0JCSAgICAgIDsKLQotRmlsdGVyRXhwciAgICAgICAgICA6Oj0gUHJpbWFyeUV4cHI6cGUgUHJlZGljYXRlTGlzdDplCi0JCQl7OiBSRVNVTFQgPSBuZXcgRmlsdGVyRXhwcihwZSwgZSk7IDp9ICAgCi0JCSAgICAgIDsKLQotLy8gWFhYOiBDb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zIQotUHJlZGljYXRlTGlzdCAgICAgICA6Oj0gUHJlZGljYXRlTGlzdDpjIFByZWRpY2F0ZTpwCi0JCQl7OgotCQkJICAgYy5hZGQocCk7Ci0JCQkgICBSRVNVTFQgPSBjOwotCQkJOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IC8qIGVtcHR5ICovIHs6IFJFU1VMVCA9IG5ldyBBcnJheUxpc3QoKTsgOn0KLQkJICAgICAgOwotCi1QcmVkaWNhdGUgICAgICAgICAgIDo6PSBMQlJBQ0tFVCBFeHByOmUgUkJSQUNLRVQgezogUkVTVUxUID0gZTsgOn07Ci0KLVByaW1hcnlFeHByICAgICAgICAgOjo9IExpdGVyYWw6biB7OiBSRVNVTFQgPSBuOyA6fSAKLSAgICAgICAgICAgICAgICAgICAgICB8IFZhclJlZjpuIHs6IFJFU1VMVCA9IG47IDp9IAotCQkgICAgICB8IFBhcmVudGhlc2l6ZWRFeHByOmUKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBQYXJFeHByKGUpOyA6fSAgCi0JCSAgICAgIHwgQ29udGV4dEl0ZW1FeHByOm4gezogUkVTVUxUID0gbjsgOn0gCi0JCSAgICAgIHwgRnVuY3Rpb25DYWxsOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1MaXRlcmFsICAgICAgICAgICAgIDo6PSBOdW1lcmljTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9IAotICAgICAgICAgICAgICAgICAgICAgIHwgU3RyaW5nTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLQotTnVtZXJpY0xpdGVyYWwgICAgICA6Oj0gSW50ZWdlckxpdGVyYWw6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRGVjaW1hbExpdGVyYWw6biB7OiBSRVNVTFQgPSBuOyA6fSAKLQkJICAgICAgfCBEb3VibGVMaXRlcmFsOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotICAgCi1WYXJSZWYgICAgICAgICAgICAgIDo6PSBET0xMQVIgVmFyTmFtZTp2IHs6IFJFU1VMVCA9IG5ldyBWYXJSZWYodik7IDp9OwotCi1QYXJlbnRoZXNpemVkRXhwciAgIDo6PSBMUEFSIFJQQVIJIHs6IFJFU1VMVCA9IG5ldyBBcnJheUxpc3QoKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IExQQVIgRXhwcjplIFJQQVIgezogUkVTVUxUID0gZTsgOn0KLQkJICAgICAgOwotCi1Db250ZXh0SXRlbUV4cHIgICAgIDo6PSBET1QgezogUkVTVUxUID0gbmV3IENudHhJdGVtRXhwcigpOyA6fTsKLSAgIAotRnVuY3Rpb25DYWxsICAgICAgICA6Oj0gVW5yZXNlcnZlZFFOYW1lOm4gTFBBUiBSUEFSCi0JCQl7OgotCQkJICAgUkVTVUxUID0gbmV3IEZ1bmN0aW9uQ2FsbChuLG5ldyBBcnJheUxpc3QoKSk7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgIHwgVW5yZXNlcnZlZFFOYW1lOm4gTFBBUiBGdW5jdGlvbkNhbGxNaWRkbGU6YSBSUEFSCi0JCQl7OgotCQkJICAgUkVTVUxUID0gbmV3IEZ1bmN0aW9uQ2FsbChuLGEpOwotCQkJOn0KLQkJICAgICAgOwotCi1GdW5jdGlvbkNhbGxNaWRkbGUgIDo6PSBFeHByU2luZ2xlOmUKLQkJCXs6Ci0JCQkgICBDb2xsZWN0aW9uIGMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkgICBjLmFkZChlKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRnVuY3Rpb25DYWxsTWlkZGxlOmMgQ09NTUEgRXhwclNpbmdsZTplCi0JCSAgICAgICAgezoKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCTp9Ci0JCSAgICAgIDsKLQotCi1TaW5nbGVUeXBlICAgICAgICAgIDo6PSBBdG9taWNUeXBlOnQgezogUkVTVUxUID0gbmV3IFNpbmdsZVR5cGUodCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBdG9taWNUeXBlOnQgUVVFU1RJT05NQVJLCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgU2luZ2xlVHlwZSh0LHRydWUpOyA6fQotCQkgICAgICA7Ci0KLVNlcXVlbmNlVHlwZSAgICAgICAgOjo9IEl0ZW1UeXBlOnQKLQkJCXs6IFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoU2VxdWVuY2VUeXBlLk5PTkUsIHQpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgSXRlbVR5cGU6dCBPY2N1cnJlbmNlSW5kaWNhdG9yOmkKLQkJCXs6IFJFU1VMVCA9IG5ldyBTZXF1ZW5jZVR5cGUoaS5pbnRWYWx1ZSgpLCB0KTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEVNUFRZX1NFUVVFTkNFIExQQVIgUlBBUgotCQkJezogUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShTZXF1ZW5jZVR5cGUuRU1QVFksIG51bGwpOyA6fQotCQkgICAgICA7Ci0KLU9jY3VycmVuY2VJbmRpY2F0b3IgOjo9IFFVRVNUSU9OTUFSSyAKLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5RVUVTVElPTik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTVEFSIAotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlNUQVIpOyA6fQotCQkgICAgICB8IFBMVVMKLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5QTFVTKTsgOn0KLQkJICAgICAgOwotCi1JdGVtVHlwZSAgICAgICAgICAgIDo6PSBBdG9taWNUeXBlOnEKLQkJCXs6IFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5RTkFNRSxxKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEtpbmRUZXN0OmsKLQkJICAgICAgICB7OiBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuS0lORFRFU1Qsayk7IDp9Ci0JCSAgICAgIHwgSVRFTSBMUEFSIFJQQVIKLQkJICAgICAgICB7OiBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuSVRFTSxudWxsKTsgOn0KLQkJICAgICAgOwotCi1BdG9taWNUeXBlICAgICAgICAgIDo6PSBRTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1LaW5kVGVzdCAgICAgICAgICAgIDo6PSBEb2N1bWVudFRlc3Q6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRWxlbWVudFRlc3Q6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQXR0cmlidXRlVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTY2hlbWFFbGVtZW50VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTY2hlbWFBdHRyaWJ1dGVUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFBJVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBDb21tZW50VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBUZXh0VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBbnlLaW5kVGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLQotQW55S2luZFRlc3QgICAgICAgICA6Oj0gTk9ERSBMUEFSIFJQQVIgezogUkVTVUxUID0gbmV3IEFueUtpbmRUZXN0KCk7IDp9OwotCi1Eb2N1bWVudFRlc3QgICAgICAgIDo6PSBET0NVTUVOVF9OT0RFIExQQVIgUlBBUiAKLQkJCSB7OiBSRVNVTFQgPSBuZXcgRG9jdW1lbnRUZXN0KCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBET0NVTUVOVF9OT0RFIExQQVIgRWxlbWVudFRlc3Q6ZSBSUEFSCi0JCSAgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoRG9jdW1lbnRUZXN0LkVMRU1FTlQsZSk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBET0NVTUVOVF9OT0RFIExQQVIgU2NoZW1hRWxlbWVudFRlc3Q6ZSBSUEFSCi0JCSAgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoRG9jdW1lbnRUZXN0LlNDSEVNQV9FTEVNRU5ULGUpOyA6fQotCQkgICAgICA7Ci0KLVRleHRUZXN0ICAgICAgICAgICAgOjo9IFRFWFQgTFBBUiBSUEFSIHs6IFJFU1VMVCA9IG5ldyBUZXh0VGVzdCgpOyA6fTsKLQotQ29tbWVudFRlc3QgICAgICAgICA6Oj0gQ09NTUVOVCBMUEFSIFJQQVIgezogUkVTVUxUID0gbmV3IENvbW1lbnRUZXN0KCk7IDp9OwotCi1QSVRlc3QgICAgICAgICAgICAgICA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIFJQQVIKLQkJCSAgezogUkVTVUxUID0gbmV3IFBJVGVzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBOQ05hbWU6biAgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgUElUZXN0KG4pOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBTdHJpbmdMaXRlcmFsOnMgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgUElUZXN0KHMuc3RyaW5nKCkpOyA6fQotCQkgICAgICAgOwotCi1BdHRyaWJ1dGVUZXN0ICAgICAgICA6Oj0gQVRUUklCVVRFIExQQVIgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IEFUVFJJQlVURSBMUEFSIEF0dHJpYk5hbWVPcldpbGRjYXJkOmEgUlBBUgotCQkgICAgICAgICAgezoKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkKTsKLQkJCSAgOn0gICAKLSAgICAgICAgICAgICAgICAgICAgICAgfCBBVFRSSUJVVEUgTFBBUiBBdHRyaWJOYW1lT3JXaWxkY2FyZDphIENPTU1BIFR5cGVOYW1lOnQgUlBBUgotCQkgICAgICAgICAgezoKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkLHQpOwotCQkJICA6fSAgIAotCQkgICAgICAgOwotCi1BdHRyaWJOYW1lT3JXaWxkY2FyZCA6Oj0gQXR0cmlidXRlTmFtZTphIHs6IFJFU1VMVCA9IGE7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgU1RBUiB7OiBSRVNVTFQgPSBudWxsOyAvKiBYWFggKi8gOn0KLQkJICAgICAgIDsKLQotU2NoZW1hQXR0cmlidXRlVGVzdCAgOjo9IFNDSEVNQV9BVFRSSUJVVEUgTFBBUiBBdHRyaWJ1dGVEZWNsYXJhdGlvbjphIFJQQVIKLQkJICAgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBTY2hlbWFBdHRyVGVzdChhKTsgOn0KLQkJICAgICAgIDsKLQotQXR0cmlidXRlRGVjbGFyYXRpb24gOjo9IEF0dHJpYnV0ZU5hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotRWxlbWVudFRlc3QgICAgICAgICAgOjo9IEVMRU1FTlQgTFBBUiBSUEFSIHs6IFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICB8IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQ6ZSBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkKTsKLQkJCSAgOn0gICAKLSAgICAgICAgICAgICAgICAgICAgICAgfCBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkOmUgQ09NTUEgVHlwZU5hbWU6dCBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkLHQpOwotCQkJICA6fSAgIAotICAgICAgICAgICAgICAgICAgICAgICB8IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQ6ZSBDT01NQSBUeXBlTmFtZTp0IFFVRVNUSU9OTUFSSyBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkLHQsdHJ1ZSk7Ci0JCQkgIDp9ICAgCi0JCSAgICAgICA7Ci0KLUVsZW1lbnROYW1lT3JXaWxkY2FyZCA6Oj0gRWxlbWVudE5hbWU6ZSB7OiBSRVNVTFQgPSBlOyA6fQotICAgICAgICAgICAgICAgICAgICAgICAgfCBTVEFSIHs6IFJFU1VMVCA9IG51bGw7IC8qIFhYWCAqLyA6fQotCQkJOwotCi1TY2hlbWFFbGVtZW50VGVzdCAgICAgOjo9IFNDSEVNQV9FTEVNRU5UIExQQVIgRWxlbWVudERlY2xhcmF0aW9uOmUgUlBBUgotCQkJICAgIHs6IFJFU1VMVCA9IG5ldyBTY2hlbWFFbGVtVGVzdChlKTsgOn0KLQkJCTsKLQotRWxlbWVudERlY2xhcmF0aW9uICAgIDo6PSBFbGVtZW50TmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1BdHRyaWJ1dGVOYW1lICAgICAgICAgOjo9IFFOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLUVsZW1lbnROYW1lICAgICAgICAgICA6Oj0gUU5hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotVHlwZU5hbWUgICAgICAgICAgICAgIDo6PSBRTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1JbnRlZ2VyTGl0ZXJhbCAgICAgICAgOjo9IElOVEVHRVI6aSB7OiBSRVNVTFQgPSBuZXcgSW50ZWdlckxpdGVyYWwoaSk7IDp9OwotICAgCi1EZWNpbWFsTGl0ZXJhbCAgICAgICAgOjo9IERFQ0lNQUw6ZCAKLQkJCSAgICB7OiBSRVNVTFQgPSBuZXcgRGVjaW1hbExpdGVyYWwoZCk7IDp9Ci0JCQk7ICAgIAotCi1Eb3VibGVMaXRlcmFsICAgICAgICAgOjo9IERPVUJMRTpkCi0JCQkgICAgezogUkVTVUxUID0gbmV3IERvdWJsZUxpdGVyYWwoZC5kb3VibGVWYWx1ZSgpKTsgOn0KLQkJCTsgICAgCi0KLVN0cmluZ0xpdGVyYWwgICAgICAgICA6Oj0gU1RSSU5HOnMgezogUkVTVUxUID0gbmV3IFN0cmluZ0xpdGVyYWwocyk7IDp9OwotCi1WYXJOYW1lICAgICAgICAgICAgICAgOjo9IFFOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLVFOYW1lICAgICAgICAgICAgICAgICA6Oj0gTkNOYW1lOmwgezogUkVTVUxUID0gbmV3IFFOYW1lKGwpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICAgfCBOQ05hbWU6cCBDT0xPTiBOQ05hbWU6bCB7OiBSRVNVTFQgPSBuZXcgUU5hbWUocCxsKTsgOn0KLQkJCQkJCTsKLQotUHJlZml4ICAgICAgICAgICAgICAgIDo6PSBOQ05hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotTG9jYWxQYXJ0ICAgICAgICAgICAgIDo6PSBOQ05hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotVW5yZXNlcnZlZFFOYW1lICAgICAgIDo6PSBVbnJlc2VydmVkTkNOYW1lOmwgezogUkVTVUxUID0gbmV3IFFOYW1lKGwpOyA6fQotICAgICAgICAgICAgICAgICAgICAgICAgfCBOQ05hbWU6cCBDT0xPTiBOQ05hbWU6bCB7OiBSRVNVTFQgPSBuZXcgUU5hbWUocCxsKTsgOn0KLQkJCQkJCTsKLQotTkNOYW1lICAgICAgICAgICAgICAgIDo6PSBOQ05BTUU6biB7OiBSRVNVTFQgPSBuOyA6fSB8Ci0JCQkJCQkgIFRPOm4JICAgezogUkVTVUxUID0gbmV3IFN0cmluZygidG8iKTsgOn0gfAotCQkJCQkJICBDSElMRDpuICB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjaGlsZCIpOyA6fSB8Ci0JCQkJCQkgIERFU0NFTkRBTlQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50Iik7IDp9IHwKLQkJCQkJCSAgQVRUUklCVVRFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYXR0cmlidXRlIik7IDp9IHwKLQkJCQkJCSAgU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNlbGYiKTsgOn0gfAotCQkJCQkJICBERVNDRU5EQU5UX09SX1NFTEY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50LW9mLXNlbGYiKTsgOn0gfAotCQkJCQkJICBGT0xMT1dJTkdfU0lCTElORzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZy1zaWJsaW5nIik7IDp9IHwKLQkJCQkJCSAgRk9MTE9XSU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nIik7IDp9IHwKLQkJCQkJCSAgTkFNRVNQQUNFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibmFtZXNwYWNlIik7IDp9IHwKLQkJCQkJCSAgUEFSRU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicGFyZW50Iik7IDp9IHwKLQkJCQkJCSAgQU5DRVNUT1I6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3RvciIpOyA6fSB8Ci0JCQkJCQkgIFBSRUNFRElOR19TSUJMSU5HOm4gezogUkVTVUxUICA9IG5ldyBTdHJpbmcoInByZWNlZGluZy1zaWJsaW5nIik7IDp9IHwKLQkJCQkJCSAgUFJFQ0VESU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicHJlY2VkaW5nIik7IDp9IHwKLQkJCQkJCSAgQU5DRVNUT1JfT1JfU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yLW9yLXNlbGYiKTsgOn0gfAotCQkJCQkJICBVTklPTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInVuaW9uIik7IDp9IHwKLQkJCQkJCSAgSU5URVJTRUNUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaW50ZXJzZWN0Iik7IDp9IHwKLQkJCQkJCSAgRVhDRVBUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZXhjZXB0Iik7IDp9IHwKLQkJCQkJCSAgSU5TVEFOQ0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnN0YW5jZSIpOyA6fSB8Ci0JCQkJCQkgIE9GOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygib2YiKTsgOn0gfAotCQkJCQkJICBBUzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IDp9IHwKLQkJCQkJCSAgVFJFQVQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyA6fSB8Ci0JCQkJCQkgIENBU1RBQkxFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdGFibGUiKTsgOn0gfAotCQkJCQkJICBDQVNUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdCIpOyA6fSB8Ci0JCQkJCQkgIElTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaXMiKTsgOn0gfAotCQkJCQkJICBGT1I6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb3IiKTsgOn0gfAotCQkJCQkJICBJTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImluIik7IDp9IHwKLQkJCQkJCSAgUkVUVVJOOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicmV0dXJuIik7IDp9IHwKLQkJCQkJCSAgU0FUSVNGSUVTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2F0aXNmaWVzIik7IDp9IHwKLQkJCQkJCSAgU09NRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNvbWUiKTsgOn0gfAotCQkJCQkJICBFVkVSWTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImV2ZXJ5Iik7IDp9IHwKLQkJCQkJCSAgSUY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpZiIpOyA6fSB8Ci0JCQkJCQkgIFRIRU46biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0aGVuIik7IDp9IHwKLQkJCQkJCSAgRUxTRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsc2UiKTsgOn0gfAotCQkJCQkJICBBTkQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmQiKTsgOn0gfAotCQkJCQkJICBPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9yIik7IDp9IHwKLQkJCQkJCSAgRElWOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IDp9IHwKLQkJCQkJCSAgSURJVjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgOn0gfAotCQkJCQkJICBDT01NRU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY29tbWVudCIpOyA6fSB8Ci0JCQkJCQkgIERPQ1VNRU5UX05PREU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkb2N1bWVudC1ub2RlIik7IDp9IHwKLQkJCQkJCSAgRUxFTUVOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsZW1lbnQiKTsgOn0gfAotCQkJCQkJICBFTVBUWV9TRVFVRU5DRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImVtcHR5LXNlcXVlbmNlIik7IDp9IHwKLQkJCQkJCSAgSVRFTTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIml0ZW0iKTsgOn0gfAotCQkJCQkJICBOT0RFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibm9kZSIpOyA6fSB8Ci0JCQkJCQkgIFBST0NFU1NJTkdfSU5TVFJVQ1RJT046biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcm9jZXNzaW5nLWluc3RydWN0aW9uIik7IDp9IHwKLQkJCQkJCSAgU0NIRU1BX0FUVFJJQlVURTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1hdHRyaWJ1dGUiKTsgOn0gfAotCQkJCQkJICBTQ0hFTUFfRUxFTUVOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1lbGVtZW50Iik7IDp9IHwKLQkJCQkJCSAgVEVYVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInRleHQiKTsgOn0gfAotCQkJCQkJICBUWVBFU1dJVENIOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidHlwZXN3aXRjaCIpOyA6fSB8Ci0JCQkJCQkgIE1PRDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm1vZCIpOyA6fSB8Ci0JCQkJCQkgIEVROm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZXEiKTsgOn0gfAotCQkJCQkJICBORTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5lIik7IDp9IHwKLQkJCQkJCSAgTFQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsdCIpOyA6fSB8Ci0JCQkJCQkgIExFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibGUiKTsgOn0gfAotCQkJCQkJICBHVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImd0Iik7IDp9IHwKLQkJCQkJCSAgR0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJnZSIpOyA6fQotCQkJOyAKLQotVW5yZXNlcnZlZE5DTmFtZSAgICAgIDo6PSBOQ05BTUU6biB7OiBSRVNVTFQgPSBuOyA6fSB8Ci0JCQkJCQkgIFRPOm4JICAgezogUkVTVUxUID0gbmV3IFN0cmluZygidG8iKTsgOn0gfAotCQkJCQkJICBDSElMRDpuICB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjaGlsZCIpOyA6fSB8Ci0JCQkJCQkgIERFU0NFTkRBTlQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50Iik7IDp9IHwKLQkJCQkJCSAgU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNlbGYiKTsgOn0gfAotCQkJCQkJICBERVNDRU5EQU5UX09SX1NFTEY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50LW9mLXNlbGYiKTsgOn0gfAotCQkJCQkJICBGT0xMT1dJTkdfU0lCTElORzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZy1zaWJsaW5nIik7IDp9IHwKLQkJCQkJCSAgRk9MTE9XSU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nIik7IDp9IHwKLQkJCQkJCSAgTkFNRVNQQUNFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibmFtZXNwYWNlIik7IDp9IHwKLQkJCQkJCSAgUEFSRU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicGFyZW50Iik7IDp9IHwKLQkJCQkJCSAgQU5DRVNUT1I6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3RvciIpOyA6fSB8Ci0JCQkJCQkgIFBSRUNFRElOR19TSUJMSU5HOm4gezogUkVTVUxUICA9IG5ldyBTdHJpbmcoInByZWNlZGluZy1zaWJsaW5nIik7IDp9IHwKLQkJCQkJCSAgUFJFQ0VESU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicHJlY2VkaW5nIik7IDp9IHwKLQkJCQkJCSAgQU5DRVNUT1JfT1JfU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yLW9yLXNlbGYiKTsgOn0gfAotCQkJCQkJICBVTklPTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInVuaW9uIik7IDp9IHwKLQkJCQkJCSAgSU5URVJTRUNUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaW50ZXJzZWN0Iik7IDp9IHwKLQkJCQkJCSAgRVhDRVBUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZXhjZXB0Iik7IDp9IHwKLQkJCQkJCSAgSU5TVEFOQ0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnN0YW5jZSIpOyA6fSB8Ci0JCQkJCQkgIE9GOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygib2YiKTsgOn0gfAotCQkJCQkJICBBUzpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IDp9IHwKLQkJCQkJCSAgVFJFQVQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyA6fSB8Ci0JCQkJCQkgIENBU1RBQkxFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdGFibGUiKTsgOn0gfAotCQkJCQkJICBDQVNUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdCIpOyA6fSB8Ci0JCQkJCQkgIElTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaXMiKTsgOn0gfAotCQkJCQkJICBGT1I6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb3IiKTsgOn0gfAotCQkJCQkJICBJTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImluIik7IDp9IHwKLQkJCQkJCSAgUkVUVVJOOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygicmV0dXJuIik7IDp9IHwKLQkJCQkJCSAgU0FUSVNGSUVTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2F0aXNmaWVzIik7IDp9IHwKLQkJCQkJCSAgU09NRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInNvbWUiKTsgOn0gfAotCQkJCQkJICBFVkVSWTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImV2ZXJ5Iik7IDp9IHwKLQkJCQkJCSAgVEhFTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInRoZW4iKTsgOn0gfAotCQkJCQkJICBFTFNFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZWxzZSIpOyA6fSB8Ci0JCQkJCQkgIEFORDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuZCIpOyA6fSB8Ci0JCQkJCQkgIE9SOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygib3IiKTsgOn0gfAotCQkJCQkJICBESVY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkaXYiKTsgOn0gfAotCQkJCQkJICBJRElWOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaWRpdiIpOyA6fSB8Ci0JCQkJCQkgIE1PRDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm1vZCIpOyA6fSB8Ci0JCQkJCQkgIEVROm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZXEiKTsgOn0gfAotCQkJCQkJICBORTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5lIik7IDp9IHwKLQkJCQkJCSAgTFQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsdCIpOyA6fSB8Ci0JCQkJCQkgIExFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibGUiKTsgOn0gfAotCQkJCQkJICBHVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImd0Iik7IDp9IHwKLQkJCQkJCSAgR0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJnZSIpOyA6fQotCQkJCQkJICAKLQkJCTsgCi0JCQkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTFmMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGgubGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLS8vICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vICoKLS8vICogQ29udHJpYnV0b3JzOgotLy8gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotLy8gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDk4NyAtIGZpeGVkIGxpdGVyYWwgaXNzdWVzIGZvciBpbnRlZ2VyIGFuZCBkZWNpbWFsCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjgzMjE0IC0gZml4IElGIFRIRU4gRUxTRSBwYXJzaW5nIGFuZCB1cGRhdGUgZ3JhbW1hcnMKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODYwNjEgICBjb3JyZWN0IGhhbmRsaW5nIG9mIHF1b3RlZCBzdHJpbmcgCi0vLyAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKLQotJSUKLQotJWNsYXNzIFhQYXRoRmxleAotJXVuaWNvZGUKLSVjdXAKLSVsaW5lCi0lY29sdW1uCi0KLVdoaXRlc3BhY2UgCT0gWyBcdFxyXG5dCi1TdHJpbmdMaXRlcmFsIAk9IChcIiAoKFwiXCIpIHwgW15cIl0pKiBcIikgfCAoXCcgKChcJ1wnKSB8IFteXCddKSogXCcpCi1EaWdpdHMJCT0gWzAtOV0rCi1Eb3VibGVMaXRlcmFsCT0gKChcLiB7RGlnaXRzfSkgfCAoe0RpZ2l0c30gKFwuIFswLTldKik/KSkgW2VFXSBbXCtcLV0/ICB7RGlnaXRzfQotRGVjaW1hbExpdGVyYWwgID0gKFwuIHtEaWdpdHN9KSB8ICh7RGlnaXRzfSBcLiBbMC05XSopCi0KLUxldHRlcgkJPSBbYS16QS1aXQotTkNOYW1lQ2hhciAgICAgID0ge0xldHRlcn0gfCBbMC05XSB8IFwuIHwgXC0gfCAiXyIKLU5DTmFtZQkJPSAoIHtMZXR0ZXJ9IHwgIl8iKSAoIHtOQ05hbWVDaGFyfSApKgotCi0KLSV7Ci0JcHVibGljIGludCBsaW5lbm8oKSB7IHJldHVybiB5eWxpbmUgKyAxOyB9Ci0JcHVibGljIGludCBjb2xubygpIHsgcmV0dXJuIHl5Y29sdW1uICsgMTsgfQotCi0JcHJpdmF0ZSBTeW1ib2wgc3ltYm9sKGludCB0eXBlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpKTsKLQl9Ci0JcHJpdmF0ZSBTeW1ib2wgc3ltYm9sKGludCB0eXBlLCBPYmplY3QgdmFsdWUpIHsKLQkJcmV0dXJuIG5ldyBTeW1ib2wodHlwZSwgbGluZW5vKCksIGNvbG5vKCksIHZhbHVlKTsKLQl9Ci0KLQlwcml2YXRlIGludCBjb21tZW50TGV2ZWwgPSAwOwotJX0KLQotJXN0YXRlIENPTU1FTlQKLQotJSUKLQotPFlZSU5JVElBTD4gewotCi0iKDoiCQkJeyBjb21tZW50TGV2ZWwrKzsgLy8gaW50IG92ZXJmbG93ID1QCi0JCQkgIHl5YmVnaW4oQ09NTUVOVCk7IAotCQkJfQotCi0iXFsiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MQlJBQ0tFVCk7IH0KLSJcXSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJCUkFDS0VUKTsgfQotIlwoIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFBBUik7IH0KLSJcKSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJQQVIpOyB9Ci0KLSJcKyIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBMVVMpOyB9Ci0iXC0iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5NSU5VUyk7IH0KLSJcKiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUQVIpOyB9Ci0iXHwiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QSVBFKTsgfQotCi0iPSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVRVUFMUyk7IH0KLSIhPSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5PVEVRVUFMUyk7IH0KLSI8Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU1RIQU4pOyB9Ci0iPD0iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTRVFVQUwpOyB9Ci0iPiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVIpOyB9Ci0iPj0iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSRVFVQUwpOyB9Ci0KLSI8PCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NfTEVTUyk7IH0KLSI+PiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVJfR1JFQVRFUik7IH0KLQotIi8iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIKTsgfQotIi8vIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SV0FSRF9TTEFTSFNMQVNIKTsgfQotCi0iOjoiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT0xPTkNPTE9OKTsgfQotIkAiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVF9TWU0pOyB9Ci0iXC5cLiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVERPVCk7IH0KLSI6Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09MT04pOyB9Ci0iLCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTU1BKTsgfQotIlwkIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9MTEFSKTsgfQotIlwuIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9UKTsgfQotIlw/Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUVVFU1RJT05NQVJLKTsgfQotCi0KLSJjaGlsZCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNISUxEKTsgfQotImRlc2NlbmRhbnQiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFU0NFTkRBTlQpOyB9Ci0iYXR0cmlidXRlIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVFRSSUJVVEUpOyB9Ci0ic2VsZiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNFTEYpOyB9Ci0iZGVzY2VuZGFudFwtb3JcLXNlbGYiCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVTQ0VOREFOVF9PUl9TRUxGKTsgfQotCi0iZm9sbG93aW5nXC1zaWJsaW5nIgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPTExPV0lOR19TSUJMSU5HKTsgfQotImZvbGxvd2luZyIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9MTE9XSU5HKTsgfQotIm5hbWVzcGFjZSIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkFNRVNQQUNFKTsgfQotInBhcmVudCIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUEFSRU5UKTsgfQotCi0iYW5jZXN0b3IiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFOQ0VTVE9SKTsgfQotInByZWNlZGluZ1wtc2libGluZyIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkdfU0lCTElORyk7IH0KLSJwcmVjZWRpbmciCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBSRUNFRElORyk7IH0KLSJhbmNlc3Rvclwtb3JcLXNlbGYiCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1JfT1JfU0VMRik7IH0KLQotImVxIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVEpOyB9Ci0ibmUiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ORSk7IH0KLSJsdCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxUKTsgfQotImxlIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEUpOyB9Ci0iZ3QiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HVCk7IH0KLSJnZSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdFKTsgfQotCi0iaWRpdiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklESVYpOyB9Ci0iZGl2IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRElWKTsgfQotIm1vZCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1PRCk7IH0KLQotInVuaW9uIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVU5JT04pOyB9Ci0iaW50ZXJzZWN0IgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFUlNFQ1QpOyB9Ci0iZXhjZXB0IgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FWENFUFQpOyB9Ci0KLSJpbnN0YW5jZSIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5TVEFOQ0UpOyB9Ci0idHJlYXQiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UUkVBVCk7IH0KLSJjYXN0YWJsZSIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVEFCTEUpOyB9Ci0iY2FzdCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNBU1QpOyB9Ci0iYXMiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BUyk7IH0KLSJvZiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk9GKTsgfQotImlzIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVMpOyB9Ci0KLSJmb3IiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1IpOyB9Ci0iaW4iCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTik7IH0KLSJyZXR1cm4iCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJFVFVSTik7IH0KLSJzYXRpc2ZpZXMiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNBVElTRklFUyk7IH0KLSJ0byIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRPKTsgfQotInNvbWUiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TT01FKTsgfQotImV2ZXJ5IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVZFUlkpOyB9Ci0iaWYiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRik7IH0KLSJ0aGVuIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVEhFTik7IH0KLSJlbHNlIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRUxTRSk7IH0KLSJhbmQiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BTkQpOyB9Ci0ib3IiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5PUik7IH0KLQotImVtcHR5LXNlcXVlbmNlIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRU1QVFlfU0VRVUVOQ0UpOyB9Ci0iaXRlbSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklURU0pOyB9Ci0ibm9kZSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5PREUpOyB9Ci0iZG9jdW1lbnRcLW5vZGUiCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9DVU1FTlRfTk9ERSk7IH0KLSJ0ZXh0IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVEVYVCk7IH0KLSJjb21tZW50IgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT01NRU5UKTsgfQotInByb2Nlc3NpbmdcLWluc3RydWN0aW9uIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUFJPQ0VTU0lOR19JTlNUUlVDVElPTik7IH0KLSJzY2hlbWFcLWF0dHJpYnV0ZSIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TQ0hFTUFfQVRUUklCVVRFKTsgfQotImVsZW1lbnQiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVMRU1FTlQpOyB9Ci0ic2NoZW1hXC1lbGVtZW50IgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNDSEVNQV9FTEVNRU5UKTsgfQotInR5cGVzd2l0Y2giICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVFlQRVNXSVRDSCk7IH0KLQote1N0cmluZ0xpdGVyYWx9CQl7Ci0JCQkJLy8gZ2V0IHJpZCBvZiBxdW90ZXMKLQkJCQlTdHJpbmcgc3RyID0geXl0ZXh0KCk7Ci0JCQkJYXNzZXJ0IHN0ci5sZW5ndGgoKSA+PSAyOwotCQkJCXJldHVybiBzeW1ib2woWHBhdGhTeW0uU1RSSU5HLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTGl0ZXJhbFV0aWxzLnVucXVvdGUoc3RyKSk7IAotCQkJfQote0RpZ2l0c30JCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFR0VSLCBuZXcgQmlnSW50ZWdlcih5eXRleHQoKSkpOyB9Ci17RG91YmxlTGl0ZXJhbH0JCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET1VCTEUsIG5ldyBEb3VibGUoeXl0ZXh0KCkpKTsgfQote0RlY2ltYWxMaXRlcmFsfQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVDSU1BTCwgbmV3IEJpZ0RlY2ltYWwoeXl0ZXh0KCkpKTsgfQote05DTmFtZX0JCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQ05BTUUsIHl5dGV4dCgpKTsgfQotCi0KLQotCi17V2hpdGVzcGFjZX0geyAvKiBpZ25vcmUgKi8gfQotCi0KLS4JeyAKLQkJU3RyaW5nIGVyciA9ICJVbmtub3duIGNoYXJhY3RlciBhdCBsaW5lICIgKyBsaW5lbm8oKTsgCi0JCWVyciArPSAiIGNvbCAiICsgY29sbm8oKTsKLQkJZXJyICs9ICI6ICIgKyB5eXRleHQoKTsgCi0JCQkgICAgIAotCQl0aHJvdyBuZXcgSkZsZXhFcnJvcihlcnIpOyAKLQl9Ci0KLX0KLQotPENPTU1FTlQ+IHsKLQkiKDoiCQl7IGNvbW1lbnRMZXZlbCsrOyB9Ci0JIjopIgkJeyBjb21tZW50TGV2ZWwtLTsgCi0JCQkgIGlmKGNvbW1lbnRMZXZlbCA9PSAwKQotCQkgICAgICAgICAgCXl5YmVnaW4oWVlJTklUSUFMKTsKLQkJCX0KLQkufFxuCQl7IC8qIGlnbm9yZSAqLyB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjkzZjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wcm92aWRlcj1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotcGx1Z2luTmFtZT1Qc3ljaG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9wb20ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDExY2FmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjwvYXJ0aWZhY3RJZD4KLSAgIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KLSAgIDx2ZXJzaW9uPjEuMS4xMDAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICA8bmFtZT5Qc3ljaG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3I8L25hbWU+Ci0KLSAgIDxwYXJlbnQ+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMjwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjIuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9kZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucmVsZW5nCi0gICAgICA8L3JlbGF0aXZlUGF0aD4KLSAgIDwvcGFyZW50PgotCi0gICA8YnVpbGQ+Ci0gICAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgotICAgICAgPHBsdWdpbk1hbmFnZW1lbnQ+Ci0gICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbWQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICA8L3BsdWdpbnM+Ci0gICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+Ci0gICAgICA8cGx1Z2lucz4KLSAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNzwvdmVyc2lvbj4KLSAgICAgICAgIDwvcGx1Z2luPgotICAgICAgPC9wbHVnaW5zPgotICAgPC9idWlsZD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvQ29sbGF0aW9uUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvQ29sbGF0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRmZmU2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0NvbGxhdGlvblByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotCi0vKioKLSAqIFNlcnZpY2UgcHJvdmlkZXIgaW50ZXJmYWNlIGZvciBsb29raW5nIHVwIGNvbGxhdGlvbnMgZnJvbSB3aXRoaW4gdGhlIGR5bmFtaWMgY29udGV4dC4KLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGludGVyZmFjZSBDb2xsYXRpb25Qcm92aWRlciB7Ci0JLyoqCi0JICogR2V0cyB0aGUgbmFtZWQgY29sbGF0b3IuIFczQyBkb2VzIG5vdCBkZWZpbmUgY29sbGF0aW9uIG5hbWVzICh5ZXQ/KSBzbyB3ZSBhcmUgY29uc3RyYWluZWQgdG8gdXNpbmcgYW4KLQkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG5hbWluZyBzY2hlbWUuCi0JICogCi0JICogQHBhcmFtIG5hbWUgQSBVUkkgZGVzaWduYXRpbmcgdGhlIGNvbGxhdGlvbiB0byB1c2UKLQkgKiBAcmV0dXJuIFRoZSBjb2xsYXRpb24gdG8gdXNlLCBvciBudWxsIGlmIG5vIHN1Y2ggY29sbGF0aW9uIGV4aXN0cyBieSB0aGlzIHByb3ZpZGVyCi0JICovCi0JQ29tcGFyYXRvciBnZXRfY29sbGF0aW9uKFN0cmluZyBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRE9NQnVpbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01CdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZDdmMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01CdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIERvYyBmaXhlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5pby4qOwotCi1pbXBvcnQgb3JnLnczYy5kb20uKjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy4qOwotaW1wb3J0IG9yZy54bWwuc2F4Lio7Ci0KLS8qKgotICogVGhlIERPTSBidWlsZGVyIGxvYWRzIGFuIERPTSBmcm9tIGFuIElucHV0U3RyZWFtLiBUaGUgbG9hZGluZyBpcyBhbHdheXMgbmFtZXNwYWNlIGF3YXJlLgotICovCi1wdWJsaWMgY2xhc3MgRE9NQnVpbGRlciBpbXBsZW1lbnRzIERPTUxvYWRlciB7Ci0JYm9vbGVhbiBfdmFsaWRhdGluZzsKLQlib29sZWFuIF9uYW1lc3BhY2VfYXdhcmU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRE9NIGJ1aWxkZXIuCi0JICovCi0JcHVibGljIERPTUJ1aWxkZXIoKSB7Ci0JCV92YWxpZGF0aW5nID0gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogTG9hZHMgVGhlIFhNTCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gaW4KLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBzdHJlYW0uCi0JICogQHRocm93cyBET01Mb2FkZXJFeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBET00gbG9hZGVyIGV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBsb2FkZWQgZG9jdW1lbnQuCi0JICovCi0JLy8gWFhYOiBmaXggZXJyb3IgcmVwb3J0aW5nCi0JcHVibGljIERvY3VtZW50IGxvYWQoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBET01Mb2FkZXJFeGNlcHRpb24gewotCi0JCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlmYWN0b3J5LnNldFZhbGlkYXRpbmcoX3ZhbGlkYXRpbmcpOwotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0KLQkJCS8vIGlmKF92YWxpZGF0aW5nKSB7Ci0JCQlidWlsZGVyLnNldEVycm9ySGFuZGxlcihuZXcgRXJyb3JIYW5kbGVyKCkgewotCQkJCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQkJCXRocm93IGU7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWFBhcnNlRXhjZXB0aW9uIHsKLQkJCQkJdGhyb3cgZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0JCQkJCQl0aHJvd3MgU0FYUGFyc2VFeGNlcHRpb24gewotCQkJCQl0aHJvdyBlOyAvLyBYWFgKLQkJCQl9Ci0JCQl9KTsKLQkJCS8vIH0KLQkJCXJldHVybiBidWlsZGVyLnBhcnNlKGluKTsKLQkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIlNBWCBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IERPTUxvYWRlckV4Y2VwdGlvbigiUGFyc2VyIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9uOiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgRE9NTG9hZGVyRXhjZXB0aW9uKCJJTyBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdmFsaWRhdGluZyBib29sZWFuLgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhbGlkYXRpbmcoYm9vbGVhbiB4KSB7Ci0JCV92YWxpZGF0aW5nID0geDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJkMTg1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBEb2N1bWVudGVkIG5hbWVzcGFjZSBhd2FyZW5lc3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICogVGhlIERPTSBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1bWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBET01Mb2FkZXIgewotCi0JLyoqCi0JICogVGhlIERPTSBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1ZW1udAotCSAqIAotCSAqIEBwYXJhbSBpbgotCSAqICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS4KLQkgKiBAdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIERPTSBsb2FkZXIgZXhjZXB0aW9uLgotCSAqIEByZXR1cm4gVGhlIGxvYWRlZCBkb2N1bWVudC4gVGhlIGRvY3VtZW50IGlzIGFsd2F5cyBsb2FkZWQgYXMgbmFtZXNwYWNlLWF3YXJlCi0JICovCi0JcHVibGljIERvY3VtZW50IGxvYWQoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBET01Mb2FkZXJFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBTZXQgdmFsaWRhdGluZyBib29sZWFuLgotCSAqIAotCSAqIEBwYXJhbSB2YWwKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4uCi0JICovCi0JLy8gWFhYOiBkZWZhdWx0IGlzIGZhbHNlID8hIFtkb2N1bWVudCBpdCA/XQotCXB1YmxpYyB2b2lkIHNldF92YWxpZGF0aW5nKGJvb2xlYW4gdmFsKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXJFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRE9NTG9hZGVyRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTU4M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotCi0vKioKLSAqIEV4Y2VwdGlvbiBjYXVzZWQgYnkgRE9NIGxvYWRlci4KLSAqLwotcHVibGljIGNsYXNzIERPTUxvYWRlckV4Y2VwdGlvbiBleHRlbmRzIFhQYXRoRXhjZXB0aW9uIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC03NjUyODY1MjIyMjExMDY3MjAxTDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBET00gbG9hZGVyIGV4Y2VwdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBET01Mb2FkZXJFeGNlcHRpb24oU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdER5bmFtaWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHREeW5hbWljQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzBlNjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdER5bmFtaWNDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4KLSAqICAgICAgICAgICAgICAgICAgLSBidWcgMjYyNzY1IC0gZml4IGhhbmRsaW5nIG9mIHJhbmdlIGV4cHJlc3Npb24gb3A6dG8gYW5kIGVtcHR5IHNlcXVlbmNlIAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyODExNTkgLSBmaXggZG9jdW1lbnQgbG9hZGluZyBhbmQgcmVzb2x2aW5nIFVSSXMgCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAgKiAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzI1MjYyIC0gcHJvdmlkaW5nIGFiaWxpdHkgdG8gc3RvcmUgYW4gWFBhdGgyIHNlcXVlbmNlIGludG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gdXNlci1kZWZpbmVkIHZhcmlhYmxlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotLyoqCi0gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIER5bmFtaWMgQ29udGV4dC4KLSAqIAotICogSW5pdGlhbGl6ZXMgYW5kIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgb2YgYSBkeW5hbWljIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZQotICogWFBhdGggMi4wIHNwZWNpZmljYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0RHluYW1pY0NvbnRleHQgZXh0ZW5kcyBEZWZhdWx0U3RhdGljQ29udGV4dCBpbXBsZW1lbnRzCi0JCUR5bmFtaWNDb250ZXh0IHsKLQotCXByaXZhdGUgRm9jdXMgX2ZvY3VzOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0JcHJpdmF0ZSBNYXAgX2xvYWRlZF9kb2N1bWVudHM7Ci0JcHJpdmF0ZSBHcmVnb3JpYW5DYWxlbmRhciBfY3VycmVudF9kYXRlX3RpbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgX2RlZmF1bHRfY29sbGF0aW9uX25hbWUgPSBDT0RFUE9JTlRfQ09MTEFUSU9OOwotCXByaXZhdGUgQ29sbGF0aW9uUHJvdmlkZXIgX2NvbGxhdGlvbl9wcm92aWRlcjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBzY2hlbWEKLQkgKiAgICAgICAgICAgIFNjaGVtYSBpbmZvcm1hdGlvbiBvZiBkb2N1bWVudC4gTWF5IGJlIG51bGwKLQkgKiBAcGFyYW0gZG9jCi0JICogICAgICAgICAgICBEb2N1bWVudCBbcm9vdF0gbm9kZSBvZiBYTUwgc291cmNlLgotCSAqLwotCXB1YmxpYyBEZWZhdWx0RHluYW1pY0NvbnRleHQoWFNNb2RlbCBzY2hlbWEsIERvY3VtZW50IGRvYykgewotCQlzdXBlcihzY2hlbWEpOwotCi0JCV9mb2N1cyA9IG51bGw7Ci0JCV90eiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigwLCA1LCAwLCAwLCB0cnVlKTsKLQkJX2xvYWRlZF9kb2N1bWVudHMgPSBuZXcgSGFzaE1hcCgpOwotCX0KLQotCS8qKgotCSAqIFJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlCi0JICogCi0JICogQHJldHVybiBhbiB4czppbnRlZ2VyIF90egotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBDdXJyZW50IHN0YWJsZSBkYXRlIHRpbWUgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEBzaW5jZSAxLjEKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCNnZXRfY3VycmVudF90aW1lKCkKLQkgKi8KLQlwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXIgY3VycmVudF9kYXRlX3RpbWUoKSB7Ci0JCWlmIChfY3VycmVudF9kYXRlX3RpbWUgPT0gbnVsbCkgewotCQkJX2N1cnJlbnRfZGF0ZV90aW1lID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0JCX0KLQkJcmV0dXJuIF9jdXJyZW50X2RhdGVfdGltZTsKLQl9Ci0JCi0JLyoqCi0JICogQ2hhbmdlcyB0aGUgY3VycmVudCBmb2N1cy4KLQkgKiAKLQkgKiBAcGFyYW0gZgotCSAqICAgICAgICAgICAgZm9jdXMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0X2ZvY3VzKEZvY3VzIGYpIHsKLQkJX2ZvY3VzID0gZjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGZvY3VzCi0JICogCi0JICogQHJldHVybiBfZm9jdXMKLQkgKi8KLQlwdWJsaWMgRm9jdXMgZm9jdXMoKSB7Ci0JCXJldHVybiBfZm9jdXM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgY29udGV4dCBpdGVtIHRoYXQgaXMgaW4gZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIEFueVR5cGUgcmVzdWx0IGZyb20gX2ZvY3VzLmNvbnRleHRfaXRlbSgpCi0JICovCi0JcHVibGljIEFueVR5cGUgY29udGV4dF9pdGVtKCkgewotCQlyZXR1cm4gX2ZvY3VzLmNvbnRleHRfaXRlbSgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLnBvc2l0aW9uKCkKLQkgKi8KLQlwdWJsaWMgaW50IGNvbnRleHRfcG9zaXRpb24oKSB7Ci0JCXJldHVybiBfZm9jdXMucG9zaXRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLmxhc3QoKQotCSAqLwotCXB1YmxpYyBpbnQgbGFzdCgpIHsKLQkJcmV0dXJuIF9mb2N1cy5sYXN0KCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHZhcmlhYmxlIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIEFueVR5cGUgcmVzdWx0IGZyb20gZ2V0X3ZhcihuYW1lKSBvciByZXR1cm4gTlVMTAotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0X3ZhcmlhYmxlKFFOYW1lIG5hbWUpIHsKLQkJLy8gWFhYOiBidWlsdC1pbiB2YXJpYWJsZXMKLQkJaWYgKCJmcyIuZXF1YWxzKG5hbWUucHJlZml4KCkpKSB7Ci0JCQlpZiAobmFtZS5sb2NhbCgpLmVxdWFscygiZG90IikpCi0JCQkJcmV0dXJuIGNvbnRleHRfaXRlbSgpOwotCi0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gZ2V0X3ZhcihuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcmV0dXJuIGEgUmVzdWx0U2VxdWVuY2UgZnJvbSBmdW5jdC5ldmFsdWF0ZShhcmdzKQotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZV9mdW5jdGlvbihRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJRnVuY3Rpb24gZnVuY3QgPSBmdW5jdGlvbihuYW1lLCBhcmdzLnNpemUoKSk7Ci0KLQkJYXNzZXJ0IGZ1bmN0ICE9IG51bGw7Ci0KLQkJcmV0dXJuIGZ1bmN0LmV2YWx1YXRlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEFkZHMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCi0JICogCi0JICogQHBhcmFtIGZsCi0JICogICAgICAgICAgICBGdW5jdGlvbiBsaWJyYXJ5IHRvIGFkZC4KLQkgKiAKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBhZGRfZnVuY3Rpb25fbGlicmFyeShGdW5jdGlvbkxpYnJhcnkgZmwpIHsKLQkJc3VwZXIuYWRkX2Z1bmN0aW9uX2xpYnJhcnkoZmwpOwotCQlmbC5zZXRfZHluYW1pY19jb250ZXh0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIGdldCBkb2N1bWVudAotCSAqIAotCSAqIEByZXR1cm4gYSBSZXN1bHRTZXF1ZW5jZSBmcm9tIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCkKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGdldF9kb2MoVVJJIHJlc29sdmVkKSB7Ci0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCWlmIChfbG9hZGVkX2RvY3VtZW50cy5jb250YWluc0tleShyZXNvbHZlZCkpIHsKLQkJCSAvL3RyaWVkIGJlZm9yZQotCQkJZG9jID0gKERvY3VtZW50KV9sb2FkZWRfZG9jdW1lbnRzLmdldChyZXNvbHZlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlkb2MgPSByZXRyaWV2ZV9kb2MocmVzb2x2ZWQpOwotCQkJX2xvYWRlZF9kb2N1bWVudHMucHV0KHJlc29sdmVkLCBkb2MpOwotCQl9Ci0KLQkJaWYgKGRvYyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBEb2NUeXBlKGRvYykpOwotCX0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFVSSSByZXNvbHZlX3VyaShTdHJpbmcgdXJpKSB7Ci0JCXRyeSB7Ci0JCQlVUkkgcmVhbFVSSSA9IFVSSS5jcmVhdGUodXJpKTsKLQkJCWlmIChyZWFsVVJJLmlzQWJzb2x1dGUoKSkgewotCQkJCXJldHVybiByZWFsVVJJOwotCQkJfSBlbHNlIHsKLQkJCQlVUkkgYmFzZVVSSSA9IFVSSS5jcmVhdGUoYmFzZV91cmkoKS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJcmV0dXJuIGJhc2VVUkkucmVzb2x2ZSh1cmkpOwotCQkJfQotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8vIFhYWCBtYWtlIGl0IG5pY2UsIGFuZCBtb3ZlIGl0IG91dCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24KLQlwcml2YXRlIERvY3VtZW50IHJldHJpZXZlX2RvYyhVUkkgdXJpKSB7Ci0JCXRyeSB7Ci0JCQlET01Mb2FkZXIgbG9hZGVyID0gbmV3IFhlcmNlc0xvYWRlcigpOwotCQkJbG9hZGVyLnNldF92YWxpZGF0aW5nKGZhbHNlKTsKLQotCQkJRG9jdW1lbnQgZG9jID0gbG9hZGVyLmxvYWQobmV3IFVSTCh1cmkudG9TdHJpbmcoKSkub3BlblN0cmVhbSgpKTsKLQkJCWRvYy5zZXREb2N1bWVudFVSSSh1cmkudG9TdHJpbmcoKSk7Ci0JCQlyZXR1cm4gZG9jOwotCQl9IGNhdGNoIChET01Mb2FkZXJFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCi0JICogCi0JICogQHBhcmFtIHZhcgotCSAqICAgICAgICAgICAgVmFyaWFibGUgbmFtZS4KLQkgKiBAcGFyYW0gdmFsCi0JICogICAgICAgICAgICBWYXJpYWJsZSB2YWx1ZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRfdmFyaWFibGUoUU5hbWUgdmFyLCBBbnlUeXBlIHZhbCkgewotCQlzdXBlci5zZXRfdmFyaWFibGUodmFyLCB2YWwpOwotCX0KLQkKLQkKLQkvKgotCSAqIFNldCBhIFhQYXRoMiBzZXF1ZW5jZSBpbnRvIGEgdmFyaWFibGUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhcmlhYmxlKFFOYW1lIHZhciwgUmVzdWx0U2VxdWVuY2UgdmFsKSB7Ci0JCXN1cGVyLnNldF92YXJpYWJsZSh2YXIsIHZhbCk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9kZWZhdWx0X2NvbGxhdGlvbihTdHJpbmcgX2RlZmF1bHRfY29sbGF0aW9uKSB7Ci0JCXRoaXMuX2RlZmF1bHRfY29sbGF0aW9uX25hbWUgPSBfZGVmYXVsdF9jb2xsYXRpb247Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpIHsKLQkJcmV0dXJuIF9kZWZhdWx0X2NvbGxhdGlvbl9uYW1lOwotCX0KLQotCS8vIFdlIGFyZSBleHBsaWNpdGx5IE5PVCB1c2luZyBnZW5lcmljcyBoZXJlLCBpbiBhbnRpY2lwYXRpb24gb2YgSkRLMS40IGNvbXBhdGliaWxpdHkKLQlwcml2YXRlIHN0YXRpYyBDb21wYXJhdG9yIENPREVQT0lOVF9DT01QQVJBVE9SID0gbmV3IENvbXBhcmF0b3IoKSB7Ci0JCQotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCXJldHVybiAoKFN0cmluZylvMSkuY29tcGFyZVRvKChTdHJpbmcpbzIpOwotCQl9Ci0JfTsKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICogCi0JICovCi0JcHVibGljIENvbXBhcmF0b3I8T2JqZWN0PiBnZXRfY29sbGF0aW9uKFN0cmluZyB1cmkpIHsKLQkJaWYgKENPREVQT0lOVF9DT0xMQVRJT04uZXF1YWxzKHVyaSkpIHJldHVybiBDT0RFUE9JTlRfQ09NUEFSQVRPUjsKLQkJCi0JCXJldHVybiBfY29sbGF0aW9uX3Byb3ZpZGVyICE9IG51bGwgPyBfY29sbGF0aW9uX3Byb3ZpZGVyLmdldF9jb2xsYXRpb24odXJpKSA6IG51bGw7Ci0JfQotCQotCS8qKgotCSAqIAotCSAqIAotCSAqIEBwYXJhbSBwcm92aWRlcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfY29sbGF0aW9uX3Byb3ZpZGVyKENvbGxhdGlvblByb3ZpZGVyIHByb3ZpZGVyKSB7Ci0JCXRoaXMuX2NvbGxhdGlvbl9wcm92aWRlciA9IHByb3ZpZGVyOwotCX0KLQkKLQkvKioKLQkgKiBVc2UgZm9jdXMoKS5wb3NpdGlvbigpIHRvIHJldHJpZXZlIHRoZSB2YWx1ZS4KLQkgKiBAZGVwcmVjYXRlZCAgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB1c2UgZm9jdXMoKS5wb3NpdGlvbigpLgotCSAqLwotCUBEZXByZWNhdGVkCi0JcHVibGljIGludCBub2RlX3Bvc2l0aW9uKE5vZGUgbm9kZSkgewotCSAgLy8gdW51c2VkIHBhcmFtZXRlciEKLQkgIHJldHVybiBfZm9jdXMucG9zaXRpb24oKTsJCi0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EZWZhdWx0RXZhbHVhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHRFdmFsdWF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYwMTNjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHRFdmFsdWF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBjaGVjayBhcmd1bWVudHMgdG8gb3A6dG8KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBub2RlIHN0YXRlIGl0ZXJhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyODE5MzggLSB1bmRlZmluZWQgY29udGV4dCBzaG91bGQgcmFpc2UgZXJyb3IKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyNjI3NjUgLSB1c2UgY29ycmVjdCAnZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUnCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzEyMTkxIC0gaW5zdGFuY2Ugb2YgdGVzdCBmYWlscyB3aXRoIHBhcnRpYWwgbWF0Y2hlcwotICAqICAgIE11a3VsIEdhbmRoaSAgICAgICAgIC0gYnVnIDMyNTI2MiAtIHByb3ZpZGluZyBhYmlsaXR5IHRvIHN0b3JlIGFuIFhQYXRoMiBzZXF1ZW5jZSBpbnRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gdXNlci1kZWZpbmVkIHZhcmlhYmxlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLkl0ZW1QU1ZJOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVzY2VuZGFudE9yU2VsZkF4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUGFyZW50QXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlbGZBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY1R5cGVOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW55S2luZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyaWJ1dGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXhpc1N0ZXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yd2FyZFN0ZXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GdW5jdGlvbkNhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JRGl2RXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTmFtZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFBdHRyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN1YkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyRXhwclBhaXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZuQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRm5EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GblJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZzRGl2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0VxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0dlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0d0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0lEaXY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZzTGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZzTHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZzTWludXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZzTW9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc05lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc1BsdXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZzVGltZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk9wRXhjZXB0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5PcEludGVyc2VjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uT3BUbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uT3BVbmlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5QSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5UZXh0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIERlZmF1bHQgZXZhbHVhdG9yIGludGVyZmFjZQotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdEV2YWx1YXRvciBpbXBsZW1lbnRzIFhQYXRoVmlzaXRvciwgRXZhbHVhdG9yIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfU0NIRU1BX05TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIEFOWV9BVE9NSUNfVFlQRSA9IG5ldyBRTmFtZSgieHMiLAotCQkJImFueUF0b21pY1R5cGUiLCBYTUxfU0NIRU1BX05TKTsKLQotCXN0YXRpYyBjbGFzcyBEdW1teUVycm9yIGV4dGVuZHMgRXJyb3IgewotCQkvKioKLQkJICogCi0JCSAqLwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMTYxNjQ0NzkwODgxNDA1NDAzTDsKLQkJLy8gMDogZHluYW1pYyBlcnJvcgotCQkvLyAxOiB0eXBlIGVycm9yCi0JCXByaXZhdGUgaW50IF90eXBlOwotCi0JCXB1YmxpYyBEdW1teUVycm9yKGludCB0eXBlKSB7Ci0JCQlfdHlwZSA9IHR5cGU7Ci0JCX0KLQotCQlwdWJsaWMgaW50IHR5cGUoKSB7Ci0JCQlyZXR1cm4gX3R5cGU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIER5bmFtaWNDb250ZXh0IF9kYzsKLQlwcml2YXRlIFhQYXRoRXhjZXB0aW9uIF9lcnI7Ci0KLQkvLyBzdHVmZiBhbnlvbmUgbWF5IHVzZQotCXByaXZhdGUgQ29sbGVjdGlvbiBfZ19jb2xsOwotCXByaXZhdGUgWFNJbnRlZ2VyIF9nX3hzaW50OwotCi0JLy8gdGhpcyBpcyBhIHBhcmFtZXRlciB0aGF0IG1heSBiZSBzZXQgb24gYSBjYWxsLi4uCi0JLy8gdGhlIHBhcmFtZXRlciBtYXkgYmVjb21lIGludmFsaWQgb24gdGhlIG5leHQgY2FsbC4uLiBpLmUuIHRoZQotCS8vIHByZXZpb3VzIHBhcmFtZXRlciBpcyBub3Qgc2F2ZWQuLi4gc28gdXNlIHdpdGggY2FyZSEgW3JlbWVtYmVyLi4uCi0JLy8gdGhpcyB0aGluZyBpcyBoaWdobHkgcmVjdXJzaXZlXQotCXByaXZhdGUgT2JqZWN0IF9wYXJhbTsKLQotCXN0YXRpYyBjbGFzcyBQYWlyIHsKLQkJcHVibGljIE9iamVjdCBfb25lOwotCQlwdWJsaWMgT2JqZWN0IF90d287Ci0KLQkJcHVibGljIFBhaXIoT2JqZWN0IG8sIE9iamVjdCB0KSB7Ci0JCQlfb25lID0gbzsKLQkJCV90d28gPSB0OwotCQl9Ci0JfQotCi0JLyoqCi0JICogc2V0IHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHBhcmFtIGRvYwotCSAqICAgICAgICAgICAgaXMgdGhlIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBEZWZhdWx0RXZhbHVhdG9yKER5bmFtaWNDb250ZXh0IGRjLCBEb2N1bWVudCBkb2MpIHsKLQkJX2RjID0gZGM7Ci0JCV9lcnIgPSBudWxsOwotCi0JCS8vIGluaXRpYWxpemUgY29udGV4dCBpdGVtIHdpdGggcm9vdCBvZiBkb2N1bWVudAotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCWlmIChkb2MgIT0gbnVsbCkgcnMuYWRkKG5ldyBEb2NUeXBlKGRvYykpOwotCi0JCV9kYy5zZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0KLQkJX3BhcmFtID0gbnVsbDsKLQotCQlfZ19jb2xsID0gbmV3IEFycmF5TGlzdCgpOwotCQlfZ194c2ludCA9IG5ldyBYU0ludGVnZXIoKTsKLQl9Ci0KLQkvLyBYWFggdGhpcyBraW5kYSBzdXgKLQkvLyB0aGUgcHJvYmxlbSBpcyB0aGF0IHZpc2lzdG9yIGludGVyZmFjZSBkb2VzIG5vdCB0aHJvdyBleGNlcHRpb25zLi4uCi0JLy8gc28gd2UgZ2V0IGFyb3VuZCBpdCA7RAotCXByaXZhdGUgdm9pZCByZXBvcnRfZXJyb3IoRHluYW1pY0Vycm9yIGVycikgewotCQlfZXJyID0gZXJyOwotCQl0aHJvdyBuZXcgRHVtbXlFcnJvcigwKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVwb3J0X2Vycm9yKFR5cGVFcnJvciBlcnIpIHsKLQkJX2VyciA9IGVycjsKLQkJdGhyb3cgbmV3IER1bW15RXJyb3IoMSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlcG9ydF9lcnJvcihTdGF0aWNOYW1lRXJyb3IgZXJyKSB7Ci0JCXRocm93IG5ldyBEdW1teUVycm9yKDY2Nik7Ci0JfQotCi0JLyoqCi0JICogZXZhbHVhdGUgdGhlIHhwYXRoIG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoIG5vZGUuCi0JICogQHRocm93cyBkeW5hbWljCi0JICogICAgICAgICAgICAgZXJyb3IuCi0JICogQHJldHVybiByZXN1bHQgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKFhQYXRoTm9kZSBub2RlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdHJ5IHsKLQkJCXJldHVybiAoUmVzdWx0U2VxdWVuY2UpIG5vZGUuYWNjZXB0KHRoaXMpOwotCQl9IGNhdGNoIChEdW1teUVycm9yIGUpIHsKLQkJCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJCWNhc2UgMDoKLQkJCQl0aHJvdyAoRHluYW1pY0Vycm9yKSBfZXJyOwotCQkJY2FzZSAxOgotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoKFR5cGVFcnJvcikgX2Vycik7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQotCX0KLQotCS8vIGJhc2ljYWxseSB0aGUgY29tbWEgb3BlcmF0b3IuLi4KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGRvX2V4cHIoSXRlcmF0b3IgaSkgewotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gbnVsbDsKLQotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUV4cHIgZSA9IChFeHByKSBpLm5leHQoKTsKLQotCQkJUmVzdWx0U2VxdWVuY2UgcmVzdWx0ID0gKFJlc3VsdFNlcXVlbmNlKSBlLmFjY2VwdCh0aGlzKTsKLQotCQkJaWYgKHJzID09IG51bGwpCi0JCQkJcnMgPSByZXN1bHQ7Ci0JCQllbHNlCi0JCQkJcnMuY29uY2F0KHJlc3VsdCk7Ci0JCX0KLQotCQlpZiAocnMgPT0gbnVsbCkKLQkJCXJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIGl0ZXJhdGUgdGhyb3VnaCB4cGF0aCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHhwCi0JICogICAgICAgICAgICBpcyB0aGUgeHBhdGguCi0JICogQHJldHVybiByZXN1bHQgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aCB4cCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGRvX2V4cHIoeHAuaXRlcmF0b3IoKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8vIFhYWCB1Z2x5Ci0JLy8gdHlwZTogMCA9IGZvciBbcmV0dXJuID09ICJjb3JyZWN0Il0KLQkvLyAxID0gZm9yIGFsbCBbcmV0dXJuIGZhbHNlLCByZXR1cm4gZW1wdHkgb24gdHJ1ZV0KLQkvLyAyID0gdGhlcmUgZXhpc3RzIFtyZXR1cm4gdHJ1ZSwgcmV0dXJuIGVtcHR5IG9uIGZhbHNlXQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgZG9fZm9yX3F1YW50aWZpZWRfZXhwcihMaXN0SXRlcmF0b3IgaXRlciwKLQkJCUV4cHIgZmluYWxleHByLCBpbnQgdHlwZSkgewotCi0JCS8vIHdlIGhhdmUgbW9yZSB2YXJzIHRvIGJpbmQuLi4KLQkJaWYgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlib29sZWFuIGFsbG9jYXRlZF92YXIgPSBmYWxzZTsKLQkJCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlWYXJFeHByUGFpciB2ZSA9IChWYXJFeHByUGFpcikgaXRlci5uZXh0KCk7Ci0KLQkJCS8vIGV2YWx1YXRlIGJpbmRpbmcgc2VxdWVuY2UKLQkJCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSB2ZS5leHByKCkuYWNjZXB0KHRoaXMpOwotCi0JCQkvLyBYWFgKLQkJCWlmIChycy5lbXB0eSgpKSB7Ci0JCQkJaXRlci5wcmV2aW91cygpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0KLQkJCVFOYW1lIHZhcm5hbWUgPSB2ZS52YXJuYW1lKCk7Ci0KLQkJCS8vIGZvciBlYWNoIGl0ZW0gb2YgYmluZGluZyBzZXF1ZW5jZSwgYmluZCB0aGUgcmFuZ2UKLQkJCS8vIHZhcmlhYmxlIGFuZCBkbyB0aGUgZXhwcmVzc2lvbiwgY29uY2F0ZW5hdGluZyB0aGUKLQkJCS8vIHJlc3VsdAotCi0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCQlfZGMuc2V0X3ZhcmlhYmxlKHZhcm5hbWUsIGl0ZW0pOwotCQkJCWFsbG9jYXRlZF92YXIgPSB0cnVlOwotCi0JCQkJX2RjLm5ld19zY29wZSgpOwotCQkJCVJlc3VsdFNlcXVlbmNlIHJlcyA9IGRvX2Zvcl9xdWFudGlmaWVkX2V4cHIoaXRlciwgZmluYWxleHByLAotCQkJCQkJdHlwZSk7Ci0JCQkJX2RjLmRlc3Ryb3lfc2NvcGUoKTsKLQkJCQlhc3NlcnQgcmVzICE9IG51bGw7Ci0KLQkJCQkvLyBvayBoZXJlIHdlIGdvdCBhICJyZWFsIiByZXN1bHQsIG5vdyBmaWd1cmUKLQkJCQkvLyBvdXQgd2hhdCB0byBkbyB3aXRoIGl0Ci0JCQkJWFNCb29sZWFuIGVmZmJvb2wgPSBudWxsOwotCQkJCXN3aXRjaCAodHlwZSkgewotCQkJCS8vIGZvciBleHByZXNzaW9uCi0JCQkJY2FzZSAwOgotCQkJCQlyZXN1bHQuY29uY2F0KHJlcyk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJLy8gd2UgbmVlZCB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUKLQkJCQkvLyBvZiB0aGUgZXhwcmVzc2lvbgotCQkJCWNhc2UgMToKLQkJCQljYXNlIDI6Ci0JCQkJCWVmZmJvb2wgPSBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZShyZXMpOwotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkJCWFzc2VydCBmYWxzZTsKLQkJCQl9Ci0KLQkJCQkvLyB3ZSBnb3QgYSBxdWFudGlmaWVkIGV4cHJlc3Npb24KLQkJCQlpZiAoZWZmYm9vbCAhPSBudWxsKSB7Ci0JCQkJCS8vIGZvciBhbGwKLQkJCQkJaWYgKHR5cGUgPT0gMSkgewotCQkJCQkJcmVzdWx0ID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoZWZmYm9vbCk7Ci0JCQkJCQlpZiAoIWVmZmJvb2wudmFsdWUoKSkKLQkJCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQkvLyB0aGVyZSBleGlzdHMKLQkJCQkJZWxzZSBpZiAodHlwZSA9PSAyKSB7Ci0JCQkJCQlyZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhlZmZib29sKTsKLQkJCQkJCWlmIChlZmZib29sLnZhbHVlKCkpCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0gZWxzZQotCQkJCQkJYXNzZXJ0IGZhbHNlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGFsbG9jYXRlZF92YXIpIHsKLQkJCQlib29sZWFuIGRlbCA9IF9kYy5kZWxfdmFyaWFibGUodmFybmFtZSk7Ci0JCQkJYXNzZXJ0IGRlbCA9PSB0cnVlOwotCQkJfQotCi0JCQlpdGVyLnByZXZpb3VzKCk7Ci0JCQlyZXR1cm4gcmVzdWx0OwotCQl9Ci0JCS8vIHdlIGZpbmFsbHkgZ290IHRvIGRvIHRoZSAibGFzdCBleHByZXNzaW9uIgotCQllbHNlIHsKLQkJCXJldHVybiAoUmVzdWx0U2VxdWVuY2UpIGZpbmFsZXhwci5hY2NlcHQodGhpcyk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGZvciBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGZleAotCSAqICAgICAgICAgICAgaXMgdGhlIGZvciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3JFeHByIGZleCkgewotCQkvLyBYWFgKLQkJTGlzdCBwYWlycyA9IG5ldyBBcnJheUxpc3QoZmV4LnZlX3BhaXJzKCkpOwotCQlyZXR1cm4gZG9fZm9yX3F1YW50aWZpZWRfZXhwcihwYWlycy5saXN0SXRlcmF0b3IoKSwgZmV4LmV4cHIoKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgcXVhbnRpZmllZCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHFleAotCSAqICAgICAgICAgICAgaXMgdGhlIHF1YW50aWZpZWQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uIG9yIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChRdWFudGlmaWVkRXhwciBxZXgpIHsKLQkJLy8gWFhYCi0JCUxpc3QgcGFpcnMgPSBuZXcgQXJyYXlMaXN0KHFleC52ZV9wYWlycygpKTsKLQotCQlpbnQgaGFjayA9IDA7Ci0KLQkJc3dpdGNoIChxZXgudHlwZSgpKSB7Ci0JCWNhc2UgUXVhbnRpZmllZEV4cHIuU09NRToKLQkJCWhhY2sgPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgUXVhbnRpZmllZEV4cHIuQUxMOgotCQkJaGFjayA9IDE7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGRvX2Zvcl9xdWFudGlmaWVkX2V4cHIocGFpcnMubGlzdEl0ZXJhdG9yKCksIHFleAotCQkJCS5leHByKCksIGhhY2spOwotCi0JCS8vIG1ha2Ugc3VyZSB3ZSBmb3VuZCBhbnN3ZXIKLQkJaWYgKCFycy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIG9rIGJlY2F1c2UgYWxsIG9mIHRoaXMgaXMgYSBoYWNrLi4uIGhlcmUgd2UgZ28KLQkJc3dpdGNoIChxZXgudHlwZSgpKSB7Ci0JCWNhc2UgUXVhbnRpZmllZEV4cHIuU09NRToKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JCWNhc2UgUXVhbnRpZmllZEV4cHIuQUxMOgotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGlmIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gaWZleAotCSAqICAgICAgICAgICAgaXMgdGhlIGlmIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIGlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcykuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJZkV4cHIgaWZleCkgewotCQlSZXN1bHRTZXF1ZW5jZSB0ZXN0X3JlcyA9IGRvX2V4cHIoaWZleC5pdGVyYXRvcigpKTsKLQotCQlYU0Jvb2xlYW4gcmVzID0gZWZmZWN0aXZlX2Jvb2xlYW5fdmFsdWUodGVzdF9yZXMpOwotCi0JCWlmIChyZXMudmFsdWUoKSkKLQkJCXJldHVybiBpZmV4LnRoZW5fY2xhdXNlKCkuYWNjZXB0KHRoaXMpOwotCQllbHNlCi0JCQlyZXR1cm4gaWZleC5lbHNlX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW5bXSBkb19sb2dpY19leHAoQmluRXhwciBlKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGUpOwotCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlib29sZWFuIG9uZWIgPSBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZShvbmUpLnZhbHVlKCk7Ci0JCWJvb2xlYW4gdHdvYiA9IGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKHR3bykudmFsdWUoKTsKLQotCQlib29sZWFuIHJlc1tdID0geyBvbmViLCB0d29iIH07Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgb3IgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBvcmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgb3IgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChPckV4cHIgb3JleCkgewotCQlib29sZWFuIHJlc1tdID0gZG9fbG9naWNfZXhwKG9yZXgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkKLQkJCQkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKHJlc1swXSB8fCByZXNbMV0pKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhbmQgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBhbmRleAotCSAqICAgICAgICAgICAgaXMgdGhlIGFuZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFuZEV4cHIgYW5kZXgpIHsKLQkJYm9vbGVhbiByZXNbXSA9IGRvX2xvZ2ljX2V4cChhbmRleCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4ocmVzWzBdICYmIHJlc1sxXSkpOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2Ugbm9kZV9jbXAoaW50IHR5cGUsIENvbGxlY3Rpb24gYXJncykgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDI7Ci0KLQkJSXRlcmF0b3IgYXJnc2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnc2l0ZXIubmV4dCgpOwotCi0JCWludCBzaXplX29uZSA9IG9uZS5zaXplKCk7Ci0JCWludCBzaXplX3R3byA9IHR3by5zaXplKCk7Ci0KLQkJaWYgKHNpemVfb25lID4gMSB8fCBzaXplX3R3byA+IDEpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJaWYgKHNpemVfb25lID09IDAgfHwgc2l6ZV90d28gPT0gMCkKLQkJCXJldHVybiByczsKLQotCQlBbnlUeXBlIGF0X29uZSA9IG9uZS5maXJzdCgpOwotCQlBbnlUeXBlIGF0X3R3byA9IHR3by5maXJzdCgpOwotCi0JCWlmICghKGF0X29uZSBpbnN0YW5jZW9mIE5vZGVUeXBlKSB8fCAhKGF0X3R3byBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQkvLyBvayB3ZSBnb3QgdGhlIGFyZ3MgZmluYWxseQotCQlOb2RlVHlwZSBudF9vbmUgPSAoTm9kZVR5cGUpIGF0X29uZTsKLQkJTm9kZVR5cGUgbnRfdHdvID0gKE5vZGVUeXBlKSBhdF90d287Ci0KLQkJYm9vbGVhbiBhbnN3ZXIgPSBmYWxzZTsgLy8gd2UgYXJlIHBlc3NpbWlzdGljIGFzIHVzdWFsCi0KLQkJLy8gZG8gY29tcGFyaXNvbgotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBDbXBFeHByLklTOgotCQkJYW5zd2VyID0gbnRfb25lLm5vZGVfdmFsdWUoKSA9PSBudF90d28ubm9kZV92YWx1ZSgpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDbXBFeHByLkxFU1NfTEVTUzoKLQkJCWFuc3dlciA9IG50X29uZS5iZWZvcmUobnRfdHdvKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ21wRXhwci5HUkVBVEVSX0dSRUFURVI6Ci0JCQlhbnN3ZXIgPSBudF9vbmUuYWZ0ZXIobnRfdHdvKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTQm9vbGVhbihhbnN3ZXIpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGNvbXBhcmUgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBjbXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIGNvbXBhcmUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uIG9yIG51bGwKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENtcEV4cHIgY21wZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGNtcGV4KTsKLQotCQkJc3dpdGNoIChjbXBleC50eXBlKCkpIHsKLQkJCWNhc2UgQ21wRXhwci5FUToKLQkJCQlyZXR1cm4gRnNFcS5mc19lcV92YWx1ZShhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuTkU6Ci0JCQkJcmV0dXJuIEZzTmUuZnNfbmVfdmFsdWUoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkdUOgotCQkJCXJldHVybiBGc0d0LmZzX2d0X3ZhbHVlKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5MVDoKLQkJCQlyZXR1cm4gRnNMdC5mc19sdF92YWx1ZShhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuR0U6Ci0JCQkJcmV0dXJuIEZzR2UuZnNfZ2VfdmFsdWUoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkxFOgotCQkJCXJldHVybiBGc0xlLmZzX2xlX3ZhbHVlKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5FUVVBTFM6Ci0JCQkJcmV0dXJuIEZzRXEuZnNfZXFfZ2VuZXJhbChhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuTk9URVFVQUxTOgotCQkJCXJldHVybiBGc05lLmZzX25lX2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkdSRUFURVI6Ci0JCQkJcmV0dXJuIEZzR3QuZnNfZ3RfZ2VuZXJhbChhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuTEVTU1RIQU46Ci0JCQkJcmV0dXJuIEZzTHQuZnNfbHRfZ2VuZXJhbChhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuR1JFQVRFUkVRVUFMOgotCQkJCXJldHVybiBGc0dlLmZzX2dlX2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkxFU1NFUVVBTDoKLQkJCQlyZXR1cm4gRnNMZS5mc19sZV9nZW5lcmFsKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5JUzoKLQkJCWNhc2UgQ21wRXhwci5MRVNTX0xFU1M6Ci0JCQljYXNlIENtcEV4cHIuR1JFQVRFUl9HUkVBVEVSOgotCQkJCXJldHVybiBub2RlX2NtcChjbXBleC50eXBlKCksIGFyZ3MpOwotCi0JCQlkZWZhdWx0OgotCQkJCWFzc2VydCBmYWxzZTsKLQkJCX0KLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCX0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCByYW5nZSBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHJleAotCSAqICAgICAgICAgICAgaXMgdGhlIHJhbmdlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmFuZ2VFeHByIHJleCkgewotCQlSZXN1bHRTZXF1ZW5jZSBvbmUgPSAoUmVzdWx0U2VxdWVuY2UpIHJleC5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIHJleC5yaWdodCgpLmFjY2VwdCh0aGlzKTsKLQkJaWYgKG9uZS5lbXB0eSgpIHx8IHR3by5lbXB0eSgpKSByZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsgCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQob25lKTsKLQkJYXJncy5hZGQodHdvKTsKLQotCQl0cnkgewotCQkJcmV0dXJuIE9wVG8ub3BfdG8oYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCXByaXZhdGUgWFNCb29sZWFuIGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gRm5Cb29sZWFuLmZuX2Jvb2xlYW4ocnMpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkKLQkvKioKLQkgKiB2aXNpdCBhbmQgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBhZGRleAotCSAqICAgICAgICAgICAgaXMgdGhlIGFuZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFkZEV4cHIgYWRkZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGFkZGV4KTsKLQkJCXJldHVybiBGc1BsdXMuZnNfcGx1cyhhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc3ViIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gc3ViZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdWIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdWJFeHByIHN1YmV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhzdWJleCk7Ci0JCQlyZXR1cm4gRnNNaW51cy5mc19taW51cyhhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgbXVsdGlwbHkgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIG11bCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE11bEV4cHIgbXVsZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKG11bGV4KTsKLQkJCXJldHVybiBGc1RpbWVzLmZzX3RpbWVzKGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBkaXZpc2lvbiBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZGl2aXNpb24gZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEaXZFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNEaXYuZnNfZGl2KGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSURpdkV4cHIgbXVsZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKG11bGV4KTsKLQkJCXJldHVybiBGc0lEaXYuZnNfaWRpdihhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgbW9kdWxhciBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgbW9kdWxhciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1vZEV4cHIgbXVsZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKG11bGV4KTsKLQkJCXJldHVybiBGc01vZC5mc19tb2QoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCXByaXZhdGUgQ29sbGVjdGlvbiBkb19iaW5fYXJncyhCaW5FeHByIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBlLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IChSZXN1bHRTZXF1ZW5jZSkgZS5yaWdodCgpLmFjY2VwdCh0aGlzKTsKLQotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKG9uZSk7Ci0JCWFyZ3MuYWRkKHR3byk7Ci0KLQkJcmV0dXJuIGFyZ3M7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgdW5pb24gZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSB1bmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgdW5pb24gZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChVbmlvbkV4cHIgdW5leCkgewotCQl0cnkgewotCQkJQ29sbGVjdGlvbiBhcmdzID0gZG9fYmluX2FyZ3ModW5leCk7Ci0JCQlyZXR1cm4gT3BVbmlvbi5vcF91bmlvbihhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgcGlwZSBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHBpcGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgcGlwZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQkvLyBYWFggc2FtZSBhcyBhYm92ZQotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGlwZUV4cHIgcGlwZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKHBpcGV4KTsKLQkJCXJldHVybiBPcFVuaW9uLm9wX3VuaW9uKGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBpbnRlcnNlY3QgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBpZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVyc2VjdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVyc2VjdEV4cHIgaWV4cHIpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGlleHByKTsKLQkJCXJldHVybiBPcEludGVyc2VjdC5vcF9pbnRlcnNlY3QoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGV4Y2VwdCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGVleHByCi0JICogICAgICAgICAgICBpcyB0aGUgZXhjZXB0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRXhjZXB0RXhwciBlZXhwcikgewotCQl0cnkgewotCQkJQ29sbGVjdGlvbiBhcmdzID0gZG9fYmluX2FyZ3MoZWV4cHIpOwotCQkJcmV0dXJuIE9wRXhjZXB0Lm9wX2V4Y2VwdChhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBpb2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGluc3RhbmNlIG9mIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW5zdE9mRXhwciBpb2V4cCkgewotCQkvLyBnZXQgdGhlIHZhbHVlCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBpb2V4cC5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCi0JCS8vIGdldCB0aGUgc2VxdWVuY2UgdHlwZQotCQlTZXF1ZW5jZVR5cGUgc2VxdCA9IChTZXF1ZW5jZVR5cGUpIGlvZXhwLnJpZ2h0KCk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGlzSW5zdGFuY2VPZihycywgc2VxdCkpKTsKLQl9Ci0JCQotCXByaXZhdGUgYm9vbGVhbiBpc0luc3RhbmNlT2YoUmVzdWx0U2VxdWVuY2UgcnMsIFNlcXVlbmNlVHlwZSBzZXF0KSB7Ci0JCU9iamVjdCBvbGRQYXJhbSA9IHRoaXMuX3BhcmFtOwotCQl0cnkgewotCQkJdGhpcy5fcGFyYW0gPSBuZXcgUGFpcihudWxsLCBycyk7Ci0JCQlpbnQgc2VxdWVuY2VMZW5ndGggPSBycy5zaXplKCk7Ci0JCQkvLyBSdW4gdGhlIG1hdGNoZXIKLQkJCXNlcXQuYWNjZXB0KHRoaXMpOwotCQkJaW50IGxlbmd0aEFmdGVyID0gcnMuc2l6ZSgpOwotCQkKLQkJCWlmIChzZXF1ZW5jZUxlbmd0aCAhPSBsZW5ndGhBZnRlcikKLQkJCQlyZXR1cm4gZmFsc2U7IC8vIFNvbWV0aGluZyBkaWRuJ3QgbWF0Y2gsIHNvIGl0J3Mgbm90IGFuIGluc3RhbmNlIG9mIGl0Ci0JCQkKLQkJCXJldHVybiBzZXF0LmlzTGVuZ3RoVmFsaWQoc2VxdWVuY2VMZW5ndGgpOwotCQl9IGZpbmFsbHkgewotCQkJdGhpcy5fcGFyYW0gPSBvbGRQYXJhbTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHRyZWF0LWFzIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gdGFleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0cmVhdC1hcyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRyZWF0QXNFeHByIHRhZXhwKSB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIHRhZXhwLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0KLQkJU2VxdWVuY2VUeXBlIHNlcXQgPSAoU2VxdWVuY2VUeXBlKSB0YWV4cC5yaWdodCgpOwotCQlTZXFUeXBlIHN0ID0gbmV3IFNlcVR5cGUoc2VxdCwgX2RjLCBycyk7Ci0KLQkJdHJ5IHsKLQkJCXN0Lm1hdGNoKHJzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY2FzdGFibGUgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0YWJsZUV4cHIgY2V4cCkgewotCQlib29sZWFuIGNhc3RhYmxlID0gZmFsc2U7Ci0JCXRyeSB7Ci0JCQlDYXN0RXhwciBjZSA9IG5ldyBDYXN0RXhwcigoRXhwcikgY2V4cC5sZWZ0KCksIChTaW5nbGVUeXBlKSBjZXhwCi0JCQkJCS5yaWdodCgpKTsKLQotCQkJdmlzaXQoY2UpOwotCQkJY2FzdGFibGUgPSB0cnVlOwotCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgewotCQkJY2FzdGFibGUgPSBmYWxzZTsKLQkJfQotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGNhc3RhYmxlKSk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY2FzdCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGNleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjYXN0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdEV4cHIgY2V4cCkgewotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBjZXhwLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0JCVNpbmdsZVR5cGUgc3QgPSAoU2luZ2xlVHlwZSkgY2V4cC5yaWdodCgpOwotCi0JCXJzID0gRm5EYXRhLmF0b21pemUocnMpOwotCi0JCWlmIChycy5zaXplKCkgPiAxKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCi0JCWlmIChycy5lbXB0eSgpKSB7Ci0JCQlpZiAoc3QucW1hcmsoKSkKLQkJCQlyZXR1cm4gcnM7Ci0JCQllbHNlCi0JCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQl9Ci0KLQkJQW55VHlwZSBhdCA9IHJzLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhdDsKLQotCQlRTmFtZSB0eXBlID0gc3QudHlwZSgpOwotCi0JCS8vIGNoZWNrIGlmIGNvbnN0cnVjdG9yIGV4aXN0cwotCQkvLyB0cnkgewotCQlpZiAoIV9kYy5mdW5jdGlvbl9leGlzdHModHlwZSwgMSkpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCS8qCi0JCSAqIH0gY2F0Y2goU3RhdGljTnNOYW1lRXJyb3IgZXJyKSB7Ci0JCSAqIHJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsgfQotCQkgKi8KLQkJLy8gcHJlcGFyZSBhcmdzIGZyb20gZnVuY3Rpb24KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhYXQpKTsKLQotCQl0cnkgewotCQkJcmV0dXJuIF9kYy5ldmFsdWF0ZV9mdW5jdGlvbih0eXBlLCBhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgbWludXMgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgbWludXMgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNaW51c0V4cHIgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5hcmcoKS5hY2NlcHQodGhpcyk7Ci0KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChycyk7Ci0KLQkJdHJ5IHsKLQkJCXJldHVybiBGc01pbnVzLmZzX21pbnVzX3VuYXJ5KGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBwbHVzIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHBsdXMgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQbHVzRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBlLmFyZygpLmFjY2VwdCh0aGlzKTsKLQotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKHJzKTsKLQotCQl0cnkgewotCQkJcmV0dXJuIEZzUGx1cy5mc19wbHVzX3VuYXJ5KGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvLyB0aGlzIHdpbGwgZXZhbHVhdGUgdGhlIHN0ZXAgZXhwcmVzc2lvbiBmb3IgdGhlIHdob2xlIGZvY3VzIGFuZCByZXR1cm4KLQkvLyB0aGUgcmVzdWx0LgotCS8vCi0JLy8gaS5lLiBJdCB3aWxsIGV4ZWN1dGUgdGhlIHN0ZXAgZXhwcmVzc2lvbiBmb3IgZWFjaCBpdGVtIGluIHRoZSBmb2N1cwotCS8vIFtlYWNoIHRpbWUgY2hhbmdpbmcgdGhlIGNvbnRleHQgaXRlbV0uCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBkb19zdGVwKFN0ZXBFeHByIHNlKSB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlBcnJheUxpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaW50IHR5cGUgPSAwOyAvLyAwOiBkb24ndCBrbm93IHlldAotCQkvLyAxOiBhdG9taWMKLQkJLy8gMjogbm9kZQotCi0JCUZvY3VzIGZvY3VzID0gX2RjLmZvY3VzKCk7Ci0JCWludCBvcmlnaW5hbF9wb3MgPSBmb2N1cy5wb3NpdGlvbigpOwotCi0JCS8vIGV4ZWN1dGUgc3RlcCBmb3IgYWxsIGl0ZW1zIGluIGZvY3VzCi0JCXdoaWxlICh0cnVlKSB7Ci0JCQlyZXN1bHRzLmFkZChzZS5hY2NlcHQodGhpcykpOwotCi0JCQkvLyBnbyB0byBuZXh0Ci0JCQlpZiAoIWZvY3VzLmFkdmFuY2VfY3AoKSkKLQkJCQlicmVhazsKLQkJfQotCi0JCS8vIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgY2hhbmdlIGZvY3VzCi0JCWZvY3VzLnNldF9wb3NpdGlvbihvcmlnaW5hbF9wb3MpOwotCi0JCWJvb2xlYW4gbm9kZV90eXBlcyA9IGZhbHNlOwotCi0JCS8vIGNoZWNrIHRoZSByZXN1bHRzCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJlc3VsdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSAoUmVzdWx0U2VxdWVuY2UpIGkubmV4dCgpOwotCi0JCQkvLyBtYWtlIHN1cmUgcmVzdWx0cyBhcmUgb2Ygc2FtZSB0eXBlLCBhbmQgYWRkIHRoZW0gaW4KLQkJCWZvciAoSXRlcmF0b3IgaiA9IHJlc3VsdC5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgai5uZXh0KCk7Ci0KLQkJCQkvLyBmaXJzdCBpdGVtCi0JCQkJaWYgKHR5cGUgPT0gMCkgewotCQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpCi0JCQkJCQl0eXBlID0gMTsKLQkJCQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKQotCQkJCQkJdHlwZSA9IDI7Ci0JCQkJCWVsc2UKLQkJCQkJCWFzc2VydCBmYWxzZTsKLQotCQkJCX0KLQotCQkJCS8vIG1ha2Ugc3VyZSB3ZSBnb3QgY29oZXJlbnQgdHlwZXMKLQkJCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCQkvLyBhdG9taWMuLi4ganVzdCBjb25jYXQKLQkJCQljYXNlIDE6Ci0JCQkJCWlmICghKGl0ZW0gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IubWl4ZWRfdmFscyhudWxsKSk7Ci0JCQkJCXJzLmFkZChpdGVtKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIDI6Ci0JCQkJCW5vZGVfdHlwZXMgPSB0cnVlOwotCQkJCQlpZiAoIShpdGVtIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5taXhlZF92YWxzKG51bGwpKTsKLQkJCQkJcnMuYWRkKGl0ZW0pOwotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkJCWFzc2VydCBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBYWFggbGFtZQotCQlpZiAobm9kZV90eXBlcykgewotCQkJcnMgPSBOb2RlVHlwZS5lbGltaW5hdGVfZHVwcyhycyk7Ci0JCQlycyA9IE5vZGVUeXBlLnNvcnRfZG9jdW1lbnRfb3JkZXIocnMpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2Ugcm9vdF9zZWxmX25vZGUoKSB7Ci0JCUF4aXMgYXhpcyA9IG5ldyBTZWxmQXhpcygpOwotCQlSZXN1bHRTZXF1ZW5jZSByczsKLQotCQkvLyBYWFggdGhlIGNhc3QhISEKLQkJcnMgPSBheGlzLml0ZXJhdGUoKE5vZGVUeXBlKSBfZGMuY29udGV4dF9pdGVtKCksIF9kYyk7Ci0KLQkJcnMgPSBraW5kX3Rlc3QocnMsIE5vZGVUeXBlLmNsYXNzKTsKLQotCQl0cnkgewotCQkJTGlzdCByZWNvcmRzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJcmVjb3Jkcy5hZGQocnMpOwotCQkJcnMgPSBGblJvb3QuZm5fcm9vdChyZWNvcmRzLCBfZGMpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBkZXNjZW5kYW50X29yX3NlbGZfbm9kZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQlSZXN1bHRTZXF1ZW5jZSByZXMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlBeGlzIGF4aXMgPSBuZXcgRGVzY2VuZGFudE9yU2VsZkF4aXMoKTsKLQotCQkvLyBmb3IgYWxsIG5vZGVzLCBnZXQgZGVzY2VuZGFudCBvciBzZWxmIG5vZGVzCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgaXRlbSA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCVJlc3VsdFNlcXVlbmNlIG5vZGVzID0gYXhpcy5pdGVyYXRlKGl0ZW0sIF9kYyk7Ci0JCQlub2RlcyA9IGtpbmRfdGVzdChub2RlcywgTm9kZVR5cGUuY2xhc3MpOwotCi0JCQlyZXMuY29uY2F0KG5vZGVzKTsKLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgWFBhdGggZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgWFBhdGggZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSkgewotCQlYUGF0aEV4cHIgeHAgPSBlOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gbnVsbDsKLQkJRm9jdXMgb3JpZ2luYWxfZm9jdXMgPSBfZGMuZm9jdXMoKTsKLQotCQkvLyBkbyBhbGwgdGhlIHN0ZXBzCi0JCXdoaWxlICh4cCAhPSBudWxsKSB7Ci0JCQlTdGVwRXhwciBzZSA9IHhwLmV4cHIoKTsKLQotCQkJaWYgKHNlICE9IG51bGwpIHsKLQkJCQkvLyB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc3RlcAotCQkJCWlmIChycyAhPSBudWxsKSB7Ci0JCQkJCS8vIFhYWCA/Ci0JCQkJCS8vIHRoZSBleHByZXNzaW9uIGRpZG4ndCByZXR1cm4gYW55Ci0JCQkJCS8vIHJlc3VsdHMuLi4KLQkJCQkJaWYgKHJzLnNpemUoKSA9PSAwKQotCQkJCQkJYnJlYWs7Ci0KLQkJCQkJLy8gbWFrZSBzdXJlIHJlc3VsdCBvZiBwcmV2aW91cyBzdGVwIGFyZQotCQkJCQkvLyBub2RlcyEKLQkJCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCQkJCWlmICghKGl0ZW0gaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCQkJCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLnN0ZXBfY29uYXRpbnNfYXRvbXMobnVsbCkpOwotCQkJCQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQkvLyBjaGVjayBpZiB3ZSBnb3QgYSAvLwotCQkJCQlpZiAoeHAuc2xhc2hlcygpID09IDIpIHsKLQkJCQkJCXJzID0gZGVzY2VuZGFudF9vcl9zZWxmX25vZGUocnMpOwotCi0JCQkJCQlpZiAocnMuc2l6ZSgpID09IDApCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCQkvLyBtYWtlIHJlc3VsdCBvZiBwcmV2aW91cyBzdGVwIHRoZSBuZXcKLQkJCQkJLy8gZm9jdXMKLQkJCQkJX2RjLnNldF9mb2N1cyhuZXcgRm9jdXMocnMpKTsKLQotCQkJCQkvLyBkbyB0aGUgc3RlcCBmb3IgYWxsIGl0ZW0gaW4gY29udGV4dAotCQkJCQlycyA9IGRvX3N0ZXAoc2UpOwotCQkJCX0KLQkJCQkvLyB0aGlzIGlzIGZpcnN0IHN0ZXAuLi4KLQkJCQkvLyBub3RlLi4uIHdlIG1heSBiZSBjYWxsZWQgZnJvbSB1cHN0cmVhbS4uLgotCQkJCS8vIGxpa2UgaW4gdGhlIGV4cHJlc3Npb24gc29yYm8vKlsyXSAuLi4gd2UgbWF5Ci0JCQkJLy8gYmUgY2FsbGVkIHRvIGV2YWx1YXRlIHRoZSAyLi4uIHRoZSBjYWxsZXIKLQkJCQkvLyB3aWxsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgd2hvbGUgb3V0ZXIgZm9jdXMKLQkJCQkvLyBmb3IgdXMKLQkJCQllbHNlIHsKLQkJCQkJLy8gWFhYID8/PwotCQkJCQlpZiAoeHAuc2xhc2hlcygpID09IDEpIHsKLQkJCQkJCXJzID0gcm9vdF9zZWxmX25vZGUoKTsKLQkJCQkJCV9kYy5zZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0KLQkJCQkJCXJzID0gZG9fc3RlcChzZSk7Ci0JCQkJCX0gZWxzZSBpZiAoeHAuc2xhc2hlcygpID09IDIpIHsKLQkJCQkJCVJlc3VsdFNlcXVlbmNlIHJlcyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQkJCQlycyA9IHJvb3Rfc2VsZl9ub2RlKCk7Ci0KLQkJCQkJCXJzID0gZGVzY2VuZGFudF9vcl9zZWxmX25vZGUocnMpOwotCi0JCQkJCQlfZGMuc2V0X2ZvY3VzKG5ldyBGb2N1cyhycykpOwotCi0JCQkJCQlycyA9IGRvX3N0ZXAoc2UpOwotCQkJCQl9IGVsc2UKLQkJCQkJCXJzID0gKFJlc3VsdFNlcXVlbmNlKSBzZS5hY2NlcHQodGhpcyk7Ci0JCQkJfQotCQkJfQotCQkJLy8gdGhlIGV4cHJlc3Npb24gaXMgIi8iCi0JCQllbHNlIHsKLQkJCQlhc3NlcnQgeHAuc2xhc2hlcygpID09IDE7Ci0KLQkJCQlycyA9IHJvb3Rfc2VsZl9ub2RlKCk7Ci0JCQl9Ci0KLQkJCXhwID0geHAubmV4dCgpOwotCQl9Ci0KLQkJLy8gcmVzdG9yZSBmb2N1cwotCQlfZGMuc2V0X2ZvY3VzKG9yaWdpbmFsX2ZvY3VzKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYSBmb3J3YXJkIHN0ZXAgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZm9yd2FyZCBzdGVwLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvcndhcmRTdGVwIGUpIHsKLQotCQkvLyBnZXQgY29udGV4dCBub2RlCi0JCUFueVR5cGUgY2kgPSBfZGMuY29udGV4dF9pdGVtKCk7Ci0JCQotCQlpZiAoY2kgPT0gbnVsbCkgCi0JCQlyZXBvcnRfZXJyb3IoRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKSk7Ci0KLQkJaWYgKCEoY2kgaW5zdGFuY2VvZiBOb2RlVHlwZSkpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmNpX25vdF9ub2RlKGNpLnN0cmluZ190eXBlKCkpKTsKLQotCQlOb2RlVHlwZSBjbiA9IChOb2RlVHlwZSkgY2k7Ci0KLQkJLy8gZ2V0IHRoZSBub2RlcyBvbiB0aGUgYXhpcwotCQlGb3J3YXJkQXhpcyBheGlzID0gZS5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBub2RlcyA9IGF4aXMuaXRlcmF0ZShjbiwgX2RjKTsKLQkJLy8gZ2V0IGFsbCBub2RlcyBpbiB0aGUgYXhpcywgYW5kIHByaW5jaXBhbCBub2RlCi0JCVBhaXIgYXJnID0gbmV3IFBhaXIoYXhpcy5wcmluY2lwYWxfbm9kZV9raW5kKCkuc3RyaW5nX3R5cGUoKSwgbm9kZXMpOwotCi0JCS8vIGRvIHRoZSBuYW1lIHRlc3QKLQkJX3BhcmFtID0gYXJnOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5ub2RlX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGEgcmV2ZXJzZSBzdGVwIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHJldmVyc2Ugc3RlcC4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JLy8gWFhYIHVuaWZ5IHdpdGggdG9wCi0JcHVibGljIE9iamVjdCB2aXNpdChSZXZlcnNlU3RlcCBlKSB7Ci0JCS8vIGdldCBjb250ZXh0IG5vZGUKLQkJQW55VHlwZSBjaSA9IF9kYy5jb250ZXh0X2l0ZW0oKTsKLQotCQlpZiAoIShjaSBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuY2lfbm90X25vZGUoY2kuc3RyaW5nX3R5cGUoKSkpOwotCi0JCU5vZGVUeXBlIGNuID0gKE5vZGVUeXBlKSBjaTsKLQotCQkvLyBnZXQgdGhlIG5vZGVzIG9uIHRoZSBheGlzCi0JCVJldmVyc2VBeGlzIGF4aXMgPSBlLml0ZXJhdG9yKCk7Ci0KLQkJLy8gc2hvcnQgZm9yICJnaW1tZSBkYSBwYXJlbnQiCi0JCWlmIChlLmF4aXMoKSA9PSBSZXZlcnNlU3RlcC5ET1RET1QpIHsKLQkJCWF4aXMgPSBuZXcgUGFyZW50QXhpcygpOwotCi0JCQlyZXR1cm4ga2luZF90ZXN0KGF4aXMuaXRlcmF0ZShjbiwgX2RjKSwgTm9kZVR5cGUuY2xhc3MpOwotCQl9Ci0KLQkJYXNzZXJ0IGF4aXMgIT0gbnVsbDsKLQotCQlSZXN1bHRTZXF1ZW5jZSBub2RlcyA9IGF4aXMuaXRlcmF0ZShjbiwgX2RjKTsKLQkJLy8gZ2V0IGFsbCBub2RlcyBpbiB0aGUgYXhpcywgYW5kIHByaW5jaXBhbCBub2RlCi0JCVBhaXIgYXJnID0gbmV3IFBhaXIoYXhpcy5wcmluY2lwYWxfbm9kZV9raW5kKCkuc3RyaW5nX3R5cGUoKSwgbm9kZXMpOwotCi0JCS8vIGRvIHRoZSBuYW1lIHRlc3QKLQkJX3BhcmFtID0gYXJnOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5ub2RlX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8vIFhYWCB0aGlzIHJvdXRpbmUgc3V4Ci0JcHJpdmF0ZSBib29sZWFuIG5hbWVfdGVzdChOb2RlVHlwZSBub2RlLCBRTmFtZSBuYW1lLCBTdHJpbmcgdHlwZSkgewotCQkvLyBtYWtlIHN1cmUgcHJpbmNpcGFsIG5vZGUga2luZCBpcyB0aGUgc2FtZQotCQlpZiAobm9kZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKCF0eXBlLmVxdWFscyhub2RlLnN0cmluZ190eXBlKCkpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlTdHJpbmcgdGVzdF9wcmVmaXggPSBuYW1lLnByZWZpeCgpOwotCi0JCS8vIGlmIHVucHJlZml4ZWQgYW5kIHByaW5jaXBhbCBub2RlIGtpbmQgaXMgZWxlbWVudCwgc2V0IGRlZmF1bHQKLQkJLy8gZWxlbWVudCBuYW1lc3BhY2UKLQkJaWYgKHRlc3RfcHJlZml4ID09IG51bGwgJiYgdHlwZS5lcXVhbHMoImVsZW1lbnQiKSkgewotCQkJLy8gWFhYIG1ha2UgYSBuZXcgY29weQotCQkJbmFtZSA9IG5ldyBRTmFtZShudWxsLCBuYW1lLmxvY2FsKCkpOwotCQkJbmFtZS5zZXRfbmFtZXNwYWNlKF9kYy5kZWZhdWx0X25hbWVzcGFjZSgpKTsKLQotCQkJLy8gaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIG5hbWVzcGFjZSwgcHJldGVuZCB3ZSBkbyA9RAotCQkJaWYgKG5hbWUubmFtZXNwYWNlKCkgIT0gbnVsbCkKLQkJCQl0ZXN0X3ByZWZpeCA9ICIiOwotCQl9Ci0KLQkJUU5hbWUgbm9kZV9uYW1lID0gbm9kZS5ub2RlX25hbWUoKTsKLQotCQlhc3NlcnQgbm9kZV9uYW1lICE9IG51bGw7Ci0KLQkJLy8gbWFrZSBzdXJlIG5hbWVzcGFjZSBtYXRjaGVzCi0JCVN0cmluZyBub2RlX25hbWVzcGFjZSA9IG5vZGVfbmFtZS5uYW1lc3BhY2UoKTsKLQotCQlTdHJpbmcgdGVzdF9uYW1lc3BhY2UgPSBudWxsOwotCQlpZiAobmFtZS5leHBhbmRlZCgpKQotCQkJdGVzdF9uYW1lc3BhY2UgPSBuYW1lLm5hbWVzcGFjZSgpOwotCi0JCS8vIG5hbWUgdGVzdCBoYXMgbm8gcHJlZml4Ci0JCWlmICh0ZXN0X3ByZWZpeCA9PSBudWxsKSB7Ci0JCQkvLyBvayBubyBuYW1lc3BhY2UuLi4gbWF0Y2gKLQkJCWlmIChub2RlX25hbWVzcGFjZSA9PSBudWxsKSB7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQotCQkvLyBuYW1lIHRlc3QgaGFzIGEgcHJlZml4IGFuZCBpcyBub3Qgd2lsZGNhcmQKLQkJLy8gWFhYIEFUIFRISVMgUE9JTlQgQUxMIFBSRUZJWEVTIE5FRUQgVE8gQkUgUkVTT0xWRUQhCi0JCWVsc2UgaWYgKCF0ZXN0X25hbWVzcGFjZS5lcXVhbHMoIioiKSkgewotCQkJLy8gdGhlIG5vZGUgZG9lc24ndCBoYXZlIGEgbmFtZXNwYWNlLi4uIG5vIG1hdGNoCi0JCQlpZiAobm9kZV9uYW1lc3BhY2UgPT0gbnVsbCkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCS8vIGNoZWNrIG5hbWVzcGFjZXMKLQkJCWVsc2UgewotCQkJCWlmIChub2RlX25hbWVzcGFjZS5lcXVhbHModGVzdF9uYW1lc3BhY2UpKSB7Ci0JCQkJCS8vIG5hbWVzcGFjZSBtYXRjaGVzCi0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8vIG1ha2Ugc3VyZSBsb2NhbCBwYXJ0IG1hdGNoZXMKLQkJLy8gY2hlY2sgZm9yIHdpbGRjYXJkIGluIGxvY2FscGFydAotCQlpZiAobmFtZS5sb2NhbCgpLmVxdWFscygiKiIpKQotCQkJcmV0dXJuIHRydWU7Ci0KLQkJLy8gY2hlY2sgaWYgbG9jYWwgcGFydCBtYXRjaGVzCi0JCWlmICghbmFtZS5sb2NhbCgpLmVxdWFscyhub2RlX25hbWUubG9jYWwoKSkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGEgbmFtZSB0ZXN0IGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlbmFtZSB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE5hbWVUZXN0IGUpIHsKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCi0JCS8vIGdldCB0aGUgYXJndW1lbnRzCi0JCVBhaXIgYXJnID0gKFBhaXIpIF9wYXJhbTsKLQkJU3RyaW5nIHR5cGUgPSAoU3RyaW5nKSBhcmcuX29uZTsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZy5fdHdvOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQkvLyBjaGVjayBpZiBub2RlIHBhc3NlcyBuYW1lIHRlc3QKLQkJCWlmICghbmFtZV90ZXN0KG50LCBuYW1lLCB0eXBlKSkKLQkJCQlpLnJlbW92ZSgpOwotCi0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgdmFyaWFibGUgcmVmZXJlbmNlCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVmFyUmVmIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCU9iamVjdCB2YXIgPSBfZGMuZ2V0X3ZhcmlhYmxlKGUubmFtZSgpKTsKLQotCQlhc3NlcnQgdmFyICE9IG51bGw7Ci0KLQkJaWYgKHZhciBpbnN0YW5jZW9mIEFueVR5cGUpIHsKLQkJICAgcnMuYWRkKChBbnlUeXBlKSB2YXIpOwotCQl9Ci0JCWVsc2UgaWYgKHZhciBpbnN0YW5jZW9mIFJlc3VsdFNlcXVlbmNlKSB7Ci0JCSAgIHJzLmNvbmNhdCgoUmVzdWx0U2VxdWVuY2UpIHZhcik7CQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHN0cmluZyBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc3RyaW5nIGxpdGVyYWwuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3RyaW5nTGl0ZXJhbCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQoZS52YWx1ZSgpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGludGVnZXIgbGl0ZXJhbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlZ2VyTGl0ZXJhbCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQoZS52YWx1ZSgpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGRvdWJsZSBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZG91YmxlIGxpdGVyYWwuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG91YmxlTGl0ZXJhbCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQoZS52YWx1ZSgpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGRlY2ltYWwgbGl0ZXJhbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGRlY2ltYWwgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEZWNpbWFsTGl0ZXJhbCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQoZS52YWx1ZSgpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHBhcmVudCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgcGFyZW50IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGFyRXhwciBlKSB7Ci0JCXJldHVybiBkb19leHByKGUuaXRlcmF0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbnR4SXRlbUV4cHIgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJQW55VHlwZSBjb250ZXh0SXRlbSA9IF9kYy5jb250ZXh0X2l0ZW0oKTsKLQkJaWYgKGNvbnRleHRJdGVtID09IG51bGwpIHsKLQkJCXJlcG9ydF9lcnJvcihEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpKTsKLQkJfQotCQlycy5hZGQoY29udGV4dEl0ZW0pOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZnVuY3Rpb24gY2FsbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZ1bmN0aW9uIGNhbGwuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbiBvciBudWxsCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGdW5jdGlvbkNhbGwgZSkgewotCQlBcnJheUxpc3QgYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBlLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJRXhwciBhcmcgPSAoRXhwcikgaS5uZXh0KCk7Ci0JCQkvLyBlYWNoIGFyZ3VtZW50IHdpbGwgcHJvZHVjZSBhIHJlc3VsdCBzZXF1ZW5jZQotCQkJYXJncy5hZGQoYXJnLmFjY2VwdCh0aGlzKSk7Ci0JCX0KLQotCQl0cnkgewotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBfZGMuZXZhbHVhdGVfZnVuY3Rpb24oZS5uYW1lKCksIGFyZ3MpOwotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBzaW5nbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNpbmdsZSB0eXBlLgotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2luZ2xlVHlwZSBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHNlcXVlbmNlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzZXF1ZW5jZSB0eXBlLgotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpIHsKLQkJSXRlbVR5cGUgaXQgPSBlLml0ZW1fdHlwZSgpOwotCi0JCWlmIChpdCAhPSBudWxsKQotCQkJaXQuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGl0ZW0gdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGl0ZW0gdHlwZS4KLQkgKiBAcmV0dXJuIG51bGwKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEl0ZW1UeXBlIGUpIHsKLQotCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCWNhc2UgSXRlbVR5cGUuSVRFTToKLQkJCWJyZWFrOwotCQljYXNlIEl0ZW1UeXBlLlFOQU1FOgotCi0JCQkvLyB0cnkgewotCQkJaWYgKCFfZGMudHlwZV9kZWZpbmVkKGUucW5hbWUoKSkpCi0JCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNUeXBlTmFtZUVycm9yKCJUeXBlIG5vdCBkZWZpbmVkOiAiCi0JCQkJCQkrIGUucW5hbWUoKS5zdHJpbmcoKSkpOwotCQkJCi0JCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCQkJaXRlbV90ZXN0KGFyZywgZS5xbmFtZSgpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSXRlbVR5cGUuS0lORFRFU1Q6Ci0JCQllLmtpbmRfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBpdGVtX3Rlc3QoUmVzdWx0U2VxdWVuY2UgcnMsIFFOYW1lIHFuYW1lKSB7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCQkJCi0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJTm9kZVR5cGUgbm9kZSA9ICgoTm9kZVR5cGUpaXRlbSk7Ci0JCQkJaWYgKG5vZGUubm9kZV92YWx1ZSgpIGluc3RhbmNlb2YgSXRlbVBTVkkpIHsKLQkJCQkJaWYgKF9kYy5kZXJpdmVzX2Zyb20obm9kZSAsIHFuYW1lKSkgY29udGludWU7Ci0JCQkJfQotCQkJCS8vIGZhbGwgdGhyb3VnaCA9PiBub24tbWF0Y2gKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gYXRvbWljIG9mIHNvbWUgc29ydAotCQkJCWlmIChxbmFtZS5lcXVhbHMoQU5ZX0FUT01JQ19UWVBFKSkgY29udGludWU7IC8vIG1hdGNoICEKLQkJCQkKLQkJCQlmaW5hbCBBbnlBdG9taWNUeXBlIGFhdCA9IF9kYy5tYWtlX2F0b21pYyhxbmFtZSk7Ci0JCQkJaWYgKGFhdC5nZXRDbGFzcygpLmlzSW5zdGFuY2UoaXRlbSkpIGNvbnRpbnVlOwotCQkJCQotCQkJCS8vIGZhbGwgdGhyb3VnaCA9PiBub24tbWF0Y2gKLQkJCX0KLQkJCWkucmVtb3ZlKCk7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQotCQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2Uga2luZF90ZXN0KFJlc3VsdFNlcXVlbmNlIHJzLCBDbGFzcyBraW5kKSB7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaWYgKCFraW5kLmlzSW5zdGFuY2UoaS5uZXh0KCkpKQotCQkJCWkucmVtb3ZlKCk7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGFueSBraW5kIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhbnkga2luZCB0ZXN0LgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFueUtpbmRUZXN0IGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bzsKLQotCQlyZXR1cm4ga2luZF90ZXN0KGFyZywgTm9kZVR5cGUuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGRvY3VtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudCB0ZXN0LgotCSAqIEByZXR1cm4gcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb2N1bWVudFRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCQlpbnQgdHlwZSA9IGUudHlwZSgpOwotCi0JCS8vIGZpbHRlciBkb2Mgbm9kZXMKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoYXJnLCBEb2NUeXBlLmNsYXNzKTsKLQotCQlpZiAodHlwZSA9PSBEb2N1bWVudFRlc3QuTk9ORSkKLQkJCXJldHVybiByczsKLQotCQkvLyBmb3IgYWxsIGRvY3MsIGZpbmQgdGhlIG9uZXMgd2l0aCBleGFjdGx5IG9uZSBlbGVtZW50LCBhbmQgZG8KLQkJLy8gdGhlIGVsZW1lbnQgdGVzdAotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCURvY1R5cGUgZG9jID0gKERvY1R5cGUpIGkubmV4dCgpOwotCQkJaW50IGVsZW1fY291bnQgPSAwOwotCQkJRWxlbWVudFR5cGUgZWxlbSA9IG51bGw7Ci0KLQkJCS8vIG1ha2Ugc3VyZSBkb2MgaGFzIG9ubHkgMSBlbGVtZW50Ci0JCQlOb2RlTGlzdCBjaGlsZHJlbiA9IGRvYy5ub2RlX3ZhbHVlKCkuZ2V0Q2hpbGROb2RlcygpOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgaisrKSB7Ci0JCQkJTm9kZSBjaGlsZCA9IGNoaWxkcmVuLml0ZW0oaik7Ci0KLQkJCQkvLyBiaW5nbwotCQkJCWlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0JCQkJCWVsZW1fY291bnQrKzsKLQotCQkJCQlpZiAoZWxlbV9jb3VudCA+IDEpCi0JCQkJCQlicmVhazsKLQotCQkJCQllbGVtID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KSBjaGlsZCk7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyB0aGlzIGRvYyBpcyBubyBnb29kLi4uIHNlbmQgaGltIHRvIGhlbGwKLQkJCWlmIChlbGVtX2NvdW50ICE9IDEpIHsKLQkJCQlpLnJlbW92ZSgpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlhc3NlcnQgZWxlbSAhPSBudWxsOwotCi0JCQkvLyBzZXR1cCBwYXJhbWV0ZXIgZm9yIGVsZW1lbnQgdGVzdAotCQkJUmVzdWx0U2VxdWVuY2UgcmVzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCXJlcy5hZGQoZWxlbSk7Ci0JCQlfcGFyYW0gPSBuZXcgUGFpcigiZWxlbWVudCIsIHJlcyk7Ci0KLQkJCS8vIGRvIG5hbWUgdGVzdAotCQkJcmVzID0gbnVsbDsKLQkJCWlmICh0eXBlID09IERvY3VtZW50VGVzdC5FTEVNRU5UKQotCQkJCXJlcyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5lbGVtX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQllbHNlIGlmICh0eXBlID09IERvY3VtZW50VGVzdC5TQ0hFTUFfRUxFTUVOVCkKLQkJCQlyZXMgPSAoUmVzdWx0U2VxdWVuY2UpIGUuc2NoZW1hX2VsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWVsc2UKLQkJCQlhc3NlcnQgZmFsc2U7Ci0KLQkJCS8vIGNoZWNrIGlmIGVsZW1lbnQgc3Vydml2ZWQgbmFtZXRlc3QKLQkJCWlmIChyZXMuc2l6ZSgpICE9IDEpCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCB0ZXh0IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0ZXh0IHRlc3QuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVGV4dFRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCi0JCXJldHVybiBraW5kX3Rlc3QoYXJnLCBUZXh0VHlwZS5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY29tbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgdGV4dCB0ZXN0LgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENvbW1lbnRUZXN0IGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bzsKLQotCQlyZXR1cm4ga2luZF90ZXN0KGFyZywgQ29tbWVudFR5cGUuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IFBJIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBQSSB0ZXN0LgotCSAqIEByZXR1cm4gYSBhcmd1bWVudAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUElUZXN0IGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bzsKLQotCQlTdHJpbmcgcGl0X2FyZyA9IGUuYXJnKCk7Ci0KLQkJLy8gbWF0Y2ggYW55IHBpCi0JCWlmIChwaXRfYXJnID09IG51bGwpCi0JCQlyZXR1cm4ga2luZF90ZXN0KGFyZywgUElUeXBlLmNsYXNzKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCS8vIG1hdGNoIFBJCi0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFBJVHlwZSkgewotCQkJCVBJVHlwZSBwaSA9IChQSVR5cGUpIGl0ZW07Ci0KLQkJCQkvLyBtYXRjaCB0YXJnZXQKLQkJCQlpZiAoIXBpdF9hcmcuZXF1YWxzKHBpLnZhbHVlKCkuZ2V0VGFyZ2V0KCkpKQotCQkJCQlpLnJlbW92ZSgpOwotCQkJfSBlbHNlCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCXJldHVybiBhcmc7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYXR0cmlidXRlIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhdHRyaWJ1dGUgdGVzdC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBdHRyaWJ1dGVUZXN0IGUpIHsKLQkJLy8gZmlsdGVyIG91dCBhbGwgYXR0cnMKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bywKLQkJCQlBdHRyVHlwZS5jbGFzcyk7Ci0KLQkJLy8gbWF0Y2ggdGhlIG5hbWUgaWYgaXQncyBub3QgYSB3aWxkIGNhcmQKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCQlpZiAobmFtZSAhPSBudWxsICYmICFlLndpbGQoKSkgewotCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJaWYgKCFuYW1lX3Rlc3QoKE5vZGVUeXBlKSBpLm5leHQoKSwgbmFtZSwgImF0dHJpYnV0ZSIpKQotCi0JCQkJCWkucmVtb3ZlKCk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBtYXRjaCB0aGUgdHlwZQotCQlRTmFtZSB0eXBlID0gZS50eXBlKCk7Ci0JCWlmICh0eXBlICE9IG51bGwpIHsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQkJLy8gY2hlY2sgaWYgZWxlbWVudCBkZXJpdmVzIGZyb20KLQkJCQlpZiAoIV9kYy5kZXJpdmVzX2Zyb20obm9kZSwgdHlwZSkpCi0JCQkJCWkucmVtb3ZlKCk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUF0dHJUZXN0IGUpIHsKLQkJLy8gZmlsdGVyIG91dCBhbGwgYXR0cnMKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bywKLQkJCQlBdHRyVHlwZS5jbGFzcyk7Ci0KLQkJLy8gbWF0Y2ggdGhlIG5hbWUKLQkJUU5hbWUgbmFtZSA9IGUuYXJnKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaWYgKCFuYW1lX3Rlc3QoKE5vZGVUeXBlKSBpLm5leHQoKSwgbmFtZSwgImF0dHJpYnV0ZSIpKQotCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCS8vIGNoZWNrIHRoZSB0eXBlCi0JCVhTVHlwZURlZmluaXRpb24gZXQgPSBfZGMuYXR0cmlidXRlX3R5cGVfZGVmaW5pdGlvbihuYW1lKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKCFfZGMuZGVyaXZlc19mcm9tKG5vZGUsIGV0KSkKLQkJCQlpLnJlbW92ZSgpOwotCi0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZWxlbWVudCB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEVsZW1lbnRUZXN0IGUpIHsKLQotCQkvLyBmaWx0ZXIgb3V0IGFsbCBlbGVtZW50cwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdCgoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvLAotCQkJCUVsZW1lbnRUeXBlLmNsYXNzKTsKLQotCQkvLyBtYXRjaCB0aGUgbmFtZSBpZiBpdCdzIG5vdCBhIHdpbGQgY2FyZAotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0JCWlmIChuYW1lICE9IG51bGwgJiYgIWUud2lsZCgpKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlpZiAoIW5hbWVfdGVzdCgoRWxlbWVudFR5cGUpIGkubmV4dCgpLCBuYW1lLCAiZWxlbWVudCIpKQotCi0JCQkJCWkucmVtb3ZlKCk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBtYXRjaCB0aGUgdHlwZQotCQlRTmFtZSB0eXBlID0gZS50eXBlKCk7Ci0JCWlmICh0eXBlICE9IG51bGwpIHsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQkJLy8gY2hlY2sgaWYgZWxlbWVudCBkZXJpdmVzIGZyb20KLQkJCQlpZiAoX2RjLmRlcml2ZXNfZnJvbShub2RlLCB0eXBlKSkgewotCQkJCQkvLyBuaWxsZWQgbWF5IGJlIHRydWUgb3IgZmFsc2UKLQkJCQkJaWYgKGUucW1hcmsoKSkgewotCQkJCQl9Ci0JCQkJCS8vIG5pbGxlZCBoYXMgdG8gYmUgZmFsc2UKLQkJCQkJZWxzZSB7Ci0JCQkJCQlYU0Jvb2xlYW4gbmlsbGVkID0gKFhTQm9vbGVhbikgbm9kZS5uaWxsZWQoKS5maXJzdCgpOwotCQkJCQkJaWYgKG5pbGxlZC52YWx1ZSgpKQotCQkJCQkJCWkucmVtb3ZlKCk7Ci0JCQkJCX0KLQotCQkJCX0gZWxzZQotCQkJCQlpLnJlbW92ZSgpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzY2hlbWEgZWxlbWVudCB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUVsZW1UZXN0IGUpIHsKLQkJLy8gZmlsdGVyIG91dCBhbGwgZWxlbWVudHMKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bywKLQkJCQlFbGVtZW50VHlwZS5jbGFzcyk7Ci0KLQkJLy8gbWF0Y2ggdGhlIG5hbWUKLQkJLy8gWFhYIHN1YnN0aXR1dGlvbiBncm91cHMKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWlmICghbmFtZV90ZXN0KChFbGVtZW50VHlwZSkgaS5uZXh0KCksIG5hbWUsICJlbGVtZW50IikpCi0KLQkJCQlpLnJlbW92ZSgpOwotCQl9Ci0KLQkJLy8gY2hlY2sgdGhlIHR5cGUKLQkJWFNUeXBlRGVmaW5pdGlvbiBldCA9IF9kYy5lbGVtZW50X3R5cGVfZGVmaW5pdGlvbihuYW1lKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKCFfZGMuZGVyaXZlc19mcm9tKG5vZGUsIGV0KSkgewotCQkJCWkucmVtb3ZlKCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCVhTQm9vbGVhbiBuaWxsZWQgPSAoWFNCb29sZWFuKSBub2RlLm5pbGxlZCgpLmZpcnN0KCk7Ci0JCQkvLyBYWFggb3IsIGluIHNjaGVtYSBpdCBpcyBuaWxsYWJsZQotCQkJaWYgKG5pbGxlZC52YWx1ZSgpKQotCQkJCWkucmVtb3ZlKCk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIHByZWRpY2F0ZV90cnV0aChSZXN1bHRTZXF1ZW5jZSBycykgewotCQkvLyBydWxlIDEgb2Ygc3BlYy4uLiBpZiBudW1lcmljIHR5cGU6Ci0JCS8vIGlmIG51bSBlcSBwb3NpdGlvbiB0aGVuIHRydWUgZWxzZSBmYWxzZQotCQlpZiAocnMuc2l6ZSgpID09IDEpIHsKLQkJCUFueVR5cGUgYXQgPSBycy5nZXQoMCk7Ci0KLQkJCWlmIChhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJX2dfeHNpbnQuc2V0X2ludChCaWdJbnRlZ2VyLnZhbHVlT2YoX2RjLmNvbnRleHRfcG9zaXRpb24oKSkpOwotCQkJCQlyZXR1cm4gRnNFcS5mc19lcV9mYXN0KGF0LCBfZ194c2ludCwgX2RjKTsKLQkJCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCi0JCQkJCS8vIHVucmVhY2gKLQkJCQkJYXNzZXJ0IGZhbHNlOwotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gcnVsZSAyCi0JCVhTQm9vbGVhbiByZXQgPSBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZShycyk7Ci0KLQkJcmV0dXJuIHJldC52YWx1ZSgpOwotCX0KLQotCS8vIGRvIHRoZSBwcmVkaWNhdGUgZm9yIGFsbCBpdGVtcyBpbiBmb2N1cwotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgZG9fcHJlZGljYXRlKENvbGxlY3Rpb24gZXhwcnMpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCUZvY3VzIGZvY3VzID0gX2RjLmZvY3VzKCk7Ci0JCWludCBvcmlnaW5hbF9jcCA9IGZvY3VzLnBvc2l0aW9uKCk7Ci0KLQkJLy8gb3B0aW1pemF0aW9uCi0JCS8vIGNoZWNrIGlmIHByZWRpY2F0ZSBpcyBzaW5nbGUgbnVtZXJpYyBjb25zdGFudAotCQlpZiAoZXhwcnMuc2l6ZSgpID09IDEpIHsKLQkJCUV4cHIgZXhwciA9IChFeHByKSBleHBycy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQkJaWYgKGV4cHIgaW5zdGFuY2VvZiBYUGF0aEV4cHIpIHsKLQkJCQlYUGF0aEV4cHIgeHBlID0gKFhQYXRoRXhwcikgZXhwcjsKLQkJCQlpZiAoeHBlLm5leHQoKSA9PSBudWxsICYmIHhwZS5zbGFzaGVzKCkgPT0gMAotCQkJCQkJJiYgeHBlLmV4cHIoKSBpbnN0YW5jZW9mIEZpbHRlckV4cHIpIHsKLQkJCQkJRmlsdGVyRXhwciBmZXggPSAoRmlsdGVyRXhwcikgeHBlLmV4cHIoKTsKLQkJCQkJaWYgKGZleC5wcmltYXJ5KCkgaW5zdGFuY2VvZiBJbnRlZ2VyTGl0ZXJhbCkgewotCQkJCQkJaW50IHBvcyA9ICgoKEludGVnZXJMaXRlcmFsKSBmZXgucHJpbWFyeSgpKS52YWx1ZSgpCi0JCQkJCQkJCS5pbnRfdmFsdWUoKSkuaW50VmFsdWUoKTsKLQotCQkJCQkJaWYgKHBvcyA8PSBmb2N1cy5sYXN0KCkgJiYgcG9zID4gMCkgewotCQkJCQkJCWZvY3VzLnNldF9wb3NpdGlvbihwb3MpOwotCQkJCQkJCXJzLmFkZChmb2N1cy5jb250ZXh0X2l0ZW0oKSk7Ci0JCQkJCQl9Ci0JCQkJCQlmb2N1cy5zZXRfcG9zaXRpb24ob3JpZ2luYWxfY3ApOwotCQkJCQkJcmV0dXJuIHJzOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gZ28gdGhyb3VnaCBhbGwgZWxlbWVudHMKLQkJd2hpbGUgKHRydWUpIHsKLQkJCS8vIGRvIHRoZSBwcmVkaWNhdGUKLQkJCS8vIFhYWCBzYXhvbiBkb2Vzbid0IGFsbG93IGZvciBwcmVkaWNhdGVzIHRvIGhhdmUKLQkJCS8vIGNvbW1hcy4uLiBidXQgWFBhdGggMi4wIHNwZWMgc2VlbXMgdG8gZG8KLQkJCVJlc3VsdFNlcXVlbmNlIHJlcyA9IGRvX2V4cHIoZXhwcnMuaXRlcmF0b3IoKSk7Ci0KLQkJCS8vIGlmIHByZWRpY2F0ZSBpcyB0cnVlLCB0aGUgY29udGV4dCBpdGVtIGlzIGRlZmluaXRlbHkKLQkJCS8vIGluIHRoZSBzZXF1ZW5jZQotCQkJaWYgKHByZWRpY2F0ZV90cnV0aChyZXMpKQotCQkJCXJzLmFkZChfZGMuY29udGV4dF9pdGVtKCkpOwotCi0JCQlyZXMucmVsZWFzZSgpOwotCQkJaWYgKCFmb2N1cy5hZHZhbmNlX2NwKCkpCi0JCQkJYnJlYWs7Ci0KLQkJfQotCi0JCS8vIHJlc3RvcmUKLQkJZm9jdXMuc2V0X3Bvc2l0aW9uKG9yaWdpbmFsX2NwKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYXhpcyBzdGVwLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgYXhpcyBzdGVwLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF4aXNTdGVwIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGUuc3RlcCgpLmFjY2VwdCh0aGlzKTsKLQotCQlpZiAoZS5wcmVkaWNhdGVfY291bnQoKSA9PSAwKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIEkgdGFrZSBpdCBwcmVkaWNhdGVzIGFyZSBsb2dpY2FsIEFORFMuLi4KLQkJRm9jdXMgb3JpZ2luYWxfZm9jdXMgPSBfZGMuZm9jdXMoKTsKLQotCQkvLyBnbyB0aHJvdWdoIGFsbCBwcmVkaWNhdGVzCi0JCWZvciAoSXRlcmF0b3IgaSA9IGUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkvLyBlbXB0eSByZXN1bHRzLi4uIGdldCBvdXQgb2YgaGVyZSA/IFhYWAotCQkJaWYgKHJzLnNpemUoKSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlfZGMuc2V0X2ZvY3VzKG5ldyBGb2N1cyhycykpOwotCQkJcnMgPSBkb19wcmVkaWNhdGUoKENvbGxlY3Rpb24pIGkubmV4dCgpKTsKLQotCQl9Ci0KLQkJLy8gcmVzdG9yZSBmb2N1cyBbY29udGV4dCBzd2l0Y2hpbmcgO0QgXQotCQlfZGMuc2V0X2ZvY3VzKG9yaWdpbmFsX2ZvY3VzKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGZpbHRlciBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JLy8gWFhYIHVuaWZ5IHdpdGggdG9wID8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZpbHRlckV4cHIgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5wcmltYXJ5KCkuYWNjZXB0KHRoaXMpOwotCi0JCS8vIGlmIG5vIHByZWRpY2F0ZXMgYXJlIHByZXNlbnQsIHRoZW4gdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcwotCQkvLyB0aGUgcHJpbWFyeSBleHByZXNzaW9uCi0JCWlmIChlLnByZWRpY2F0ZV9jb3VudCgpID09IDApCi0JCQlyZXR1cm4gcnM7Ci0KLQkJRm9jdXMgb3JpZ2luYWxfZm9jdXMgPSBfZGMuZm9jdXMoKTsKLQotCQkvLyBnbyB0aHJvdWdoIGFsbCBwcmVkaWNhdGVzCi0JCWZvciAoSXRlcmF0b3IgaSA9IGUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlpZiAocnMuc2l6ZSgpID09IDApCi0JCQkJYnJlYWs7Ci0KLQkJCV9kYy5zZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0JCQlycyA9IGRvX3ByZWRpY2F0ZSgoQ29sbGVjdGlvbikgaS5uZXh0KCkpOwotCi0JCX0KLQotCQkvLyByZXN0b3JlIGZvY3VzIFtjb250ZXh0IHN3aXRjaGluZyA7RCBdCi0JCV9kYy5zZXRfZm9jdXMob3JpZ2luYWxfZm9jdXMpOwotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGJlZDkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRHluYW1pY0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gZGF0YSB0eXBlcy4gCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MTE1OSAtIGZpeCBkb2N1bWVudCBsb2FkaW5nIGFuZCByZXNvbHZpbmcgVVJJcyAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjg2NDUyIC0gYWx3YXlzIHJldHVybiB0aGUgc3RhYmxlIGRhdGUvdGltZSBmcm9tIGR5bmFtaWMgY29udGV4dAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMjUyNjIgLSBwcm92aWRpbmcgYWJpbGl0eSB0byBzdG9yZSBhbiBYUGF0aDIgc2VxdWVuY2UgaW50bwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiB1c2VyLWRlZmluZWQgdmFyaWFibGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEludGVyZmFjZSBmb3IgZHluYW1pYyBjb250ZXh0LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIER5bmFtaWNDb250ZXh0IGV4dGVuZHMgU3RhdGljQ29udGV4dCB7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCBjb2xsYXRpb24gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgaW1wbGVtZW50ZWQKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVBPSU5UX0NPTExBVElPTiA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucy9jb2xsYXRpb24vY29kZXBvaW50IjsKLQotCS8qKgotCSAqIEdldCBjb250ZXh0IGl0ZW0uCi0JICogCi0JICogQHJldHVybiB0aGUgY29udGV4dCBpdGVtLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGNvbnRleHRfaXRlbSgpOwotCi0JLyoqCi0JICogR2V0IGNvbnRleHQgbm9kZSBwb3NpdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIHBvc2l0aW9uIG9mIGNvbnRleHQgbm9kZS4KLQkgKi8KLQlwdWJsaWMgaW50IGNvbnRleHRfcG9zaXRpb24oKTsKLQotCS8qKgotCSAqIEdldCBwb3NpdGlvbiBvZiBsYXN0IGl0ZW0uCi0JICogCi0JICogQHJldHVybiBsYXN0IGl0ZW0gcG9zaXRpb24uCi0JICovCi0JcHVibGljIGludCBsYXN0KCk7Ci0KLQkvKioKLQkgKiBHZXQgdmFyaWFibGUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KLQkgKiBAcmV0dXJuIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0X3ZhcmlhYmxlKFFOYW1lIG5hbWUpOwotCQotCS8qKgotCSAqIFNldCB2YXJpYWJsZS4KLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICBpcyBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KLQkgKiBAcGFyYW0gdmFsCi0JICogICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gYmUgc2V0IGZvciB0aGUgdmFyaWFibGUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhcmlhYmxlKFFOYW1lIHZhciwgQW55VHlwZSB2YWwpOwotCQotCQotCS8qCi0JICogU2V0cyBhIFhQYXRoMiBzZXF1ZW5jZSBpbnRvIGEgdmFyaWFibGUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhcmlhYmxlKFFOYW1lIHZhciwgUmVzdWx0U2VxdWVuY2UgdmFsKTsKLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZS4KLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHRoZSBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBkeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZV9mdW5jdGlvbihRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yOwotCi0JLyoqCi0JICogUmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuIGN1cnJlbnQgZGF0ZSB0aW1lIGFuZCBpbXBsaWNpdCB0aW1lem9uZS4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKTsKLQotCS8qKgotCSAqIEdldCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpCi0JICogICAgICAgICAgICBpcyB0aGUgVVJJIG9mIHRoZSBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGRvY3VtZW50LgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQkvLyBhdmFpbGFibGUgZG9jCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGdldF9kb2MoVVJJIHVyaSk7Ci0KLQkvKioKLQkgKiBSZXNvbHZlIGFuIFVSSQotCSAqIAotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwb3NzaWJseSByZWxhdGl2ZSBVUkkgdG8gcmVzb2x2ZQotCSAqIEByZXR1cm4gdGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBVUkkgcmVzb2x2ZV91cmkoU3RyaW5nIHVyaSk7Ci0KLQkvLyBhdmFpbGFibGUgY29sbGVjdGlvbnMKLQotCS8vIGRlZmF1bHQgY29sbGVjdGlvbgotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBkYXRlIHRpbWUgdXNpbmcgdGhlIEdyZWdvcmlhbkNhbGVuZGFyLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgd2hpY2ggd2lsbCBhbHdheXMgYmUgc2FtZSBmb3IgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyIGN1cnJlbnRfZGF0ZV90aW1lKCk7Ci0JCi0JLyoqCi0JICogU2V0IGZvY3VzLgotCSAqIAotCSAqIEBwYXJhbSBmb2N1cwotCSAqICAgICAgICAgICAgaXMgZm9jdXMgdG8gYmUgc2V0LgotCSAqLwotCS8vIE90aGVyIGZ1bmN0aW9ucwotCXB1YmxpYyB2b2lkIHNldF9mb2N1cyhGb2N1cyBmb2N1cyk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gZm9jdXMuCi0JICogCi0JICogQHJldHVybiBGb2N1cwotCSAqLwotCXB1YmxpYyBGb2N1cyBmb2N1cygpOwotCQotCS8qKgotCSAqIFJldHVybiBhIHVzZWZ1bCBjb2xsYXRvciBmb3IgdGhlIHNwZWNpZmllZCBVUkkKLQkgKiAKLQkgKiBAcGFyYW0gdXJpCi0JICogQHJldHVybiBBIEphYSBjb2xsYXRvciwgb3IgbnVsbCwgaWYgbm8gc3VjaCBDb2xsYXRvciBleGlzdHMgCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBDb21wYXJhdG9yPE9iamVjdD4gZ2V0X2NvbGxhdGlvbihTdHJpbmcgdXJpKTsgCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBkZWZhdWx0IGNvbGxhdG9yCi0JICogCi0JICogQHJldHVybiBUaGUgZGVmYXVsdCBuYW1lIHRvIHVzZSBhcyB0aGUgY29sbGF0b3IKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFN0cmluZyBkZWZhdWx0X2NvbGxhdGlvbl9uYW1lKCk7Ci0JCi0JLy8gZGVwcmVjYXRlZAotCS8qKgotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JQERlcHJlY2F0ZWQKLQlwdWJsaWMgaW50IG5vZGVfcG9zaXRpb24oTm9kZSBub2RlKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRHluYW1pY0Vycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MDRjYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3Mzc2MyAtIGNvcnJlY3QgZXJyb3IgY29kZXMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZyAyODAxMDYgLSBDb3JyZWN0IFhQRFkwMDIxIC0gWFBTVDAwMDMgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgxNDkgLSBhZGQgbW9yZSBmbjplcnJvciBpbmZvCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gQnVnIDI4NjA2MiAtIEFkZCBGT0FSMDAwMiAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIEFkZCBGT1JHMDAwNgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI5MDMzNyAtIFJldmlzaXQgdXNlIG9mIElDVQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLQotLyoqCi0gKiBEeW5hbWljIEVycm9yIGxpa2UgZGl2aXNpb24gYnkgMCBvciB0eXBlIGVycm9ycy4KLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNFcnJvciBleHRlbmRzIFhQYXRoRXhjZXB0aW9uIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNjE0NjgzMDc2NDc1MzY4NTc5MUw7Ci0KLQkvLyBlcnJvcmNvZGUgc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAveHF0LWVycm9ycyBpIGZpbmsKLQlwcml2YXRlIFN0cmluZyBfY29kZTsKLQotCS8vIFhYWCBkaXJ0eS4uLiBzaG91bGQgZml4IHRoZSBlcnJvciBzdHVmZgotCS8vIGhhdmUgYSB0eXBlIGVycm9yIGVuY2Fwc3VsYXRlZCBpbiBhIGR5bmFtaWMgZXJyb3IKLQlwcml2YXRlIFR5cGVFcnJvciBfdGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRHluYW1pYyBFcnJvci4KLQkgKiAKLQkgKiBAcGFyYW0gY29kZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvZGUgdGhhdCBpcyBzZXQuCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBEeW5hbWljRXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIpIHsKLQkJc3VwZXIoZXJyKTsKLQkJX2NvZGUgPSBjb2RlOwotCQlfdGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEeW5hbWljIEVycm9yLgotCSAqIAotCSAqIEBwYXJhbSB0ZQotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yIHR5cGUuCi0JICovCi0JcHVibGljIER5bmFtaWNFcnJvcihUeXBlRXJyb3IgdGUpIHsKLQkJc3VwZXIodGUucmVhc29uKCkpOwotCQlfdGUgPSB0ZTsKLQkJX2NvZGUgPSB0ZS5jb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIG9mIHRoZSBjb2RlLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGNvZGUuCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlpZiAoX3RlICE9IG51bGwpCi0JCQlyZXR1cm4gX3RlLmNvZGUoKTsKLQkJcmV0dXJuIF9jb2RlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGNhbnRfY2FzdChTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJDYW4ndCBjYXN0IHRvIHJlcXVpcmVkIHR5cGUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUkcwMDAxIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBhIER5bmFtaWMgRXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgdGhyb3dfdHlwZV9lcnJvcigpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQl0aHJvdyBhcmd1bWVudF90eXBlX2Vycm9yKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICoKLQkgKiBAcGFyYW0gdHlwZSBUeXBlIGZvdW5kCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBhcmd1bWVudF90eXBlX2Vycm9yKENsYXNzPD8+IHR5cGUpIHsKLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUkcwMDA2IiwgdHlwZSAhPSBudWxsID8KLQkJCQkiSW52YWxpZCBhcmd1bWVudCB0eXBlIDoiICsgdHlwZS5nZXRTaW1wbGVOYW1lKCkgOiAiSW52YWxpZCBhcmd1bWVudCB0eXBlIik7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRUeXBlKCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGlucHV0VG9MYXJnZUZvckRlY2ltYWwoKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiRk9DQTAwMDEiLCAiSW5wdXQgdmFsdWUgdG9vIGxhcmdlIGZvciBkZWNpbWFsIik7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGRlc2MKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHVzZXJfZXJyb3IoU3RyaW5nIG5zLCBTdHJpbmcgY29kZSwgU3RyaW5nIGRlc2MpIHsKLQkJU3RyaW5nIGVycm9yID0gIkVycm9yIHJlcG9ydGVkIGJ5IGZuOmVycm9yLiI7Ci0KLQkJaWYgKGRlc2MgIT0gbnVsbCkKLQkJCWVycm9yID0gZGVzYyArICIgKHJlcG9ydGVkIGJ5IGZuOmVycm9yKSI7Ci0KLQkJLy8gWFhYOiBOZWVkIHRvIHBhc3MgdGhlIG5hbWVzcGFjZSBhbHNvLi4uCi0JCXJldHVybiBuZXcgRHluYW1pY0Vycm9yKGNvZGUsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgdXNlcl9lcnJvcihTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJFcnJvciByZXBvcnRlZCBieSBmbjplcnJvci4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yID0gZXJyICsgIiAocmVwb3J0ZWQgYnkgZm46ZXJyb3IpIjsKLQotCQkvLyBYWFg6IE5lZWQgdG8gcGFzcyB0aGUgbmFtZXNwYWNlIGFsc28uLi4KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPRVIwMDAwIiwgZXJyb3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLQkgKiBAcGFyYW0gZXJyCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciByZWdleF9mbGFnc19lcnJvcihTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnIHBhcmFtZXRlci4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9SWDAwMDEiLCBlcnJvcik7Ci0JCQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHJlZ2V4X2Vycm9yKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uLiI7Ci0KLQkJaWYgKGVyciAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgZXJyOwotCi0JCXJldHVybiBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwMiIsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBlcnJvcgotCSAqIEByZXR1cm4gdGhlIER5bmFtaWNFcnJvci4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgcmVnZXhfbWF0Y2hfemVyb19sZW5ndGgoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDAzIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50Ci0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciB1bnN1cHBvcnRlZF9jb2RlcG9pbnQoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgY29kZXBvaW50IjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPQ0gwMDAxIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIG5vcm1hbGl6YXRpb24gZm9ybQotCSAqIAotCSAqIEBwYXJhbSBjb2xsYXRpb25OYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICogQHNpbmNlIDEuMQotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHVuc3VwcG9ydGVkX2NvbGxhdGlvbihTdHJpbmcgY29sbGF0aW9uTmFtZSkgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgY29sbGF0aW9uIFVSSS4gIjsKLQotCQlpZiAoY29sbGF0aW9uTmFtZSAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgY29sbGF0aW9uTmFtZTsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9DSDAwMDIiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciB1bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0oU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtOiAiOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9DSDAwMDMiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBydW50aW1lX2Vycm9yKFN0cmluZyBtc2csIFRocm93YWJsZSBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIkVycm9yIGF0IHJ1bnRpbWU6ICIgKyBtc2cgKyAiOiAiICsgZXJyLmdldE1lc3NhZ2UoKTsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9FUjAwMDAiLCBlcnJvcik7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRHluYW1pY0Vycm9yIG1ha2VfZXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIsIFN0cmluZyBtc2cpIHsKLQkJU3RyaW5nIGVycm9yID0gZXJyOwotCi0JCWlmIChtc2cgIT0gbnVsbCkKLQkJCWVycm9yICs9IG1zZzsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcihjb2RlLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEludmFsaWQgbGV4aWNhbCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGxleGljYWxfZXJyb3IoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9DQTAwMDIiLCAiSW52YWxpZCBsZXhpY2FsIHZhbHVlLiIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEl0ZW1zIG5vdCBjb21wYXJhYmxlCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm90X2NtcChTdHJpbmcgbXNnKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT1RZMDAxMiIsICJJdGVtcyBub3QgY29tcGFyYWJsZSIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG1vcmVfb25lX2l0ZW0oU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigKLQkJCQkiRk9SRzAwMDMiLAotCQkJCSJmbjp6ZXJvLW9yLW9uZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgbW9yZSB0aGFuIG9uZSBpdGVtIiwKLQkJCQltc2cpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UKLQkgKiAKLQkgKiBAcGFyYW0gbXNnCi0JICogICAgICAgICAgICBpcyB0aGUgbWVzc2FnZQotCSAqIEByZXR1cm4gdGhlIG1ha2VfZXJyb3IKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBlbXB0eV9zZXEoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9SRzAwMDQiLAotCQkJCSJmbjpvbmUtb3ItbW9yZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgbm8gaXRlbXMiLAotCQkJCW1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG5vdF9vbmUoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigKLQkJCQkiRk9SRzAwMDUiLAotCQkJCSJmbjpleGFjdGx5LW9uZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIHRoYW4gb25lIGl0ZW0iLAotCQkJCW1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46Y29sbGVjdGlvbgotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBpbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50KCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDQiLCAiSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2MiLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46ZG9jCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZF9kb2MoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDUiLCAiSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2MiLCBtc2cpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiBmbjpkb2MgY2Fubm90IGxvYWQgaXRzIGRvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGRvY19ub3RfZm91bmQoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDIiLCAiRG9jdW1lbnQgYXJndW1lbnQgZm46ZG9jIG5vdCBmb3VuZCIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGEgRGl2aXNpb24gYnkgemVybwotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGRpdl96ZXJvKFN0cmluZyBtc2cpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQVIwMDAxIiwgIkRpdmlzaW9uIGJ5IHplcm8iLCBtc2cpOwotCX0KLQotCS8qKgotCSAqIE51bWVyaWMgb3BlcmF0aW9uIG92ZXJmbG93L3VuZGVyZmxvdwotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBudW1lcmljX292ZXJmbG93KFN0cmluZyBtc2cpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQVIwMDAyIiwgIk51bWVyaWMgb3ZlcmZsb3cvdW5kZXJmbG93IiwgbXNnKTsKLQl9Ci0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGNvbnRleHRVbmRlZmluZWQoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJYUERZMDAwMiIsICJDb250ZXh0IGlzIHVuZGVmaW5lZC4iLCAiIik7Ci0JfQotCi0JLyoqCi0JICogRGF0YSBpcyBpbnZhbGlkIGZvciBjYXN0aW5nIG9yIHRoZSBkYXRhIHR5cGUgY29uc3RydWN0b3IuCi0JICogQHBhcmFtIG1zZwotCSAqIEByZXR1cm4gRk9SRzAwMDEKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvcigpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoCi0JCQkJIkZPUkcwMDAxIiwKLQkJCQkiZGF0YSB0eXBlIGludmFsaWQgZm9yIGNhc3Qgb3IgY29uc3RydWN0b3IiLAotCQkJCW51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRQcmVmaXgoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT05TMDAwNCIsICJObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogTm8gY29udGV4dCBkb2N1bWVudAotCSAqIEByZXR1cm4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm9Db250ZXh0RG9jKCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDEiLCAiTm8gY29udGV4dCBkb2N1bWVudC4iLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBObyBiYXNlLXVyaSBkZWZpbmVkLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm9CYXNlVVJJKCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9OUzAwMDUiLCAiQmFzZS11cmkgbm90IGRlZmluZWQgaW4gdGhlIHN0YXRpYyBjb250ZXh0LiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBFcnJvciByZXNvbHZpbmcgcmVsYXRpdmUgdXJpIGFnYWluc3QgYmFzZS11cmkuCi0JICogCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBlcnJvclJlc29sdmluZ1VSSSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPUkcwMDAyIiwgIkludmFsaWQgYXJndW1lbnQgdG8gZm46cmVzb2x2ZS11cmkoKS4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogSW52YWxpZCBUaW1lem9uZSB2YWx1ZS4KLQkgKiBAcmV0dXJuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRUaW1lem9uZSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPRFQwMDAzIiwgIkludmFsaWQgdGltZXpvbmUgdmFsdWUuIiwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBvdmVyZmxvd1VuZGVyZmxvdygpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPRFQwMDAyIiwgIk92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uIiwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBuYW4oKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT0NBMDAwNSIsICJOYU4gc3VwcGxpZWQgYXMgZmxvYXQvZG91YmxlIHZhbHVlLiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBJbnZhbGlkIGxleGljYWwgdmFsdWUKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZExleGljYWxWYWx1ZSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQ0EwMDAyIiwgIkludmFsaWQgbGV4aWNhbCB2YWx1ZS4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogT3ZlcmZsb3cvdW5kZXJmbG93IGluIGRhdGUvdGltZSBvcGVyYXRpb24gCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG92ZXJmbG93RGF0ZVRpbWUoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT0RUMDAwMSIsICJPdmVyZmxvdy91bmRlcmZsb3cgaW4gZGF0ZS90aW1lIG9wZXJhdGlvbiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXMKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW5jb25zaXN0ZW50VGltZVpvbmUoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT1JHMDAwOCIsICJUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXMiLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0V2YWx1YXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9FdmFsdWF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYyNzk1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0V2YWx1YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotCi0vKioKLSAqIGludGVyZmFjZSB0byBFdmFsdWF0b3IKLSAqLwotcHVibGljIGludGVyZmFjZSBFdmFsdWF0b3IgewotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIHJvb3Qgbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gcm9vdAotCSAqICAgICAgICAgICAgaXMgdGhlIFhQYXRoIG5vZGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBkeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKFhQYXRoTm9kZSByb290KSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9KRmxleEN1cFBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9KRmxleEN1cFBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmM1NTRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvSkZsZXhDdXBQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKLWltcG9ydCBqYXZhLmlvLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5DdXBFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuSkZsZXhFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhGbGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEN1cDsKLQotLyoqCi0gKiBKRmxleEN1cFBhcnNlciBwYXJzZXMgdGhlIHhwYXRoIGV4cHJlc3Npb24KLSAqLwotcHVibGljIGNsYXNzIEpGbGV4Q3VwUGFyc2VyIGltcGxlbWVudHMgWFBhdGhQYXJzZXIgewotCi0JLyoqCi0JICogVHJpZXMgdG8gcGFyc2UgdGhlIHhwYXRoIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0geHBhdGgKLQkgKiAgICAgICAgICAgIGlzIHRoZSB4cGF0aCBzdHJpbmcuCi0JICogQHRocm93cyBYUGF0aFBhcnNlckV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIHRoZSB4cGF0aCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgWFBhdGggcGFyc2UoU3RyaW5nIHhwYXRoKSB0aHJvd3MgWFBhdGhQYXJzZXJFeGNlcHRpb24gewotCi0JCVhQYXRoRmxleCBsZXhlciA9IG5ldyBYUGF0aEZsZXgobmV3IFN0cmluZ1JlYWRlcih4cGF0aCkpOwotCi0JCVhQYXRoQ3VwIHAgPSBuZXcgWFBhdGhDdXAobGV4ZXIpOwotCQl0cnkgewotCQkJU3ltYm9sIHJlcyA9IHAucGFyc2UoKTsKLQkJCXJldHVybiAoWFBhdGgpIHJlcy52YWx1ZTsKLQotCQl9IGNhdGNoIChKRmxleEVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbigiSkZsZXggbGV4ZXIgZXJyb3I6ICIgKyBlLnJlYXNvbigpKTsKLQkJfSBjYXRjaCAoQ3VwRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IFhQYXRoUGFyc2VyRXhjZXB0aW9uKCJDVVAgcGFyc2VyIGVycm9yOiAiICsgZS5yZWFzb24oKSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTdHJpbmcgZXJyID0gIlVua25vd24gZXJyb3IgYXQgbGluZSAiICsgbGV4ZXIubGluZW5vKCk7Ci0KLQkJCWVyciArPSAiIGNvbCAiICsgbGV4ZXIuY29sbm8oKTsKLQkJCWVyciArPSAiOiAiICsgbGV4ZXIueXl0ZXh0KCk7Ci0KLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbihlcnIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9Qc3ljaG9QYXRoVHlwZUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9Qc3ljaG9QYXRoVHlwZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JhNTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUHN5Y2hvUGF0aFR5cGVIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzIzOTAwIC0gaW1wcm92aW5nIGNvbXB1dGluZyB0aGUgdHlwZWQgdmFsdWUgb2YgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzLCB3aGVyZSB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYSB0eXBlIG9mIG5vZGVzIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1NpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci0KLS8qCi0gKiBBbiBQc3ljaG9QYXRoIEVuZ2luZSBoZWxwZXIgY2xhc3MgcHJvdmlkaW5nIHVzZWZ1bCBtb2R1bGUgaW1wbGVtZW50YXRpb25zIGZvciBjb21tb25seSAKLSAqIHBlcmZvcm1lZCAiWE1MIHNjaGVtYSIgZXZhbHVhdGlvbiB0YXNrcy4gIAotICovCi1wdWJsaWMgY2xhc3MgUHN5Y2hvUGF0aFR5cGVIZWxwZXIgewotCQotCS8vIFBzeWNob1BhdGggZW5naW5lIHNwZWNpZmljIGNvbnN0YW50cyB0byBzdXBwb3J0IG5ldyBidWlsdC1pbiB0eXBlcywgaW50cm9kdWNlZCBpbiBYTUwgU2NoZW1hIDEuMS4KLQlwdWJsaWMgc3RhdGljIHNob3J0IERBWVRJTUVEVVJBVElPTl9EVCA9IC0xMDA7Ci0JcHVibGljIHN0YXRpYyBzaG9ydCBZRUFSTU9OVEhEVVJBVElPTl9EVCA9IC0xMDE7Ci0JCi0JCi0JLyogCi0JICogR2V0IFhlcmNlcyAic2NoZW1hIHR5cGUiIHNob3J0IGNvZGUsIGdpdmVuIGEgdHlwZSBkZWZpbml0aW9uIGluc3RhbmNlIG9iamVjdC4gUHN5Y2hvUGF0aCBlbmdpbmUgdXNlcyBmZXcgY3VzdG9tIAotCSAqIHR5cGUgJ3Nob3J0IGNvZGVzJywgdG8gc3VwcG9ydCBYTUwgU2NoZW1hIDEuMS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHNob3J0IGdldFhTRFR5cGVTaG9ydENvZGUoWFNUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKSB7Ci0JCQotCQkvLyBkdW1teSB0eXBlICJzaG9ydCBjb2RlIiBpbml0aWFsaXplcgotCQlzaG9ydCB0eXBlQ29kZSA9IC0xMDA7Ci0JCQotCQlpZiAoImRheVRpbWVEdXJhdGlvbiIuZXF1YWxzKHR5cGVEZWYuZ2V0TmFtZSgpKSkgewotCQkJdHlwZUNvZGUgPSBEQVlUSU1FRFVSQVRJT05fRFQ7IAotCQl9Ci0JCWVsc2UgaWYgKCJ5ZWFyTW9udGhEdXJhdGlvbiIuZXF1YWxzKHR5cGVEZWYuZ2V0TmFtZSgpKSkgewotCQkJdHlwZUNvZGUgPSBZRUFSTU9OVEhEVVJBVElPTl9EVDsgCi0JCX0KLQkJCi0JCXJldHVybiAodHlwZUNvZGUgIT0gLTEwMCkgPyB0eXBlQ29kZSA6ICgoWFNTaW1wbGVUeXBlRGVmaW5pdGlvbikgdHlwZURlZikuZ2V0QnVpbHRJbktpbmQoKTsKLQkJCi0JfSAvLyBnZXRYU0RUeXBlU2hvcnRDb2RlCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1OWZhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgdG8gdGhlIG1ldGhvZHMgb2YgcmFuZ2Ugb2YgcmVzdWx0IHNlcXVlbmNlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXN1bHRTZXF1ZW5jZSB7Ci0KLQkvKioKLQkgKiBhZGQgaXRlbQotCSAqIAotCSAqIEBwYXJhbSBpdGVtCi0JICogICAgICAgICAgICBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGFkZChBbnlUeXBlIGl0ZW0pOwotCi0JLyoqCi0JICogY29uY2F0aW5hdGUgZnJvbSBycwotCSAqIAotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgaXMgYSBSZXN1bHQgU2VxdWVuY2UuCi0JICovCi0JcHVibGljIGFic3RyYWN0IHZvaWQgY29uY2F0KFJlc3VsdFNlcXVlbmNlIHJzKTsKLQotCS8qKgotCSAqIExpc3QgSXRlcmF0b3IuCi0JICovCi0JcHVibGljIGFic3RyYWN0IExpc3RJdGVyYXRvciBpdGVyYXRvcigpOwotCi0JLyoqCi0JICogZ2V0IGl0ZW0gaW4gaW5kZXggaQotCSAqIAotCSAqIEBwYXJhbSBpCi0JICogICAgICAgICAgICBpcyB0aGUgcG9zaXRpb24uCi0JICovCi0JcHVibGljIGFic3RyYWN0IEFueVR5cGUgZ2V0KGludCBpKTsKLQotCS8qKgotCSAqIGdldCB0aGUgc2l6ZQotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNpemUuCi0JICovCi0JcHVibGljIGFic3RyYWN0IGludCBzaXplKCk7Ci0KLQkvKioKLQkgKiBjbGVhcgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGNsZWFyKCk7Ci0KLQkvKioKLQkgKiBjcmVhdGUgYSBuZXcgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHJldHVybiBhIG5ldyByZXN1bHQgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIGNyZWF0ZV9uZXcoKTsKLQotCS8qKgotCSAqIHJldHJpZXZlIHRoZSBmaXJzdCBpdGVtCi0JICogCi0JICogQHJldHVybiB0aGUgZmlyc3QgaXRlbS4KLQkgKi8KLQlwdWJsaWMgQW55VHlwZSBmaXJzdCgpIHsKLQkJcmV0dXJuIGdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiBjaGVjayBpcyB0aGUgc2VxdWVuY2UgaXMgZW1wdHkKLQkgKiAKLQkgKiBAcmV0dXJuIGJvb2xlYW4uCi0JICovCi0JcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7Ci0JCWlmIChzaXplKCkgPT0gMCkKLQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogcmV0cmlldmUgaXRlbXMgaW4gc2VxdWVuY2UKLQkgKiAKLQkgKiBAcmV0dXJuIHJlc3VsdCBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCQlpbnQgbnVtID0gMTsKLQotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBpdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgZWxlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJYnVmLmFwcGVuZChudW0gKyAiKSAiKTsKLQotCQkJYnVmLmFwcGVuZChlbGVtLnN0cmluZ190eXBlKCkgKyAiOiAiKTsKLQotCQkJU3RyaW5nIHZhbHVlID0gZWxlbS5zdHJpbmdfdmFsdWUoKTsKLQotCQkJaWYgKGVsZW0gaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJCVFOYW1lIHRtcCA9ICgoTm9kZVR5cGUpIGVsZW0pLm5vZGVfbmFtZSgpOwotCi0JCQkJaWYgKHRtcCAhPSBudWxsKQotCQkJCQl2YWx1ZSA9IHRtcC5leHBhbmRlZF9uYW1lKCk7Ci0JCQl9Ci0JCQlidWYuYXBwZW5kKHZhbHVlICsgIlxuIik7Ci0KLQkJCW51bSsrOwotCQl9Ci0JCXJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotCQlpZiAobnVtID09IDEpCi0JCQlyZXN1bHQgPSAiRW1wdHkgcmVzdWx0c1xuIjsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiByZWxlYXNlIHRoZSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotCQlSZXN1bHRTZXF1ZW5jZUZhY3RvcnkucmVsZWFzZSh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9SZXN1bHRTZXF1ZW5jZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBkYzgzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSU0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogUmVzdWx0IHNlcXVlbmNlIGZhY3RvcnkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc3VsdFNlcXVlbmNlRmFjdG9yeSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzdWx0U2VxdWVuY2VGYWN0b3J5IF9mYWN0b3J5ID0gbmV3IERlZmF1bHRSU0ZhY3RvcnkoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBSZXN1bHRTZXF1ZW5jZSBmYWN0X2NyZWF0ZV9uZXcoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGZhY3RfcmVsZWFzZShSZXN1bHRTZXF1ZW5jZSBycyk7Ci0KLQlwcm90ZWN0ZWQgUmVzdWx0U2VxdWVuY2UgZmFjdF9jcmVhdGVfbmV3KEFueVR5cGUgaXRlbSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGZhY3RfY3JlYXRlX25ldygpOwotCQlycy5hZGQoaXRlbSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBmYWN0X3ByaW50X2RlYnVnKCkgewotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpIHsKLQkJcmV0dXJuIF9mYWN0b3J5LmZhY3RfY3JlYXRlX25ldygpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpdGVtCi0JICogICAgICAgICAgICBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLgotCSAqIEByZXR1cm4gZmFjdG9yeSBjcmVhdGluZyBuZXcgaXRlbQotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldyhBbnlUeXBlIGl0ZW0pIHsKLQkJcmV0dXJuIF9mYWN0b3J5LmZhY3RfY3JlYXRlX25ldyhpdGVtKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcnMKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZXN1bHQgc2VxdWVuY2UgZmFjdG9yeSByZWxlYXNlIHJzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHJlbGVhc2UoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJX2ZhY3RvcnkuZmFjdF9yZWxlYXNlKHJzKTsKLQl9Ci0KLQkvKioKLQkgKiBmYWN0b3J5IGRlYnVnCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50X2RlYnVnKCkgewotCQlfZmFjdG9yeS5mYWN0X3ByaW50X2RlYnVnKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDaGVja2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NoZWNrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiN2VjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NoZWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgdG8gc3RhdGljIGNoZWNrZXIuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdGljQ2hlY2tlciB7Ci0KLQkvKioKLQkgKiBjaGVja3MgWFBhdGhOb2RlCi0JICogCi0JICogQHRocm93cyBzdGF0aWMgZXJyb3IuCi0JICogQHBhcmFtIHJvb3QKLQkgKiAgICAgICAgICAgIGlzIGFuIFhQYXRoIG5vZGUuCi0JICovCi0JcHVibGljIHZvaWQgY2hlY2soWFBhdGhOb2RlIHJvb3QpIHRocm93cyBTdGF0aWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNWM3ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBhZGQgYWJpbGl0eSB0byBzZXQgdGhlIGJhc2UgdXJpIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogaW50ZXJmYWNlIHRvIHN0YXRpYyBjb250ZXh0Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdGljQ29udGV4dCB7Ci0KLQkvKioKLQkgKiBpcyBpdCB4cGF0aCAxLjAgY29tcGF0aWJsZS4KLQkgKiAKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB4cGF0aDFfY29tcGF0aWJsZSgpOwotCi0JLyoqCi0JICogbmFtZXNwYWNlcyBkb2VzIHRoZSBwcmVmaXggZXhpc3QKLQkgKiAKLQkgKiBAcGFyYW0gcHJlZml4Ci0JICogICAgICAgICAgICBpcyB0aGUgcHJlZml4Ci0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHVibGljIGJvb2xlYW4gcHJlZml4X2V4aXN0cyhTdHJpbmcgcHJlZml4KTsKLQotCS8qKgotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwcmVmaXgKLQkgKiBAcmV0dXJuIHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgcmVzb2x2ZV9wcmVmaXgoU3RyaW5nIHByZWZpeCk7Ci0KLQkvKioKLQkgKiB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKLQkgKiAKLQkgKiBAcmV0dXJuIHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9uYW1lc3BhY2UoKTsKLQotCS8qKgotCSAqIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZQotCSAqIAotCSAqIEByZXR1cm4gc3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBkZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZSgpOwotCi0JLy8gaW4gc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zCi0JLyoqCi0JICogQHBhcmFtIGF0dHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxbmFtZSB2YXJpYWJsZQotCSAqIEByZXR1cm4gYXR0cmlidXRlcydzIHR5cGUgZGVmaW5pdGlvbgotCSAqLwotCXB1YmxpYyBYU1R5cGVEZWZpbml0aW9uIGF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24oUU5hbWUgYXR0cik7Ci0KLQkvKioKLQkgKiBAcGFyYW0gZWxlbQotCSAqICAgICAgICAgICAgaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lCi0JICogQHJldHVybiBlbGVtZW50J3MgdHlwZSBkZWZpbml0aW9uCi0JICovCi0JcHVibGljIFhTVHlwZURlZmluaXRpb24gZWxlbWVudF90eXBlX2RlZmluaXRpb24oUU5hbWUgZWxlbSk7Ci0KLQkvKioKLQkgKiBpcyB0aGUgYXR0cmlidXRlIGRlY2xhcmVkPwotCSAqIAotCSAqIEBwYXJhbSBhdHRyCi0JICogICAgICAgICAgICBpcyB0aGUgYXR0cmlidXRlIG9mIHRoZSBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGF0dHJpYnV0ZV9kZWNsYXJlZChRTmFtZSBhdHRyKTsKLQotCS8qKgotCSAqIGlzIHRoZSBlbGVtZW50IGRlY2xhcmVkPwotCSAqIAotCSAqIEBwYXJhbSBlbGVtCi0JICogICAgICAgICAgICBpcyB0aGUgZWxlbSBvZiB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlbGVtZW50X2RlY2xhcmVkKFFOYW1lIGVsZW0pOwotCi0JLy8gaW4gc2NvcGUgdmFyaWFibGVzCi0KLQkvLyBjb250ZXh0IGl0ZW0gdHlwZQotCi0JLyoqCi0JICogaXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/Ci0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxbmFtZSBuYW1lCi0JICogQHBhcmFtIGFyaXR5Ci0JICogICAgICAgICAgICBpbnRlZ2VyIG9mIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JLy8gZnVuY3Rpb24gc2lnbmF0dXJlcwotCXB1YmxpYyBib29sZWFuIGZ1bmN0aW9uX2V4aXN0cyhRTmFtZSBuYW1lLCBpbnQgYXJpdHkpOwotCi0JLy8gY29sbGF0aW9ucwotCi0JLyoqCi0JICogYmFzZSB1cmkKLQkgKiAKLQkgKiBAcmV0dXJuIHVyaQotCSAqLwotCS8vIGJhc2UgdXJpCi0JcHVibGljIFhTQW55VVJJIGJhc2VfdXJpKCk7Ci0KLQkvLyBzdGF0aWNhbGx5IGtub3duIGRvY3VtZW50cwotCi0JLy8gY29sbGVjdGlvbnMKLQotCS8vIG90aGVyIHN0dWZmCi0JLyoqCi0JICogbmV3IHNjb3BlCi0JICovCi0JcHVibGljIHZvaWQgbmV3X3Njb3BlKCk7Ci0KLQkvKioKLQkgKiBkZXN0cm95IHNjb3BlCi0JICovCi0JcHVibGljIHZvaWQgZGVzdHJveV9zY29wZSgpOwotCi0JLyoqCi0JICogYWRkIHZhcmlhYmxlCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxbmFtZQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF92YXJpYWJsZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIGRlbGV0ZSB0aGUgdmFyaWFibGUKLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGRlbGV0ZWQgdmFyaWFibGUKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZWxfdmFyaWFibGUoUU5hbWUgbmFtZSk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIHZhcmlhYmxlIGV4aXN0cwotCSAqLwotCXB1YmxpYyBib29sZWFuIHZhcmlhYmxlX2V4aXN0cyhRTmFtZSBuYW1lKTsgLy8gaW4gY3VycmVudCBzY29wZSBvbmx5Ci0KLQkvKioKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICBpcyB0aGUgdmFyaWFibGUgb2YgcW5hbWUKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YXJpYWJsZV9pbl9zY29wZShRTmFtZSB2YXIpOwotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHVibGljIGJvb2xlYW4gdHlwZV9kZWZpbmVkKFFOYW1lIG5hbWUpOwotCi0JLyoqCi0JICogQHBhcmFtIGF0Ci0JICogICAgICAgICAgICB0aGUgbm9kZSB0eXBlCi0JICogQHBhcmFtIGV0Ci0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVzX2Zyb20oTm9kZVR5cGUgYXQsIFFOYW1lIGV0KTsKLQotCS8qKgotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgdGhlIG5vZGUgdHlwZQotCSAqIEBwYXJhbSBldAotCSAqICAgICAgICAgICAgaXMgdGhlIFhTVHlwZURlZmluaXRpb24gb2YgdGhlIG5vZGUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVzX2Zyb20oTm9kZVR5cGUgYXQsIFhTVHlwZURlZmluaXRpb24gZXQpOwotCi0JLyoqCi0JICogYWRkIG5hbWVzcGFjZQotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIHRoZSBwcmVmaXggb2YgdGhlIG5hbWVzcGFjZQotCSAqIEBwYXJhbSBucwotCSAqICAgICAgICAgICAgaXMgdGhlIFhTVHlwZURlZmluaXRpb24gb2YgdGhlIG5vZGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfbmFtZXNwYWNlKFN0cmluZyBwcmVmaXgsIFN0cmluZyBucyk7Ci0KLQkvKioKLQkgKiBleHBhbmQgZnVuY3Rpb24KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9mdW5jdGlvbl9xbmFtZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIGV4cGFuZCBlbGVtZW50IHR5cGUgcW5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9lbGVtX3R5cGVfcW5hbWUoUU5hbWUgbmFtZSk7Ci0KLQkvKioKLQkgKiBleHBhbmQgcW5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIGFkZCBmdW5jdGlvbiB0byBsaWJyYXJ5Ci0JICogCi0JICogQHBhcmFtIGZsCi0JICogICAgICAgICAgICBpcyB0aGUgZnVuY3Rpb24gbGlicmFyeQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF9mdW5jdGlvbl9saWJyYXJ5KEZ1bmN0aW9uTGlicmFyeSBmbCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBhbnkgYXRvbWljIHR5cGUKLQkgKi8KLQlwdWJsaWMgQW55QXRvbWljVHlwZSBtYWtlX2F0b21pYyhRTmFtZSBuYW1lKTsKLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBiYXNlIHVyaSBmb3IgdGhlIGNvbnRleHQuCi0JICogQHBhcmFtIGJhc2V1cmkKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2Jhc2VfdXJpKFN0cmluZyBiYXNldXJpKTsKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIE1hcDxTdHJpbmcsIExpc3Q8RG9jdW1lbnQ+PiBnZXRfY29sbGVjdGlvbnMoKTsKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2NvbGxlY3Rpb25zKE1hcDxTdHJpbmcsIExpc3Q8RG9jdW1lbnQ+PiBjb2xsZWN0aW9ucyk7Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0Vycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0Vycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZWRiYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgYWxsIHN0YXRpYyBlcnJvcnMgYXMgZGVmaW5lZCBieSB0aGUgWFBhdGggMi4wIHNwZWNpZmljYXRpb24KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgU3RhdGljRXJyb3IgZXh0ZW5kcyBYUGF0aEV4Y2VwdGlvbiB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNzg3MDg2NjEzMDgzNzg3MDk3MUw7Ci0JLy8gZXJyb3Jjb2RlIHNwZWNpZmllZCBpbiBodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwL3hxdC1lcnJvcnMgaSBmaW5rCi0JcHJpdmF0ZSBTdHJpbmcgX2NvZGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgYSBnZW5lcmljIHN0YXRpYyBlcnJvcgotCSAqIAotCSAqIEBwYXJhbSBjb2RlCi0JICogICAgICAgICAgICBUaGUgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gWFBhdGggMi4wCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgSHVtYXIgcmVhZGFibGUgZXJyb3IgbWVzc2FnZQotCSAqLwotCXB1YmxpYyBTdGF0aWNFcnJvcihTdHJpbmcgY29kZSwgU3RyaW5nIGVycikgewotCQlzdXBlcihlcnIpOwotCQlfY29kZSA9IGNvZGU7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBlcnJvciBjb2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGVycm9yCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlyZXR1cm4gX2NvZGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNOYW1lUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljTmFtZVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYzIzZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNOYW1lUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNBdHRyTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNFbGVtTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNGdW5jdE5hbWVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOc05hbWVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVHlwZU5hbWVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVmFyTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVzb2x2ZXMgc3RhdGljIG5hbWVzLgotICovCi1wdWJsaWMgY2xhc3MgU3RhdGljTmFtZVJlc29sdmVyIGltcGxlbWVudHMgWFBhdGhWaXNpdG9yLCBTdGF0aWNDaGVja2VyIHsKLQlzdGF0aWMgY2xhc3MgRHVtbXlFcnJvciBleHRlbmRzIEVycm9yIHsKLQotCQkvKioKLQkJICogCi0JCSAqLwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODk4NTY0NDAyOTgxNzQxOTUwTDsKLQl9Ci0KLQlwcml2YXRlIFN0YXRpY0NvbnRleHQgX3NjOwotCXByaXZhdGUgU3RhdGljTmFtZUVycm9yIF9lcnI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgcmVzb2x2ZXIKLQkgKiAKLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdGF0aWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgU3RhdGljTmFtZVJlc29sdmVyKFN0YXRpY0NvbnRleHQgc2MpIHsKLQkJX3NjID0gc2M7Ci0JCV9lcnIgPSBudWxsOwotCX0KLQotCS8vIHRoZSBwcm9ibGVtIGlzIHRoYXQgdmlzaXN0b3IgaW50ZXJmYWNlIGRvZXMgbm90IHRocm93IGV4Y2VwdGlvbnMuLi4KLQkvLyBzbyB3ZSBnZXQgYXJvdW5kIGl0IDtECi0JcHJpdmF0ZSB2b2lkIHJlcG9ydF9lcnJvcihTdGF0aWNOYW1lRXJyb3IgZXJyKSB7Ci0JCV9lcnIgPSBlcnI7Ci0JCXRocm93IG5ldyBEdW1teUVycm9yKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlcG9ydF9iYWRfcHJlZml4KFN0cmluZyBwcmVmaXgpIHsKLQkJcmVwb3J0X2Vycm9yKFN0YXRpY05zTmFtZUVycm9yLnVua25vd25fcHJlZml4KHByZWZpeCkpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHRoZSBYUGF0aCBub2RlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgWFBhdGggbm9kZSB0byBjaGVjay4KLQkgKiBAdGhyb3dzIFN0YXRpY0Vycm9yCi0JICogICAgICAgICAgICAgc3RhdGljIGVycm9yLgotCSAqLwotCXB1YmxpYyB2b2lkIGNoZWNrKFhQYXRoTm9kZSBub2RlKSB0aHJvd3MgU3RhdGljRXJyb3IgewotCQl0cnkgewotCQkJbm9kZS5hY2NlcHQodGhpcyk7Ci0JCX0gY2F0Y2ggKER1bW15RXJyb3IgZSkgewotCQkJdGhyb3cgX2VycjsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIFhQYXRoIGJ5IHZpc2l0aW5nIGFsbCB0aGUgbm9kZXMuCi0JICogCi0JICogQHBhcmFtIHhwCi0JICogICAgICAgICAgICBpcyB0aGUgWFBhdGguCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGggeHApIHsKLQkJZm9yIChJdGVyYXRvciBpID0geHAuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlFeHByIGUgPSAoRXhwcikgaS5uZXh0KCk7Ci0KLQkJCWUuYWNjZXB0KHRoaXMpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLy8gZG9lcyBhIGZvciBhbmQgYSBxdWFudGlmaWVkIGV4cHJlc3Npb24KLQkvLyB0YWtlcyB0aGUgaXRlcmF0b3IgZm9yIHZhciBleHByIHBhcmlzCi0JcHJpdmF0ZSB2b2lkIGRvRm9yRXhwcihJdGVyYXRvciBpdGVyLCBFeHByIGV4cHIpIHsKLQkJaW50IHNjb3BlcyA9IDA7Ci0KLQkJLy8gYWRkIHZhcmlhYmxlcyB0byBzY29wZSBhbmQgY2hlY2sgdGhlIGJpbmRpbmcgc2VxdWVuY2UKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlWYXJFeHByUGFpciBwYWlyID0gKFZhckV4cHJQYWlyKSBpdGVyLm5leHQoKTsKLQotCQkJUU5hbWUgdmFyID0gcGFpci52YXJuYW1lKCk7Ci0JCQlpZiAoIV9zYy5leHBhbmRfcW5hbWUodmFyKSkKLQkJCQlyZXBvcnRfYmFkX3ByZWZpeCh2YXIucHJlZml4KCkpOwotCi0JCQlFeHByIGUgPSBwYWlyLmV4cHIoKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0KLQkJCV9zYy5uZXdfc2NvcGUoKTsKLQkJCXNjb3BlcysrOwotCQkJX3NjLmFkZF92YXJpYWJsZSh2YXIpOwotCQl9Ci0KLQkJX3NjLm5ld19zY29wZSgpOwotCQlzY29wZXMrKzsKLQkJZXhwci5hY2NlcHQodGhpcyk7Ci0KLQkJLy8ga2lsbCB0aGUgc2NvcGVzCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2NvcGVzOyBpKyspCi0JCQlfc2MuZGVzdHJveV9zY29wZSgpOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZm9yIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGZleAotCSAqICAgICAgICAgICAgaXMgdGhlIGZvciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvckV4cHIgZmV4KSB7Ci0KLQkJZG9Gb3JFeHByKGZleC5pdGVyYXRvcigpLCBmZXguZXhwcigpKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHF1YW50aWZpZWQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcWV4Ci0JICogICAgICAgICAgICBpcyB0aGUgcXVhbnRpZmllZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFF1YW50aWZpZWRFeHByIHFleCkgewotCQkvLyBsZXRzIGNoZWF0Ci0JCWRvRm9yRXhwcihxZXguaXRlcmF0b3IoKSwgcWV4LmV4cHIoKSk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RXhwcnMoSXRlcmF0b3IgaSkgewotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUV4cHIgZSA9IChFeHByKSBpLm5leHQoKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBpZiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBpZmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgaWYgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJZkV4cHIgaWZleCkgewotCi0JCXByaW50RXhwcnMoaWZleC5pdGVyYXRvcigpKTsKLQotCQlpZmV4LnRoZW5fY2xhdXNlKCkuYWNjZXB0KHRoaXMpOwotCi0JCWlmZXguZWxzZV9jbGF1c2UoKS5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBiaW5hcnkgZXhwcmVzc2lvbiBieSBjaGVja2luZyBpdHMgbGVmdCBhbmQgcmlnaHQgY2hpbGRyZW4uCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgZXhwcmVzc2lvbi4KLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLgotCSAqLwotCXB1YmxpYyB2b2lkIHByaW50QmluRXhwcihTdHJpbmcgbmFtZSwgQmluRXhwciBlKSB7Ci0JCWUubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQkJZS5yaWdodCgpLmFjY2VwdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBPUiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBvcmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChPckV4cHIgb3JleCkgewotCQlwcmludEJpbkV4cHIoIk9SIiwgb3JleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIEFORCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBhbmRleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW5kRXhwciBhbmRleCkgewotCQlwcmludEJpbkV4cHIoIkFORCIsIGFuZGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGNtcGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbXBFeHByIGNtcGV4KSB7Ci0JCXByaW50QmluRXhwcigiQ01QIiArIGNtcGV4LnR5cGUoKSwgY21wZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHJhbmdlIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIHJleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmFuZ2VFeHByIHJleCkgewotCQlwcmludEJpbkV4cHIoIlJBTkdFIiwgcmV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gYWRkaXRvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBhZGRleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQWRkRXhwciBhZGRleCkgewotCQlwcmludEJpbkV4cHIoIkFERCIsIGFkZGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBzdWJ0cmFjdGlvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBzdWJleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3ViRXhwciBzdWJleCkgewotCQlwcmludEJpbkV4cHIoIlNVQiIsIHN1YmV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBtdWx0aXBsaWNhdGlvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTXVsRXhwciBtdWxleCkgewotCQlwcmludEJpbkV4cHIoIk1VTCIsIG11bGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBkaXZpc2lvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGl2RXhwciBtdWxleCkgewotCQlwcmludEJpbkV4cHIoIkRJViIsIG11bGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gaW50ZWdlciBkaXZpc29uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJRGl2RXhwciBtdWxleCkgewotCQlwcmludEJpbkV4cHIoIklESVYiLCBtdWxleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgbW9kIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNb2RFeHByIG11bGV4KSB7Ci0JCXByaW50QmluRXhwcigiTU9EIiwgbXVsZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHVuaW9uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIHVuZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFVuaW9uRXhwciB1bmV4KSB7Ci0JCXByaW50QmluRXhwcigiVU5JT04iLCB1bmV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBwaXBlZCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBwaXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGlwZUV4cHIgcGlwZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJQSVBFIiwgcGlwZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBpbnRlcnNlY3Rpb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gaWV4cHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVyc2VjdEV4cHIgaWV4cHIpIHsKLQkJcHJpbnRCaW5FeHByKCJJTlRFUlNFQ1QiLCBpZXhwcik7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGV4Y2VwdCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRXhjZXB0RXhwciBlZXhwcikgewotCQlwcmludEJpbkV4cHIoIklOVF9FWENFUFQiLCBlZXhwcik7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuICdpbnN0YW5jZSBvZicgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gaW9leHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEluc3RPZkV4cHIgaW9leHApIHsKLQkJcHJpbnRCaW5FeHByKCJJTlNUQU5DRU9GIiwgaW9leHApOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhICd0cmVhdCBhcycgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gdGFleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRyZWF0QXNFeHByIHRhZXhwKSB7Ci0JCXByaW50QmluRXhwcigiVFJFQVRBUyIsIHRhZXhwKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBjYXN0YWJsZSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0YWJsZUV4cHIgY2V4cCkgewotCQlwcmludEJpbkV4cHIoIkNBU1RBQkxFIiwgY2V4cCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgY2FzdCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0RXhwciBjZXhwKSB7Ci0JCXByaW50QmluRXhwcigiQ0FTVCIsIGNleHApOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHVuYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIG9uZSBjaGlsZC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGV4cHJlc3Npb24uCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBwcmludFVuRXhwcihTdHJpbmcgbmFtZSwgVW5FeHByIGUpIHsKLQkJZS5hcmcoKS5hY2NlcHQodGhpcyk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIG1pbnVzIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1pbnVzRXhwciBlKSB7Ci0JCXByaW50VW5FeHByKCJNSU5VUyIsIGUpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHBsdXMgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGx1c0V4cHIgZSkgewotCQlwcmludFVuRXhwcigiUExVUyIsIGUpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiB4cGF0aCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSkgewotCQlYUGF0aEV4cHIgeHAgPSBlOwotCi0JCXdoaWxlICh4cCAhPSBudWxsKSB7Ci0JCQlTdGVwRXhwciBzZSA9IHhwLmV4cHIoKTsKLQotCQkJaWYgKHNlICE9IG51bGwpCi0JCQkJc2UuYWNjZXB0KHRoaXMpOwotCi0JCQl4cCA9IHhwLm5leHQoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGZvcndhcmQgc3RlcC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRm9yd2FyZFN0ZXAgZSkgewotCQllLm5vZGVfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHJldmVyc2Ugc3RlcC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmV2ZXJzZVN0ZXAgZSkgewotCi0JCU5vZGVUZXN0IG50ID0gZS5ub2RlX3Rlc3QoKTsKLQkJaWYgKG50ICE9IG51bGwpCi0JCQludC5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBuYW1lIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE5hbWVUZXN0IGUpIHsKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCi0JCWlmICghX3NjLmV4cGFuZF9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgdmFyaWFibGUgcmVmZXJlbmNlLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChWYXJSZWYgZSkgewotCQlRTmFtZSB2YXIgPSBlLm5hbWUoKTsKLQkJaWYgKCFfc2MuZXhwYW5kX3FuYW1lKHZhcikpCi0JCQlyZXBvcnRfYmFkX3ByZWZpeCh2YXIucHJlZml4KCkpOwotCi0JCWlmICghX3NjLnZhcmlhYmxlX2luX3Njb3BlKHZhcikpCi0JCQlyZXBvcnRfZXJyb3IobmV3IFN0YXRpY1Zhck5hbWVFcnJvcigiVmFyaWFibGUgbm90IGluIHNjb3BlOiAiCi0JCQkJCSsgdmFyLnN0cmluZygpKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc3RyaW5nIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFN0cmluZ0xpdGVyYWwgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBpbnRlZ2VyIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVnZXJMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBkb3VibGUgbGl0ZXJhbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG91YmxlTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZGVjaW1hbCBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEZWNpbWFsTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQYXJFeHByIGUpIHsKLQkJcHJpbnRFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbnR4SXRlbUV4cHIgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGZ1bmN0aW9uIGNhbGwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZ1bmN0aW9uQ2FsbCBlKSB7Ci0JCVFOYW1lIG5hbWUgPSBlLm5hbWUoKTsKLQotCQlpZiAoIV9zYy5leHBhbmRfZnVuY3Rpb25fcW5hbWUobmFtZSkpCi0JCQlyZXBvcnRfYmFkX3ByZWZpeChuYW1lLnByZWZpeCgpKTsKLQotCQlpZiAoIV9zYy5mdW5jdGlvbl9leGlzdHMobmFtZSwgZS5hcml0eSgpKSkKLQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljRnVuY3ROYW1lRXJyb3IoIkZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0OiAiCi0JCQkJCSsgbmFtZS5zdHJpbmcoKSArICIgYXJpdHk6ICIgKyBlLmFyaXR5KCkpKTsKLQotCQlwcmludEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc2luZ2xlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNpbmdsZVR5cGUgZSkgewotCQlRTmFtZSB0eXBlID0gZS50eXBlKCk7Ci0JCWlmICghX3NjLmV4cGFuZF9lbGVtX3R5cGVfcW5hbWUodHlwZSkpCi0JCQlyZXBvcnRfYmFkX3ByZWZpeCh0eXBlLnByZWZpeCgpKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHNlcXVlbmNlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNlcXVlbmNlVHlwZSBlKSB7Ci0JCUl0ZW1UeXBlIGl0ID0gZS5pdGVtX3R5cGUoKTsKLQotCQlpZiAoaXQgIT0gbnVsbCkKLQkJCWl0LmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBpdGVtIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEl0ZW1UeXBlIGUpIHsKLQotCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCWNhc2UgSXRlbVR5cGUuSVRFTToKLQkJCWJyZWFrOwotCQljYXNlIEl0ZW1UeXBlLlFOQU1FOgotCQkJUU5hbWUgdHlwZSA9IGUucW5hbWUoKTsKLQkJCWlmICghX3NjLmV4cGFuZF9lbGVtX3R5cGVfcW5hbWUodHlwZSkpCi0JCQkJcmVwb3J0X2JhZF9wcmVmaXgodHlwZS5wcmVmaXgoKSk7Ci0KLQkJCWlmICghX3NjLnR5cGVfZGVmaW5lZChlLnFuYW1lKCkpKQotCQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljVHlwZU5hbWVFcnJvcigiVHlwZSBub3QgZGVmaW5lZDogIgotCQkJCQkJKyBlLnFuYW1lKCkuc3RyaW5nKCkpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSXRlbVR5cGUuS0lORFRFU1Q6Ci0JCQllLmtpbmRfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gYW55IGtpbmQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW55S2luZFRlc3QgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGRvY3VtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvY3VtZW50VGVzdCBlKSB7Ci0KLQkJc3dpdGNoIChlLnR5cGUoKSkgewotCQljYXNlIERvY3VtZW50VGVzdC5FTEVNRU5UOgotCQkJZS5lbGVtX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQotCQljYXNlIERvY3VtZW50VGVzdC5TQ0hFTUFfRUxFTUVOVDoKLQkJCWUuc2NoZW1hX2VsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgdGV4dCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUZXh0VGVzdCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgY29tbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDb21tZW50VGVzdCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGluZyB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQSVRlc3QgZSkgewotCQlTdHJpbmcgYXJnID0gZS5hcmcoKTsKLQkJaWYgKGFyZyA9PSBudWxsKQotCQkJYXJnID0gIiI7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gYXR0cmlidXRlIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQkvLyBYWFggTk8gQ0hFQ0sgPwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXR0cmlidXRlVGVzdCBlKSB7Ci0JCVFOYW1lIG5hbWUgPSBlLm5hbWUoKTsKLQotCQlpZiAobmFtZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFfc2MuZXhwYW5kX3FuYW1lKG5hbWUpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgobmFtZS5wcmVmaXgoKSk7Ci0KLQkJbmFtZSA9IGUudHlwZSgpOwotCQlpZiAobmFtZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFfc2MuZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFBdHRyVGVzdCBlKSB7Ci0JCVFOYW1lIG5hbWUgPSBlLmFyZygpOwotCi0JCWlmICghX3NjLmV4cGFuZF9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCWlmICghX3NjLmF0dHJpYnV0ZV9kZWNsYXJlZChuYW1lKSkKLQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljQXR0ck5hbWVFcnJvcigiQXR0cmlidXRlIG5vdCBkZWNsZWFyZWQ6ICIKLQkJCQkJKyBuYW1lLnN0cmluZygpKSk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gZWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JLy8gWFhYIE5PIFNFTUFOVElDIENIRUNLPyEKLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEVsZW1lbnRUZXN0IGUpIHsKLQkJUU5hbWUgbmFtZSA9IGUubmFtZSgpOwotCi0JCWlmIChuYW1lID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIV9zYy5leHBhbmRfZWxlbV90eXBlX3FuYW1lKG5hbWUpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgobmFtZS5wcmVmaXgoKSk7Ci0KLQkJbmFtZSA9IGUudHlwZSgpOwotCQlpZiAobmFtZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFfc2MuZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc2NoZW1hIGVsZW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hRWxlbVRlc3QgZSkgewotCQlRTmFtZSBlbGVtID0gZS5uYW1lKCk7Ci0KLQkJaWYgKCFfc2MuZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShlbGVtKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KGVsZW0ucHJlZml4KCkpOwotCi0JCWlmICghX3NjLmVsZW1lbnRfZGVjbGFyZWQoZWxlbSkpCi0JCQlyZXBvcnRfZXJyb3IobmV3IFN0YXRpY0VsZW1OYW1lRXJyb3IoIkVsZW1lbnQgbm90IGRlY2xhcmVkOiAiCi0JCQkJCSsgZWxlbS5zdHJpbmcoKSkpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRDb2xsRXhwcnMoSXRlcmF0b3IgaSkgewotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUNvbGxlY3Rpb24gZXhwcnMgPSAoQ29sbGVjdGlvbikgaS5uZXh0KCk7Ci0KLQkJCXByaW50RXhwcnMoZXhwcnMuaXRlcmF0b3IoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBheGlzIHN0ZXAuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF4aXNTdGVwIGUpIHsKLQotCQllLnN0ZXAoKS5hY2NlcHQodGhpcyk7Ci0KLQkJcHJpbnRDb2xsRXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBmaWx0ZXIgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRmlsdGVyRXhwciBlKSB7Ci0JCWUucHJpbWFyeSgpLmFjY2VwdCh0aGlzKTsKLQotCQlwcmludENvbGxFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hQYXRoRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hQYXRoRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNTkyZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI5MDMzNyAtIFJldmlzaXQgdXNlIG9mIElDVQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi0vKioKLSAqIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGFuIFhQYXRoIGV4Y2VwdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMzgwMzk0MTcwMTYzOTgzODYzTDsKLQlwcml2YXRlIFN0cmluZyBfcmVhc29uOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFhQYXRoRXhjZXB0aW9uCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uCi0JICovCi0JcHVibGljIFhQYXRoRXhjZXB0aW9uKFN0cmluZyByZWFzb24pIHsKLQkJX3JlYXNvbiA9IHJlYXNvbjsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3cuCi0JICovCi0JcHVibGljIFN0cmluZyByZWFzb24oKSB7Ci0JCXJldHVybiBfcmVhc29uOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBfcmVhc29uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmYTIyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hQYXRoUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotCi0vKioKLSAqIFRoaXMgaXMgYW4gaW50ZXJmYWNlIGNsYXNzIGZvciB0aGUgWFBhdGggcGFyc2VyLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhQYXRoUGFyc2VyIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciB0aGUgWFBhdGggcGFyc2VyIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcGFyYW0geHBhdGgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBYUGF0aCB0byBiZSBwYXJzZWQuCi0JICogQHRocm93cyBYUGF0aFBhcnNlckV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIFhQYXRoIHBhcnNlciBleGNlcHRpb24uCi0JICogQHJldHVybiBUaGUgcGFyc2VkIFhQYXRoLgotCSAqLwotCXB1YmxpYyBYUGF0aCBwYXJzZShTdHJpbmcgeHBhdGgpIHRocm93cyBYUGF0aFBhcnNlckV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXJFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXJFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY0MzVmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hQYXRoUGFyc2VyRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3Mzc2MyAtIGNvcnJlY3QgZXJyb3IgY29kZXMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLQotLyoqCi0gKiBUaGlzIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIFhQYXRoIHBhcnNlci4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoUGFyc2VyRXhjZXB0aW9uIGV4dGVuZHMgU3RhdGljRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTQ5NzQ4MDUyMzA0ODk3NjI0MTlMOwotCS8qKgotCSAqIFRoZSB0eXBlIG9mIGV4Y2VwdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlZBTElEX1hQQVRIX0VYUFJFU1NJT04gPSAiWFBTVDAwMDMiOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFhQYXRoUGFyc2VyRXhjZXB0aW9uLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLgotCSAqLwotCXB1YmxpYyBYUGF0aFBhcnNlckV4Y2VwdGlvbihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKElOVkFMSURfWFBBVEhfRVhQUkVTU0lPTiwgcmVhc29uKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hlcmNlc0xvYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YZXJjZXNMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0NDQ5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hlcmNlc0xvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gRml4ZWQgbmFtZXNwYWNlIGF3YXJlbmVzcwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmLiAgQ29ycmVjdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZyBvZiBncmFtbWFycyBpZiBub24tdmFsaWRhdGluZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEuaW8uKjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuKjsKLWltcG9ydCBqYXZheC54bWwudmFsaWRhdGlvbi5TY2hlbWE7Ci0KLWltcG9ydCBvcmcueG1sLnNheC4qOwotCi0vKioKLSAqIFhlcmNlcyBsb2FkZXIgY2xhc3MuIFRoZSBsb2FkaW5nIGlzIGFsd2F5cyBuYW1lc3BhY2UgYXdhcmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBYZXJjZXNMb2FkZXIgaW1wbGVtZW50cyBET01Mb2FkZXIgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTlZBTElEQVRJTkdfTE9BRF9EVERfR1JBTU1BUiA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvbm9udmFsaWRhdGluZy9sb2FkLWR0ZC1ncmFtbWFyIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRVNfRkVBVFVSRSA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFUSU9OX0ZFQVRVUkUgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEtZnVsbC1jaGVja2luZyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBEWU5BTUlDX1ZBTElEQVRJT05fRkVBVFVSRSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9keW5hbWljIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQURfRVhURVJOQUxfRFREX0ZFQVRVUkUgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL25vbnZhbGlkYXRpbmcvbG9hZC1leHRlcm5hbC1kdGQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFYUF9TQ0hFTUFfTEFOR1VBR0UgPSAiaHR0cDovL2phdmEuc3VuLmNvbS94bWwvamF4cC9wcm9wZXJ0aWVzL3NjaGVtYUxhbmd1YWdlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXM0NfWE1MX1NDSEVNQSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9kb20vZG9jdW1lbnQtY2xhc3MtbmFtZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVU1FTlRfUFNWSV9JTVBMRU1FTlRBVElPTiA9ICJvcmcuYXBhY2hlLnhlcmNlcy5kb20uUFNWSURvY3VtZW50SW1wbCI7Ci0KLQlib29sZWFuIF92YWxpZGF0aW5nOwotCQotCVNjaGVtYSBfc2NoZW1hID0gbnVsbDs7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgWGVyY2VzIGxvYWRlci4KLQkgKi8KLQlwdWJsaWMgWGVyY2VzTG9hZGVyKCkgewotCQlfdmFsaWRhdGluZyA9IGZhbHNlOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFhlcmNlc0xvYWRlcihTY2hlbWEgc2NoZW1hKSB7Ci0JCV92YWxpZGF0aW5nID0gZmFsc2U7Ci0JCV9zY2hlbWEgPSBzY2hlbWE7Ci0JfQotCi0JLyoqCi0JICogVGhlIFhlcmNlcyBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1bWVudAotCSAqIAotCSAqIEBwYXJhbSBpbgotCSAqICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS4KLQkgKiBAdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIERPTSBsb2FkZXIgZXhjZXB0aW9uLgotCSAqIEByZXR1cm4gVGhlIGxvYWRlZCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnQgbG9hZChJbnB1dFN0cmVhbSBpbikgdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbiB7Ci0KLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0JCWZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCWZhY3Rvcnkuc2V0QXR0cmlidXRlKFNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUsCi0JCQkJQm9vbGVhbi52YWx1ZU9mKF92YWxpZGF0aW5nKSk7Ci0JCWZhY3Rvcnkuc2V0QXR0cmlidXRlKExPQURfRVhURVJOQUxfRFREX0ZFQVRVUkUsIHRydWUpOwotCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShOT05WQUxJREFUSU5HX0xPQURfRFREX0dSQU1NQVIsIHRydWUpOwotCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWSwKLQkJCQlET0NVTUVOVF9QU1ZJX0lNUExFTUVOVEFUSU9OKTsKLQkJCi0JCWlmIChfc2NoZW1hICE9IG51bGwpIHsKLQkJICBmYWN0b3J5LnNldFNjaGVtYShfc2NoZW1hKTsKLQkJfQotCQllbHNlIHsKLQkJICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoX3ZhbGlkYXRpbmcpOwkKLQkJfQotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0KLQkJCWlmIChfdmFsaWRhdGluZykgewotCQkJCWJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJvckhhbmRsZXIoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkKLQkJCQkJCQl0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCQkJCXRocm93IGU7Ci0JCQkJCX0KLQotCQkJCQlwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKQotCQkJCQkJCXRocm93cyBTQVhQYXJzZUV4Y2VwdGlvbiB7Ci0JCQkJCQl0aHJvdyBlOwotCQkJCQl9Ci0KLQkJCQkJcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKQotCQkJCQkJCXRocm93cyBTQVhQYXJzZUV4Y2VwdGlvbiB7Ci0JCQkJCQl0aHJvdyBlOyAvLyBYWFgKLQkJCQkJfQotCQkJCX0pOwotCQkJfQotCQkJcmV0dXJuIGJ1aWxkZXIucGFyc2UoaW4pOwotCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJLy90aHJvdyBuZXcgRE9NTG9hZGVyRXhjZXB0aW9uKCJTQVggZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgRE9NTG9hZGVyRXhjZXB0aW9uKCJQYXJzZXIgY29uZmlndXJhdGlvbiBleGNlcHRpb246ICIKLQkJCQkJKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIklPIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdmFsaWRhdGluZyBib29sZWFuLgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhbGlkYXRpbmcoYm9vbGVhbiB4KSB7Ci0JCV92YWxpZGF0aW5nID0geDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2FzdC9YUGF0aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9hc3QvWFBhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmN2IxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2FzdC9YUGF0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3I7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgWFBhdGguCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aCBleHRlbmRzIFhQYXRoTm9kZSB7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uIF9leHByczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBYUGF0aC4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwcnMKLQkgKiAgICAgICAgICAgIFhQYXRoIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBYUGF0aChDb2xsZWN0aW9uIGV4cHJzKSB7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2V4cHJzLml0ZXJhdG9yKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9GbkZ1bmN0aW9uTGlicmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9GbkZ1bmN0aW9uTGlicmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTMxMGIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vRm5GdW5jdGlvbkxpYnJhcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEFkZGVkIEZuRGVmYXVsdENvbGxhdGlvbi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4NTMyMSAtIGltcGxlbWVudGVkIGZuOmVuY29kZS1mb3ItdXJpKCkKLSAqICAgICBKZXNwZXIgTW9sbGVyICAgICAgIC0gYnVnIDI4NzM2OSAtIFN1cHBvcnQgZm46Y29kZXBvaW50LWVxdWFsKCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi0vLyB0aGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGxpYmMgPUQKLS8qKgotICogTWFpbnRhaW5zIGEgbGlicmFyeSBvZiBjb3JlIGZ1bmN0aW9ucyBhbmQgdXNlciBkZWZpbmVkIGZ1bmN0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIEZuRnVuY3Rpb25MaWJyYXJ5IGV4dGVuZHMgRnVuY3Rpb25MaWJyYXJ5IHsKLQkvKioKLQkgKiBQYXRoIHRvIHhwYXRoIGZ1bmN0aW9ucyBzcGVjaWZpY2F0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX0ZVTkNUSU9OU19OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucyI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5GdW5jdGlvbkxpYnJhcnkuCi0JICovCi0JcHVibGljIEZuRnVuY3Rpb25MaWJyYXJ5KCkgewotCQlzdXBlcihYUEFUSF9GVU5DVElPTlNfTlMpOwotCi0JCS8vIGFkZCBmdW5jdGlvbnMgaGVyZQotCQlhZGRfZnVuY3Rpb24obmV3IEZuQm9vbGVhbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJvb3QoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ob3QoKSk7Ci0KLQkJLy8gYWNjZXNzb3JzCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ob2RlTmFtZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5pbGxlZCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRhdGEoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdHJpbmcoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5CYXNlVXJpKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RhdGljQmFzZVVyaSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRvY3VtZW50VXJpKCkpOwotCi0JCS8vIGVycm9yCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5FcnJvcigpKTsKLQotCQkvLyB0cmFjZQotCQlhZGRfZnVuY3Rpb24obmV3IEZuVHJhY2UoKSk7Ci0KLQkJLy8gbnVtZXJpYyBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkFicygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNlaWxpbmcoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5GbG9vcigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJvdW5kKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUm91bmRIYWxmVG9FdmVuKCkpOwotCi0JCS8vIHN0cmluZyBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvZGVwb2ludHNUb1N0cmluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0cmluZ1RvQ29kZXBvaW50cygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvbXBhcmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Db2RlcG9pbnRFcXVhbCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvbmNhdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0cmluZ0pvaW4oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdWJzdHJpbmcoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdHJpbmdMZW5ndGgoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ob3JtYWxpemVTcGFjZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vcm1hbGl6ZVVuaWNvZGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5VcHBlckNhc2UoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Mb3dlckNhc2UoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5UcmFuc2xhdGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Fc2NhcGVIVE1MVXJpKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuSXJpVG9VUkkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Db250YWlucygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0YXJ0c1dpdGgoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5FbmRzV2l0aCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN1YnN0cmluZ0JlZm9yZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN1YnN0cmluZ0FmdGVyKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTWF0Y2hlcygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJlcGxhY2UoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ub2tlbml6ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVuY29kZUZvclVSSSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJlc29sdmVVUkkoKSk7Ci0KLQkJLy8gYm9vbGVhbiBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRydWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5GYWxzZSgpKTsKLQotCQkvLyBkYXRlIGV4dHJhY3Rpb24gZnVuY3Rpb25zCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5ZZWFyc0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1vbnRoc0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRheXNGcm9tRHVyYXRpb24oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ib3Vyc0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1pbnV0ZXNGcm9tRHVyYXRpb24oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TZWNvbmRzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuWWVhckZyb21EYXRlVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1vbnRoRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF5RnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuSG91cnNGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NaW51dGVzRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU2Vjb25kc0Zyb21EYXRlVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRpbWV6b25lRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuWWVhckZyb21EYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTW9udGhGcm9tRGF0ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRheUZyb21EYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVGltZXpvbmVGcm9tRGF0ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkhvdXJzRnJvbVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NaW51dGVzRnJvbVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TZWNvbmRzRnJvbVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5UaW1lem9uZUZyb21UaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF0ZVRpbWUoKSk7Ci0KLQkJLy8gdGltZXpvbmUgZnVuY3RzCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5JbXBsaWNpdFRpbWV6b25lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQWRqdXN0RGF0ZVRpbWVUb1RpbWVab25lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQWRqdXN0VGltZVRvVGltZVpvbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BZGp1c3REYXRlVG9UaW1lWm9uZSgpKTsKLQotCQkvLyBRTmFtZSBmdW5jdHMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJlc29sdmVRTmFtZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblFOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTG9jYWxOYW1lRnJvbVFOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTmFtZXNwYWNlVXJpRnJvbVFOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUHJlZml4RnJvbVFOYW1lKCkpOwotCi0JCS8vIFhYWCBpbXBsZW1lbnQgaGV4ICYgYmluYXJ5ICYgbm90YXRpb25zCi0KLQkJLy8gbm9kZSBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Mb2NhbE5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5OYW1lc3BhY2VVcmkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5OdW1iZXIoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5JblNjb3BlUHJlZml4ZXMoKSk7Ci0KLQkJLy8gbm9kZSBmdW5jdHMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkxhbmcoKSk7Ci0KLQkJLy8gc2VxdWVuY2UgZnVuY3Rpb25zCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5JbmRleE9mKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRW1wdHkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5FeGlzdHMoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5EaXN0aW5jdFZhbHVlcygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkluc2VydEJlZm9yZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJlbW92ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblJldmVyc2UoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdWJzZXF1ZW5jZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblVub3JkZXJlZCgpKTsKLQotCQkvLyBzZXF1ZW5jZSBjYXJpZG5hbGl0eQotCQlhZGRfZnVuY3Rpb24obmV3IEZuWmVyb09yT25lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuT25lT3JNb3JlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRXhhY3RseU9uZSgpKTsKLQotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGVlcEVxdWFsKCkpOwotCi0JCS8vIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvdW50KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQXZnKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTWF4KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTWluKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3VtKCkpOwotCi0JCS8vIFhYWCBpbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgZ2VuZXJhdGUgc2VxdWVuY2VzCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5Eb2MoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Db2xsZWN0aW9uKCkpOwotCi0JCS8vIGNvbnRleHQgZnVuY3Rpb25zCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5Qb3NpdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkxhc3QoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5DdXJyZW50RGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5DdXJyZW50RGF0ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkN1cnJlbnRUaW1lKCkpOwotCQkKLQkJLy8gWFhYIGNvbGxhdGlvbgotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGVmYXVsdENvbGxhdGlvbigpKTsKLQkJCi0JCS8vIElEIGFuZCBJRFJlZgotCQlhZGRfZnVuY3Rpb24obmV3IEZuSUQoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5JRFJFRigpKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vWFNDdHJMaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uL1hTQ3RyTGlicmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODJjMWM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vWFNDdHJMaWJyYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDk1MiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmxvbmcgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NTEwNSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmludCBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NTk5IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6bm9uUG9zaXRpdmVJbnRlZ2VyIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDIgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpuZWdhdGl2ZUludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYwOCAtIGltcGxlbWVudGF0aW9uIG9mIHhzOnNob3J0IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDkgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpub25OZWdhdGl2ZUludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYyOSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOnVuc2lnbmVkTG9uZyBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjMyIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6cG9zaXRpdmVJbnRlZ2VyIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzkgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpieXRlIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NDIgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnNpZ25lZEludCBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjQ1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6dW5zaWdoZWRTaG9ydCBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjUwIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6dW5zaWduZWRCeXRlIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODEwNDYgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpiYXNlNjRCaW5hcnkgZGF0YSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6dW50eXBlZEF0b21pYyBkYXRhIHR5cGUuCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyOTc3MDcgLSBNaXNzaW5nIHRoZSBlbXB0eS1zZXF1ZW5jZSgpIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzA5NTg1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6bm9ybWFsaXplZFN0cmluZyBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0NDc4IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6dG9rZW4gZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMzNDg0MiAtIGltcHJvdmluZyBzdXBwb3J0IGZvciB0aGUgZGF0YSB0eXBlcyBOYW1lLCBOQ05hbWUsIEVOVElUWSwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElELCBJRFJFRiBhbmQgTk1UT0tFTi4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ29uc3RydWN0b3JGTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBYTUwgU2NoZW1hIGNvbnRyb2wgbGlicmFyeSBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgWFNDdHJMaWJyYXJ5IGV4dGVuZHMgQ29uc3RydWN0b3JGTCB7Ci0JLyoqCi0JICogUGF0aCB0byB3My5vcmcgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9TQ0hFTUFfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFhTQ3RyTGlicmFyeS4KLQkgKi8KLQlwdWJsaWMgWFNDdHJMaWJyYXJ5KCkgewotCQlzdXBlcihYTUxfU0NIRU1BX05TKTsKLQotCQkvLyBhZGQgdHlwZXMgaGVyZQotCQlhZGRfdHlwZShuZXcgWFNTdHJpbmcoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05vcm1hbGl6ZWRTdHJpbmcoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Rva2VuKCkpOwotCQlhZGRfdHlwZShuZXcgWFNOYW1lKCkpOwotCQlhZGRfdHlwZShuZXcgWFNOQ05hbWUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05NVE9LRU4oKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0Jvb2xlYW4oKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1VudHlwZWRBdG9taWMoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05vdGF0aW9uKCkpOwotCi0JCWFkZF9hYnN0cmFjdF90eXBlKCJhbnlBdG9taWNUeXBlIiwgbmV3IEFueUF0b21pY1R5cGUoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQl9KTsKLQkJCi0JCS8vIG51bWVyaWMKLQkJYWRkX3R5cGUobmV3IFhTRGVjaW1hbCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTRmxvYXQoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0RvdWJsZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTSW50ZWdlcigpKTsKLQkJYWRkX3R5cGUobmV3IFhTTG9uZygpKTsKLQkJYWRkX3R5cGUobmV3IFhTSW50KCkpOwotCQlhZGRfdHlwZShuZXcgWFNOb25Qb3NpdGl2ZUludGVnZXIoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05lZ2F0aXZlSW50ZWdlcigpKTsKLQkJYWRkX3R5cGUobmV3IFhTU2hvcnQoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05vbk5lZ2F0aXZlSW50ZWdlcigpKTsKLQkJYWRkX3R5cGUobmV3IFhTVW5zaWduZWRMb25nKCkpOwotCQlhZGRfdHlwZShuZXcgWFNQb3NpdGl2ZUludGVnZXIoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0J5dGUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Vuc2lnbmVkSW50KCkpOwotCQlhZGRfdHlwZShuZXcgWFNVbnNpZ25lZFNob3J0KCkpOwotCQlhZGRfdHlwZShuZXcgWFNVbnNpZ25lZEJ5dGUoKSk7Ci0KLQkJLy8gZGF0ZQotCQlhZGRfdHlwZShuZXcgWFNEYXRlVGltZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTRGF0ZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTVGltZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTR1llYXJNb250aCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTR1llYXIoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0dNb250aERheSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTR01vbnRoKCkpOwotCQlhZGRfdHlwZShuZXcgWFNHRGF5KCkpOwotCi0JCWFkZF90eXBlKG5ldyBRTmFtZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTQW55VVJJKCkpOwotCQlhZGRfdHlwZShuZXcgWFNZZWFyTW9udGhEdXJhdGlvbigpKTsKLQkJYWRkX3R5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCkpOwotCQlhZGRfdHlwZShuZXcgWFNEdXJhdGlvbigpKTsKLQkJYWRkX3R5cGUobmV3IFhTRW50aXR5KCkpOwotCQlhZGRfdHlwZShuZXcgWFNJRCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTSURSRUYoKSk7Ci0JCQotCQlhZGRfdHlwZShuZXcgWFNCYXNlNjRCaW5hcnkoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0hleEJpbmFyeSgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTliOThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGFuY2VzdG9ycyBvZiB0aGUgY29udGV4dCBub2RlLCB0aGlzIGFsd2F5cyBpbmNsdWRlcyB0aGUgcm9vdAotICogbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIEFuY2VzdG9yQXhpcyBleHRlbmRzIFBhcmVudEF4aXMgewotCi0JLyoqCi0JICogR2V0IHRoZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgbm9kZXMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGUuCi0JICovCi0JLy8gWFhYIHVuaWZ5IHRoaXMgd2l0aCBkZXNjZW5kYW50cyBheGlzID8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBEeW5hbWljQ29udGV4dCBkYykgewotCi0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gc3VwZXIuaXRlcmF0ZShub2RlLCBkYyk7Ci0KLQkJLy8gbm8gcGFyZW50Ci0JCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCXJldHVybiByczsKLQotCQlOb2RlVHlwZSBwYXJlbnQgPSAoTm9kZVR5cGUpIHJzLmdldCgwKTsKLQotCQkvLyBnZXQgYW5jZXN0b3JzIG9mIHBhcmVudAotCQlSZXN1bHRTZXF1ZW5jZSBhbmNlcyA9IGl0ZXJhdGUocGFyZW50LCBkYyk7Ci0KLQkJYW5jZXMuY29uY2F0KHJzKTsKLQotCQlyZXR1cm4gYW5jZXM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yT3JTZWxmQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9BbmNlc3Rvck9yU2VsZkF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyZGIyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yT3JTZWxmQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgYW5jZXN0b3Itb3Itc2VsZiBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBhbmNlc3RvcnMgb2YgdGhlCi0gKiBjb250ZXh0IG5vZGUsIHRoaXMgYWx3YXlzIGluY2x1ZGVzIHRoZSByb290IG5vZGUuCi0gKi8KLS8vIG11bHRpcGxlIGluaGVyZXRhbmNlIG1pZ2h0IGJlIGNvb2wgaGVyZSA9RAotcHVibGljIGNsYXNzIEFuY2VzdG9yT3JTZWxmQXhpcyBleHRlbmRzIFJldmVyc2VBeGlzIHsKLQotCS8qKgotCSAqIEdldCBhbmNlc3RvciBub2RlcyBvZiB0aGUgY29udGV4dCBub2RlIGFuZCB0aGUgY29udGV4dCBub2RlIGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgY29udGV4dCBub2RlIGFuZCBpdHMgYW5jZXN0b3JzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCS8vIGdldCBhbmNlc3RvcnMKLQkJQW5jZXN0b3JBeGlzIGFhID0gbmV3IEFuY2VzdG9yQXhpcygpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGFhLml0ZXJhdGUobm9kZSwgZGMpOwotCi0JCS8vIGFkZCBzZWxmCi0JCXJzLmFkZChub2RlKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F0dHJpYnV0ZUF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXR0cmlidXRlQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIxMTQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXR0cmlidXRlQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgYXR0cmlidXRlIGF4aXMgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGNvbnRleHQgbm9kZS4gVGhlIGF4aXMgd2lsbAotICogYmUgZW1wdHkgdW5sZXNzIHRoZSBjb250ZXh0IG5vZGUgaXMgYW4gZWxlbWVudC4KLSAqLwotcHVibGljIGNsYXNzIEF0dHJpYnV0ZUF4aXMgZXh0ZW5kcyBGb3J3YXJkQXhpcyB7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgbm9kZSdzIGF0dHJpYnV0ZXMuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIGF0dGlidXRlcyBvZiB0aGUgY29udGV4dCBub2RlLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBvbmx5IGVsZW1lbnRzIGhhdmUgYXR0cmlidXRlcwotCQlpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudFR5cGUpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIGdldCBhdHRyaWJ1dGVzCi0JCUVsZW1lbnRUeXBlIGVsZW0gPSAoRWxlbWVudFR5cGUpIG5vZGU7Ci0JCU5hbWVkTm9kZU1hcCBhdHRycyA9IGVsZW0udmFsdWUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0KLQkJLy8gYWRkIGF0dHJpYnV0ZXMKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLQotCQkJcnMuYWRkKE5vZGVUeXBlLmRvbV90b194cGF0aChhdHRyKSk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0KLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5vZGUncyBwcmluY2lwbGUgbm9kZSBraW5kLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHR5cGUgb2Ygbm9kZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTm9kZVR5cGUgcHJpbmNpcGFsX25vZGVfa2luZCgpIHsKLQkJcmV0dXJuIG5ldyBBdHRyVHlwZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9BeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjZThiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGNsYXNzIGZvciBhbiBBeGlzLgotICogCi0gKiBBbiBheGlzIGRlZmluZXMgdGhlICJkaXJlY3Rpb24gb2YgbW92ZW1lbnQiIGZvciBhIHN0ZXAgYmV0d2VlbiBhIGNvbnRleHQgbm9kZQotICogYW5kIGFub3RoZXIgbm9kZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGF4aXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQXhpcyB7Ci0JLyoqCi0JICogR2V0IGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpOwotCi0JLyoqCi0JICogR2V0IHRoZSBwcmluY2lwbGUga2luZCBvZiBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHByaW5jaXBsZSBub2RlIGtpbmQuCi0JICovCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQ2hpbGRBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0NoaWxkQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmExZDdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQ2hpbGRBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIFdhcyBub3QgaGFuZGxpbmcgeG1sIGxvYWRlZCBkeW5hbWljYWxseSBpbiB2YXJpYWJsZXMuIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBUaGUgY2hpbGQgYXhpcyBjb250YWlucyB0aGUgY2hpbGRyZW4gb2YgdGhlIGNvbnRleHQgbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIENoaWxkQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJ3MgY2hpbGRyZW4uCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIGNvbnRleHQgbm9kZSdzIGNoaWxkcmVuLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJTm9kZUxpc3QgbmwgPSBudWxsOwotCQkKLQotCQkvLyBvbmx5IGRvY3VtZW50IGFuZCBlbGVtZW50IG5vZGVzIGhhdmUgY2hpbGRyZW4KLQkJaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2NUeXBlKSB7Ci0JCQlubCA9ICgoRG9jVHlwZSkgbm9kZSkudmFsdWUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0JCX0KLQkJaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50VHlwZSkKLQkJCW5sID0gKChFbGVtZW50VHlwZSkgbm9kZSkudmFsdWUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0KLQkJLy8gYWRkIHRoZSBjaGlsZHJlbiB0byB0aGUgcmVzdWx0Ci0JCWlmIChubCAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGRub2RlID0gbmwuaXRlbShpKTsKLQkJCQlOb2RlVHlwZSBuID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQluID0gTm9kZVR5cGUuZG9tX3RvX3hwYXRoKGRub2RlKTsKLQkJCQl9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBleCkgewotCQkJCQluID0gTm9kZVR5cGUuZG9tX3RvX3hwYXRoKGRub2RlKTsKLQkJCQl9Ci0KLQkJCQlycy5hZGQobik7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0N1cEVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0N1cEVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWM2ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9DdXBFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBDVVAgUGFyc2VyLgotICovCi1wdWJsaWMgY2xhc3MgQ3VwRXJyb3IgZXh0ZW5kcyBYUGF0aEVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xODM1Nzg0NjIzMjgwNjkyMjc0TDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDVVAgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBDdXBFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0UlNGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSU0ZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1Yjg5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSU0ZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gd2hpY2ggY3JlYXRlcyBzZXF1ZW5jZXMgb2YgdHlwZSBEZWZhdWx0UmVzdWx0U2VxdWVuY2UuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRSU0ZhY3RvcnkgZXh0ZW5kcyBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc3VsdFNlcXVlbmNlIF9yc19jcmVhdG9yID0gbmV3IERlZmF1bHRSZXN1bHRTZXF1ZW5jZSgpOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9PTF9TSVpFID0gNTA7Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlW10gX3JzX3Bvb2wgPSBuZXcgUmVzdWx0U2VxdWVuY2VbUE9PTF9TSVpFXTsKLQlwcml2YXRlIGludCBfaGVhZF9wb3M7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBmYWN0b3J5LgotCSAqIAotCSAqLwotCXB1YmxpYyBEZWZhdWx0UlNGYWN0b3J5KCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IFBPT0xfU0laRTsgaSsrKQotCQkJX3JzX3Bvb2xbaV0gPSBfcnNfY3JlYXRvci5jcmVhdGVfbmV3KCk7Ci0KLQkJX2hlYWRfcG9zID0gUE9PTF9TSVpFIC0gMTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgUmVzdWx0U2VxdWVuY2UgZmFjdF9jcmVhdGVfbmV3KCkgewotCQlpZiAoX2hlYWRfcG9zID4gMCkgewotCQkJcmV0dXJuIF9yc19wb29sW19oZWFkX3Bvcy0tXTsKLQkJfQotCi0JCXJldHVybiBfcnNfY3JlYXRvci5jcmVhdGVfbmV3KCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZmFjdF9yZWxlYXNlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCWludCBuZXdfcG9zID0gX2hlYWRfcG9zICsgMTsKLQotCQlpZiAobmV3X3BvcyA8IFBPT0xfU0laRSkgewotCQkJcnMuY2xlYXIoKTsKLQotCQkJX2hlYWRfcG9zID0gbmV3X3BvczsKLQkJCV9yc19wb29sW25ld19wb3NdID0gcnM7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBmYWN0X3ByaW50X2RlYnVnKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlYWQgcG9zOiAiICsgX2hlYWRfcG9zKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSZXN1bHRTZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0UmVzdWx0U2VxdWVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzOGY1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSZXN1bHRTZXF1ZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSByZXN1bHQgc2VxdWVuY2UuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRSZXN1bHRTZXF1ZW5jZSBleHRlbmRzIFJlc3VsdFNlcXVlbmNlIHsKLQotCXByaXZhdGUgTGlzdCBfc2VxOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogYW4gZW1wdHkgYXJyYXkgaXMgY3JlYXRlZAotCSAqLwotCXB1YmxpYyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UoKSB7Ci0JCV9zZXEgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFkZGVkCi0JICovCi0JcHVibGljIERlZmF1bHRSZXN1bHRTZXF1ZW5jZShBbnlUeXBlIGl0ZW0pIHsKLQkJdGhpcygpOwotCQlhZGQoaXRlbSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFkZGVkIHRvIGFycmF5IF9zZXEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBhZGQoQW55VHlwZSBpdGVtKSB7Ci0JCWFzc2VydCBpdGVtICE9IG51bGw7Ci0JCV9zZXEuYWRkKGl0ZW0pOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgUmVzdWx0U2VxdWVuY2UKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjb25jYXQoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJX3NlcS5hZGQoaS5uZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIG9mIGFycmF5IF9zZXEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX3NlcS5saXN0SXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGludGVnZXIgb2YgdGhlIHNpemUgb2YgYXJyYXkgX3NlcQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgc2l6ZSgpIHsKLQkJcmV0dXJuIF9zZXEuc2l6ZSgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogICAgICAgICAgICBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGFycmF5IGl0ZW0gdGhhdCBpcyB3YW50ZWQuCi0JICogQHJldHVybiBpdGVtIGkgZnJvbSBhcnJheSBfc2VxCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgZ2V0KGludCBpKSB7Ci0JCXJldHVybiAoQW55VHlwZSkgX3NlcS5nZXQoaSk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBmaXJzdCBpdGVtIGZyb20gYXJyYXkgX3NlcQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGZpcnN0KCkgewotCQlpZiAoX3NlcS5zaXplKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBnZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogV2hldGhlciBvciBub3QgYXJyYXkgX3NlcSBpcyBlbXB0eQotCSAqIAotCSAqIEByZXR1cm4gYSBib29sZWFuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7Ci0JCXJldHVybiBfc2VxLmlzRW1wdHkoKTsKLQl9Ci0KLQkvKioKLQkgKiBDbGVhcnMgdGhlIHNlcXVlbmNlLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNsZWFyKCkgewotCQlfc2VxLmNsZWFyKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IHNlcXVlbmNlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5ldyBzZXF1ZW5jZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRTdGF0aWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRTdGF0aWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YTc4YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0U3RhdGljQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjc3NzkyIC0gYWRkIGJ1aWx0IGluIHR5cGVzIHRvIHN0YXRpYyBjb250ZXh0LiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAgICAgICAgLSBidWcgMzI1MjYyIC0gcHJvdmlkaW5nIGFiaWxpdHkgdG8gc3RvcmUgYW4gWFBhdGgyIHNlcXVlbmNlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFuIHVzZXItZGVmaW5lZCB2YXJpYWJsZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uWFNDdHJMaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIHN0YXRpYyBjb250ZXh0IGFzIGRlc2NyaWJlZCBieSB0aGUgWFBhdGggMi4wCi0gKiBzcGVjaWZpY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFN0YXRpY0NvbnRleHQgaW1wbGVtZW50cyBTdGF0aWNDb250ZXh0IHsKLQotCXByaXZhdGUgYm9vbGVhbiBfeHBhdGgxX2NvbXBhdGlibGU7Ci0JcHJpdmF0ZSBTdHJpbmcgX2RlZmF1bHRfbmFtZXNwYWNlOwotCXByaXZhdGUgU3RyaW5nIF9kZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZTsKLQlwcml2YXRlIFhTTW9kZWwgX3NjaGVtYTsKLQlwcml2YXRlIFhTQ3RyTGlicmFyeSBidWlsdGluVHlwZXM7Ci0KLQkvLyBrZXk6IFN0cmluZyBwcmVmaXgsIGNvbnRlbnRzOiBTdHJpbmcgbmFtZXNwYWNlCi0JcHJpdmF0ZSBNYXAgX25hbWVzcGFjZXM7Ci0KLQlwcml2YXRlIFN0cmluZyBfY250eHRfaXRlbV90eXBlOwotCXByaXZhdGUgTWFwIF9mdW5jdGlvbnM7Ci0KLQkvLyBYWFggY29sbGF0aW9ucwotCi0JcHJpdmF0ZSBYU0FueVVSSSBfYmFzZV91cmk7Ci0JcHJpdmF0ZSBNYXAgX2RvY3VtZW50czsKLQlwcml2YXRlIE1hcCBfY29sbGVjdGlvbnM7Ci0JCi0JcHVibGljIFN0cmluZyBnZXRfY250eHRfaXRlbV90eXBlKCkgewotCQlyZXR1cm4gX2NudHh0X2l0ZW1fdHlwZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRfY250eHRfaXRlbV90eXBlKFN0cmluZyBjbnR4dEl0ZW1UeXBlKSB7Ci0JCV9jbnR4dF9pdGVtX3R5cGUgPSBjbnR4dEl0ZW1UeXBlOwotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gZ2V0X2NvbGxlY3Rpb25zKCkgewotCQlyZXR1cm4gX2NvbGxlY3Rpb25zOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldF9jb2xsZWN0aW9ucyhNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gY29sbGVjdGlvbnMpIHsKLQkJX2NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGUoKSB7Ci0JCXJldHVybiBfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlKFN0cmluZyBkZWZhdWx0Q29sbGVjdGlvblR5cGUpIHsKLQkJX2RlZmF1bHRfY29sbGVjdGlvbl90eXBlID0gZGVmYXVsdENvbGxlY3Rpb25UeXBlOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZTsKLQotCS8vIFZhcmlhYmxlcyBhcmUgaGVsZCBsaWtlIHRoaXM6Ci0JLy8gQSBzdGFjayBvZiBtYXBzIG9mIHZhcmlhYmxlcy4uLi4KLQkvLyBvciBpbiBtb3JlIGh1bWFuIHRlcm1zOgotCS8vIGEgc3RhY2sgb2Ygc2NvcGVzIGVhY2ggY29udGFpbmluZyBhIHN5bWJvbCB0YWJsZQotCS8vIFhYWCB2YXJzIGNvbnRhaW4gQW55VHlwZS4uLiBzaG91bGQgdGhleSBiZSBSZXN1bHRTZXF1ZW5jZSA/Ci0JcHJpdmF0ZSBTdGFjayBfc2NvcGVzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHNjaGVtYQotCSAqICAgICAgICAgICAgU2NoZW1hIGluZm9ybWF0aW9uIGZyb20gZG9jdW1lbnQuIE1heSBiZSBudWxsLgotCSAqLwotCXB1YmxpYyBEZWZhdWx0U3RhdGljQ29udGV4dChYU01vZGVsIHNjaGVtYSkgewotCQlfeHBhdGgxX2NvbXBhdGlibGUgPSBmYWxzZTsKLQotCQlfZGVmYXVsdF9uYW1lc3BhY2UgPSBudWxsOwotCQlfZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2UgPSBGbkZ1bmN0aW9uTGlicmFyeS5YUEFUSF9GVU5DVElPTlNfTlM7Ci0JCV9zY2hlbWEgPSBzY2hlbWE7Ci0JCWJ1aWx0aW5UeXBlcyA9IG5ldyBYU0N0ckxpYnJhcnkoKTsKLQotCQlfZnVuY3Rpb25zID0gbmV3IEhhc2hNYXAoMjApOyAvLyBhbGxvdyBudWxsIGtleXM6IG51bGwgbmFtZXNwYWNlCi0JCV9uYW1lc3BhY2VzID0gbmV3IEhhc2hNYXAoMjApOyAvLyBkaXR0bwotCi0JCV9jbnR4dF9pdGVtX3R5cGUgPSBudWxsOwotCi0JCV9zY29wZXMgPSBuZXcgU3RhY2soKTsKLQkJbmV3X3Njb3BlKCk7Ci0KLQkJaWYgKF9zY2hlbWEgIT0gbnVsbCkKLQkJCWluaXRfc2NoZW1hKHNjaGVtYSk7Ci0KLQkJX2Jhc2VfdXJpID0gbmV3IFhTQW55VVJJKCk7Ci0KLQkJLy8gWFhYIHdpbGRjYXJkIHByZWZpeAotCQlhZGRfbmFtZXNwYWNlKCIqIiwgIioiKTsKLQotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzY2hlbWEtbGVzcyBkb2N1bWVudHMuCi0JICogCi0JICovCi0JcHVibGljIERlZmF1bHRTdGF0aWNDb250ZXh0KCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0X3NjaGVtYShYU01vZGVsIHNjaGVtYSkgewotCX0KLQotCS8qKgotCSAqIHJldHVybiB0aGUgYmFzZSBVUkkKLQkgKiAKLQkgKiBAcmV0dXJuIFhTQW55VVJJCi0JICovCi0JcHVibGljIFhTQW55VVJJIGJhc2VfdXJpKCkgewotCQlyZXR1cm4gX2Jhc2VfdXJpOwotCX0KLQotCS8qKgotCSAqIGlzIGl0IHhwYXRoMSBjb21wYXRpYmxlPwotCSAqIAotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIHhwYXRoMV9jb21wYXRpYmxlKCkgewotCQlyZXR1cm4gX3hwYXRoMV9jb21wYXRpYmxlOwotCX0KLQotCS8qKgotCSAqIGFkZHMgbmFtZXNwYWNlCi0JICogCi0JICogQHBhcmFtIHByZWZpeAotCSAqICAgICAgICAgICAgbmFtZXNwYWNlIHByZWZpeAotCSAqIEBwYXJhbSBuYW1lc3BhY2UKLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZSBVUkkKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfbmFtZXNwYWNlKFN0cmluZyBwcmVmaXgsIFN0cmluZyBuYW1lc3BhY2UpIHsKLQkJLy8gWFhYIGFyZSB0aGVzZSByZXNlcnZlZCA/Ci0JCS8vIHJlZmVyIHRvIGZvcm1hbCBzZW1hbnRpY3Mgc2VjdGlvbiAyLjUuMQotCQlpZiAoKHByZWZpeCAhPSBudWxsKSAmJiAocHJlZml4LmVxdWFscygiZnMiKSB8fCBwcmVmaXguZXF1YWxzKCJvcCIpIHx8IHByZWZpeC5lcXVhbHMoImRtIikpKQotCQkJcmV0dXJuOwotCQkgaWYgKHByZWZpeCA9PSBudWxsKSB7Ci0JCSAgIF9kZWZhdWx0X25hbWVzcGFjZSA9IG5hbWVzcGFjZTsgCi0JCSAgIF9uYW1lc3BhY2VzLnB1dCgiIiwgbmFtZXNwYWNlKTsKLQkJIH0gZWxzZSB7Ci0JCSAgIF9uYW1lc3BhY2VzLnB1dChwcmVmaXgsIG5hbWVzcGFjZSk7Ci0JCSB9Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgd2hlbiBvbmUgaXMgbm90IGFsbG9jYXRlZAotCSAqIAotCSAqIEByZXR1cm4gc3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBkZWZhdWx0X25hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIF9kZWZhdWx0X25hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRlZmF1bCBmdW5jdGlvbiBuYW1lc3BhY2UKLQkgKiAKLQkgKiBAcmV0dXJuIHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2UoKSB7Ci0JCXJldHVybiBfZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2U7Ci0JfQotCi0JLyoqCi0JICogQWRkcyBhIGZ1bmN0aW9uIHRvIHRoZSBsaWJyYXJ5LgotCSAqIAotCSAqIEBwYXJhbSBmbAotCSAqICAgICAgICAgICAgRnVuY3Rpb24gbGlicmFyeSB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkX2Z1bmN0aW9uX2xpYnJhcnkoRnVuY3Rpb25MaWJyYXJ5IGZsKSB7Ci0JCWZsLnNldF9zdGF0aWNfY29udGV4dCh0aGlzKTsKLQkJX2Z1bmN0aW9ucy5wdXQoZmwubmFtZXNwYWNlKCksIGZsKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3IgZXhpc3RhbmNlIG9mIGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBmdW5jdGlvbiBuYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgZnVuY3Rpb24uCi0JICogQHJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIGV4aXN0cy4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGZ1bmN0aW9uX2V4aXN0cyhRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJU3RyaW5nIG5zID0gbmFtZS5uYW1lc3BhY2UoKTsKLQkJaWYgKCFfZnVuY3Rpb25zLmNvbnRhaW5zS2V5KG5zKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlGdW5jdGlvbkxpYnJhcnkgZmwgPSAoRnVuY3Rpb25MaWJyYXJ5KSBfZnVuY3Rpb25zLmdldChucyk7Ci0KLQkJcmV0dXJuIGZsLmZ1bmN0aW9uX2V4aXN0cyhuYW1lLCBhcml0eSk7Ci0JfQotCi0JcHJvdGVjdGVkIEZ1bmN0aW9uIGZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlTdHJpbmcgbnMgPSBuYW1lLm5hbWVzcGFjZSgpOwotCQlpZiAoIV9mdW5jdGlvbnMuY29udGFpbnNLZXkobnMpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJRnVuY3Rpb25MaWJyYXJ5IGZsID0gKEZ1bmN0aW9uTGlicmFyeSkgX2Z1bmN0aW9ucy5nZXQobnMpOwotCi0JCXJldHVybiBmbC5mdW5jdGlvbihuYW1lLCBhcml0eSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQ3JlYXRlcyBhbiBhdG9taWMgZnJvbSBhIHNwZWNpZmljIHR5cGUgbmFtZSBpbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdAotCSAqIHZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBuYW1lIG9mIHR5cGUgdG8gY3JlYXRlCi0JICogQHJldHVybiBBdG9taWMgdHlwZSBvZiBkZXNpcmVkIHR5cGUuCi0JICovCi0JcHVibGljIEFueUF0b21pY1R5cGUgbWFrZV9hdG9taWMoUU5hbWUgbmFtZSkgewotCQlTdHJpbmcgbnMgPSBuYW1lLm5hbWVzcGFjZSgpOwotCi0JCWlmICghX2Z1bmN0aW9ucy5jb250YWluc0tleShucykpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlGdW5jdGlvbkxpYnJhcnkgZmwgPSAoRnVuY3Rpb25MaWJyYXJ5KSBfZnVuY3Rpb25zLmdldChucyk7Ci0KLQkJaWYgKCEoZmwgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvckZMKSkKLQkJCXJldHVybiBudWxsOwotCi0JCUNvbnN0cnVjdG9yRkwgY2ZsID0gKENvbnN0cnVjdG9yRkwpIGZsOwotCi0JCXJldHVybiBjZmwuYXRvbWljX3R5cGUobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lLCBTdHJpbmcgZGVmKSB7Ci0JCVN0cmluZyBwcmVmaXggPSBuYW1lLnByZWZpeCgpOwotCi0JCWlmIChwcmVmaXggPT0gbnVsbCkgewotCQkJbmFtZS5zZXRfbmFtZXNwYWNlKGRlZik7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCWlmICghcHJlZml4X2V4aXN0cyhwcmVmaXgpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCW5hbWUuc2V0X25hbWVzcGFjZShyZXNvbHZlX3ByZWZpeChwcmVmaXgpKTsKLQkJcmV0dXJuIHRydWU7Ci0KLQl9Ci0KLQkvKioKLQkgKiBFeHBhbmRzIHRoZSBxbmFtZSdzIHByZWZpeCBpbnRvIGEgbmFtZXNwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuCi0JICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kX3FuYW1lKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIGV4cGFuZF9xbmFtZShuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBFeHBhbmRzIGEgcW5hbWUgYW5kIHVzZXMgdGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlIGlmIHVucHJlZml4ZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHFuYW1lIHRvIGV4cGFuZC4KLQkgKiBAcmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBleHBhbmRfZnVuY3Rpb25fcW5hbWUoUU5hbWUgbmFtZSkgewotCQlyZXR1cm4gZXhwYW5kX3FuYW1lKG5hbWUsIGRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlKCkpOwotCX0KLQotCS8qKgotCSAqIEV4cGFuZHMgYSBxbmFtZSBhbmQgdXNlcyB0aGUgZGVmYXVsdCB0eXBlL2VsZW1lbnQgbmFtZXNwYWNlIGlmCi0JICogdW5wcmVmaXhlZC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgcW5hbWUgdG8gZXhwYW5kLgotCSAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9lbGVtX3R5cGVfcW5hbWUoUU5hbWUgbmFtZSkgewotCQlyZXR1cm4gZXhwYW5kX3FuYW1lKG5hbWUsIGRlZmF1bHRfbmFtZXNwYWNlKCkpOwotCX0KLQotCS8qKgotCSAqIAotCSAqIENoZWNrcyB3aGV0aGVyIHRoZSB0eXBlIGlzIGRlZmluZWQgaW4gdGhlIGluIHNjb3BlIHNjaGVtYSBkZWZpbml0aW9ucy4KLQkgKiAKLQkgKiBAcGFyYW0gcW5hbWUKLQkgKiAgICAgICAgICAgIHR5cGUgbmFtZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdHlwZSBpcyBkZWZpbmVkLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHR5cGVfZGVmaW5lZChRTmFtZSBxbmFtZSkgewotCQkKLQkJaWYgKF9zY2hlbWEgPT0gbnVsbCkgewotCQkJcmV0dXJuIGJ1aWx0aW5UeXBlcy5hdG9taWNfdHlwZShxbmFtZSkgIT0gbnVsbDsKLQkJfQotCi0JCVhTVHlwZURlZmluaXRpb24gdGQgPSBfc2NoZW1hLmdldFR5cGVEZWZpbml0aW9uKHFuYW1lLmxvY2FsKCksIHFuYW1lCi0JCQkJLm5hbWVzcGFjZSgpKTsKLQkJaWYgKHRkID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHdoZXRoZXIgdGhlIHR5cGUgaXMgZGVmaW5lZCBpbiB0aGUgaW4gc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zLgotCSAqIAotCSAqIEBwYXJhbSBucwotCSAqICAgICAgICAgICAgbmFtZXNwYWNlIG9mIHR5cGUuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIG5hbWUgb2YgdHlwZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdHlwZSBpcyBkZWZpbmVkLgotCSAqIAotCSAqLwotCXB1YmxpYyBib29sZWFuIHR5cGVfZGVmaW5lZChTdHJpbmcgbnMsIFN0cmluZyB0eXBlKSB7Ci0JCXJldHVybiB0eXBlX2RlZmluZWQobmV3IFFOYW1lKG5zLCB0eXBlKSk7Ci0JfQotCi0JLyoqCi0JICogaXMgZWxlbWVudCBkZWNsYXJlZD8KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbQotCSAqICAgICAgICAgICAgbmFtZSBvZiBlbGVtZW50LgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGRlY2xhcmVkLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVsZW1lbnRfZGVjbGFyZWQoUU5hbWUgZWxlbSkgewotCQlpZiAoX3NjaGVtYSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVhTRWxlbWVudERlY2xhcmF0aW9uIGVkID0gX3NjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbS5sb2NhbCgpLAotCQkJCWVsZW0ubmFtZXNwYWNlKCkpOwotCi0JCWlmIChlZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIE9idGFpbnMgc2NoZW1hIGRlZmluaXRpb24gb2YgdGhlIHR5cGUgb2YgYW4gZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbQotCSAqICAgICAgICAgICAgbmFtZSBvZiBlbGVtZW50IHdobydzIHR5cGUgaXMgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIHNjaGVtYSBkZWZpbml0aW9uIG9mIHR5cGUKLQkgKi8KLQlwdWJsaWMgWFNUeXBlRGVmaW5pdGlvbiBlbGVtZW50X3R5cGVfZGVmaW5pdGlvbihRTmFtZSBlbGVtKSB7Ci0JCVhTRWxlbWVudERlY2xhcmF0aW9uIGVkID0gX3NjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbS5sb2NhbCgpLAotCQkJCWVsZW0ubmFtZXNwYWNlKCkpOwotCi0JCXJldHVybiBlZC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgaXMgaW4gdGhlIGluLXNjb3BlIHNjaGVtYSBkZWZpbml0aW9ucy4KLQkgKiAKLQkgKiBAcGFyYW0gYXR0cgotCSAqICAgICAgICAgICAgbmFtZSBvZiBhdHRyaWJ1dGUuCi0JICogQHJldHVybiB0cnVlIGlmIGF0dHJpYnV0ZSBpcyBkZWNsYXJlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBhdHRyaWJ1dGVfZGVjbGFyZWQoUU5hbWUgYXR0cikgewotCQlpZiAoX3NjaGVtYSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVhTQXR0cmlidXRlRGVjbGFyYXRpb24gYWQgPSBfc2NoZW1hLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKGF0dHIKLQkJCQkubG9jYWwoKSwgYXR0ci5uYW1lc3BhY2UoKSk7Ci0KLQkJaWYgKGFkID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgYXR0cmlidXRlIGluIGFuIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW0KLQkgKiAgICAgICAgICAgIGVsZW1lbnQgbmFtZQotCSAqIEByZXR1cm4gc2NoZW1hIGRlZmluaXRpb24gb2YgdGhlIHR5cGUgb2YgdGhlIGF0dHJpYnV0ZQotCSAqLwotCXB1YmxpYyBYU1R5cGVEZWZpbml0aW9uIGF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24oUU5hbWUgZWxlbSkgewotCQlYU0F0dHJpYnV0ZURlY2xhcmF0aW9uIGFkID0gX3NjaGVtYS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihlbGVtCi0JCQkJLmxvY2FsKCksIGVsZW0ubmFtZXNwYWNlKCkpOwotCi0JCXJldHVybiBhZC5nZXRUeXBlRGVmaW5pdGlvbigpOwotCX0KLQotCS8qKgotCSAqIGRvZXMgcHJlZml4IGV4aXN0PwotCSAqIAotCSAqIEBwYXJhbSBwcmVmCi0JICogICAgICAgICAgICBwcmVmaXggbmFtZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgaXQgZG9lcy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcmVmaXhfZXhpc3RzKFN0cmluZyBwcmVmKSB7Ci0JCXJldHVybiBfbmFtZXNwYWNlcy5jb250YWluc0tleShwcmVmKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXNvbHZlcyBhIHByZWZpeCBpbnRvIGEgbmFtZXNwYWNlIFVSSS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJlZgotCSAqICAgICAgICAgICAgcHJlZml4IG5hbWUKLQkgKiBAcmV0dXJuIHVyaSBwcmVmaXggaXMgcmVzb2x2ZWQgdG8gb3IgbnVsbC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlc29sdmVfcHJlZml4KFN0cmluZyBwcmVmKSB7Ci0JCXJldHVybiAoU3RyaW5nKSBfbmFtZXNwYWNlcy5nZXQocHJlZik7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIGlmIGFuIFhNTCBub2RlIGRlcml2ZXMgZnJvbSBhIHNwZWNpZmllZCB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgbm9kZSBhY3R1YWwgdHlwZQotCSAqIEBwYXJhbSBldAotCSAqICAgICAgICAgICAgbmFtZSBvZiBleHBlY3RlZCB0eXBlCi0JICogQHJldHVybiB0cnVlIGlmIGEgZGVyaXZhdGlvbiBleGlzdHMKLQkgKi8KLQkvLyBYWFggZml4IHRoaXMKLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVzX2Zyb20oTm9kZVR5cGUgYXQsIFFOYW1lIGV0KSB7Ci0JCUl0ZW1QU1ZJIHBzdmkgPSAoSXRlbVBTVkkpIGF0Lm5vZGVfdmFsdWUoKTsKLQkJWFNUeXBlRGVmaW5pdGlvbiB0ZCA9IHBzdmkuZ2V0VHlwZURlZmluaXRpb24oKTsKLQotCQlzaG9ydCBtZXRob2QgPSAwOwotCi0JCS8vIFhYWAotCQlpZiAoIWV0LmV4cGFuZGVkKCkpIHsKLQkJCVN0cmluZyBwcmUgPSBldC5wcmVmaXgoKTsKLQotCQkJaWYgKHByZSAhPSBudWxsKSB7Ci0JCQkJaWYgKHByZWZpeF9leGlzdHMocHJlKSkgewotCQkJCQlldC5zZXRfbmFtZXNwYWNlKHJlc29sdmVfcHJlZml4KHByZSkpOwotCQkJCX0gZWxzZQotCQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQl9IGVsc2UKLQkJCQlldC5zZXRfbmFtZXNwYWNlKGRlZmF1bHRfbmFtZXNwYWNlKCkpOwotCQl9Ci0KLQkJcmV0dXJuIHRkLmRlcml2ZWRGcm9tKGV0Lm5hbWVzcGFjZSgpLCBldC5sb2NhbCgpLCBtZXRob2QpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyBpZiBhbiBYTUwgbm9kZSBkZXJpdmVzIGZyb20gYSBzcGVjaWZpZWQgdHlwZSBkZWZpbml0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgbm9kZSBhY3R1YWwgdHlwZS4KLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIHR5cGUgZGVmaW5pdGlvbiBvZiBleHBlY3RlZCB0eXBlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGRlcml2ZXNfZnJvbShOb2RlVHlwZSBhdCwgWFNUeXBlRGVmaW5pdGlvbiBldCkgewotCQlJdGVtUFNWSSBwc3ZpID0gKEl0ZW1QU1ZJKSBhdC5ub2RlX3ZhbHVlKCk7Ci0JCVhTVHlwZURlZmluaXRpb24gdGQgPSBwc3ZpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0KLQkJc2hvcnQgbWV0aG9kID0gMDsKLQotCQlyZXR1cm4gdGQuZGVyaXZlZEZyb21UeXBlKGV0LCBtZXRob2QpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgc2NvcGUgbGV2ZWwuCi0JICovCi0JLy8gdmFyaWFibGUgc3R1ZmYKLQlwdWJsaWMgdm9pZCBuZXdfc2NvcGUoKSB7Ci0JCU1hcCB2YXJzID0gbmV3IEhhc2hNYXAoKTsKLQotCQlfc2NvcGVzLnB1c2godmFycyk7Ci0JfQotCi0JLyoqCi0JICogRGVzdHJveXMgYSBzY29wZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZXN0cm95X3Njb3BlKCkgewotCQlfc2NvcGVzLnBvcCgpOwotCX0KLQotCXByaXZhdGUgTWFwIGN1cnJlbnRfc2NvcGUoKSB7Ci0JCXJldHVybiAoTWFwKSBfc2NvcGVzLnBlZWsoKTsKLQl9Ci0KLQkvKioKLQkgKiBkb2VzIHZhcmlhYmxlIGV4aXN0IGluIGN1cnJlbnQgc2NvcGUgPwotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIGl0IGRvZXMuCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFyaWFibGVfZXhpc3RzKFFOYW1lIHZhcikgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJcmV0dXJuIHNjb3BlLmNvbnRhaW5zS2V5KHZhcik7Ci0JfQotCi0JLyoqCi0JICogY2hlY2tzIHRvIHNlZSBpZiB2YXJpYWJsZSBpcyBpbiBzY29wZQotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIHZhcmlhYmxlIGlzIGluIGN1cnJlbnQgb3IgYWJvdmUgc2NvcGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFyaWFibGVfaW5fc2NvcGUoUU5hbWUgdmFyKSB7Ci0JCS8vIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLi4KLQkJZm9yIChJdGVyYXRvciBpID0gX3Njb3Blcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU1hcCBzY29wZSA9IChNYXApIGkubmV4dCgpOwotCi0JCQlpZiAoc2NvcGUuY29udGFpbnNLZXkodmFyKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQWRkcyBhIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUuCi0JICogCi0JICogdXNlZCBmb3Igc3RhdGljIGNoZWNraW5nLi4uLiBpLmUuIHByZXNlbmNlIG9mIHZhcmlhYmxlcwotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF92YXJpYWJsZShRTmFtZSB2YXIpIHsKLQkJc2V0X3ZhcmlhYmxlKHZhciwgKEFueVR5cGUpIG51bGwpOwotCX0KLQotCS8vIG92ZXJ3cml0ZXMsIG9yIGNyZWF0ZXMKLQlwcm90ZWN0ZWQgdm9pZCBzZXRfdmFyaWFibGUoUU5hbWUgdmFyLCBBbnlUeXBlIHZhbCkgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJc2NvcGUucHV0KHZhciwgdmFsKTsKLQl9Ci0JCi0JLyoKLQkgKiBTZXQgYSBYUGF0aDIgc2VxdWVuY2UgaW50byBhIHZhcmlhYmxlLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldF92YXJpYWJsZShRTmFtZSB2YXIsIFJlc3VsdFNlcXVlbmNlIHZhbCkgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJc2NvcGUucHV0KHZhciwgdmFsKTsKLQl9Ci0JCi0KLQkvKioKLQkgKiBEZWxldGVzIGEgdmFyaWFibGUgZnJvbSBjdXJyZW50IHNjb3BlLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUgdG8gZGVsZXRlLgotCSAqIEByZXR1cm4gZmFsc2UgaWYgdmFyaWFibGUgZG9lc24ndCBleGlzdC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZWxfdmFyaWFibGUoUU5hbWUgdmFyKSB7Ci0JCWlmICghdmFyaWFibGVfZXhpc3RzKHZhcikpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJTWFwIHNjb3BlID0gY3VycmVudF9zY29wZSgpOwotCQlpZiAoc2NvcGUucmVtb3ZlKHZhcikgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0KLQl9Ci0KLQkvLyByZXR1cm4gbnVsbCBpZiAibm90IGZvdW5kIgotCXByb3RlY3RlZCBPYmplY3QgZ2V0X3ZhcihRTmFtZSB2YXIpIHsKLQkJLy8gZ28gdGhyb3VnaCB0aGUgc3RhY2sgaW4gcmV2ZXJzZSBvcmRlci4uLiByZXZlcnNlIGl0ZXJhdG9ycwotCQkvLyB3b3VsZCBiZSBuaWNlIGhlcmUuLi4KLQotCQlpbnQgcG9zID0gX3Njb3Blcy5zaXplKCk7Ci0JCXdoaWxlICgtLXBvcyA+PSAwKSB7Ci0JCQlNYXAgc2NvcGUgPSAoTWFwKSBfc2NvcGVzLmdldChwb3MpOwotCi0JCQkvLyBnb3RjaGEKLQkJCWlmIChzY29wZS5jb250YWluc0tleSh2YXIpKSB7Ci0JCQkJcmV0dXJuIHNjb3BlLmdldCh2YXIpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogRGVidWcgZnVuY3Rpb24gd2hpY2ggd2lsbCBwcmludCBjdXJyZW50IHZhcmlhYmxlIHNjb3BlcyBhbmQgaW5mby4KLQkgKi8KLQkvLyBkZWJ1ZyBmdW5jdGlvbnMKLQlwdWJsaWMgdm9pZCBkZWJ1Z19wcmludF92YXJzKCkgewotCQlpbnQgbGV2ZWwgPSAwOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IF9zY29wZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlNYXAgc2NvcGUgPSAoTWFwKSBpLm5leHQoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY29wZSBsZXZlbCAiICsgbGV2ZWwpOwotLy8JCQlzY29wZS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0JCQlmb3IgKEl0ZXJhdG9yIGogPSBzY29wZS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykgewotCQkJCVFOYW1lIHZhcm5hbWUgPSAoUU5hbWUpIGoubmV4dCgpOwotCi0JCQkJQW55VHlwZSB2YWwgPSAoQW55VHlwZSkgc2NvcGUuZ2V0KHZhcm5hbWUpOwotCi0JCQkJU3RyaW5nIHN0cmluZ192YWwgPSAibnVsbCI7Ci0KLQkJCQlpZiAodmFsICE9IG51bGwpCi0JCQkJCXN0cmluZ192YWwgPSB2YWwuc3RyaW5nX3ZhbHVlKCk7Ci0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlZhcm5hbWU6ICIgKyB2YXJuYW1lLnN0cmluZygpCi0JCQkJCQkrICIgZXhwYW5kZWQ9IiArIHZhcm5hbWUuZXhwYW5kZWQoKSArICIgVmFsdWU6ICIKLQkJCQkJCSsgc3RyaW5nX3ZhbCk7Ci0KLQkJCX0KLQotCQkJbGV2ZWwrKzsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgQmFzZSBVUkkgZm9yIHRoZSBzdGF0aWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfYmFzZV91cmkoU3RyaW5nIGJhc2V1cmkpIHsKLQkJX2Jhc2VfdXJpID0gbmV3IFhTQW55VVJJKGJhc2V1cmkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldF9kb2N1bWVudHMoTWFwIF9kb2N1bWVudHMpIHsKLQkJdGhpcy5fZG9jdW1lbnRzID0gX2RvY3VtZW50czsKLQl9Ci0KLQlwdWJsaWMgTWFwIGdldF9kb2N1bWVudHMoKSB7Ci0JCXJldHVybiBfZG9jdW1lbnRzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudEF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudEF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlYTJlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0Rlc2NlbmRhbnRBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogVGhlIGRlc2NlbmRhbnQgYXhpcyBjb250YWlucyB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZQotICovCi1wdWJsaWMgY2xhc3MgRGVzY2VuZGFudEF4aXMgZXh0ZW5kcyBDaGlsZEF4aXMgewotCi0JLyoqCi0JICogVXNpbmcgdGhlIGNvbnRleHQgbm9kZSByZXRyaWV2ZSB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb250ZXh0IG5vZGUuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJLy8gZ2V0IHRoZSBjaGlsZHJlbgotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IHN1cGVyLml0ZXJhdGUobm9kZSwgZGMpOwotCi0JCUFycmF5TGlzdCBkZXNjZW5kYW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkvLyBnZXQgZGVzY2VuZGFudHMgb2YgYWxsIGNoaWxkcmVuCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgbiA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWRlc2NlbmRhbnRzLmFkZChpdGVyYXRlKG4sIGRjKSk7Ci0JCX0KLQotCQkvLyBhZGQgZGVzY2VuZGFudHMgdG8gcmVzdWx0Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGRlc2NlbmRhbnRzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgZGVzYyA9IChSZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCk7Ci0KLQkJCXJzLmNvbmNhdChkZXNjKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudE9yU2VsZkF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudE9yU2VsZkF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJjMDI0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0Rlc2NlbmRhbnRPclNlbGZBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogVGhlIGRlc2NlbmRhbnQtb3Itc2VsZiBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBkZXNjZW5kYW50cyBvZgotICogdGhlIGNvbnRleHQgbm9kZS4KLSAqLwotLy8gbXVsdGlwbGUgaW5oZXJldGFuY2UgbWlnaHQgYmUgY29vbCBoZXJlID1ECi1wdWJsaWMgY2xhc3MgRGVzY2VuZGFudE9yU2VsZkF4aXMgZXh0ZW5kcyBGb3J3YXJkQXhpcyB7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBjb250ZXh0IG5vZGUKLQkgKiBpdHNlbGYuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gVGhlIGNvbnRleHQgbm9kZSBhbmQgaXRzIGRlc2NlbmRhbnRzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBhZGQgc2VsZgotCQlycy5hZGQobm9kZSk7Ci0KLQkJLy8gYWRkIGRlc2NlbmRhbnRzCi0JCURlc2NlbmRhbnRBeGlzIGRhID0gbmV3IERlc2NlbmRhbnRBeGlzKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGRlc2MgPSBkYS5pdGVyYXRlKG5vZGUsIGRjKTsKLQkJcnMuY29uY2F0KGRlc2MpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9jdXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9jdXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4MDY5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvY3VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODE5MzggLSBoYW5kbGUgbWlzc2luZyBmb2N1cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIHNldCB0aGUgZm9jdXMgZnJvbSBhIHJlc3VsdCBzZXF1ZW5jZQotICovCi1wdWJsaWMgY2xhc3MgRm9jdXMgewotCXByaXZhdGUgaW50IF9jcDsgLy8gY29udGV4dCBwb3NpdGlvbgotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgX3JzOyAvLyBhbGwgaXRlbXMgaW4gY29udGV4dAotCi0JLyoqCi0JICogU2V0cyB0aGUgX3JzIHRvIHJzIGFuZCBjb250ZXh0IHBvc2l0aW9uIHRvIDEuCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBpcyBhIFJlc3VsdFNlcXVlbmNlIGFuZCBpcyBzZXQgdG8gX3JzLgotCSAqLwotCXB1YmxpYyBGb2N1cyhSZXN1bHRTZXF1ZW5jZSBycykgewotCQlfcnMgPSByczsKLQkJX2NwID0gMTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgcHJldmlvdXMgaXRlbSBmcm9tIGN1cnJlbnQgY29udGV4dCBwb3NpdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBpdGVtIGZyb20gX3JzLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIGNvbnRleHQgaXRlbS4KLQkgKi8KLQlwdWJsaWMgQW55VHlwZSBjb250ZXh0X2l0ZW0oKSB7Ci0JCS8vIGlkZXhlcyBzdGFydCBhdCAwCi0JCWlmIChfY3AgPiBfcnMuc2l6ZSgpKSByZXR1cm4gbnVsbDsKLQkJcmV0dXJuIF9ycy5nZXQoX2NwIC0gMSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHRvIHNlZSBpZiBwb3NzaWJsZSB0byBhZHZhbmNlIHJzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGJvb2xlYW4uCi0JICovCi0JcHVibGljIGJvb2xlYW4gYWR2YW5jZV9jcCgpIHsKLQkJaW50IHNpemU7Ci0KLQkJLy8gY2hlY2sgaWYgd2UgY2FuIGFkdmFuY2UKLQkJc2l6ZSA9IF9ycy5zaXplKCk7Ci0JCWlmIChfY3AgPT0gc2l6ZSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlfY3ArKzsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogcmV0dXJucyBhbiBpbnRlZ2VyIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgcnMuCi0JICovCi0JcHVibGljIGludCBwb3NpdGlvbigpIHsKLQkJcmV0dXJuIF9jcDsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBpdGVtIGluIHJzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNpemUgb2YgcnMuCi0JICovCi0JcHVibGljIGludCBsYXN0KCkgewotCQlyZXR1cm4gX3JzLnNpemUoKTsKLQl9Ci0KLQkvKioKLQkgKiBzZXRzIHRoZSBwb3NpdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcAotCSAqICAgICAgICAgICAgaXMgdGhlIHBvc2l0aW9uIHRoYXQgaXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9wb3NpdGlvbihpbnQgcCkgewotCQlfY3AgPSBwOyAvLyBYWFggbm8gY2hlY2tzCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvbGxvd2luZ0F4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViNGIzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvbGxvd2luZ0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIHRoZSBmb2xsb3dpbmcgYXhpcyBjb250YWlucyB0aGUgY29udGV4dCBub2RlJ3MgZm9sbG93aW5nIHNpYmxpbmdzLCB0aG9zZQotICogY2hpbGRyZW4gb2YgdGhlIGNvbnRleHQgbm9kZSdzIHBhcmVudCB0aGF0IG9jY3VyIGFmdGVyIHRoZSBjb250ZXh0IG5vZGUgaW4KLSAqIGRvY3VtZW50IG9yZGVyLgotICovCi1wdWJsaWMgY2xhc3MgRm9sbG93aW5nQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgcmVzdWx0IG9mIEZvbGxvd2luZ0F4aXMgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgRm9sbG93aW5nQXhpcy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBEeW5hbWljQ29udGV4dCBkYykgewotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIFhYWCBzaG91bGQgYmUgcm9vdC4uLiBub3QgcGFyZW50ISEhIHJlYWQgdGhlIHNwZWMuLi4uIEJVRyBCVUcKLQkJLy8gQlVHIExBTUUgTEFNRS4uLi4KLQotCQkvLyBnZXQgdGhlIHBhcmVudAotCQlOb2RlVHlwZSBwYXJlbnQgPSBudWxsOwotCQlQYXJlbnRBeGlzIHBhID0gbmV3IFBhcmVudEF4aXMoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBwYS5pdGVyYXRlKG5vZGUsIGRjKTsKLQkJaWYgKHJzLnNpemUoKSA9PSAxKQotCQkJcGFyZW50ID0gKE5vZGVUeXBlKSBycy5nZXQoMCk7Ci0KLQkJLy8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2YgdGhpcyBub2RlLCBhbmQgYWRkIHRoZW0KLQkJRm9sbG93aW5nU2libGluZ0F4aXMgZnNhID0gbmV3IEZvbGxvd2luZ1NpYmxpbmdBeGlzKCk7Ci0JCXJzID0gZnNhLml0ZXJhdGUobm9kZSwgZGMpOwotCQlyZXN1bHQuY29uY2F0KHJzKTsKLQotCQkvLyBmb3IgZWFjaCBzaWJsaW5nLCBnZXQgYWxsIGl0cyBkZXNjZW5kYW50cwotCQlEZXNjZW5kYW50QXhpcyBkYSA9IG5ldyBEZXNjZW5kYW50QXhpcygpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGRlc2MgPSBkYS5pdGVyYXRlKChOb2RlVHlwZSkgaS5uZXh0KCksIGRjKTsKLQotCQkJLy8gYWRkIGFsbCBkZXNjZW5kYW50cyB0byB0aGUgcmVzdWx0Ci0JCQlyZXN1bHQuY29uY2F0KGRlc2MpOwotCQl9Ci0KLQkJLy8gaWYgd2UgZ290IGEgcGFyZW50LCB3ZSBnb3R0YSByZXBlYXQgdGhlIHN0b3J5IGZvciB0aGUgcGFyZW50Ci0JCS8vIGFuZCBhZGQgdGhlIHJlc3VsdHMKLQkJaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0JCQlycyA9IGl0ZXJhdGUocGFyZW50LCBkYyk7Ci0JCQlyZXN1bHQuY29uY2F0KHJzKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nU2libGluZ0F4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nU2libGluZ0F4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRjYzc4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvbGxvd2luZ1NpYmxpbmdBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogVGhlIGZvbGxvd2luZy1zaWJsaW5nIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSdzIGZvbGxvd2luZyBzaWJsaW5ncywKLSAqIHRob3NlIGNoaWxkcmVuIG9mIHRoZSBjb250ZXh0IG5vZGUncyBwYXJlbnQgdGhhdCBvY2N1ciBhZnRlciB0aGUgY29udGV4dCBub2RlCi0gKiBpbiBkb2N1bWVudCBvcmRlcjsgaWYgdGhlIGNvbnRleHQgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgbm9kZW9yIG5hbWVzcGFjZSBub2RlLAotICogdGhlIGZvbGxvd2luZy1zaWJsaW5nIGF4aXMgaXMgZW1wdHkuCi0gKi8KLXB1YmxpYyBjbGFzcyBGb2xsb3dpbmdTaWJsaW5nQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgcmVzdWx0IG9mIEZvbGxvd2luZ1NpYmxpbmdBeGlzIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIEZvbGxvd2luZ1NpYmxpbmdBeGlzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCS8vIFhYWCBjaGVjayBmb3IgYXR0cmlidXRlIC8gbmFtZXNwYWNlIG5vZGUuLi4gaWYgc28gcmV0dXJuCi0JCS8vIGVtcHR5IHNlcXVlbmNlCi0KLQkJLy8gZ2V0IHRoZSBwYXJlbnQKLQkJUGFyZW50QXhpcyBwYSA9IG5ldyBQYXJlbnRBeGlzKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gcGEuaXRlcmF0ZShub2RlLCBkYyk7Ci0KLQkJLy8gWFhYOiBpZiBubyBwYXJlbnQsIG91dCBvZiBsdWNrIGkgZ3Vlc3MKLQkJaWYgKHJzLnNpemUoKSA9PSAwKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIGdldCB0aGUgY2hpbGRyZW4gb2YgdGhlIHBhcmVudCBbc2libGluZ3NdCi0JCUNoaWxkQXhpcyBjYSA9IG5ldyBDaGlsZEF4aXMoKTsKLQkJTm9kZVR5cGUgcGFyZW50ID0gKE5vZGVUeXBlKSBycy5nZXQoMCk7Ci0JCXJzID0gY2EuaXRlcmF0ZShwYXJlbnQsIGRjKTsKLQotCQkvLyBnZXQgdGhlIGZvbGxvd2luZyBzaWJsaW5ncwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG4gPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQkvLyBpZiB3ZSBoYXZlbid0IGZvdW5kIHRoZSBub2RlIHlldCwgcmVtb3ZlIGVsZW1lbnRzCi0JCQkvLyBbcHJlY2lkaW5nIHNpYmxpbmdzXQotCQkJLy8gbm90ZTogaWYgbm9kZSBpcyBmaXJzdC4uLiBpdHMgb2suLi4gY3V6IHdlIGRvbid0Ci0JCQkvLyBpbmNsdWRlIG5vZGUuLi4KLQkJCWkucmVtb3ZlKCk7Ci0KLQkJCS8vIGNoZWNrIHJlZmVyZW5jZSBvZiBET00gb2JqZWN0Li4uIHNob3VsZCBiZSBjb3JyZWN0ID8hCi0JCQkvLyBkdW5uby4uLiBYWFgKLQkJCWlmIChuLm5vZGVfdmFsdWUoKSA9PSBub2RlLm5vZGVfdmFsdWUoKSkKLQkJCQlicmVhazsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9yd2FyZEF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9yd2FyZEF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk1YmNlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvcndhcmRBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBBbiBheGlzIHRoYXQgb25seSBldmVyIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgb3Igbm9kZXMgdGhhdCBhcmUgYWZ0ZXIgdGhlCi0gKiBjb250ZXh0IG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIgaXMgYSBmb3J3YXJkIGF4aXMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb3J3YXJkQXhpcyBpbXBsZW1lbnRzIEF4aXMgewotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBuZXcgRWxlbWVudCBUeXBlCi0JICogCi0JICogQHJldHVybiBUaGUgZWxlbWVudCB0eXBlLgotCSAqLwotCS8vICJkZWZhdWx0IiB0eXBlIGlzIGVsZW1lbnQuLi4uCi0JLy8gcmVtZW1iZXIgdG8gb3ZlcnJpZGUgZm9yIGF0dHJpYnV0ZSBhbmQgbmFtZXNwY2UgYXhpcyB0aG8hCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKSB7Ci0JCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0pGbGV4RXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvSkZsZXhFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzAxZjMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvSkZsZXhFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBKRmxleAotICovCi1wdWJsaWMgY2xhc3MgSkZsZXhFcnJvciBleHRlbmRzIFhQYXRoRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTcxNTQ3ODQ0ODI0MTc4MzMyOTdMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEpGbGV4IGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgSkZsZXhFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Ob3JtYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL05vcm1hbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZjMDU0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL05vcm1hbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uRm5GdW5jdGlvbkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogTm9ybWFsaXplciB0aGF0IHVzZXMgWFBhdGhWaXNpdG9yLgotICovCi0vLyBYWFggY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYW55bW9yZSEKLXB1YmxpYyBjbGFzcyBOb3JtYWxpemVyIGltcGxlbWVudHMgWFBhdGhWaXNpdG9yIHsKLQotCXByaXZhdGUgU3RhdGljQ29udGV4dCBfc2M7Ci0KLQkvKioKLQkgKiBTdGF0aWMgQ29udGV4dCBpcyBzZXQgdG8gc2MKLQkgKiAKLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIGlzIHRoZSBTdGF0aWNDb250ZXh0LgotCSAqLwotCXB1YmxpYyBOb3JtYWxpemVyKFN0YXRpY0NvbnRleHQgc2MpIHsKLQkJX3NjID0gc2M7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbm9ybWFsaXplZCB0cmVlCi0JICogCi0JICogQHBhcmFtIHhwCi0JICogICAgICAgICAgICBpcyB0aGUgeHBhdGggZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIHRoZSB4cGF0aCBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFhQYXRoIHhwKSB7Ci0JCUNvbGxlY3Rpb24gZXhwcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0geHAuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlFeHByIGUgPSAoRXhwcikgaS5uZXh0KCk7Ci0KLQkJCUV4cHIgbiA9IChFeHByKSBlLmFjY2VwdCh0aGlzKTsKLQotCQkJZXhwcnMuYWRkKG4pOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYUGF0aChleHBycyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50VmFyRXhwclBhaXJzKEl0ZXJhdG9yIGkpIHsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlWYXJFeHByUGFpciBwYWlyID0gKFZhckV4cHJQYWlyKSBpLm5leHQoKTsKLQotCQkJUU5hbWUgdmFyID0gcGFpci52YXJuYW1lKCk7Ci0JCQlFeHByIGUgPSBwYWlyLmV4cHIoKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0JCX0KLQl9Ci0KLQkvLyBkb2VzIGEgZm9yIGFuZCBhIHF1YW50aWZpZWQgZXhwcmVzc2lvbgotCS8vIHRha2VzIHRoZSBpdGVyYXRvciBmb3IgdmFyIGV4cHIgcGFyaXMKLQlwcml2YXRlIHZvaWQgZG9Gb3JFeHByKEl0ZXJhdG9yIGl0ZXIsIEV4cHIgZXhwcikgewotCQlDb2xsZWN0aW9uIHZhcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJLy8gZ28gdGhyb3VnaCBleHByZXNzaW9uIGFuZCBjYWNoZSB2YXJpYWJsZXMKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlWYXJFeHByUGFpciBwYWlyID0gKFZhckV4cHJQYWlyKSBpdGVyLm5leHQoKTsKLQotCQkJUU5hbWUgdmFyID0gcGFpci52YXJuYW1lKCk7Ci0JCQlFeHByIGUgPSBwYWlyLmV4cHIoKTsKLQotCQkJLy8gWFhYIHRoaXMgaXMgd3JvbmchCi0JCQkvLyBuZWVkIHRvIGRlZmluZSBuZXcgc2NvcGUsIGFuZCByZWZlcmVuY2UgImlubmVyIHNjb3BlIgotCQkJLy8gW3NoYWRvdyBvdXRlciB2YXJzXQotCQkJLyoKLQkJCSAqIGlmKF9zYy52YXJpYWJsZV9leGlzdHModmFyKSkgcmVwb3J0X2Vycm9yKG5ldwotCQkJICogU3RhdGljTmFtZUVycm9yKCJWYXJpYWJsZSAiICsgdmFyLnN0cmluZygpICsKLQkJCSAqICIgYWxyZWFkeSBkZWZpbmVkIikpOwotCQkJICovCi0JCQkvLyBvayB3ZSBjYW4gY2hlYXQgaGVyZSBjdXogd2Ugb25seSBjYXJlIGFib3V0IHZhcmlhYmxlCi0JCQkvLyAicHJlc2VuY2UiIG5vdCBpdHMgc3BlY2lmaWMgaW5zdGFuY2UgLyB2YWx1ZSBzbyB3ZQotCQkJLy8gY2FuIGZha2VseSBzaGFkb3cgd2l0aG91dCBjcmVhdGluZyBleHBsaWNpdCBzY29wZXMKLQkJCS8vIGlmIHZhcmlhYmxlIGFscmVhZHkgZXhpc3RzLi4uLiB0aGVuIGxlYXZlIGl0IHRoZXJlLi4uCi0JCQkvLyBbd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIGFuZCBkZWxldGUKLQkJCS8vIGl0IGF0IHRoZSBlbmRdCi0JCQkvLyB3ZSBvbmx5IG5lZWQgdG8gaWYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKLQkJCS8vIFhYWDogaSBmaW5rIHRoaXMgaXMgYWxsIHdyb25nCi0JCQl2YXJzLmFkZCh2YXIpOwotCi0JCQllLmFjY2VwdCh0aGlzKTsKLQkJfQotCi0JCS8vIGFkZCB2YXJpYWJsZXMgdG8gc2NvcGUKLQkJZm9yIChJdGVyYXRvciBpID0gdmFycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVFOYW1lIHZhciA9IChRTmFtZSkgaS5uZXh0KCk7Ci0JCX0KLQotCQkvLyBkbyB0aGUgYm91bmRlZCBleHByZXNzaW9uCi0JCWV4cHIuYWNjZXB0KHRoaXMpOwotCi0JCS8vIHJlbW92ZSB2YXJpYWJsZXMKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgRm9yIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBmZXggZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvckV4cHIgZmV4KSB7Ci0JCUZvckV4cHIgbGFzdCA9IGZleDsKLQkJRXhwciByZXQgPSBmZXguZXhwcigpOwotCQlpbnQgZGVwdGggPSAwOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGZleC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVZhckV4cHJQYWlyIHZlID0gKFZhckV4cHJQYWlyKSBpLm5leHQoKTsKLQotCQkJLy8gb2sgd2UgZ290IG5lc3RlZCBmb3JzLi4uCi0JCQlpZiAoZGVwdGggPiAwKSB7Ci0JCQkJQ29sbGVjdGlvbiBwYWlycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlwYWlycy5hZGQodmUpOwotCi0JCQkJRm9yRXhwciBmZSA9IG5ldyBGb3JFeHByKHBhaXJzLCByZXQpOwotCQkJCWxhc3Quc2V0X2V4cHIoZmUpOwotCi0JCQkJbGFzdCA9IGZlOwotCQkJfQotCi0JCQlkZXB0aCsrOwotCQl9Ci0KLQkJLy8gbm9ybWFsaXplIHJldHVybiB2YWx1ZSwgYW5kIHNldCBpdCB0byB0aGUgbGFzdCBmb3IgZXhwcgotCQlyZXQuYWNjZXB0KHRoaXMpOwotCi0JCS8vIGdldCByaWQgb2YgdGhlIHBhaXJzIGluIHRoZSBwYXJlbnQgKG9yaWdpbmFsKSBmb3IKLQkJaWYgKGRlcHRoID4gMSkKLQkJCWZleC50cnVuY2F0ZV9wYWlycygpOwotCi0JCXJldHVybiBmZXg7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHFleAotCSAqICAgICAgICAgICAgaXMgdGhlIFF1YW50aWZpZWQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIHFleCBleHByZXNzaW9uLgotCSAqLwotCS8vIFhYWDogY29kZSBkdXBsaWNhdGlvbgotCXB1YmxpYyBPYmplY3QgdmlzaXQoUXVhbnRpZmllZEV4cHIgcWV4KSB7Ci0JCVF1YW50aWZpZWRFeHByIGxhc3QgPSBxZXg7Ci0JCUV4cHIgcmV0ID0gcWV4LmV4cHIoKTsKLQkJaW50IGRlcHRoID0gMDsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBxZXguaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlWYXJFeHByUGFpciB2ZSA9IChWYXJFeHByUGFpcikgaS5uZXh0KCk7Ci0KLQkJCS8vIG9rIHdlIGdvdCBuZXN0ZWQgZm9ycy4uLgotCQkJaWYgKGRlcHRoID4gMCkgewotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJcGFpcnMuYWRkKHZlKTsKLQotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKHFleC50eXBlKCksIHBhaXJzLCByZXQpOwotCQkJCWxhc3Quc2V0X2V4cHIocWUpOwotCi0JCQkJbGFzdCA9IHFlOwotCQkJfQotCi0JCQlkZXB0aCsrOwotCQl9Ci0KLQkJLy8gbm9ybWFsaXplIHJldHVybiB2YWx1ZSwgYW5kIHNldCBpdCB0byB0aGUgbGFzdCBmb3IgZXhwcgotCQlyZXQuYWNjZXB0KHRoaXMpOwotCi0JCS8vIGdldCByaWQgb2YgdGhlIHBhaXJzIGluIHRoZSBwYXJlbnQgKG9yaWdpbmFsKSBmb3IKLQkJaWYgKGRlcHRoID4gMSkKLQkJCXFleC50cnVuY2F0ZV9wYWlycygpOwotCi0JCXJldHVybiBxZXg7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFeHBycyhJdGVyYXRvciBpKSB7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJRXhwciBlID0gKEV4cHIpIGkubmV4dCgpOwotCi0JCQllLmFjY2VwdCh0aGlzKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBpZmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgJ2lmJyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gaWZleCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSWZFeHByIGlmZXgpIHsKLQotCQlwcmludEV4cHJzKGlmZXguaXRlcmF0b3IoKSk7Ci0KLQkJaWZleC50aGVuX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQotCQlpZmV4LmVsc2VfY2xhdXNlKCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBpZmV4OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBvZiBiaW5hcnkgZXhwcmVzc2lvbi4KLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGJpbmFyeSBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHByaW50QmluRXhwcihTdHJpbmcgbmFtZSwgQmluRXhwciBlKSB7Ci0JCWUubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQkJZS5yaWdodCgpLmFjY2VwdCh0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIEJpbkV4cHIgbWFrZV9sb2dpY19leHByKEJpbkV4cHIgZSkgewotCQlDb2xsZWN0aW9uIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVfYmluX2FyZ3MoZSk7Ci0KLQkJWFBhdGhOb2RlIG5vcl9hcnJbXSA9IG5ldyBYUGF0aE5vZGVbMl07Ci0JCWludCBqID0gMDsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBub3JtYWxpemVkLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJbm9yX2FycltqXSA9IChYUGF0aE5vZGUpIGkubmV4dCgpOwotCQkJaisrOwotCQl9Ci0KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChub3JfYXJyWzBdKTsKLQkJZS5zZXRfbGVmdChtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgiZm4iLCAiYm9vbGVhbiIsCi0JCQkJRm5GdW5jdGlvbkxpYnJhcnkuWFBBVEhfRlVOQ1RJT05TX05TKSwgYXJncykpOwotCi0JCWFyZ3MuY2xlYXIoKTsKLQkJYXJncy5hZGQobm9yX2FyclsxXSk7Ci0JCWUuc2V0X3JpZ2h0KG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJmbiIsICJib29sZWFuIiwKLQkJCQlGbkZ1bmN0aW9uTGlicmFyeS5YUEFUSF9GVU5DVElPTlNfTlMpLCBhcmdzKSk7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG9yZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSAnb3InIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBtYWtlIGxvZ2ljIGV4cHIob3JleCkuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChPckV4cHIgb3JleCkgewotCQlyZXR1cm4gbWFrZV9sb2dpY19leHByKG9yZXgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBhbmRleAotCSAqICAgICAgICAgICAgaXMgdGhlICdhbmQnIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBtYWtlIGxvZ2ljIGV4cHIoYW5kZXgpLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW5kRXhwciBhbmRleCkgewotCQlyZXR1cm4gbWFrZV9sb2dpY19leHByKGFuZGV4KTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY21wZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBjbXBleC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENtcEV4cHIgY21wZXgpIHsKLQkJc3dpdGNoIChjbXBleC50eXBlKCkpIHsKLQkJY2FzZSBDbXBFeHByLkVROgotCQkJcmV0dXJuIG1ha2VfQ21wT3AoY21wZXgsIG5ldyBRTmFtZSgiZnMiLCAiZXEiLAotCQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCi0JCWNhc2UgQ21wRXhwci5ORToKLQkJCXJldHVybiBtYWtlX0NtcE9wKGNtcGV4LCBuZXcgUU5hbWUoImZzIiwgIm5lIiwKLQkJCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQotCQljYXNlIENtcEV4cHIuTFQ6Ci0JCQlyZXR1cm4gbWFrZV9DbXBPcChjbXBleCwgbmV3IFFOYW1lKCJmcyIsICJsdCIsCi0JCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0KLQkJY2FzZSBDbXBFeHByLkdUOgotCQkJcmV0dXJuIG1ha2VfQ21wT3AoY21wZXgsIG5ldyBRTmFtZSgiZnMiLCAiZ3QiLAotCQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCi0JCWNhc2UgQ21wRXhwci5MRToKLQkJCXJldHVybiBtYWtlX0NtcE9wKGNtcGV4LCBuZXcgUU5hbWUoImZzIiwgImxlIiwKLQkJCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQotCQljYXNlIENtcEV4cHIuR0U6Ci0JCQlyZXR1cm4gbWFrZV9DbXBPcChjbXBleCwgbmV3IFFOYW1lKCJmcyIsICJnZSIsCi0JCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0KLQkJCS8vIFhYWCBkb24ndCBoYXZlIGZ1bmN0cyEKLQkJY2FzZSBDbXBFeHByLklTOgotCQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJub2RlLWVxdWFsIiksCi0JCQkJCW5vcm1hbGl6ZV9iaW5fYXJncyhjbXBleCkpOwotCi0JCWNhc2UgQ21wRXhwci5MRVNTX0xFU1M6Ci0JCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgIm5vZGUtYmVmb3JlIiksCi0JCQkJCW5vcm1hbGl6ZV9iaW5fYXJncyhjbXBleCkpOwotCi0JCWNhc2UgQ21wRXhwci5HUkVBVEVSX0dSRUFURVI6Ci0JCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgIm5vZGUtYWZ0ZXIiKSwKLQkJCQkJbm9ybWFsaXplX2Jpbl9hcmdzKGNtcGV4KSk7Ci0JCX0KLQotCQlwcmludEJpbkV4cHIoIkNNUCIgKyBjbXBleC50eXBlKCksIGNtcGV4KTsKLQkJcmV0dXJuIGNtcGV4OwotCX0KLQotCXByaXZhdGUgQ29sbGVjdGlvbiBub3JtYWxpemVfYmluX2FyZ3MoQmluRXhwciBlKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlYUGF0aE5vZGUgbGVmdCA9IChYUGF0aE5vZGUpIGUubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQkJWFBhdGhOb2RlIHJpZ2h0ID0gKFhQYXRoTm9kZSkgZS5yaWdodCgpLmFjY2VwdCh0aGlzKTsKLQotCQlhcmdzLmFkZChsZWZ0KTsKLQkJYXJncy5hZGQocmlnaHQpOwotCi0JCXJldHVybiBhcmdzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSByYW5nZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSYW5nZUV4cHIgcmV4KSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5vcm1hbGl6ZV9iaW5fYXJncyhyZXgpOwotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgInRvIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUyksIGFyZ3MpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfeHBhdGhleHByKFByaW1hcnlFeHByIHBleCkgewotCQlGaWx0ZXJFeHByIGZlID0gbmV3IEZpbHRlckV4cHIocGV4LCBuZXcgQXJyYXlMaXN0KCkpOwotCQlyZXR1cm4gbmV3IFhQYXRoRXhwcigwLCBmZSk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9pbnRfbGl0KGludCBpKSB7Ci0JCUludGVnZXJMaXRlcmFsIGlsID0gbmV3IEludGVnZXJMaXRlcmFsKEJpZ0ludGVnZXIudmFsdWVPZihpKSk7Ci0JCXJldHVybiBtYWtlX3hwYXRoZXhwcihpbCk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9zdHJpbmdfbGl0KFN0cmluZyBzKSB7Ci0JCVN0cmluZ0xpdGVyYWwgc2wgPSBuZXcgU3RyaW5nTGl0ZXJhbChzKTsKLQkJcmV0dXJuIG1ha2VfeHBhdGhleHByKHNsKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX2NvbnZlcnRfb3BlcmFuZChYUGF0aEV4cHIgYXJnMSwgWFBhdGhFeHByIGFyZzIpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChhcmcxKTsKLQkJYXJncy5hZGQoYXJnMik7Ci0KLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJmcyIsICJjb252ZXJ0LW9wZXJhbmQiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSwgYXJncyk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9kb3VibGVfbGl0KGRvdWJsZSBkKSB7Ci0JCURvdWJsZUxpdGVyYWwgZGwgPSBuZXcgRG91YmxlTGl0ZXJhbChkKTsKLQkJcmV0dXJuIG1ha2VfeHBhdGhleHByKGRsKTsKLQl9Ci0KLQkvLyBmczpmbmFtZSggZnM6Y29udmVydC1vcGVyYW5kKCBmbjpkYXRhKEFSRzEpLCAxLjBFMCApLAotCS8vIGZzOmNvbnZlcnQtb3BlcmFuZCggZm46ZGF0YShBUkcyKSwgMS4wRTAgKQotCS8vICkKLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX2NvbnZlcnRfYmlub3AoQmluRXhwciBlLCBYUGF0aEV4cHIgY29udmFyZywKLQkJCVFOYW1lIG5hbWUpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbm9ybWFsaXplX2Jpbl9hcmdzKGUpOwotCQlYUGF0aEV4cHIgYXJnc19hcnJbXSA9IG5ldyBYUGF0aEV4cHJbMl07Ci0JCWludCBqID0gMDsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmdzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJYXJnc19hcnJbal0gPSAoWFBhdGhFeHByKSBpLm5leHQoKTsKLQkJCWorKzsKLQkJfQotCi0JCUNvbGxlY3Rpb24gYXJnc2ZuYW1lID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlYUGF0aEV4cHIgYXJnID0gbWFrZV9jb252ZXJ0X29wZXJhbmQoYXJnc19hcnJbal0sIGNvbnZhcmcpOwotCQkJYXJnc2ZuYW1lLmFkZChhcmcpOwotCQl9Ci0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5hbWUsIGFyZ3NmbmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9Bcml0aE9wKEJpbkV4cHIgZSwgUU5hbWUgbmFtZSkgewotCQlyZXR1cm4gbWFrZV9jb252ZXJ0X2Jpbm9wKGUsIG1ha2VfZG91YmxlX2xpdCgxLjApLCBuYW1lKTsKLQl9Ci0KLQkvLyBmczpmbmFtZSggZnM6Y29udmVydF9vcGVyYW5kKCBmbjpkYXRhKEFSRzEpLCAic3RyaW5nIiksCi0JLy8gZnM6Y29udmVydF9vcGVyYW5kKCBmbjpkYXRhKEFSRzIpLCAic3RyaW5nIikKLQkvLyApCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9DbXBPcChCaW5FeHByIGUsIFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIG1ha2VfY29udmVydF9iaW5vcChlLCBtYWtlX3N0cmluZ19saXQoInN0cmluZyIpLCBuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYWRkZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhZGQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQWRkRXhwciBhZGRleCkgewotCQlyZXR1cm4gbWFrZV9Bcml0aE9wKGFkZGV4LCBuZXcgUU5hbWUoImZzIiwgInBsdXMiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN1YmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgc3ViIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFN1YkV4cHIgc3ViZXgpIHsKLQkJcmV0dXJuIG1ha2VfQXJpdGhPcChzdWJleCwgbmV3IFFOYW1lKCJmcyIsICJtaW51cyIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtdWx0aXBseSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNdWxFeHByIG11bGV4KSB7Ci0JCXJldHVybiBtYWtlX0FyaXRoT3AobXVsZXgsIG5ldyBRTmFtZSgiZnMiLCAidGltZXMiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZGl2aXNpb24gZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGl2RXhwciBtdWxleCkgewotCQlyZXR1cm4gbWFrZV9Bcml0aE9wKG11bGV4LCBuZXcgUU5hbWUoImZzIiwgImRpdiIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb24gdGhhdCBhbHdheXMgcmV0dXJucyBhbgotCSAqICAgICAgICAgICAgaW50ZWdlci4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCS8vIFhYWDogaW50ZWdlciBjYXN0IQotCXB1YmxpYyBPYmplY3QgdmlzaXQoSURpdkV4cHIgbXVsZXgpIHsKLQkJcmV0dXJuIG1ha2VfQXJpdGhPcChtdWxleCwgbmV3IFFOYW1lKCJmcyIsICJpZGl2IiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIG1vZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNb2RFeHByIG11bGV4KSB7Ci0JCXJldHVybiBtYWtlX0FyaXRoT3AobXVsZXgsIG5ldyBRTmFtZSgiZnMiLCAibW9kIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB1bmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgdW5pb24gZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVW5pb25FeHByIHVuZXgpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbm9ybWFsaXplX2Jpbl9hcmdzKHVuZXgpOwotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgInVuaW9uIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUyksIGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwaXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIHBpcGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGlwZUV4cHIgcGlwZXgpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbm9ybWFsaXplX2Jpbl9hcmdzKHBpcGV4KTsKLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJ1bmlvbiIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpLCBhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaWV4cHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlcnNlY3QgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZXJzZWN0RXhwciBpZXhwcikgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBub3JtYWxpemVfYmluX2FyZ3MoaWV4cHIpOwotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgImludGVyc2VjdCIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpLCBhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZWV4cHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleGNlcHQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRXhjZXB0RXhwciBlZXhwcikgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBub3JtYWxpemVfYmluX2FyZ3MoZWV4cHIpOwotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoIm9wIiwgImV4Y2VwdCIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpLCBhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaW9leHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnN0YW5jZSBvZiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBpb2V4cC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEluc3RPZkV4cHIgaW9leHApIHsKLQkJcHJpbnRCaW5FeHByKCJJTlNUQU5DRU9GIiwgaW9leHApOwotCQlyZXR1cm4gaW9leHA7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRhZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgdHJlYXQgYXMgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgdGFleHAuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUcmVhdEFzRXhwciB0YWV4cCkgewotCQlwcmludEJpbkV4cHIoIlRSRUFUQVMiLCB0YWV4cCk7Ci0JCXJldHVybiB0YWV4cDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGNhc3RhYmxlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBjZXhwLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdGFibGVFeHByIGNleHApIHsKLQkJcHJpbnRCaW5FeHByKCJDQVNUQUJMRSIsIGNleHApOwotCQlyZXR1cm4gY2V4cDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGNhc3QgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGNleHAuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0RXhwciBjZXhwKSB7Ci0JCXByaW50QmluRXhwcigiQ0FTVCIsIGNleHApOwotCQlyZXR1cm4gY2V4cDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5hbWUuCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBVbiBFeHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHByaW50VW5FeHByKFN0cmluZyBuYW1lLCBVbkV4cHIgZSkgewotCQllLmFyZygpLmFjY2VwdCh0aGlzKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgbWludXMgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG5ldyBzdWIgZXhwcmVzc2lvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTWludXNFeHByIGUpIHsKLQkJU3ViRXhwciBzZSA9IG5ldyBTdWJFeHByKG1ha2VfaW50X2xpdCgwKSwgZS5hcmcoKSk7Ci0JCXJldHVybiBzZS5hY2NlcHQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwbHVzIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBuZXcgYWRkIGV4cHJlc3Npb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBsdXNFeHByIGUpIHsKLQkJQWRkRXhwciBhZSA9IG5ldyBBZGRFeHByKG1ha2VfaW50X2xpdCgwKSwgZS5hcmcoKSk7Ci0KLQkJcmV0dXJuIGFlLmFjY2VwdCh0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX2Z1bmN0aW9uKFFOYW1lIG5hbWUsIENvbGxlY3Rpb24gYXJncykgewotCi0JCUZ1bmN0aW9uQ2FsbCBmYyA9IG5ldyBGdW5jdGlvbkNhbGwobmFtZSwgYXJncyk7Ci0JCUZpbHRlckV4cHIgZmUgPSBuZXcgRmlsdGVyRXhwcihmYywgbmV3IEFycmF5TGlzdCgpKTsKLQkJcmV0dXJuIG5ldyBYUGF0aEV4cHIoMCwgZmUpOwotCi0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9yb290X3NlbGZfbm9kZSgpIHsKLQotCQkvLyBzZWxmOjpub2RlKCkKLQkJU3RlcCBzZWxmX25vZGUgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuU0VMRiwgbmV3IEFueUtpbmRUZXN0KCkpOwotCQlTdGVwRXhwciBzZWxmX25vZGVfZXhwciA9IG5ldyBBeGlzU3RlcChzZWxmX25vZGUsIG5ldyBBcnJheUxpc3QoKSk7Ci0JCVhQYXRoRXhwciBzZWxmX25vZGVfeHBhdGggPSBuZXcgWFBhdGhFeHByKDAsIHNlbGZfbm9kZV9leHByKTsKLQotCQkvLyBmbjpyb290KHNlbGY6Om5vZGUoKSkKLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChzZWxmX25vZGVfeHBhdGgpOwotCQlYUGF0aEV4cHIgeHBlID0gbWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoImZuIiwgInJvb3QiLAotCQkJCUZuRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX0ZVTkNUSU9OU19OUyksIGFyZ3MpOwotCi0JCXJldHVybiB4cGU7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9kZXNjZW5kYW50X29yX3NlbGYoKSB7Ci0JCVN0ZXAgZGVzY19zZWxmX25vZGUgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuREVTQ0VOREFOVF9PUl9TRUxGLAotCQkJCW5ldyBBbnlLaW5kVGVzdCgpKTsKLQkJU3RlcEV4cHIgc2UgPSBuZXcgQXhpc1N0ZXAoZGVzY19zZWxmX25vZGUsIG5ldyBBcnJheUxpc3QoKSk7Ci0KLQkJcmV0dXJuIG5ldyBYUGF0aEV4cHIoMCwgc2UpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgeHBhdGggZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIHJlc3VsdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFhQYXRoRXhwciBlKSB7Ci0JCVhQYXRoRXhwciB4cCA9IGU7Ci0JCWludCBkZXB0aCA9IDA7IC8vIGluZGljYXRlcyBob3cgbWFueSAvIHdlIHRyYXZlcnNlZAotCQlYUGF0aEV4cHIgcmVzdWx0ID0gZTsKLQotCQl3aGlsZSAoeHAgIT0gbnVsbCkgewotCQkJaW50IHNsYXNoZXMgPSB4cC5zbGFzaGVzKCk7Ci0JCQlTdGVwRXhwciBzZSA9IHhwLmV4cHIoKTsKLQotCQkJaWYgKHNsYXNoZXMgPT0gMSkgewotCQkJCS8vIHRoaXMgaXMgYSBzaW5nbGUgc2xhc2ggYW5kIG5vdGhpbmcgZWxzZS4uLgotCQkJCWlmIChzZSA9PSBudWxsKQotCQkJCQlyZXR1cm4gbWFrZV9yb290X3NlbGZfbm9kZSgpOwotCi0JCQkJLy8gL1JlbGF0aXZlUGF0aEV4cHIKLQkJCQlpZiAoZGVwdGggPT0gMCkgewotCQkJCQlYUGF0aEV4cHIgeHBlID0gbWFrZV9yb290X3NlbGZfbm9kZSgpOwotCQkJCQl4cGUuc2V0X25leHQoZSk7Ci0KLQkJCQkJcmVzdWx0ID0geHBlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKHNsYXNoZXMgPT0gMikgewotCQkJCS8vIC8vUmVsYXRpdmVQYXRoRXhwcgotCQkJCWlmIChkZXB0aCA9PSAwKSB7Ci0JCQkJCVhQYXRoRXhwciBkZXNjID0gbWFrZV9kZXNjZW5kYW50X29yX3NlbGYoKTsKLQkJCQkJZGVzYy5zZXRfc2xhc2hlcygxKTsKLQkJCQkJZS5zZXRfc2xhc2hlcygxKTsKLQkJCQkJZGVzYy5zZXRfbmV4dChlKTsKLQotCQkJCQlYUGF0aEV4cHIgcm9vdF9zZWxmID0gbWFrZV9yb290X3NlbGZfbm9kZSgpOwotCQkJCQlyb290X3NlbGYuc2V0X25leHQoZGVzYyk7Ci0JCQkJCXJldHVybiByb290X3NlbGY7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoc2UgIT0gbnVsbCkKLQkJCQlzZS5hY2NlcHQodGhpcyk7Ci0KLQkJCVhQYXRoRXhwciBuZXh0ID0geHAubmV4dCgpOwotCi0JCQkvLyBwZWVrIGlmIHRoZSBuZXh0IGd1eSB3aWxsIGhhdmUgMiBzbGFzaGVzLi4uCi0JCQlpZiAobmV4dCAhPSBudWxsKSB7Ci0JCQkJLy8gU3RlcEV4cHIvL1N0ZXBFeHByCi0JCQkJaWYgKG5leHQuc2xhc2hlcygpID09IDIpIHsKLQkJCQkJLy8gY3JlYXRlIHRoZSBub2RlIHRvIHN0aWNrIGJldHdlZW4gdGhlCi0JCQkJCS8vIHNsYXNoZXMKLQkJCQkJWFBhdGhFeHByIGRlc2MgPSBtYWtlX2Rlc2NlbmRhbnRfb3Jfc2VsZigpOwotCQkJCQlkZXNjLnNldF9zbGFzaGVzKDEpOwotCi0JCQkJCS8vIGN1cnJlbnQgbm9kZSAvIGRlc2MgLyBuZXh0Ci0JCQkJCXhwLnNldF9uZXh0KGRlc2MpOwotCQkJCQlkZXNjLnNldF9uZXh0KG5leHQpOwotCQkJCQluZXh0LnNldF9zbGFzaGVzKDEpOwotCQkJCX0KLQkJCX0KLQkJCXhwID0gbmV4dDsKLQkJCWRlcHRoKys7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZvcndhcmQgc3RlcC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQkvLyBYWFg6IG5vcm1hbHppZSEKLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvcndhcmRTdGVwIGUpIHsKLQkJaW50IGF4aXMgPSBlLmF4aXMoKTsKLQotCQlzd2l0Y2ggKGF4aXMpIHsKLQkJY2FzZSBGb3J3YXJkU3RlcC5BVF9TWU06Ci0JCQllLnNldF9heGlzKEZvcndhcmRTdGVwLkFUVFJJQlVURSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZvcndhcmRTdGVwLk5PTkU6Ci0JCQllLnNldF9heGlzKEZvcndhcmRTdGVwLkNISUxEKTsKLQkJCWJyZWFrOwotCi0JCX0KLQotCQllLm5vZGVfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHJldmVyc2Ugc3RlcC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJldmVyc2VTdGVwIGUpIHsKLQotCQlpZiAoZS5heGlzKCkgPT0gUmV2ZXJzZVN0ZXAuRE9URE9UKSB7Ci0JCQlOb2RlVGVzdCBudCA9IG5ldyBBbnlLaW5kVGVzdCgpOwotCQkJU3RlcCBzID0gbmV3IFJldmVyc2VTdGVwKFJldmVyc2VTdGVwLlBBUkVOVCwgbnQpOwotCi0JCQlyZXR1cm4gczsKLQkJfQotCi0JCU5vZGVUZXN0IG50ID0gZS5ub2RlX3Rlc3QoKTsKLQkJaWYgKG50ICE9IG51bGwpCi0JCQludC5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBOYW1lIHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChOYW1lVGVzdCBlKSB7Ci0KLQkJU3RyaW5nIHByZWZpeCA9IGUubmFtZSgpLnByZWZpeCgpOwotCi0JCS8vIFhYWDogaXMgdGhpcyBjb3JyZWN0ID8KLQkJLy8gaS5lLiBpZiB0aGVyZSBpcyBubyBwcmVmaXguLi4gaXRzIG9rLi4gZWxzZSBpdCBtdXN0IGV4aXN0Ci0JCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgdmVyaWFibGUgcmVmZXJlbmNlLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVmFyUmVmIGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdHJpbmcgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFN0cmluZ0xpdGVyYWwgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVnZXJMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkb3VibGUgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvdWJsZUxpdGVyYWwgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGRlY2ltYWwgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERlY2ltYWxMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwYXIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBhckV4cHIgZSkgewotCQlwcmludEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgQ250eCBJdGVtIEV4cHJlc3Npb24uCi0JICogQHJldHVybiBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENudHhJdGVtRXhwciBlKSB7Ci0JCXJldHVybiBuZXcgVmFyUmVmKG5ldyBRTmFtZSgiZnMiLCAiZG90IikpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZnVjbnRpb24gY2FsbC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQkvLyBYWFg6IGhvdyBkbyB3ZSBub3JtYWxpemUgPwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRnVuY3Rpb25DYWxsIGUpIHsKLQotCQlwcmludEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2luZ2xlIHR5cGUuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTaW5nbGVUeXBlIGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzZXF1ZW5jZSB0eXBlLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpIHsKLQkJSXRlbVR5cGUgaXQgPSBlLml0ZW1fdHlwZSgpOwotCi0JCWlmIChpdCAhPSBudWxsKQotCQkJaXQuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgaXRlbSB0eXBlLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSXRlbVR5cGUgZSkgewotCi0JCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJY2FzZSBJdGVtVHlwZS5JVEVNOgotCQkJYnJlYWs7Ci0JCWNhc2UgSXRlbVR5cGUuUU5BTUU6Ci0JCQlicmVhazsKLQotCQljYXNlIEl0ZW1UeXBlLktJTkRURVNUOgotCQkJZS5raW5kX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgYW55IGtpbmQgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFueUtpbmRUZXN0IGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudCB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG9jdW1lbnRUZXN0IGUpIHsKLQotCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCWNhc2UgRG9jdW1lbnRUZXN0LkVMRU1FTlQ6Ci0JCQllLmVsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRG9jdW1lbnRUZXN0LlNDSEVNQV9FTEVNRU5UOgotCQkJZS5zY2hlbWFfZWxlbV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0ZXh0IHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUZXh0VGVzdCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgY29tbW9uIHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDb21tZW50VGVzdCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgUEkgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBJVGVzdCBlKSB7Ci0JCVN0cmluZyBhcmcgPSBlLmFyZygpOwotCQlpZiAoYXJnID09IG51bGwpCi0JCQlhcmcgPSAiIjsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCS8vIFhYWCBOTyBDSEVDSyA/Ci0JcHVibGljIE9iamVjdCB2aXNpdChBdHRyaWJ1dGVUZXN0IGUpIHsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUF0dHJUZXN0IGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBlbGVtZW50IHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JLy8gWFhYIE5PIFNFTUFOVElDIENIRUNLPyEKLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEVsZW1lbnRUZXN0IGUpIHsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFFbGVtVGVzdCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludENvbGxFeHBycyhJdGVyYXRvciBpKSB7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJQ29sbGVjdGlvbiBleHBycyA9IChDb2xsZWN0aW9uKSBpLm5leHQoKTsKLQotCQkJcHJpbnRFeHBycyhleHBycy5pdGVyYXRvcigpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgYXhpcyBzdGVwLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXhpc1N0ZXAgZSkgewotCi0JCVN0ZXAgcyA9IChTdGVwKSBlLnN0ZXAoKS5hY2NlcHQodGhpcyk7Ci0JCWUuc2V0X3N0ZXAocyk7Ci0KLQkJcHJpbnRDb2xsRXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZpbHRlckV4cHIgZSkgewotCQlQcmltYXJ5RXhwciBwZSA9IChQcmltYXJ5RXhwcikgZS5wcmltYXJ5KCkuYWNjZXB0KHRoaXMpOwotCQllLnNldF9wcmltYXJ5KHBlKTsKLQotCQlwcmludENvbGxFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1BhcmVudEF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUGFyZW50QXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWFmOWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUGFyZW50QXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiB0aGUgcGFyZW50IGF4aXMgY29udGFpbnMgdGhlIHNlcXVlbmNlIHJldHVybmVkIGJ5IHRoZSBkbTpwYXJlbnQgYWNjZXNzb3IgaW4sCi0gKiB3aGljaCByZXR1cm5zIHRoZSBwYXJlbnQgb2YgdGhlIGNvbnRleHQgbm9kZSwgb3IgYW4gZW1wdHkgc2VxdWVuY2UgaWYgdGhlCi0gKiBjb250ZXh0IG5vZGUgaGFzIG5vIHBhcmVudAotICovCi1wdWJsaWMgY2xhc3MgUGFyZW50QXhpcyBleHRlbmRzIFJldmVyc2VBeGlzIHsKLQotCS8qKgotCSAqIHJldHVybnMgcGFyZW50IGFjY2Vzc29ycyBvZiB0aGUgY29udGV4dCBub2RlCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBub2RlIHR5cGUuCi0JICogQHRocm93cyBkYwotCSAqICAgICAgICAgICAgIGlzIHRoZSBEeW5hbWljIGNvbnRleHQuCi0JICogQHJldHVybiB0aGUgYWNjZXNzb3JzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlOb2RlIG4gPSBub2RlLm5vZGVfdmFsdWUoKTsKLQkJTm9kZSBwYXJlbnQgPSBuLmdldFBhcmVudE5vZGUoKTsKLQotCQkvLyBzcGVjaWFsIGNhc2UgYXR0cmlidXRlIGVsZW1lbnRzLi4uCi0JCS8vIGluIHRoaXMgY2FzZS4uLiB0aGUgcGFyZW50IGlzIHRoZSBlbGVtZW50IHdoaWNoIG93bnMgdGhlIGF0dHIKLQkJaWYgKG4uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKSB7Ci0JCQlBdHRyIGF0dCA9IChBdHRyKSBuOwotCi0JCQlwYXJlbnQgPSBhdHQuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCX0KLQotCQkvLyBpZiBhIHBhcmVudCBleGlzdHMuLi4gYWRkIGl0Ci0JCWlmIChwYXJlbnQgIT0gbnVsbCkKLQkJCXJzLmFkZChOb2RlVHlwZS5kb21fdG9feHBhdGgocGFyZW50KSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QcmVjZWRpbmdBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ0F4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MTg2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIHRoZSBwcmVjZWRpbmcgYXhpcyBjb250YWlucyBhbGwgbm9kZXMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdGhlIHJvb3Qgb2YgdGhlCi0gKiB0cmVlIGluIHdoaWNoIHRoZSBjb250ZXh0IG5vZGUgaXMgZm91bmQKLSAqLwotcHVibGljIGNsYXNzIFByZWNlZGluZ0F4aXMgZXh0ZW5kcyBSZXZlcnNlQXhpcyB7Ci0JLy8gWFhYIERPQ1VNRU5UIE9SREVSLi4uLiBkdW5ubwotCi0JLyoqCi0JICogcmV0dXJucyBwcmVjZWRpbmcgbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZQotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgbm9kZSB0eXBlLgotCSAqIEB0aHJvd3MgZGMKLQkgKiAgICAgICAgICAgICBpcyB0aGUgRHluYW1pYyBjb250ZXh0LgotCSAqIEByZXR1cm4gdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb250ZXh0IG5vZGUKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBEeW5hbWljQ29udGV4dCBkYykgewotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCU5vZGVUeXBlIHBhcmVudCA9IG51bGw7Ci0JCVBhcmVudEF4aXMgcGEgPSBuZXcgUGFyZW50QXhpcygpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IHBhLml0ZXJhdGUobm9kZSwgZGMpOwotCQlpZiAocnMuc2l6ZSgpID09IDEpCi0JCQlwYXJlbnQgPSAoTm9kZVR5cGUpIHJzLmdldCgwKTsKLQotCQkvLyBnZXQgdGhlIHByZWNlZGluZyBzaWJsaW5ncyBvZiB0aGlzIG5vZGUsIGFuZCBhZGQgdGhlbQotCQlQcmVjZWRpbmdTaWJsaW5nQXhpcyBwc2EgPSBuZXcgUHJlY2VkaW5nU2libGluZ0F4aXMoKTsKLQkJcnMgPSBwc2EuaXRlcmF0ZShub2RlLCBkYyk7Ci0JCXJlc3VsdC5jb25jYXQocnMpOwotCi0JCS8vIGZvciBlYWNoIHNpYmxpbmcsIGdldCBhbGwgaXRzIGRlc2NlbmRhbnRzCi0JCURlc2NlbmRhbnRBeGlzIGRhID0gbmV3IERlc2NlbmRhbnRBeGlzKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgZGVzYyA9IGRhLml0ZXJhdGUoKE5vZGVUeXBlKSBpLm5leHQoKSwgZGMpOwotCi0JCQkvLyBhZGQgYWxsIGRlc2NlbmRhbnRzIHRvIHRoZSByZXN1bHQKLQkJCXJlc3VsdC5jb25jYXQoZGVzYyk7Ci0JCX0KLQotCQkvLyBpZiB3ZSBnb3QgYSBwYXJlbnQsIHdlIGdvdHRhIHJlcGVhdCB0aGUgc3RvcnkgZm9yIHRoZSBwYXJlbnQKLQkJLy8gYW5kIGFkZCB0aGUgcmVzdWx0cwotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCXJzID0gaXRlcmF0ZShwYXJlbnQsIGRjKTsKLQotCQkJcnMuY29uY2F0KHJlc3VsdCk7Ci0JCQlyZXN1bHQgPSByczsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nU2libGluZ0F4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nU2libGluZ0F4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MDgxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ1NpYmxpbmdBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogdGhlIHByZWNlZGluZyBheGlzIGNvbnRhaW5zIGFsbCBub2RlcyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0aGUgcm9vdCBvZiB0aGUKLSAqIHRyZWUgaW4gd2hpY2ggdGhlIGNvbnRleHQgbm9kZSBpcyBmb3VuZCBpbmNsdWRpbmcgdGhlIGNvbnRleHQgbm9kZSBpdHNlbGYKLSAqLwotcHVibGljIGNsYXNzIFByZWNlZGluZ1NpYmxpbmdBeGlzIGV4dGVuZHMgUmV2ZXJzZUF4aXMgewotCS8vIFhYWCBhZ2FpbiwgdW5pZnkgd2l0aCBmb2xsb3dpbmcKLQotCS8qKgotCSAqIHJldHVybnMgcHJlY2VkaW5nIG5vZGVzIG9mIHRoZSBjb250ZXh0IG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5vZGUgdHlwZS4KLQkgKiBAdGhyb3dzIGRjCi0JICogICAgICAgICAgICAgaXMgdGhlIER5bmFtaWMgY29udGV4dC4KLQkgKiBAcmV0dXJuIHRoZSBkZXNjZW5kYW50cyBhbmQgdGhlIGNvbnRleHQgbm9kZQotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJLy8gWFhYIGNoZWNrIGZvciBhdHRyaWJ1dGUgLyBuYW1lc3BhY2Ugbm9kZS4uLiBpZiBzbyByZXR1cm4KLQkJLy8gZW1wdHkgc2VxdWVuY2UKLQotCQkvLyBnZXQgdGhlIHBhcmVudAotCQlQYXJlbnRBeGlzIHBhID0gbmV3IFBhcmVudEF4aXMoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBwYS5pdGVyYXRlKG5vZGUsIGRjKTsKLQotCQkvLyBYWFg6IGlmIG5vIHBhcmVudCwgb3V0IG9mIGx1Y2sgaSBndWVzcwotCQlpZiAocnMuc2l6ZSgpID09IDApCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gZ2V0IHRoZSBjaGlsZHJlbiBvZiB0aGUgcGFyZW50IFtzaWJsaW5nc10KLQkJQ2hpbGRBeGlzIGNhID0gbmV3IENoaWxkQXhpcygpOwotCQlOb2RlVHlwZSBwYXJlbnQgPSAoTm9kZVR5cGUpIHJzLmdldCgwKTsKLQkJcnMgPSBjYS5pdGVyYXRlKHBhcmVudCwgZGMpOwotCi0JCS8vIGdldCB0aGUgcHJlY2VkaW5nIHNpYmxpbmdzCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgbiA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCS8vIG9rIHdlIHBhc3NlZCB0aGUgbm9kZSwgc28ganVzdCBlcmFzZSB0aGUgcmVzdCBvZiB0aGUKLQkJCS8vIHJlc3VsdHMKLQkJCWlmIChmb3VuZCkgewotCQkJCWkucmVtb3ZlKCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmIChuLm5vZGVfdmFsdWUoKSA9PSBub2RlLm5vZGVfdmFsdWUoKSkgewotCQkJCWkucmVtb3ZlKCk7Ci0JCQkJZm91bmQgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SYW5nZVJlc3VsdFNlcXVlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1JhbmdlUmVzdWx0U2VxdWVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk0YWNiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1JhbmdlUmVzdWx0U2VxdWVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBBIHJhbmdlIGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEgc2VxdWVuY2Ugb2YgY29uc2VjdXRpdmUKLSAqIGludGVnZXJzLgotICovCi1wdWJsaWMgY2xhc3MgUmFuZ2VSZXN1bHRTZXF1ZW5jZSBleHRlbmRzIFJlc3VsdFNlcXVlbmNlIHsKLQotCXByaXZhdGUgaW50IF9zdGFydDsKLQlwcml2YXRlIGludCBfZW5kOwotCXByaXZhdGUgaW50IF9zaXplOwotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgX3RhaWw7Ci0KLQkvKioKLQkgKiBzZXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJhbmdlIHJlc3VsdCBzZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBzdGFydAotCSAqICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHJhbmdlLgotCSAqIEBwYXJhbSBlbmQKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgcmFuZ2UuCi0JICovCi0JcHVibGljIFJhbmdlUmVzdWx0U2VxdWVuY2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7Ci0JCV9zaXplID0gKGVuZCAtIHN0YXJ0KSArIDE7Ci0KLQkJYXNzZXJ0IF9zaXplID49IDA7Ci0KLQkJX3N0YXJ0ID0gc3RhcnQ7Ci0JCV9lbmQgPSBlbmQ7Ci0KLQkJX3RhaWwgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCX0KLQotCS8qKgotCSAqIGl0ZW0gaXMgYW4gaW50ZWdlciB0byBhZGQgdG8gdGhlIHJhbmdlLgotCSAqIAotCSAqIEBwYXJhbSBpdGVtCi0JICogICAgICAgICAgICBpcyBhbiBpbnRlZ2VyLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGFkZChBbnlUeXBlIGl0ZW0pIHsKLQkJX3RhaWwuYWRkKGl0ZW0pOwotCX0KLQotCS8qKgotCSAqIHJlbW92ZSB0aGUgdGFpbCBmcm9tIHRoZSByYW5nZSBnaXZlbi4KLQkgKiAKLQkgKiBAcGFyYW0gcnMKLQkgKiAgICAgICAgICAgIGlzIHRoZSByYW5nZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNvbmNhdChSZXN1bHRTZXF1ZW5jZSBycykgewotCQlfdGFpbC5jb25jYXQocnMpOwotCX0KLQotCS8qKgotCSAqIGludGVyYXRlIHRocm91Z2ggcmFuZ2UuCi0JICogCi0JICogQHJldHVybiB0YWlsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIExpc3RJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJLy8gWFhYIGxpZmUgaXMgZ2V0dGluZyBoYXJkLi4uCi0JCWlmIChfc2l6ZSAhPSAwKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBuZXd0YWlsID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkJZm9yICg7IF9zdGFydCA8PSBfZW5kOyBfc3RhcnQrKykKLQkJCQluZXd0YWlsLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihfc3RhcnQpKSk7Ci0KLQkJCW5ld3RhaWwuY29uY2F0KF90YWlsKTsKLQkJCV90YWlsLnJlbGVhc2UoKTsKLQkJCV90YWlsID0gbmV3dGFpbDsKLQotCQkJX3NpemUgPSAwOwotCQkJX3N0YXJ0ID0gMDsKLQkJCV9lbmQgPSAwOwotCi0JCX0KLQotCQlyZXR1cm4gX3RhaWwuaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGl0ZW0gZnJvbSByYW5nZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGdldChpbnQgaSkgewotCQlpZiAoaSA8IF9zaXplKQotCQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKF9zdGFydCArIGkpKTsKLQkJZWxzZQotCQkJcmV0dXJuIF90YWlsLmdldChpIC0gX3NpemUpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gc2l6ZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgc2l6ZSgpIHsKLQkJcmV0dXJuIF9zaXplICsgX3RhaWwuc2l6ZSgpOwotCX0KLQotCS8qKgotCSAqIGNsZWFyIHJhbmdlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0JCV9zaXplID0gMDsKLQkJX3RhaWwuY2xlYXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBjcmVhdGUgbmV3IHJlc3VsdCBzZXF1ZW5jZQotCSAqIAotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjcmVhdGVfbmV3KCkgewotCQlhc3NlcnQgZmFsc2U7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gZmlyc3QgaXRlbSBpbiByYW5nZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGZpcnN0KCkgewotCQlyZXR1cm4gZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIGFza3MgaWYgdGhlIHJhbmdlIGlzIGVtcHR5PwotCSAqIAotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGVtcHR5KCkgewotCQlyZXR1cm4gc2l6ZSgpID09IDA7Ci0JfQotCi0JLyoqCi0JICogcmVsZWFzZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SZXZlcnNlQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SZXZlcnNlQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjA3MGQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUmV2ZXJzZUF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIEFuIGF4aXMgdGhhdCBvbmx5IGV2ZXIgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBvciBub2RlcyB0aGF0IGFyZSBiZWZvcmUgdGhlCi0gKiBjb250ZXh0IG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIgaXMgYSByZXZlcnNlIGF4aXMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXZlcnNlQXhpcyBpbXBsZW1lbnRzIEF4aXMgewotCi0JLyoqCi0JICogQHJldHVybiBuZXcgZWxlbWVudCB0eXBlCi0JICovCi0JLy8gc2hvdWxkIGFsd2F5cyBiZSBlbGVtZW50IGkgZmluawotCXB1YmxpYyBOb2RlVHlwZSBwcmluY2lwYWxfbm9kZV9raW5kKCkgewotCQlyZXR1cm4gbmV3IEVsZW1lbnRUeXBlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TZWxmQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TZWxmQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGVlZDJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU2VsZkF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDcmVhdGUgYSByZXN1bHQgc2VxdWVuY2UgdGhhdCBjb250YWlucyB0aGUgY29udGV4dCBub2RlCi0gKi8KLXB1YmxpYyBjbGFzcyBTZWxmQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIGNyZWF0ZSBuZXcgcnMgYW5kIGFkZCB0aGUgY29udGV4dCBub2RlIHRvIGl0Ci0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBub2RlIHR5cGUKLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAcmV0dXJuIHJzIGNvbnRhaW5pbmcgbm9kZQotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlycy5hZGQobm9kZSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TZXFUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlcVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3NTljOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlcVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gZG9uJ3Qgc2lsZW50bHkgYWxsb3cgZW1wdHkgc2VxdWVuY2VzIGFsd2F5cwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTgyNjcgLSBDb3JyZWN0bHkgaGFuZGxlIGluc3RvZiB3aXRoIGVsZW1lbnRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiByZXByZXNlbnRzIGEgU2VxdWVuY2UgdHlwZXMgdXNlZCBmb3IgbWF0Y2hpbmcgZXhwZWN0ZWQgYXJndW1lbnRzIG9mIGZ1bmN0aW9ucwotICovCi1wdWJsaWMgY2xhc3MgU2VxVHlwZSB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPQ0NfTk9ORSA9IDA7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0NDX1NUQVIgPSAxOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9DQ19QTFVTID0gMjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPQ0NfUU1BUksgPSAzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9DQ19FTVBUWSA9IDQ7Ci0KLQkvKioKLQkgKiBQYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1NDSEVNQV9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBBTllfQVRPTUlDX1RZUEUgPSBuZXcgUU5hbWUoInhzIiwKLQkJCSJhbnlBdG9taWNUeXBlIiwgWE1MX1NDSEVNQV9OUyk7Ci0KLQlwcml2YXRlIHRyYW5zaWVudCBBbnlUeXBlIGFueXR5cGUgPSBudWxsOwotCXByaXZhdGUgdHJhbnNpZW50IGludCBvY2M7Ci0JcHJpdmF0ZSB0cmFuc2llbnQgQ2xhc3MgdHlwZUNsYXNzID0gbnVsbDsKLQlwcml2YXRlIHRyYW5zaWVudCBRTmFtZSBub2RlTmFtZSA9IG51bGw7Ci0JcHJpdmF0ZSB0cmFuc2llbnQgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBzZXF1ZW5jZSB0eXBlCi0JICogCi0JICogQHBhcmFtIHQKLQkgKiAgICAgICAgICAgIGlzIGFueSB0eXBlCi0JICogQHBhcmFtIG9jYwotCSAqICAgICAgICAgICAgaXMgYW4gaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIFNlcVR5cGUoQW55VHlwZSB0LCBpbnQgb2NjKSB7Ci0JCWFueXR5cGUgPSB0OwotCQl0aGlzLm9jYyA9IG9jYzsKLQotCQlpZiAodCAhPSBudWxsKQotCQkJdHlwZUNsYXNzID0gdC5nZXRDbGFzcygpOwotCQllbHNlCi0JCQl0eXBlQ2xhc3MgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvY2MKLQkgKiAgICAgICAgICAgIGlzIGFuIGludGVnZXIgaW4gdGhlIHNlcXVlbmNlLgotCSAqLwotCS8vIFhYWCBoYWNrIHRvIHJlcHJlc2VudCBBbnlOb2RlLi4uCi0JcHVibGljIFNlcVR5cGUoaW50IG9jYykgewotCQl0aGlzKChBbnlUeXBlKSBudWxsLCBvY2MpOwotCi0JCXR5cGVDbGFzcyA9IE5vZGVUeXBlLmNsYXNzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0eXBlX2NsYXNzCi0JICogICAgICAgICAgICBpcyBhIGNsYXNzIHdoaWNoIHJlcHJlc2VudHMgdGhlIGV4cGVjdGVkIHR5cGUKLQkgKiBAcGFyYW0gb2NjCi0JICogICAgICAgICAgICBpcyBhbiBpbnRlZ2VyIGluIHRoZSBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShDbGFzcyB0eXBlX2NsYXNzLCBpbnQgb2NjKSB7Ci0JCXRoaXMoKEFueVR5cGUpIG51bGwsIG9jYyk7Ci0KLQkJdGhpcy50eXBlQ2xhc3MgPSB0eXBlX2NsYXNzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdAotCSAqICAgICAgICAgICAgaXMgYSBzZXF1ZW5jZSB0eXBlLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgaXMgYSBzdGF0aWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShTZXF1ZW5jZVR5cGUgc3QsIFN0YXRpY0NvbnRleHQgc2MsIFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0KLQkJLy8gY29udmVydCBvY2N1cnJlbmNlCi0JCXN3aXRjaCAoc3Qub2NjdXJyZW5jZSgpKSB7Ci0JCWNhc2UgU2VxdWVuY2VUeXBlLkVNUFRZOgotCQkJb2NjID0gT0NDX0VNUFRZOwotCQkJcmV0dXJuOwotCi0JCWNhc2UgU2VxdWVuY2VUeXBlLk5PTkU6Ci0JCQlvY2MgPSBPQ0NfTk9ORTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU2VxdWVuY2VUeXBlLlFVRVNUSU9OOgotCQkJb2NjID0gT0NDX1FNQVJLOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTZXF1ZW5jZVR5cGUuU1RBUjoKLQkJCW9jYyA9IE9DQ19TVEFSOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTZXF1ZW5jZVR5cGUuUExVUzoKLQkJCW9jYyA9IE9DQ19QTFVTOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFzc2VydCBmYWxzZTsKLQkJfQotCi0JCS8vIGZpZ3VyZSBvdXQgdGhlIGl0ZW0gaXMKLQkJZmluYWwgSXRlbVR5cGUgaXRlbSA9IHN0Lml0ZW1fdHlwZSgpOwotCQlLaW5kVGVzdCBrdGVzdCA9IG51bGw7Ci0JCXN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLQkJY2FzZSBJdGVtVHlwZS5JVEVNOgotCQkJdHlwZUNsYXNzID0gQW55VHlwZS5jbGFzczsKLQkJCXJldHVybjsKLQotCQkJLy8gWFhYIElNUExFTUVOVCBUSElTCi0JCWNhc2UgSXRlbVR5cGUuUU5BTUU6Ci0JCQlmaW5hbCBBbnlBdG9taWNUeXBlIGFhdCA9IHNjLm1ha2VfYXRvbWljKGl0ZW0ucW5hbWUoKSk7Ci0KLQkJCWFzc2VydCBhYXQgIT0gbnVsbDsKLQkJCWFueXR5cGUgPSBhYXQ7Ci0JCQlpZiAoaXRlbS5xbmFtZSgpLmVxdWFscyhBTllfQVRPTUlDX1RZUEUpKSB7Ci0JCQkJdHlwZUNsYXNzID0gQW55QXRvbWljVHlwZS5jbGFzczsKLQkJCX0gZWxzZSB7Ci0JCQkJdHlwZUNsYXNzID0gYW55dHlwZS5nZXRDbGFzcygpOwotCQkJfQotCQkJcmV0dXJuOwotCi0JCWNhc2UgSXRlbVR5cGUuS0lORFRFU1Q6Ci0JCQlrdGVzdCA9IGl0ZW0ua2luZF90ZXN0KCk7Ci0JCQlicmVhazsKLQotCQl9Ci0KLQkJaWYgKGt0ZXN0ID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCXR5cGVDbGFzcyA9IGt0ZXN0LmdldFhETUNsYXNzVHlwZSgpOwotCQlhbnl0eXBlID0ga3Rlc3QuY3JlYXRlVGVzdFR5cGUocnMpOwotCQlub2RlTmFtZSA9IGt0ZXN0Lm5hbWUoKTsKLQkJd2lsZCA9IGt0ZXN0LmlzV2lsZCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0Ci0JICogICAgICAgICAgICBpcyBhbiBhbnkgdHlwZS4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShBbnlUeXBlIHQpIHsKLQkJdGhpcyh0LCBPQ0NfTk9ORSk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBhbiBpbnRlZ2VyLgotCSAqLwotCXB1YmxpYyBpbnQgb2NjdXJlbmNlKCkgewotCQlyZXR1cm4gb2NjOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gYSB0eXBlLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIHR5cGUoKSB7Ci0JCXJldHVybiBhbnl0eXBlOwotCX0KLQotCS8qKgotCSAqIG1hdGNoZXMgYXJncwotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqIEB0aHJvd3MgYQotCSAqICAgICAgICAgICAgIGR5bmFtaWMgZXJyb3IKLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1hdGNoKFJlc3VsdFNlcXVlbmNlIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWludCBvY2N1cnJlbmNlID0gb2NjdXJlbmNlKCk7Ci0KLQkJLy8gQ2hlY2sgZm9yIGVtcHR5IHNlcXVlbmNlIGZpcnN0Ci0JCWlmIChvY2N1cnJlbmNlID09IE9DQ19FTVBUWSAmJiAhYXJncy5lbXB0eSgpKSB7Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQl9Ci0KLQkJaW50IGFyZ19jb3VudCA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXJnID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQkvLyBtYWtlIHN1cmUgYWxsIGFyZ3MgYXJlIHRoZSBzYW1lIHR5cGUgYXMgZXhwZWN0ZWQgdHlwZQotCQkJaWYgKCEodHlwZUNsYXNzLmlzSW5zdGFuY2UoYXJnKSkpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCi0JCQlpZiAoYW55dHlwZSAhPSBudWxsKSB7Ci0JCQkJaWYgKChub2RlTmFtZSAhPSBudWxsIHx8IHdpbGQpICYmIGFyZyBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJCU5vZGVUeXBlIG5vZGVUeXBlID0gKE5vZGVUeXBlKSBhcmc7Ci0JCQkJCU5vZGUgbm9kZSA9IG5vZGVUeXBlLm5vZGVfdmFsdWUoKTsKLQkJCQkJTm9kZSBsbm9kZSA9ICgoTm9kZVR5cGUpIGFueXR5cGUpLm5vZGVfdmFsdWUoKTsKLQkJCQkJaWYgKGxub2RlID09IG51bGwpIHsKLQkJCQkJCS8vdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWlmICghbG5vZGUuaXNFcXVhbE5vZGUobm9kZSkpIHsKLQkJCQkJCS8vdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlhcmdfY291bnQrKzsKLQotCQl9Ci0KLQkJc3dpdGNoIChvY2N1cnJlbmNlKSB7Ci0JCWNhc2UgT0NDX05PTkU6Ci0JCQlpZiAoYXJnX2NvdW50ICE9IDEpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPQ0NfUExVUzoKLQkJCWlmIChhcmdfY291bnQgPT0gMCkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9DQ19TVEFSOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPQ0NfUU1BUks6Ci0JCQlpZiAoYXJnX2NvdW50ID4gMSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCi0JCX0KLQotCQlyZXR1cm4gYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0F0dHJOYW1lRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQXR0ck5hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGZjOTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQXR0ck5hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBzdGF0aWMgYXR0cmlidXRlIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNBdHRyTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC01MDM3Nzg4NjU0MjkzMDUwMjYyTDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzdGF0aWMgYXR0cmlidXRlIG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFN0YXRpY0F0dHJOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljRWxlbU5hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNFbGVtTmFtZUVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZDc2YmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNFbGVtTmFtZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogRXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBlbGVtZW50IG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNFbGVtTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDE4NzE1NzU2NzE4NzE3NTU2NzNMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHN0YXRpYyBlbGVtZW50IG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFN0YXRpY0VsZW1OYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljRnVuY3ROYW1lRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljRnVuY3ROYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdjMzg5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0Z1bmN0TmFtZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogRXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBmdW5jdGlvbiBuYW1lLgotICovCi1wdWJsaWMgY2xhc3MgU3RhdGljRnVuY3ROYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzgwNDU2NTg3Njc3MDM3NjQ0NEw7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlVOQ1RJT05fTk9UX0ZPVU5EID0gIlhQU1QwMDE3IjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzdGF0aWMgZnVuY3Rpb24gbmFtZSBlcnJvcgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljRnVuY3ROYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihGVU5DVElPTl9OT1RfRk9VTkQsIHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOYW1lRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljTmFtZUVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZTUyYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvcjsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgc3RhdGljIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNOYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNFcnJvciB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNDM2MzM3MDA4MjU2MzEwNjA3NEw7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9OT1RfRk9VTkQgPSAiWFBTVDAwMDgiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWF9OT1RfRk9VTkQgPSAiWFBTVDAwODEiOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHN0YXRpYyBuYW1lIGVycm9yCi0JICogCi0JICogQHBhcmFtIGNvZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjb2RlLgotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljTmFtZUVycm9yKFN0cmluZyBjb2RlLCBTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKGNvZGUsIHJlYXNvbik7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHN0YXRpYyBuYW1lIGVycm9yCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQl0aGlzKE5BTUVfTk9UX0ZPVU5ELCByZWFzb24pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOc05hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOc05hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2E0MzZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljTnNOYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBTdGF0aWMgbmFtZXNwYWNlIG5hbWUgZXJyb3IgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNOc05hbWVFcnJvciBleHRlbmRzIFN0YXRpY05hbWVFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNjg3Mzk4MDM3Nzk2NjI5MDA2Mkw7Ci0KLQlwdWJsaWMgU3RhdGljTnNOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihQUkVGSVhfTk9UX0ZPVU5ELCByZWFzb24pOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBwcmVmCi0JICogICAgICAgICAgICBpcyB0aGUgdW5rbm93biBwcmVmaXguCi0JICogQHJldHVybiB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdGF0aWNOc05hbWVFcnJvciB1bmtub3duX3ByZWZpeChTdHJpbmcgcHJlZikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5rbm93biBwcmVmaXgiOwotCi0JCWlmIChwcmVmICE9IG51bGwpCi0JCQllcnJvciArPSAiOiAiICsgcHJlZjsKLQkJZXJyb3IgKz0gIi4iOwotCi0JCXJldHVybiBuZXcgU3RhdGljTnNOYW1lRXJyb3IoZXJyb3IpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljVHlwZU5hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNUeXBlTmFtZUVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzAxOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNUeXBlTmFtZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3Mzc2MyAtIGNvcnJlY3QgZXJyb3IgY29kZXMgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIFN0YXRpYyB0eXBlIG5hbWUgZXJyb3IgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNUeXBlTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA3MzI4NjcxNTcxMDg4NTc0OTQ3TDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX05PVF9GT1VORCA9ICJYUFNUMDA1MSI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFN0YXRpY1R5cGVOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihUWVBFX05PVF9GT1VORCwgcmVhc29uKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1Zhck5hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNWYXJOYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3NWNiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1Zhck5hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIFN0YXRpYyB2YXJpYWJsZSBuYW1lIGVycm9yIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgU3RhdGljVmFyTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0yMzA4NDAyOTU0ODkyODIxNDc2TDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljVmFyTmFtZUVycm9yKFN0cmluZyByZWFzb24pIHsKLQkJc3VwZXIocmVhc29uKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1R5cGVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9UeXBlRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk5YjIxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1R5cGVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjczNzYzIC0gY29ycmVjdCBlcnJvciBjb2RlcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgYmFkIHR5cGVzLgotICovCi1wdWJsaWMgY2xhc3MgVHlwZUVycm9yIGV4dGVuZHMgWFBhdGhFeGNlcHRpb24gewotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDkzMjI3NTAzNTcwNjkzNjg4M0w7Ci0JLy8gZXJyb3Jjb2RlIHNwZWNpZmllZCBpbiBodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwL3hxdC1lcnJvcnMgaSBmaW5rCi0JcHJpdmF0ZSBTdHJpbmcgX2NvZGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgdHlwZSBlcnJvci4KLQkgKiAKLQkgKiBAcGFyYW0gY29kZQotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yIGNvZGUuCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBUeXBlRXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIpIHsKLQkJc3VwZXIoZXJyKTsKLQkJX2NvZGUgPSBjb2RlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgZXJyb3IgY29kZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBlcnJvciBjb2RlLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgY29kZSgpIHsKLQkJcmV0dXJuIF9jb2RlOwotCX0KLQotCS8qKgotCSAqICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqIEByZXR1cm4gdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVHlwZUVycm9yIGNpX25vdF9ub2RlKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIkNvbnRleHQgaXRlbSBpcyBub3QgYSBub2RlLiI7Ci0KLQkJaWYgKGVyciAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgZXJyOwotCi0JCXJldHVybiBuZXcgVHlwZUVycm9yKCJYUFRZMDAyMCIsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiAiRmFjdG9yeSIgZm9yIGJ1aWxkaW5nIGVycm9ycwotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKiBAcmV0dXJuIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFR5cGVFcnJvciBtaXhlZF92YWxzKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIlRoZSByZXN1bHQgb2YgdGhlIGxhc3Qgc3RlcCBpbiBhIHBhdGggZXhwcmVzc2lvbiBjb250YWlucyBib3RoIG5vZGVzIGFuZCBhdG9taWMgdmFsdWVzLiI7Ci0KLQkJaWYgKGVyciAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgZXJyOwotCi0JCXJldHVybiBuZXcgVHlwZUVycm9yKCJYUFRZMDAxOCIsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiAiRmFjdG9yeSIgZm9yIGJ1aWxkaW5nIGVycm9ycwotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKiBAcmV0dXJuIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFR5cGVFcnJvciBzdGVwX2NvbmF0aW5zX2F0b21zKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIlRoZSByZXN1bHQgb2YgYW4gc3RlcCAob3RoZXIgdGhhbiB0aGUgbGFzdCBzdGVwKSBpbiBhIHBhdGggZXhwcmVzc2lvbiBjb250YWlucyBhbiBhdG9taWMgdmFsdWUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBUeXBlRXJyb3IoIlhQVFkwMDE5IiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqIEByZXR1cm4gdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVHlwZUVycm9yIGludmFsaWRfdHlwZShTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJWYWx1ZSBkb2VzIG5vdCBtYXRjaCBhIHJlcXVpcmVkIHR5cGUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBUeXBlRXJyb3IoIlhQVFkwMDA0IiwgZXJyb3IpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGgyUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoMlBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDA2NWE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGgyUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBhcGkgYW5kIGltcGxlbWVudGF0aW9uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotcHVibGljIGNsYXNzIFhQYXRoMlBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQlwdWJsaWMgWFBhdGgyUGx1Z2luKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxOTNlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoQ3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2ODAxICswLDAgQEAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBDVVAgdjAuMTBrCi0vLyBGcmkgSnVuIDI1IDAxOjExOjA2IENFU1QgMjAxMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKiBDVVAgdjAuMTBrIGdlbmVyYXRlZCBwYXJzZXIuCi0gICogQHZlcnNpb24gRnJpIEp1biAyNSAwMToxMTowNiBDRVNUIDIwMTAKLSAgKi8KLXB1YmxpYyBjbGFzcyBYUGF0aEN1cCBleHRlbmRzIGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyIHsKLQotICAvKiogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gKi8KLSAgcHVibGljIFhQYXRoQ3VwKCkge3N1cGVyKCk7fQotCi0gIC8qKiBDb25zdHJ1Y3RvciB3aGljaCBzZXRzIHRoZSBkZWZhdWx0IHNjYW5uZXIuICovCi0gIHB1YmxpYyBYUGF0aEN1cChqYXZhX2N1cC5ydW50aW1lLlNjYW5uZXIgcykge3N1cGVyKHMpO30KLQotICAvKiogUHJvZHVjdGlvbiB0YWJsZS4gKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydCBfcHJvZHVjdGlvbl90YWJsZVtdW10gPSAKLSAgICB1bnBhY2tGcm9tU3RyaW5ncyhuZXcgU3RyaW5nW10gewotICAgICJcMDAwXHUwMTFkXDAwMFwwMDJcMTE0XDAwM1wwMDBcMDAyXDAwMlwwMDRcMDAwXDAwMlwwMzMiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAzM1wwMDVcMDAwXDAwMlwwNjFcMDAzXDAwMFwwMDJcMDYxXDAwMyIgKwotICAgICJcMDAwXDAwMlwwNjFcMDAzXDAwMFwwMDJcMDYxXDAwM1wwMDBcMDAyXDExNVwwMDVcMDAwIiArCi0gICAgIlwwMDJcMDM2XDAwN1wwMDBcMDAyXDAzNlwwMTBcMDAwXDAwMlwxMTZcMDA3XDAwMFwwMDIiICsKLSAgICAiXDExNlwwMDdcMDAwXDAwMlwwMzVcMDA1XDAwMFwwMDJcMDM1XDAxMFwwMDBcMDAyXDExNyIgKwotICAgICJcMDEyXDAwMFwwMDJcMDY2XDAwM1wwMDBcMDAyXDA2NlwwMDVcMDAwXDAwMlwwNjVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA2NVwwMDVcMDAwXDAwMlwwNzBcMDAzXDAwMFwwMDJcMDcwXDAwNVwwMDAiICsKLSAgICAiXDAwMlwwNzBcMDA1XDAwMFwwMDJcMDcwXDAwNVwwMDBcMDAyXDA2N1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDY3XDAwNVwwMDBcMDAyXDA2MlwwMDNcMDAwXDAwMlwwNjJcMDA1XDAwMFwwMDJcMDYyIiArCi0gICAgIlwwMDVcMDAwXDAwMlwwNTdcMDAzXDAwMFwwMDJcMDU3XDAwNVwwMDBcMDAyXDA1N1wwMDUiICsKLSAgICAiXDAwMFwwMDJcMDU3XDAwNVwwMDBcMDAyXDA1N1wwMDVcMDAwXDAwMlwwNTZcMDAzXDAwMCIgKwotICAgICJcMDAyXDA1NlwwMDVcMDAwXDAwMlwwNTZcMDA1XDAwMFwwMDJcMDYwXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNjBcMDA1XDAwMFwwMDJcMDYwXDAwNVwwMDBcMDAyXDA1NFwwMDNcMDAwXDAwMlwwNTQiICsKLSAgICAiXDAwNlwwMDBcMDAyXDA1MlwwMDNcMDAwXDAwMlwwNTJcMDA2XDAwMFwwMDJcMDUzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwNTNcMDA2XDAwMFwwMDJcMDU1XDAwM1wwMDBcMDAyXDA1NVwwMDZcMDAwIiArCi0gICAgIlwwMDJcMDQ3XDAwM1wwMDBcMDAyXDA0N1wwMDRcMDAwXDAwMlwwNDdcMDA0XDAwMFwwMDIiICsKLSAgICAiXDEyMVwwMDNcMDAwXDAwMlwwNjNcMDAzXDAwMFwwMDJcMDYzXDAwM1wwMDBcMDAyXDA2MyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDYzXDAwM1wwMDBcMDAyXDA2M1wwMDNcMDAwXDAwMlwwNjNcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA2NFwwMDNcMDAwXDAwMlwwNjRcMDAzXDAwMFwwMDJcMDY0XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNjRcMDAzXDAwMFwwMDJcMDY0XDAwM1wwMDBcMDAyXDA2NFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDI3XDAwM1wwMDBcMDAyXDAyN1wwMDNcMDAwXDAwMlwwMjdcMDAzXDAwMFwwMDJcMTIwIiArCi0gICAgIlwwMDNcMDAwXDAwMlwxMjBcMDA0XDAwMFwwMDJcMTIwXDAwNFwwMDBcMDAyXDEyMFwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDQ2XDAwM1wwMDBcMDAyXDA0NlwwMDVcMDAwXDAwMlwwNDZcMDA1XDAwMCIgKwotICAgICJcMDAyXDA0NVwwMDNcMDAwXDAwMlwwNDVcMDAzXDAwMFwwMDJcMTIyXDAwNFwwMDBcMDAyIiArCi0gICAgIlwxMjJcMDA0XDAwMFwwMDJcMDQzXDAwNFwwMDBcMDAyXDA0M1wwMDNcMDAwXDAwMlwwMjYiICsKLSAgICAiXDAwNFwwMDBcMDAyXDAyNlwwMDRcMDAwXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDI2XDAwNCIgKwotICAgICJcMDAwXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDI2XDAwNFwwMDBcMDAyXDAyNlwwMDRcMDAwIiArCi0gICAgIlwwMDJcMDI2XDAwNFwwMDBcMDAyXDA0NFwwMDRcMDAwXDAwMlwwNDRcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA0MVwwMDRcMDAwXDAwMlwwNDFcMDAzXDAwMFwwMDJcMDI1XDAwNFwwMDBcMDAyXDAyNSIgKwotICAgICJcMDA0XDAwMFwwMDJcMDI1XDAwNFwwMDBcMDAyXDAyNVwwMDRcMDAwXDAwMlwwMjVcMDA0IiArCi0gICAgIlwwMDBcMDAyXDA0MlwwMDNcMDAwXDAwMlwwNDBcMDAzXDAwMFwwMDJcMDQwXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNzFcMDAzXDAwMFwwMDJcMDcxXDAwM1wwMDBcMDAyXDAyM1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDIzXDAwNVwwMDBcMDAyXDAyM1wwMDVcMDAwXDAwMlwxMjNcMDA0XDAwMFwwMDJcMDM0IiArCi0gICAgIlwwMDRcMDAwXDAwMlwwMzRcMDAyXDAwMFwwMDJcMTI0XDAwNVwwMDBcMDAyXDAzN1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDM3XDAwM1wwMDBcMDAyXDAzN1wwMDNcMDAwXDAwMlwwMzdcMDAzXDAwMCIgKwotICAgICJcMDAyXDAzN1wwMDNcMDAwXDAwMlwwNzNcMDAzXDAwMFwwMDJcMDczXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNzdcMDAzXDAwMFwwMDJcMDc3XDAwM1wwMDBcMDAyXDA3N1wwMDNcMDAwXDAwMlwwNzQiICsKLSAgICAiXDAwNFwwMDBcMDAyXDAzMlwwMDRcMDAwXDAwMlwwMzJcMDA1XDAwMFwwMDJcMDc1XDAwMyIgKwotICAgICJcMDAwXDAwMlwwNzZcMDA1XDAwMFwwMDJcMDc2XDAwNlwwMDBcMDAyXDAzMVwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDMxXDAwNVwwMDBcMDAyXDA1MFwwMDNcMDAwXDAwMlwwNTBcMDA0XDAwMFwwMDIiICsKLSAgICAiXDA1MVwwMDNcMDAwXDAwMlwwNTFcMDA0XDAwMFwwMDJcMDUxXDAwNVwwMDBcMDAyXDAyNCIgKwotICAgICJcMDAzXDAwMFwwMDJcMDI0XDAwM1wwMDBcMDAyXDAyNFwwMDNcMDAwXDAwMlwwMzBcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAzMFwwMDNcMDAwXDAwMlwwMzBcMDA1XDAwMFwwMDJcMDE3XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMiIgKwotICAgICJcMDcyXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyXDExMFwwMDUiICsKLSAgICAiXDAwMFwwMDJcMTAzXDAwNVwwMDBcMDAyXDEwM1wwMDZcMDAwXDAwMlwxMDNcMDA2XDAwMCIgKwotICAgICJcMDAyXDEwNFwwMDVcMDAwXDAwMlwxMDVcMDA1XDAwMFwwMDJcMTA2XDAwNVwwMDBcMDAyIiArCi0gICAgIlwxMDZcMDA2XDAwMFwwMDJcMTA2XDAwNlwwMDBcMDAyXDEwN1wwMDVcMDAwXDAwMlwxMDciICsKLSAgICAiXDAwNlwwMDBcMDAyXDEwN1wwMTBcMDAwXDAwMlwwMTVcMDAzXDAwMFwwMDJcMDE1XDAwMyIgKwotICAgICJcMDAwXDAwMlwxMTJcMDA2XDAwMFwwMDJcMDE0XDAwM1wwMDBcMDAyXDExMVwwMDVcMDAwIiArCi0gICAgIlwwMDJcMTExXDAwNlwwMDBcMDAyXDExMVwwMTBcMDAwXDAwMlwxMTFcMDExXDAwMFwwMDIiICsKLSAgICAiXDAxMVwwMDNcMDAwXDAwMlwwMTFcMDAzXDAwMFwwMDJcMTEzXDAwNlwwMDBcMDAyXDAxMCIgKwotICAgICJcMDAzXDAwMFwwMDJcMDE2XDAwM1wwMDBcMDAyXDAxM1wwMDNcMDAwXDAwMlwwMTJcMDAzIiArCi0gICAgIlwwMDBcMDAyXDEwMVwwMDNcMDAwXDAwMlwxMDBcMDAzXDAwMFwwMDJcMTAyXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDdcMDAzXDAwMFwwMDJcMDIyXDAwM1wwMDBcMDAyXDAyMFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDIwXDAwNVwwMDBcMDAyXDAwNVwwMDNcMDAwXDAwMlwwMDZcMDAzXDAwMFwwMDJcMDIxIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMjFcMDA1XDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDMiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwIiArCi0gICAgIlwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwMyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDMiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNCIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDQiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzIiB9KTsKLQotICAvKiogQWNjZXNzIHRvIHByb2R1Y3Rpb24gdGFibGUuICovCi0gIHB1YmxpYyBzaG9ydFtdW10gcHJvZHVjdGlvbl90YWJsZSgpIHtyZXR1cm4gX3Byb2R1Y3Rpb25fdGFibGU7fQotCi0gIC8qKiBQYXJzZS1hY3Rpb24gdGFibGUuICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgc2hvcnRbXVtdIF9hY3Rpb25fdGFibGUgPSAKLSAgICB1bnBhY2tGcm9tU3RyaW5ncyhuZXcgU3RyaW5nW10gewotICAgICJcMDAwXHUwMTk0XDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjQiICsKLSAgICAiXDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NSIgKwotICAgICJcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1IiArCi0gICAgIlwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzEiICsKLSAgICAiXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MiIgKwotICAgICJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyIiArCi0gICAgIlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDExNVwwNzciICsKLSAgICAiXDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0XDEwNFwwNTNcMTA1XDE1NSIgKwotICAgICJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0IiArCi0gICAgIlwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTciICsKLSAgICAiXDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMSIgKwotICAgICJcMTMyXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDFcMDA0XHVmZjQxXDAwNVx1ZmY0MVwwMDZcdWZmMGEiICsKLSAgICAiXDAwN1x1ZmY0MVwwMTBcdWZmNDFcMDExXHVmZjQxXDAxMlx1ZmY0MVwwMTNcdWZmNDFcMDE0XHVmZjQxXDAxNSIgKwotICAgICJcdWZmNDFcMDE2XHVmZjQxXDAxN1x1ZmY0MVwwMjBcdWZmNDFcMDIxXHVmZjQxXDAyMlx1ZmY0MVwwMjNcdWZmNDEiICsKLSAgICAiXDAyNFx1ZmY0MVwwMjVcdWZmNDFcMDI2XHUwMTk2XDAzMVx1ZmY0MVwwMzJcdWZmNDFcMDUzXHVmZjQxXDA1NCIgKwotICAgICJcdWZmNDFcMDU1XHVmZjQxXDA1Nlx1ZmY0MVwwNTdcdWZmNDFcMDYwXHVmZjQxXDA2MVx1ZmY0MVwwNjJcdWZmNDEiICsKLSAgICAiXDA2M1x1ZmY0MVwwNjRcdWZmNDFcMDY1XHVmZjQxXDA2Nlx1ZmY0MVwwNjdcdWZmNDFcMDcxXHVmZjQxXDA3MyIgKwotICAgICJcdWZmNDFcMDc0XHVmZjQxXDA3NVx1ZmY0MVwxMDBcdWZmNDFcMTAxXHVmZjQxXDEwMlx1ZmY0MVwxMDdcdWZmNDEiICsKLSAgICAiXDExMFx1ZmY0MVwxMTFcdWZmNDFcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYzM1wwMDRcdWZmMzNcMDA1IiArCi0gICAgIlx1ZmYzM1wwMDZcdWZlZmNcMDA3XHVmZjMzXDAxMFx1ZmYzM1wwMTFcdWZmMzNcMDEyXHVmZjMzXDAxM1x1ZmYzMyIgKwotICAgICJcMDE0XHVmZjMzXDAxNVx1ZmYzM1wwMTZcdWZmMzNcMDE3XHVmZjMzXDAyMFx1ZmYzM1wwMjFcdWZmMzNcMDIyIiArCi0gICAgIlx1ZmYzM1wwMjNcdWZmMzNcMDI0XHVmZjMzXDAyNVx1ZmYzM1wwMzFcdWZmMzNcMDMyXHVmZjMzXDA1M1x1ZmYzMyIgKwotICAgICJcMDU0XHVmZjMzXDA1NVx1ZmYzM1wwNTZcdWZmMzNcMDU3XHVmZjMzXDA2MFx1ZmYzM1wwNjFcdWZmMzNcMDYyIiArCi0gICAgIlx1ZmYzM1wwNjNcdWZmMzNcMDY0XHVmZjMzXDA2NVx1ZmYzM1wwNjZcdWZmMzNcMDY3XHVmZjMzXDA3MVx1ZmYzMyIgKwotICAgICJcMDczXHVmZjMzXDA3NFx1ZmYzM1wwNzVcdWZmMzNcMTAwXHVmZjMzXDEwMVx1ZmYzM1wxMDJcdWZmMzNcMTA3IiArCi0gICAgIlx1ZmYzM1wxMTBcdWZmMzNcMTExXHVmZjMzXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMTFcMDA0XHVmZjExIiArCi0gICAgIlwwMDVcdWZmMTFcMDA2XHVmZWU2XDAwN1x1ZmYxMVwwMTBcdWZmMTFcMDExXHVmZjExXDAxMlx1ZmYxMVwwMTMiICsKLSAgICAiXHVmZjExXDAxNFx1ZmYxMVwwMTVcdWZmMTFcMDE2XHVmZjExXDAxN1x1ZmYxMVwwMjBcdWZmMTFcMDIxXHVmZjExIiArCi0gICAgIlwwMjJcdWZmMTFcMDIzXHVmZjExXDAyNFx1ZmYxMVwwMjVcdWZmMTFcMDMxXHVmZjExXDAzMlx1ZmYxMVwwNTMiICsKLSAgICAiXHVmZjExXDA1NFx1ZmYxMVwwNTVcdWZmMTFcMDU2XHVmZjExXDA1N1x1ZmYxMVwwNjBcdWZmMTFcMDYxXHVmZjExIiArCi0gICAgIlwwNjJcdWZmMTFcMDYzXHVmZjExXDA2NFx1ZmYxMVwwNjVcdWZmMTFcMDY2XHVmZjExXDA2N1x1ZmYxMVwwNzEiICsKLSAgICAiXHVmZjExXDA3M1x1ZmYxMVwwNzRcdWZmMTFcMDc1XHVmZjExXDEwMFx1ZmYxMVwxMDFcdWZmMTFcMTAyXHVmZjExIiArCi0gICAgIlwxMDdcdWZmMTFcMTEwXHVmZjExXDExMVx1ZmYxMVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjhjXDAwNCIgKwotICAgICJcdWZmOGNcMDA1XHVmZjhjXDAwN1x1ZmY4Y1wwMTBcdWZmOGNcMDExXHVmZjhjXDAxMlx1ZmY4Y1wwMTNcdWZmOGMiICsKLSAgICAiXDAxNFx1ZmY4Y1wwMTVcdWZmOGNcMDE2XHVmZjhjXDAxN1x1ZmY4Y1wwMjBcdWZmOGNcMDIxXHVmZjhjXDAyMiIgKwotICAgICJcdWZmOGNcMDIzXHVmZjhjXDAyNFx1ZmY4Y1wwMjVcdWZmOGNcMDMyXHVmZjhjXDA1M1x1ZmY4Y1wwNTRcdWZmOGMiICsKLSAgICAiXDA1NVx1ZmY4Y1wwNTZcdWZmOGNcMDU3XHVmZjhjXDA2MFx1ZmY4Y1wwNjFcdWZmOGNcMDYyXHVmZjhjXDA2MyIgKwotICAgICJcdWZmOGNcMDY0XHVmZjhjXDA2NVx1ZmY4Y1wwNjZcdWZmOGNcMDY3XHVmZjhjXDA3MVx1ZmY4Y1wwNzNcdWZmOGMiICsKLSAgICAiXDA3NFx1ZmY4Y1wwNzVcdWZmOGNcMTAwXHVmZjhjXDEwMVx1ZmY4Y1wxMDJcdWZmOGNcMTA3XHVmZjhjXDExMCIgKwotICAgICJcdWZmOGNcMTExXHVmZjhjXDAwMVwwMDJcMDAwXDIwNlwwMDZcMTEwXDAxMlwxMTZcMDI3XDA3NyIgKwotICAgICJcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxIiArCi0gICAgIlwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzQiICsKLSAgICAiXDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NiIgKwotICAgICJcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExIiArCi0gICAgIlwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzMiICsKLSAgICAiXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NiIgKwotICAgICJcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwIiArCi0gICAgIlwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTYiICsKLSAgICAiXDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNSIgKwotICAgICJcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMDIyIiArCi0gICAgIlwwMDJcdWZmZmFcMDA1XHVmZmZhXDAwN1x1ZmZmYVwwMzJcdWZmZmFcMTAwXHVmZmZhXDEwMVx1ZmZmYVwxMDciICsKLSAgICAiXHVmZmZhXDExMVx1MDE5M1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjNmXDAwNFx1ZmYzZlwwMDVcdWZmM2YiICsKLSAgICAiXDAwNlx1ZmYwOFwwMDdcdWZmM2ZcMDEwXHVmZjNmXDAxMVx1ZmYzZlwwMTJcdWZmM2ZcMDEzXHVmZjNmXDAxNCIgKwotICAgICJcdWZmM2ZcMDE1XHVmZjNmXDAxNlx1ZmYzZlwwMTdcdWZmM2ZcMDIwXHVmZjNmXDAyMVx1ZmYzZlwwMjJcdWZmM2YiICsKLSAgICAiXDAyM1x1ZmYzZlwwMjRcdWZmM2ZcMDI1XHVmZjNmXDAyNlx1MDE5MlwwMzFcdWZmM2ZcMDMyXHVmZjNmXDA1MyIgKwotICAgICJcdWZmM2ZcMDU0XHVmZjNmXDA1NVx1ZmYzZlwwNTZcdWZmM2ZcMDU3XHVmZjNmXDA2MFx1ZmYzZlwwNjFcdWZmM2YiICsKLSAgICAiXDA2Mlx1ZmYzZlwwNjNcdWZmM2ZcMDY0XHVmZjNmXDA2NVx1ZmYzZlwwNjZcdWZmM2ZcMDY3XHVmZjNmXDA3MSIgKwotICAgICJcdWZmM2ZcMDczXHVmZjNmXDA3NFx1ZmYzZlwwNzVcdWZmM2ZcMTAwXHVmZjNmXDEwMVx1ZmYzZlwxMDJcdWZmM2YiICsKLSAgICAiXDEwN1x1ZmYzZlwxMTBcdWZmM2ZcMTExXHVmZjNmXDAwMVwwMDJcMDAwXDE2NFwwMTJcMTE2XDAzNiIgKwotICAgICJcMjQ2XDAzN1wyNjNcMDQwXHUwMTI0XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTEiICsKLSAgICAiXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1MyIgKwotICAgICJcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwIiArCi0gICAgIlwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzAiICsKLSAgICAiXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NSIgKwotICAgICJcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1IiArCi0gICAgIlwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzQiICsKLSAgICAiXDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMiIgKwotICAgICJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2QiICsKLSAgICAiXDAwNFx1ZmYzZFwwMDVcdWZmM2RcMDA2XHVmZjA2XDAwN1x1ZmYzZFwwMTBcdWZmM2RcMDExXHVmZjNkXDAxMiIgKwotICAgICJcdWZmM2RcMDEzXHVmZjNkXDAxNFx1ZmYzZFwwMTVcdWZmM2RcMDE2XHVmZjNkXDAxN1x1ZmYzZFwwMjBcdWZmM2QiICsKLSAgICAiXDAyMVx1ZmYzZFwwMjJcdWZmM2RcMDIzXHVmZjNkXDAyNFx1ZmYzZFwwMjVcdWZmM2RcMDI2XHUwMTkwXDAzMSIgKwotICAgICJcdWZmM2RcMDMyXHVmZjNkXDA1M1x1ZmYzZFwwNTRcdWZmM2RcMDU1XHVmZjNkXDA1Nlx1ZmYzZFwwNTdcdWZmM2QiICsKLSAgICAiXDA2MFx1ZmYzZFwwNjFcdWZmM2RcMDYyXHVmZjNkXDA2M1x1ZmYzZFwwNjRcdWZmM2RcMDY1XHVmZjNkXDA2NiIgKwotICAgICJcdWZmM2RcMDY3XHVmZjNkXDA3MVx1ZmYzZFwwNzNcdWZmM2RcMDc0XHVmZjNkXDA3NVx1ZmYzZFwxMDBcdWZmM2QiICsKLSAgICAiXDEwMVx1ZmYzZFwxMDJcdWZmM2RcMTA3XHVmZjNkXDExMFx1ZmYzZFwxMTFcdWZmM2RcMDAxXDAwMlwwMDAiICsKLSAgICAiXDAwNFwwMDJcdTAxOGZcMDAxXDAwMlwwMDBcMTIwXDAwMlx1ZmZkM1wwMDVcdWZmZDNcMDA3XHVmZmQzIiArCi0gICAgIlwwMTBcdWZmZDNcMDExXHVmZmQzXDAxMlx1ZmZkM1wwMTNcdWZmZDNcMDE0XHVmZmQzXDAxNVx1ZmZkM1wwMTYiICsKLSAgICAiXHVmZmQzXDAxN1x1ZmZkM1wwMjBcdWZmZDNcMDIxXHVmZmQzXDAyMlx1ZmZkM1wwMjNcdWZmZDNcMDMyXHVmZmQzIiArCi0gICAgIlwwNTNcdWZmZDNcMDU0XHVmZmQzXDA1NVx1ZmZkM1wwNTZcdWZmZDNcMDU3XHVmZmQzXDA2MFx1ZmZkM1wwNjEiICsKLSAgICAiXHVmZmQzXDA2Mlx1ZmZkM1wwNjNcdWZmZDNcMDY0XHVmZmQzXDA2NVx1ZmZkM1wwNjZcdWZmZDNcMDY3XHVmZmQzIiArCi0gICAgIlwwNzFcdWZmZDNcMDczXHVmZmQzXDA3NFx1MDE4Y1wwNzVcdWZmZDNcMTAwXHVmZmQzXDEwMVx1ZmZkM1wxMDIiICsKLSAgICAiXHVmZmQzXDEwN1x1ZmZkM1wxMTBcdWZmZDNcMTExXHVmZmQzXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMTAiICsKLSAgICAiXDAwNFx1ZmYxMFwwMDVcdWZmMTBcMDA2XHVmZWU1XDAwN1x1ZmYxMFwwMTBcdWZmMTBcMDExXHVmZjEwXDAxMiIgKwotICAgICJcdWZmMTBcMDEzXHVmZjEwXDAxNFx1ZmYxMFwwMTVcdWZmMTBcMDE2XHVmZjEwXDAxN1x1ZmYxMFwwMjBcdWZmMTAiICsKLSAgICAiXDAyMVx1ZmYxMFwwMjJcdWZmMTBcMDIzXHVmZjEwXDAyNFx1ZmYxMFwwMjVcdWZmMTBcMDMxXHVmZjEwXDAzMiIgKwotICAgICJcdWZmMTBcMDUzXHVmZjEwXDA1NFx1ZmYxMFwwNTVcdWZmMTBcMDU2XHVmZjEwXDA1N1x1ZmYxMFwwNjBcdWZmMTAiICsKLSAgICAiXDA2MVx1ZmYxMFwwNjJcdWZmMTBcMDYzXHVmZjEwXDA2NFx1ZmYxMFwwNjVcdWZmMTBcMDY2XHVmZjEwXDA2NyIgKwotICAgICJcdWZmMTBcMDcxXHVmZjEwXDA3M1x1ZmYxMFwwNzRcdWZmMTBcMDc1XHVmZjEwXDEwMFx1ZmYxMFwxMDFcdWZmMTAiICsKLSAgICAiXDEwMlx1ZmYxMFwxMDdcdWZmMTBcMTEwXHVmZjEwXDExMVx1ZmYxMFwwMDFcMDAyXDAwMFwxMTJcMDAyIiArCi0gICAgIlx1ZmZkOVwwMDVcdWZmZDlcMDA3XHVmZmQ5XDAxMFx1ZmZkOVwwMTFcdWZmZDlcMDEyXHVmZmQ5XDAxM1x1ZmZkOSIgKwotICAgICJcMDE0XHVmZmQ5XDAxNVx1ZmZkOVwwMTZcdWZmZDlcMDE3XHVmZmQ5XDAyMFx1ZmZkOVwwMjFcdWZmZDlcMDIyIiArCi0gICAgIlx1ZmZkOVwwMjNcdWZmZDlcMDMyXHVmZmQ5XDA1M1x1ZmZkOVwwNTRcdWZmZDlcMDU1XHVmZmQ5XDA1Nlx1ZmZkOSIgKwotICAgICJcMDU3XHVmZmQ5XDA2MFx1ZmZkOVwwNjFcdWZmZDlcMDYyXHVmZmQ5XDA2M1x1ZmZkOVwwNjRcdWZmZDlcMDY1IiArCi0gICAgIlx1ZmZkOVwwNjZcdWZmZDlcMDY3XHUwMTg5XDA3NVx1ZmZkOVwxMDBcdWZmZDlcMTAxXHVmZmQ5XDEwMlx1ZmZkOSIgKwotICAgICJcMTA3XHVmZmQ5XDExMFx1ZmZkOVwxMTFcdWZmZDlcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyMFwwMDQiICsKLSAgICAiXHVmZjIwXDAwNVx1ZmYyMFwwMDZcdTAxODFcMDA3XHVmZjIwXDAxMFx1ZmYyMFwwMTFcdWZmMjBcMDEyXHVmZjIwIiArCi0gICAgIlwwMTNcdWZmMjBcMDE0XHVmZjIwXDAxNVx1ZmYyMFwwMTZcdWZmMjBcMDE3XHVmZjIwXDAyMFx1ZmYyMFwwMjEiICsKLSAgICAiXHVmZjIwXDAyMlx1ZmYyMFwwMjNcdWZmMjBcMDI0XHVmZjIwXDAyNVx1ZmYyMFwwMzFcdWZmMjBcMDMyXHVmZjIwIiArCi0gICAgIlwwMzVcdWZmMjBcMDUzXHVmZjIwXDA1NFx1ZmYyMFwwNTVcdWZmMjBcMDU2XHVmZjIwXDA1N1x1ZmYyMFwwNjAiICsKLSAgICAiXHVmZjIwXDA2MVx1ZmYyMFwwNjJcdWZmMjBcMDYzXHVmZjIwXDA2NFx1ZmYyMFwwNjVcdWZmMjBcMDY2XHVmZjIwIiArCi0gICAgIlwwNjdcdWZmMjBcMDcxXHVmZjIwXDA3M1x1ZmYyMFwwNzRcdWZmMjBcMDc1XHVmZjIwXDEwMFx1ZmYyMFwxMDEiICsKLSAgICAiXHVmZjIwXDEwMlx1ZmYyMFwxMDdcdWZmMjBcMTEwXHVmZjIwXDExMVx1ZmYyMFwwMDFcMDAyXDAwMFwxMjYiICsKLSAgICAiXDAwMlx1ZmY4YlwwMDRcdWZmOGJcMDA1XHVmZjhiXDAwN1x1ZmY4YlwwMTBcdWZmOGJcMDExXHVmZjhiXDAxMiIgKwotICAgICJcdWZmOGJcMDEzXHVmZjhiXDAxNFx1ZmY4YlwwMTVcdWZmOGJcMDE2XHVmZjhiXDAxN1x1ZmY4YlwwMjBcdWZmOGIiICsKLSAgICAiXDAyMVx1ZmY4YlwwMjJcdWZmOGJcMDIzXHVmZjhiXDAyNFx1ZmY4YlwwMjVcdWZmOGJcMDMyXHVmZjhiXDA1MyIgKwotICAgICJcdWZmOGJcMDU0XHVmZjhiXDA1NVx1ZmY4YlwwNTZcdWZmOGJcMDU3XHVmZjhiXDA2MFx1ZmY4YlwwNjFcdWZmOGIiICsKLSAgICAiXDA2Mlx1ZmY4YlwwNjNcdWZmOGJcMDY0XHVmZjhiXDA2NVx1ZmY4YlwwNjZcdWZmOGJcMDY3XHVmZjhiXDA3MSIgKwotICAgICJcdWZmOGJcMDczXHVmZjhiXDA3NFx1ZmY4YlwwNzVcdWZmOGJcMTAwXHVmZjhiXDEwMVx1ZmY4YlwxMDJcdWZmOGIiICsKLSAgICAiXDEwN1x1ZmY4YlwxMTBcdWZmOGJcMTExXHVmZjhiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2VcMDA0IiArCi0gICAgIlx1ZmYzZVwwMDVcdWZmM2VcMDA2XHVmZjA3XDAwN1x1ZmYzZVwwMTBcdWZmM2VcMDExXHVmZjNlXDAxMlx1ZmYzZSIgKwotICAgICJcMDEzXHVmZjNlXDAxNFx1ZmYzZVwwMTVcdWZmM2VcMDE2XHVmZjNlXDAxN1x1ZmYzZVwwMjBcdWZmM2VcMDIxIiArCi0gICAgIlx1ZmYzZVwwMjJcdWZmM2VcMDIzXHVmZjNlXDAyNFx1ZmYzZVwwMjVcdWZmM2VcMDI2XHUwMTgwXDAzMVx1ZmYzZSIgKwotICAgICJcMDMyXHVmZjNlXDA1M1x1ZmYzZVwwNTRcdWZmM2VcMDU1XHVmZjNlXDA1Nlx1ZmYzZVwwNTdcdWZmM2VcMDYwIiArCi0gICAgIlx1ZmYzZVwwNjFcdWZmM2VcMDYyXHVmZjNlXDA2M1x1ZmYzZVwwNjRcdWZmM2VcMDY1XHVmZjNlXDA2Nlx1ZmYzZSIgKwotICAgICJcMDY3XHVmZjNlXDA3MVx1ZmYzZVwwNzNcdWZmM2VcMDc0XHVmZjNlXDA3NVx1ZmYzZVwxMDBcdWZmM2VcMTAxIiArCi0gICAgIlx1ZmYzZVwxMDJcdWZmM2VcMTA3XHVmZjNlXDExMFx1ZmYzZVwxMTFcdWZmM2VcMDAxXDAwMlwwMDBcMjQ0IiArCi0gICAgIlwwMDJcdWZmYmVcMDA1XHVmZmJlXDAwNlwxMTBcMDA3XHVmZmJlXDAxMFx1ZmZiZVwwMTFcdWZmYmVcMDEyIiArCi0gICAgIlwxMTZcMDEzXHVmZmJlXDAxNFx1ZmZiZVwwMTVcdWZmYmVcMDE2XHVmZmJlXDAxN1x1ZmZiZVwwMjBcdWZmYmUiICsKLSAgICAiXDAyMVx1ZmZiZVwwMjJcdWZmYmVcMDIzXHVmZmJlXDAyN1wwNzdcMDMwXDEyNVwwMzJcdWZmYmVcMDMzIiArCi0gICAgIlwxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDQiICsKLSAgICAiXDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MSIgKwotICAgICJcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2IiArCi0gICAgIlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjYiICsKLSAgICAiXDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MSIgKwotICAgICJcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzIiArCi0gICAgIlwyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTIiICsKLSAgICAiXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMCIgKwotICAgICJcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyIiArCi0gICAgIlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjMyXDAwNCIgKwotICAgICJcdWZmMzJcMDA1XHVmZjMyXDAwNlx1ZmVmYlwwMDdcdWZmMzJcMDEwXHVmZjMyXDAxMVx1ZmYzMlwwMTJcdWZmMzIiICsKLSAgICAiXDAxM1x1ZmYzMlwwMTRcdWZmMzJcMDE1XHVmZjMyXDAxNlx1ZmYzMlwwMTdcdWZmMzJcMDIwXHVmZjMyXDAyMSIgKwotICAgICJcdWZmMzJcMDIyXHVmZjMyXDAyM1x1ZmYzMlwwMjRcdWZmMzJcMDI1XHVmZjMyXDAzMVx1ZmYzMlwwMzJcdWZmMzIiICsKLSAgICAiXDA1M1x1ZmYzMlwwNTRcdWZmMzJcMDU1XHVmZjMyXDA1Nlx1ZmYzMlwwNTdcdWZmMzJcMDYwXHVmZjMyXDA2MSIgKwotICAgICJcdWZmMzJcMDYyXHVmZjMyXDA2M1x1ZmYzMlwwNjRcdWZmMzJcMDY1XHVmZjMyXDA2Nlx1ZmYzMlwwNjdcdWZmMzIiICsKLSAgICAiXDA3MVx1ZmYzMlwwNzNcdWZmMzJcMDc0XHVmZjMyXDA3NVx1ZmYzMlwxMDBcdWZmMzJcMTAxXHVmZjMyXDEwMiIgKwotICAgICJcdWZmMzJcMTA3XHVmZjMyXDExMFx1ZmYzMlwxMTFcdWZmMzJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5MCIgKwotICAgICJcMDA0XHVmZjkwXDAwNVx1ZmY5MFwwMDdcdWZmOTBcMDEwXHVmZjkwXDAxMVx1ZmY5MFwwMTJcdWZmOTBcMDEzIiArCi0gICAgIlx1ZmY5MFwwMTRcdWZmOTBcMDE1XHVmZjkwXDAxNlx1ZmY5MFwwMTdcdWZmOTBcMDIwXHVmZjkwXDAyMVx1ZmY5MCIgKwotICAgICJcMDIyXHVmZjkwXDAyM1x1ZmY5MFwwMjRcdWZmOTBcMDI1XHVmZjkwXDAzMlx1ZmY5MFwwNTNcdWZmOTBcMDU0IiArCi0gICAgIlx1ZmY5MFwwNTVcdWZmOTBcMDU2XHVmZjkwXDA1N1x1ZmY5MFwwNjBcdWZmOTBcMDYxXHVmZjkwXDA2Mlx1ZmY5MCIgKwotICAgICJcMDYzXHVmZjkwXDA2NFx1ZmY5MFwwNjVcdWZmOTBcMDY2XHVmZjkwXDA2N1x1ZmY5MFwwNzFcdWZmOTBcMDczIiArCi0gICAgIlx1ZmY5MFwwNzRcdWZmOTBcMDc1XHVmZjkwXDEwMFx1ZmY5MFwxMDFcdWZmOTBcMTAyXHVmZjkwXDEwN1x1ZmY5MCIgKwotICAgICJcMTEwXHVmZjkwXDExMVx1ZmY5MFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjFjXDAwNFx1ZmYxY1wwMDUiICsKLSAgICAiXHVmZjFjXDAwNlx1MDE3ZFwwMDdcdWZmMWNcMDEwXHVmZjFjXDAxMVx1ZmYxY1wwMTJcdWZmMWNcMDEzXHVmZjFjIiArCi0gICAgIlwwMTRcdWZmMWNcMDE1XHVmZjFjXDAxNlx1ZmYxY1wwMTdcdWZmMWNcMDIwXHVmZjFjXDAyMVx1ZmYxY1wwMjIiICsKLSAgICAiXHVmZjFjXDAyM1x1ZmYxY1wwMjRcdWZmMWNcMDI1XHVmZjFjXDAzMVx1ZmYxY1wwMzJcdWZmMWNcMDM1XHVmZjFjIiArCi0gICAgIlwwNTNcdWZmMWNcMDU0XHVmZjFjXDA1NVx1ZmYxY1wwNTZcdWZmMWNcMDU3XHVmZjFjXDA2MFx1ZmYxY1wwNjEiICsKLSAgICAiXHVmZjFjXDA2Mlx1ZmYxY1wwNjNcdWZmMWNcMDY0XHVmZjFjXDA2NVx1ZmYxY1wwNjZcdWZmMWNcMDY3XHVmZjFjIiArCi0gICAgIlwwNzFcdWZmMWNcMDczXHVmZjFjXDA3NFx1ZmYxY1wwNzVcdWZmMWNcMTAwXHVmZjFjXDEwMVx1ZmYxY1wxMDIiICsKLSAgICAiXHVmZjFjXDEwN1x1ZmYxY1wxMTBcdWZmMWNcMTExXHVmZjFjXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzYiICsKLSAgICAiXDAwNFx1ZmY3NlwwMDVcdWZmNzZcMDA3XHVmZjc2XDAxMFx1ZmY3NlwwMTFcdWZmNzZcMDEyXHVmZjc2XDAxMyIgKwotICAgICJcdWZmNzZcMDE0XHVmZjc2XDAxNVx1ZmY3NlwwMTZcdWZmNzZcMDE3XHVmZjc2XDAyMFx1ZmY3NlwwMjFcdWZmNzYiICsKLSAgICAiXDAyMlx1ZmY3NlwwMjNcdWZmNzZcMDI0XHVmZjc2XDAyNVx1ZmY3NlwwMzJcdWZmNzZcMDM1XHVmZjc2XDA1MyIgKwotICAgICJcdWZmNzZcMDU0XHVmZjc2XDA1NVx1ZmY3NlwwNTZcdWZmNzZcMDU3XHVmZjc2XDA2MFx1ZmY3NlwwNjFcdWZmNzYiICsKLSAgICAiXDA2Mlx1ZmY3NlwwNjNcdWZmNzZcMDY0XHVmZjc2XDA2NVx1ZmY3NlwwNjZcdWZmNzZcMDY3XHVmZjc2XDA3MSIgKwotICAgICJcdWZmNzZcMDczXHVmZjc2XDA3NFx1ZmY3NlwwNzVcdWZmNzZcMTAwXHVmZjc2XDEwMVx1ZmY3NlwxMDJcdWZmNzYiICsKLSAgICAiXDEwN1x1ZmY3NlwxMTBcdWZmNzZcMTExXHVmZjc2XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzBcMDA0IiArCi0gICAgIlx1ZmY3MFwwMDVcdWZmNzBcMDA3XHVmZjcwXDAxMFx1ZmY3MFwwMTFcdWZmNzBcMDEyXHVmZjcwXDAxM1x1ZmY3MCIgKwotICAgICJcMDE0XHVmZjcwXDAxNVx1ZmY3MFwwMTZcdWZmNzBcMDE3XHVmZjcwXDAyMFx1ZmY3MFwwMjFcdWZmNzBcMDIyIiArCi0gICAgIlx1ZmY3MFwwMjNcdWZmNzBcMDI0XHVmZjcwXDAyNVx1ZmY3MFwwMzJcdWZmNzBcMDM1XHVmZjcwXDA1M1x1ZmY3MCIgKwotICAgICJcMDU0XHVmZjcwXDA1NVx1ZmY3MFwwNTZcdWZmNzBcMDU3XHVmZjcwXDA2MFx1ZmY3MFwwNjFcdWZmNzBcMDYyIiArCi0gICAgIlx1ZmY3MFwwNjNcdWZmNzBcMDY0XHVmZjcwXDA2NVx1ZmY3MFwwNjZcdWZmNzBcMDY3XHVmZjcwXDA3MVx1ZmY3MCIgKwotICAgICJcMDczXHVmZjcwXDA3NFx1ZmY3MFwwNzVcdWZmNzBcMTAwXHVmZjcwXDEwMVx1ZmY3MFwxMDJcdWZmNzBcMTA3IiArCi0gICAgIlx1ZmY3MFwxMTBcdWZmNzBcMTExXHVmZjcwXDAwMVwwMDJcMDAwXDA3MFwwMDJcdWZmZTlcMDA1XHVmZmU5IiArCi0gICAgIlwwMDdcdWZmZTlcMDEwXHUwMTc4XDAxMVx1MDE3OVwwMTRcdWZmZTlcMDE1XHVmZmU5XDAxNlx1ZmZlOVwwMTciICsKLSAgICAiXHVmZmU5XDAyMFx1ZmZlOVwwMjFcdWZmZTlcMDIyXHVmZmU5XDAyM1x1ZmZlOVwwMzJcdWZmZTlcMDUzXHVmZmU5IiArCi0gICAgIlwwNTRcdWZmZTlcMDU1XHVmZmU5XDA1Nlx1ZmZlOVwwNTdcdWZmZTlcMDYwXHVmZmU5XDA3NVx1ZmZlOVwxMDAiICsKLSAgICAiXHVmZmU5XDEwMVx1ZmZlOVwxMDJcdTAxNzdcMTA3XHVmZmU5XDExMFx1ZmZlOVwxMTFcdWZmZTlcMDAxXDAwMiIgKwotICAgICJcMDAwXDEyNFwwMDJcdWZmYjdcMDA1XHVmZmI3XDAwN1x1ZmZiN1wwMTBcdWZmYjdcMDExXHVmZmI3XDAxMiIgKwotICAgICJcdWZmYjdcMDEzXHVmZmI3XDAxNFx1ZmZiN1wwMTVcdWZmYjdcMDE2XHVmZmI3XDAxN1x1ZmZiN1wwMjBcdWZmYjciICsKLSAgICAiXDAyMVx1ZmZiN1wwMjJcdWZmYjdcMDIzXHVmZmI3XDAyNFx1ZmZiN1wwMjVcdWZmYjdcMDMyXHVmZmI3XDA1MyIgKwotICAgICJcdWZmYjdcMDU0XHVmZmI3XDA1NVx1ZmZiN1wwNTZcdWZmYjdcMDU3XHVmZmI3XDA2MFx1ZmZiN1wwNjFcdWZmYjciICsKLSAgICAiXDA2Mlx1ZmZiN1wwNjNcdWZmYjdcMDY0XHVmZmI3XDA2NVx1ZmZiN1wwNjZcdWZmYjdcMDY3XHVmZmI3XDA3MSIgKwotICAgICJcdWZmYjdcMDczXHVmZmI3XDA3NFx1ZmZiN1wwNzVcdWZmYjdcMTAwXHVmZmI3XDEwMVx1ZmZiN1wxMDJcdWZmYjciICsKLSAgICAiXDEwN1x1ZmZiN1wxMTBcdWZmYjdcMTExXHVmZmI3XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2NcMDA0IiArCi0gICAgIlx1ZmYzY1wwMDVcdWZmM2NcMDA2XHVmZjA1XDAwN1x1ZmYzY1wwMTBcdWZmM2NcMDExXHVmZjNjXDAxMlx1ZmYzYyIgKwotICAgICJcMDEzXHVmZjNjXDAxNFx1ZmYzY1wwMTVcdWZmM2NcMDE2XHVmZjNjXDAxN1x1ZmYzY1wwMjBcdWZmM2NcMDIxIiArCi0gICAgIlx1ZmYzY1wwMjJcdWZmM2NcMDIzXHVmZjNjXDAyNFx1ZmYzY1wwMjVcdWZmM2NcMDI2XHUwMTc2XDAzMVx1ZmYzYyIgKwotICAgICJcMDMyXHVmZjNjXDA1M1x1ZmYzY1wwNTRcdWZmM2NcMDU1XHVmZjNjXDA1Nlx1ZmYzY1wwNTdcdWZmM2NcMDYwIiArCi0gICAgIlx1ZmYzY1wwNjFcdWZmM2NcMDYyXHVmZjNjXDA2M1x1ZmYzY1wwNjRcdWZmM2NcMDY1XHVmZjNjXDA2Nlx1ZmYzYyIgKwotICAgICJcMDY3XHVmZjNjXDA3MVx1ZmYzY1wwNzNcdWZmM2NcMDc0XHVmZjNjXDA3NVx1ZmYzY1wxMDBcdWZmM2NcMTAxIiArCi0gICAgIlx1ZmYzY1wxMDJcdWZmM2NcMTA3XHVmZjNjXDExMFx1ZmYzY1wxMTFcdWZmM2NcMDAxXDAwMlwwMDBcMDA0IiArCi0gICAgIlwwMDZcdWZmNDlcMDAxXDAwMlwwMDBcMTY0XDAxMlwxMTZcMDM2XDI0NlwwMzdcMjYzXDA0MCIgKwotICAgICJcdTAxMjRcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTAiICsKLSAgICAiXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NSIgKwotICAgICJcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxIiArCi0gICAgIlwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzIiICsKLSAgICAiXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NiIgKwotICAgICJcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3IiArCi0gICAgIlwzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjEiICsKLSAgICAiXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNCIgKwotICAgICJcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYxM1wwMDRcdWZmMTNcMDA1XHVmZjEzIiArCi0gICAgIlwwMDZcdWZlZThcMDA3XHVmZjEzXDAxMFx1ZmYxM1wwMTFcdWZmMTNcMDEyXHVmZjEzXDAxM1x1ZmYxM1wwMTQiICsKLSAgICAiXHVmZjEzXDAxNVx1ZmYxM1wwMTZcdWZmMTNcMDE3XHVmZjEzXDAyMFx1ZmYxM1wwMjFcdWZmMTNcMDIyXHVmZjEzIiArCi0gICAgIlwwMjNcdWZmMTNcMDI0XHVmZjEzXDAyNVx1ZmYxM1wwMzFcdWZmMTNcMDMyXHVmZjEzXDA1M1x1ZmYxM1wwNTQiICsKLSAgICAiXHVmZjEzXDA1NVx1ZmYxM1wwNTZcdWZmMTNcMDU3XHVmZjEzXDA2MFx1ZmYxM1wwNjFcdWZmMTNcMDYyXHVmZjEzIiArCi0gICAgIlwwNjNcdWZmMTNcMDY0XHVmZjEzXDA2NVx1ZmYxM1wwNjZcdWZmMTNcMDY3XHVmZjEzXDA3MVx1ZmYxM1wwNzMiICsKLSAgICAiXHVmZjEzXDA3NFx1ZmYxM1wwNzVcdWZmMTNcMTAwXHVmZjEzXDEwMVx1ZmYxM1wxMDJcdWZmMTNcMTA3XHVmZjEzIiArCi0gICAgIlwxMTBcdWZmMTNcMTExXHVmZjEzXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmNTJcMDA0XHVmZjUyXDAwNSIgKwotICAgICJcdWZmNTJcMDA3XHVmZjUyXDAxMFx1ZmY1MlwwMTFcdWZmNTJcMDEyXHVmZjUyXDAxM1x1ZmY1MlwwMTRcdWZmNTIiICsKLSAgICAiXDAxNVx1ZmY1MlwwMTZcdWZmNTJcMDE3XHVmZjUyXDAyMFx1ZmY1MlwwMjFcdWZmNTJcMDIyXHVmZjUyXDAyMyIgKwotICAgICJcdWZmNTJcMDI0XHVmZjUyXDAyNVx1ZmY1MlwwMzJcdWZmNTJcMDUzXHVmZjUyXDA1NFx1ZmY1MlwwNTVcdWZmNTIiICsKLSAgICAiXDA1Nlx1ZmY1MlwwNTdcdWZmNTJcMDYwXHVmZjUyXDA2MVx1ZmY1MlwwNjJcdWZmNTJcMDYzXHVmZjUyXDA2NCIgKwotICAgICJcdWZmNTJcMDY1XHVmZjUyXDA2Nlx1ZmY1MlwwNjdcdWZmNTJcMDcxXHVmZjUyXDA3M1x1ZmY1MlwwNzRcdWZmNTIiICsKLSAgICAiXDA3NVx1ZmY1MlwxMDBcdWZmNTJcMTAxXHVmZjUyXDEwMlx1ZmY1MlwxMDdcdWZmNTJcMTEwXHVmZjUyXDExMSIgKwotICAgICJcdWZmNTJcMDAxXDAwMlwwMDBcMTE2XDAwMlx1ZmZkNVwwMDVcdWZmZDVcMDA3XHVmZmQ1XDAxMFx1ZmZkNSIgKwotICAgICJcMDExXHVmZmQ1XDAxMlx1ZmZkNVwwMTNcdWZmZDVcMDE0XHVmZmQ1XDAxNVx1ZmZkNVwwMTZcdWZmZDVcMDE3IiArCi0gICAgIlx1ZmZkNVwwMjBcdWZmZDVcMDIxXHVmZmQ1XDAyMlx1ZmZkNVwwMjNcdWZmZDVcMDMyXHVmZmQ1XDA1M1x1ZmZkNSIgKwotICAgICJcMDU0XHVmZmQ1XDA1NVx1ZmZkNVwwNTZcdWZmZDVcMDU3XHVmZmQ1XDA2MFx1ZmZkNVwwNjFcdWZmZDVcMDYyIiArCi0gICAgIlx1ZmZkNVwwNjNcdWZmZDVcMDY0XHVmZmQ1XDA2NVx1ZmZkNVwwNjZcdWZmZDVcMDY3XHVmZmQ1XDA3MVx1ZmZkNSIgKwotICAgICJcMDczXHUwMTcwXDA3NVx1ZmZkNVwxMDBcdWZmZDVcMTAxXHVmZmQ1XDEwMlx1ZmZkNVwxMDdcdWZmZDVcMTEwIiArCi0gICAgIlx1ZmZkNVwxMTFcdWZmZDVcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1MFwwMDRcdWZmNTBcMDA1XHVmZjUwIiArCi0gICAgIlwwMDdcdWZmNTBcMDEwXHVmZjUwXDAxMVx1ZmY1MFwwMTJcdWZmNTBcMDEzXHVmZjUwXDAxNFx1ZmY1MFwwMTUiICsKLSAgICAiXHVmZjUwXDAxNlx1ZmY1MFwwMTdcdWZmNTBcMDIwXHVmZjUwXDAyMVx1ZmY1MFwwMjJcdWZmNTBcMDIzXHVmZjUwIiArCi0gICAgIlwwMjRcdWZmNTBcMDI1XHVmZjUwXDAzMlx1ZmY1MFwwNTNcdWZmNTBcMDU0XHVmZjUwXDA1NVx1ZmY1MFwwNTYiICsKLSAgICAiXHVmZjUwXDA1N1x1ZmY1MFwwNjBcdWZmNTBcMDYxXHVmZjUwXDA2Mlx1ZmY1MFwwNjNcdWZmNTBcMDY0XHVmZjUwIiArCi0gICAgIlwwNjVcdWZmNTBcMDY2XHVmZjUwXDA2N1x1ZmY1MFwwNzFcdWZmNTBcMDczXHVmZjUwXDA3NFx1ZmY1MFwwNzUiICsKLSAgICAiXHVmZjUwXDEwMFx1ZmY1MFwxMDFcdWZmNTBcMTAyXHVmZjUwXDEwN1x1ZmY1MFwxMTBcdWZmNTBcMTExXHVmZjUwIiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmZjXDAwNVx1ZmZmY1wwMDdcdWZmZmNcMDMyXHVmZmZjXDEwMCIgKwotICAgICJcdWZmZmNcMTAxXHVmZmZjXDEwN1x1ZmZmY1wwMDFcMDAyXDAwMFwwMDZcMDAyXDAwMVwwMzJcMjI0IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQ1XDAwNFx1ZmY0NVwwMDVcdWZmNDVcMDA2XHVmZjBkXDAwNyIgKwotICAgICJcdWZmNDVcMDEwXHVmZjQ1XDAxMVx1ZmY0NVwwMTJcdWZmNDVcMDEzXHVmZjQ1XDAxNFx1ZmY0NVwwMTVcdWZmNDUiICsKLSAgICAiXDAxNlx1ZmY0NVwwMTdcdWZmNDVcMDIwXHVmZjQ1XDAyMVx1ZmY0NVwwMjJcdWZmNDVcMDIzXHVmZjQ1XDAyNCIgKwotICAgICJcdWZmNDVcMDI1XHVmZjQ1XDAyNlx1MDE2ZlwwMzFcdWZmNDVcMDMyXHVmZjQ1XDA1M1x1ZmY0NVwwNTRcdWZmNDUiICsKLSAgICAiXDA1NVx1ZmY0NVwwNTZcdWZmNDVcMDU3XHVmZjQ1XDA2MFx1ZmY0NVwwNjFcdWZmNDVcMDYyXHVmZjQ1XDA2MyIgKwotICAgICJcdWZmNDVcMDY0XHVmZjQ1XDA2NVx1ZmY0NVwwNjZcdWZmNDVcMDY3XHVmZjQ1XDA3MVx1ZmY0NVwwNzNcdWZmNDUiICsKLSAgICAiXDA3NFx1ZmY0NVwwNzVcdWZmNDVcMTAwXHVmZjQ1XDEwMVx1ZmY0NVwxMDJcdWZmNDVcMTA3XHVmZjQ1XDExMCIgKwotICAgICJcdWZmNDVcMTExXHVmZjQ1XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDBcMDA0XHVmZjQwXDAwNVx1ZmY0MCIgKwotICAgICJcMDA2XHVmZjA5XDAwN1x1ZmY0MFwwMTBcdWZmNDBcMDExXHVmZjQwXDAxMlx1ZmY0MFwwMTNcdWZmNDBcMDE0IiArCi0gICAgIlx1ZmY0MFwwMTVcdWZmNDBcMDE2XHVmZjQwXDAxN1x1ZmY0MFwwMjBcdWZmNDBcMDIxXHVmZjQwXDAyMlx1ZmY0MCIgKwotICAgICJcMDIzXHVmZjQwXDAyNFx1ZmY0MFwwMjVcdWZmNDBcMDI2XHUwMTZlXDAzMVx1ZmY0MFwwMzJcdWZmNDBcMDUzIiArCi0gICAgIlx1ZmY0MFwwNTRcdWZmNDBcMDU1XHVmZjQwXDA1Nlx1ZmY0MFwwNTdcdWZmNDBcMDYwXHVmZjQwXDA2MVx1ZmY0MCIgKwotICAgICJcMDYyXHVmZjQwXDA2M1x1ZmY0MFwwNjRcdWZmNDBcMDY1XHVmZjQwXDA2Nlx1ZmY0MFwwNjdcdWZmNDBcMDcxIiArCi0gICAgIlx1ZmY0MFwwNzNcdWZmNDBcMDc0XHVmZjQwXDA3NVx1ZmY0MFwxMDBcdWZmNDBcMTAxXHVmZjQwXDEwMlx1ZmY0MCIgKwotICAgICJcMTA3XHVmZjQwXDExMFx1ZmY0MFwxMTFcdWZmNDBcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY0ZFwwMDQiICsKLSAgICAiXHVmZjRkXDAwNVx1ZmY0ZFwwMDdcdWZmNGRcMDEwXHVmZjRkXDAxMVx1ZmY0ZFwwMTJcdWZmNGRcMDEzXHVmZjRkIiArCi0gICAgIlwwMTRcdWZmNGRcMDE1XHVmZjRkXDAxNlx1ZmY0ZFwwMTdcdWZmNGRcMDIwXHVmZjRkXDAyMVx1ZmY0ZFwwMjIiICsKLSAgICAiXHVmZjRkXDAyM1x1ZmY0ZFwwMjRcdWZmNGRcMDI1XHVmZjRkXDAzMVx1MDE2Y1wwMzJcdWZmNGRcMDUzXHVmZjRkIiArCi0gICAgIlwwNTRcdWZmNGRcMDU1XHVmZjRkXDA1Nlx1ZmY0ZFwwNTdcdWZmNGRcMDYwXHVmZjRkXDA2MVx1ZmY0ZFwwNjIiICsKLSAgICAiXHVmZjRkXDA2M1x1ZmY0ZFwwNjRcdWZmNGRcMDY1XHVmZjRkXDA2Nlx1ZmY0ZFwwNjdcdWZmNGRcMDcxXHVmZjRkIiArCi0gICAgIlwwNzNcdWZmNGRcMDc0XHVmZjRkXDA3NVx1ZmY0ZFwxMDBcdWZmNGRcMTAxXHVmZjRkXDEwMlx1ZmY0ZFwxMDciICsKLSAgICAiXHVmZjRkXDExMFx1ZmY0ZFwxMTFcdWZmNGRcMDAxXDAwMlwwMDBcMTEwXDAwMlx1ZmZkY1wwMDVcdWZmZGMiICsKLSAgICAiXDAwN1x1ZmZkY1wwMTBcdWZmZGNcMDExXHVmZmRjXDAxMlx1ZmZkY1wwMTNcdWZmZGNcMDE0XHVmZmRjXDAxNSIgKwotICAgICJcdWZmZGNcMDE2XHVmZmRjXDAxN1x1ZmZkY1wwMjBcdWZmZGNcMDIxXHVmZmRjXDAyMlx1ZmZkY1wwMjNcdWZmZGMiICsKLSAgICAiXDAzMlx1ZmZkY1wwNTNcdWZmZGNcMDU0XHVmZmRjXDA1NVx1ZmZkY1wwNTZcdWZmZGNcMDU3XHVmZmRjXDA2MCIgKwotICAgICJcdWZmZGNcMDYxXHVmZmRjXDA2Mlx1ZmZkY1wwNjNcdWZmZGNcMDY0XHVmZmRjXDA2NVx1ZmZkY1wwNjZcdWZmZGMiICsKLSAgICAiXDA3NVx1ZmZkY1wxMDBcdWZmZGNcMTAxXHVmZmRjXDEwMlx1ZmZkY1wxMDdcdWZmZGNcMTEwXHVmZmRjXDExMSIgKwotICAgICJcdWZmZGNcMDAxXDAwMlwwMDBcMTA0XDAwMlx1ZmZlNFwwMDVcdWZmZTRcMDA3XHVmZmU0XDAxMFx1ZmZlNCIgKwotICAgICJcMDExXHVmZmU0XDAxMlx1ZmZlNFwwMTNcdTAxMGVcMDE0XHVmZmU0XDAxNVx1ZmZlNFwwMTZcdWZmZTRcMDE3IiArCi0gICAgIlx1ZmZlNFwwMjBcdWZmZTRcMDIxXHVmZmU0XDAyMlx1ZmZlNFwwMjNcdWZmZTRcMDMyXHVmZmU0XDA1M1x1ZmZlNCIgKwotICAgICJcMDU0XHVmZmU0XDA1NVx1ZmZlNFwwNTZcdWZmZTRcMDU3XHVmZmU0XDA2MFx1ZmZlNFwwNjFcdWZmZTRcMDYyIiArCi0gICAgIlx1ZmZlNFwwNjNcdWZmZTRcMDY0XHUwMTBkXDA3NVx1ZmZlNFwxMDBcdWZmZTRcMTAxXHVmZmU0XDEwMlx1ZmZlNCIgKwotICAgICJcMTA3XHVmZmU0XDExMFx1ZmZlNFwxMTFcdWZmZTRcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYxMlwwMDQiICsKLSAgICAiXHVmZjEyXDAwNVx1ZmYxMlwwMDZcdWZlZTdcMDA3XHVmZjEyXDAxMFx1ZmYxMlwwMTFcdWZmMTJcMDEyXHVmZjEyIiArCi0gICAgIlwwMTNcdWZmMTJcMDE0XHVmZjEyXDAxNVx1ZmYxMlwwMTZcdWZmMTJcMDE3XHVmZjEyXDAyMFx1ZmYxMlwwMjEiICsKLSAgICAiXHVmZjEyXDAyMlx1ZmYxMlwwMjNcdWZmMTJcMDI0XHVmZjEyXDAyNVx1ZmYxMlwwMzFcdWZmMTJcMDMyXHVmZjEyIiArCi0gICAgIlwwNTNcdWZmMTJcMDU0XHVmZjEyXDA1NVx1ZmYxMlwwNTZcdWZmMTJcMDU3XHVmZjEyXDA2MFx1ZmYxMlwwNjEiICsKLSAgICAiXHVmZjEyXDA2Mlx1ZmYxMlwwNjNcdWZmMTJcMDY0XHVmZjEyXDA2NVx1ZmYxMlwwNjZcdWZmMTJcMDY3XHVmZjEyIiArCi0gICAgIlwwNzFcdWZmMTJcMDczXHVmZjEyXDA3NFx1ZmYxMlwwNzVcdWZmMTJcMTAwXHVmZjEyXDEwMVx1ZmYxMlwxMDIiICsKLSAgICAiXHVmZjEyXDEwN1x1ZmYxMlwxMTBcdWZmMTJcMTExXHVmZjEyXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMjkiICsKLSAgICAiXDAwNFx1ZmYyOVwwMDVcdWZmMjlcMDA2XHVmZWYyXDAwN1x1ZmYyOVwwMTBcdWZmMjlcMDExXHVmZjI5XDAxMiIgKwotICAgICJcdWZmMjlcMDEzXHVmZjI5XDAxNFx1ZmYyOVwwMTVcdWZmMjlcMDE2XHVmZjI5XDAxN1x1ZmYyOVwwMjBcdWZmMjkiICsKLSAgICAiXDAyMVx1ZmYyOVwwMjJcdWZmMjlcMDIzXHVmZjI5XDAyNFx1ZmYyOVwwMjVcdWZmMjlcMDMxXHVmZjI5XDAzMiIgKwotICAgICJcdWZmMjlcMDMzXHUwMTY4XDA1M1x1ZmYyOVwwNTRcdWZmMjlcMDU1XHVmZjI5XDA1Nlx1ZmYyOVwwNTdcdWZmMjkiICsKLSAgICAiXDA2MFx1ZmYyOVwwNjFcdWZmMjlcMDYyXHVmZjI5XDA2M1x1ZmYyOVwwNjRcdWZmMjlcMDY1XHVmZjI5XDA2NiIgKwotICAgICJcdWZmMjlcMDY3XHVmZjI5XDA3MVx1ZmYyOVwwNzNcdWZmMjlcMDc0XHVmZjI5XDA3NVx1ZmYyOVwxMDBcdWZmMjkiICsKLSAgICAiXDEwMVx1ZmYyOVwxMDJcdWZmMjlcMTA3XHVmZjI5XDExMFx1ZmYyOVwxMTFcdWZmMjlcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNFwwMDJcdWZmNDJcMDA0XHVmZjQyXDAwNVx1ZmY0MlwwMDZcdWZmMGJcMDA3XHVmZjQyXDAxMFx1ZmY0MiIgKwotICAgICJcMDExXHVmZjQyXDAxMlx1ZmY0MlwwMTNcdWZmNDJcMDE0XHVmZjQyXDAxNVx1ZmY0MlwwMTZcdWZmNDJcMDE3IiArCi0gICAgIlx1ZmY0MlwwMjBcdWZmNDJcMDIxXHVmZjQyXDAyMlx1ZmY0MlwwMjNcdWZmNDJcMDI0XHVmZjQyXDAyNVx1ZmY0MiIgKwotICAgICJcMDI2XHUwMTY3XDAzMVx1ZmY0MlwwMzJcdWZmNDJcMDUzXHVmZjQyXDA1NFx1ZmY0MlwwNTVcdWZmNDJcMDU2IiArCi0gICAgIlx1ZmY0MlwwNTdcdWZmNDJcMDYwXHVmZjQyXDA2MVx1ZmY0MlwwNjJcdWZmNDJcMDYzXHVmZjQyXDA2NFx1ZmY0MiIgKwotICAgICJcMDY1XHVmZjQyXDA2Nlx1ZmY0MlwwNjdcdWZmNDJcMDcxXHVmZjQyXDA3M1x1ZmY0MlwwNzRcdWZmNDJcMDc1IiArCi0gICAgIlx1ZmY0MlwxMDBcdWZmNDJcMTAxXHVmZjQyXDEwMlx1ZmY0MlwxMDdcdWZmNDJcMTEwXHVmZjQyXDExMVx1ZmY0MiIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYzNVwwMDRcdWZmMzVcMDA1XHVmZjM1XDAwNlx1ZmVmZVwwMDciICsKLSAgICAiXHVmZjM1XDAxMFx1ZmYzNVwwMTFcdWZmMzVcMDEyXHVmZjM1XDAxM1x1ZmYzNVwwMTRcdWZmMzVcMDE1XHVmZjM1IiArCi0gICAgIlwwMTZcdWZmMzVcMDE3XHVmZjM1XDAyMFx1ZmYzNVwwMjFcdWZmMzVcMDIyXHVmZjM1XDAyM1x1ZmYzNVwwMjQiICsKLSAgICAiXHVmZjM1XDAyNVx1ZmYzNVwwMzFcdWZmMzVcMDMyXHVmZjM1XDA1M1x1ZmYzNVwwNTRcdWZmMzVcMDU1XHVmZjM1IiArCi0gICAgIlwwNTZcdWZmMzVcMDU3XHVmZjM1XDA2MFx1ZmYzNVwwNjFcdWZmMzVcMDYyXHVmZjM1XDA2M1x1ZmYzNVwwNjQiICsKLSAgICAiXHVmZjM1XDA2NVx1ZmYzNVwwNjZcdWZmMzVcMDY3XHVmZjM1XDA3MVx1ZmYzNVwwNzNcdWZmMzVcMDc0XHVmZjM1IiArCi0gICAgIlwwNzVcdWZmMzVcMTAwXHVmZjM1XDEwMVx1ZmYzNVwxMDJcdWZmMzVcMTA3XHVmZjM1XDExMFx1ZmYzNVwxMTEiICsKLSAgICAiXHVmZjM1XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMThcMDA0XHVmZjE4XDAwNVx1ZmYxOFwwMDZcdTAxNjUiICsKLSAgICAiXDAwN1x1ZmYxOFwwMTBcdWZmMThcMDExXHVmZjE4XDAxMlx1ZmYxOFwwMTNcdWZmMThcMDE0XHVmZjE4XDAxNSIgKwotICAgICJcdWZmMThcMDE2XHVmZjE4XDAxN1x1ZmYxOFwwMjBcdWZmMThcMDIxXHVmZjE4XDAyMlx1ZmYxOFwwMjNcdWZmMTgiICsKLSAgICAiXDAyNFx1ZmYxOFwwMjVcdWZmMThcMDMxXHVmZjE4XDAzMlx1ZmYxOFwwMzVcdWZmMThcMDUzXHVmZjE4XDA1NCIgKwotICAgICJcdWZmMThcMDU1XHVmZjE4XDA1Nlx1ZmYxOFwwNTdcdWZmMThcMDYwXHVmZjE4XDA2MVx1ZmYxOFwwNjJcdWZmMTgiICsKLSAgICAiXDA2M1x1ZmYxOFwwNjRcdWZmMThcMDY1XHVmZjE4XDA2Nlx1ZmYxOFwwNjdcdWZmMThcMDcxXHVmZjE4XDA3MyIgKwotICAgICJcdWZmMThcMDc0XHVmZjE4XDA3NVx1ZmYxOFwxMDBcdWZmMThcMTAxXHVmZjE4XDEwMlx1ZmYxOFwxMDdcdWZmMTgiICsKLSAgICAiXDExMFx1ZmYxOFwxMTFcdWZmMThcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxZlwwMDRcdWZmMWZcMDA1IiArCi0gICAgIlx1ZmYxZlwwMDZcdTAxNWFcMDA3XHVmZjFmXDAxMFx1ZmYxZlwwMTFcdWZmMWZcMDEyXHVmZjFmXDAxM1x1ZmYxZiIgKwotICAgICJcMDE0XHVmZjFmXDAxNVx1ZmYxZlwwMTZcdWZmMWZcMDE3XHVmZjFmXDAyMFx1ZmYxZlwwMjFcdWZmMWZcMDIyIiArCi0gICAgIlx1ZmYxZlwwMjNcdWZmMWZcMDI0XHVmZjFmXDAyNVx1ZmYxZlwwMzFcdWZmMWZcMDMyXHVmZjFmXDAzNVx1ZmYxZiIgKwotICAgICJcMDUzXHVmZjFmXDA1NFx1ZmYxZlwwNTVcdWZmMWZcMDU2XHVmZjFmXDA1N1x1ZmYxZlwwNjBcdWZmMWZcMDYxIiArCi0gICAgIlx1ZmYxZlwwNjJcdWZmMWZcMDYzXHVmZjFmXDA2NFx1ZmYxZlwwNjVcdWZmMWZcMDY2XHVmZjFmXDA2N1x1ZmYxZiIgKwotICAgICJcMDcxXHVmZjFmXDA3M1x1ZmYxZlwwNzRcdWZmMWZcMDc1XHVmZjFmXDEwMFx1ZmYxZlwxMDFcdWZmMWZcMTAyIiArCi0gICAgIlx1ZmYxZlwxMDdcdWZmMWZcMTEwXHVmZjFmXDExMVx1ZmYxZlwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjI3IiArCi0gICAgIlwwMDRcdWZmMjdcMDA1XHVmZjI3XDAwNlx1ZmVmMVwwMDdcdWZmMjdcMDEwXHVmZjI3XDAxMVx1ZmYyN1wwMTIiICsKLSAgICAiXHVmZjI3XDAxM1x1ZmYyN1wwMTRcdWZmMjdcMDE1XHVmZjI3XDAxNlx1ZmYyN1wwMTdcdWZmMjdcMDIwXHVmZjI3IiArCi0gICAgIlwwMjFcdWZmMjdcMDIyXHVmZjI3XDAyM1x1ZmYyN1wwMjRcdWZmMjdcMDI1XHVmZjI3XDAzMVx1ZmYyN1wwMzIiICsKLSAgICAiXHVmZjI3XDA1M1x1ZmYyN1wwNTRcdWZmMjdcMDU1XHVmZjI3XDA1Nlx1ZmYyN1wwNTdcdWZmMjdcMDYwXHVmZjI3IiArCi0gICAgIlwwNjFcdWZmMjdcMDYyXHVmZjI3XDA2M1x1ZmYyN1wwNjRcdWZmMjdcMDY1XHVmZjI3XDA2Nlx1ZmYyN1wwNjciICsKLSAgICAiXHVmZjI3XDA3MVx1ZmYyN1wwNzNcdWZmMjdcMDc0XHVmZjI3XDA3NVx1ZmYyN1wxMDBcdWZmMjdcMTAxXHVmZjI3IiArCi0gICAgIlwxMDJcdWZmMjdcMTA3XHVmZjI3XDExMFx1ZmYyN1wxMTFcdWZmMjdcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmOTFcMDA0XHVmZjkxXDAwNVx1ZmY5MVwwMDdcdWZmOTFcMDEwXHVmZjkxXDAxMVx1ZmY5MVwwMTJcdWZmOTEiICsKLSAgICAiXDAxM1x1ZmY5MVwwMTRcdWZmOTFcMDE1XHVmZjkxXDAxNlx1ZmY5MVwwMTdcdWZmOTFcMDIwXHVmZjkxXDAyMSIgKwotICAgICJcdWZmOTFcMDIyXHVmZjkxXDAyM1x1ZmY5MVwwMjRcdWZmOTFcMDI1XHVmZjkxXDAzMlx1ZmY5MVwwNTNcdWZmOTEiICsKLSAgICAiXDA1NFx1ZmY5MVwwNTVcdWZmOTFcMDU2XHVmZjkxXDA1N1x1ZmY5MVwwNjBcdWZmOTFcMDYxXHVmZjkxXDA2MiIgKwotICAgICJcdWZmOTFcMDYzXHVmZjkxXDA2NFx1ZmY5MVwwNjVcdWZmOTFcMDY2XHVmZjkxXDA2N1x1ZmY5MVwwNzFcdWZmOTEiICsKLSAgICAiXDA3M1x1ZmY5MVwwNzRcdWZmOTFcMDc1XHVmZjkxXDEwMFx1ZmY5MVwxMDFcdWZmOTFcMTAyXHVmZjkxXDEwNyIgKwotICAgICJcdWZmOTFcMTEwXHVmZjkxXDExMVx1ZmY5MVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk2XDAwNFx1ZmY5NiIgKwotICAgICJcMDA1XHVmZjk2XDAwN1x1ZmY5NlwwMTBcdWZmOTZcMDExXHVmZjk2XDAxMlx1ZmY5NlwwMTNcdWZmOTZcMDE0IiArCi0gICAgIlx1ZmY5NlwwMTVcdWZmOTZcMDE2XHVmZjk2XDAxN1x1ZmY5NlwwMjBcdWZmOTZcMDIxXHVmZjk2XDAyMlx1ZmY5NiIgKwotICAgICJcMDIzXHVmZjk2XDAyNFx1ZmY5NlwwMjVcdWZmOTZcMDMyXHVmZjk2XDA1M1x1ZmY5NlwwNTRcdWZmOTZcMDU1IiArCi0gICAgIlx1ZmY5NlwwNTZcdWZmOTZcMDU3XHVmZjk2XDA2MFx1ZmY5NlwwNjFcdWZmOTZcMDYyXHVmZjk2XDA2M1x1ZmY5NiIgKwotICAgICJcMDY0XHVmZjk2XDA2NVx1ZmY5NlwwNjZcdWZmOTZcMDY3XHVmZjk2XDA3MVx1ZmY5NlwwNzNcdWZmOTZcMDc0IiArCi0gICAgIlx1ZmY5NlwwNzVcdWZmOTZcMTAwXHVmZjk2XDEwMVx1ZmY5NlwxMDJcdWZmOTZcMTA3XHVmZjk2XDExMFx1ZmY5NiIgKwotICAgICJcMTExXHVmZjk2XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMTlcMDA0XHVmZjE5XDAwNVx1ZmYxOVwwMDYiICsKLSAgICAiXHUwMTU0XDAwN1x1ZmYxOVwwMTBcdWZmMTlcMDExXHVmZjE5XDAxMlx1ZmYxOVwwMTNcdWZmMTlcMDE0XHVmZjE5IiArCi0gICAgIlwwMTVcdWZmMTlcMDE2XHVmZjE5XDAxN1x1ZmYxOVwwMjBcdWZmMTlcMDIxXHVmZjE5XDAyMlx1ZmYxOVwwMjMiICsKLSAgICAiXHVmZjE5XDAyNFx1ZmYxOVwwMjVcdWZmMTlcMDMxXHVmZjE5XDAzMlx1ZmYxOVwwMzVcdWZmMTlcMDUzXHVmZjE5IiArCi0gICAgIlwwNTRcdWZmMTlcMDU1XHVmZjE5XDA1Nlx1ZmYxOVwwNTdcdWZmMTlcMDYwXHVmZjE5XDA2MVx1ZmYxOVwwNjIiICsKLSAgICAiXHVmZjE5XDA2M1x1ZmYxOVwwNjRcdWZmMTlcMDY1XHVmZjE5XDA2Nlx1ZmYxOVwwNjdcdWZmMTlcMDcxXHVmZjE5IiArCi0gICAgIlwwNzNcdWZmMTlcMDc0XHVmZjE5XDA3NVx1ZmYxOVwxMDBcdWZmMTlcMTAxXHVmZjE5XDEwMlx1ZmYxOVwxMDciICsKLSAgICAiXHVmZjE5XDExMFx1ZmYxOVwxMTFcdWZmMTlcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxYVwwMDRcdWZmMWEiICsKLSAgICAiXDAwNVx1ZmYxYVwwMDZcdTAxNTBcMDA3XHVmZjFhXDAxMFx1ZmYxYVwwMTFcdWZmMWFcMDEyXHVmZjFhXDAxMyIgKwotICAgICJcdWZmMWFcMDE0XHVmZjFhXDAxNVx1ZmYxYVwwMTZcdWZmMWFcMDE3XHVmZjFhXDAyMFx1ZmYxYVwwMjFcdWZmMWEiICsKLSAgICAiXDAyMlx1ZmYxYVwwMjNcdWZmMWFcMDI0XHVmZjFhXDAyNVx1ZmYxYVwwMzFcdWZmMWFcMDMyXHVmZjFhXDAzNSIgKwotICAgICJcdWZmMWFcMDUzXHVmZjFhXDA1NFx1ZmYxYVwwNTVcdWZmMWFcMDU2XHVmZjFhXDA1N1x1ZmYxYVwwNjBcdWZmMWEiICsKLSAgICAiXDA2MVx1ZmYxYVwwNjJcdWZmMWFcMDYzXHVmZjFhXDA2NFx1ZmYxYVwwNjVcdWZmMWFcMDY2XHVmZjFhXDA2NyIgKwotICAgICJcdWZmMWFcMDcxXHVmZjFhXDA3M1x1ZmYxYVwwNzRcdWZmMWFcMDc1XHVmZjFhXDEwMFx1ZmYxYVwxMDFcdWZmMWEiICsKLSAgICAiXDEwMlx1ZmYxYVwxMDdcdWZmMWFcMTEwXHVmZjFhXDExMVx1ZmYxYVwwMDFcMDAyXDAwMFwxMTRcMDAyIiArCi0gICAgIlx1ZmZkN1wwMDVcdWZmZDdcMDA3XHVmZmQ3XDAxMFx1ZmZkN1wwMTFcdWZmZDdcMDEyXHVmZmQ3XDAxM1x1ZmZkNyIgKwotICAgICJcMDE0XHVmZmQ3XDAxNVx1ZmZkN1wwMTZcdWZmZDdcMDE3XHVmZmQ3XDAyMFx1ZmZkN1wwMjFcdWZmZDdcMDIyIiArCi0gICAgIlx1ZmZkN1wwMjNcdWZmZDdcMDMyXHVmZmQ3XDA1M1x1ZmZkN1wwNTRcdWZmZDdcMDU1XHVmZmQ3XDA1Nlx1ZmZkNyIgKwotICAgICJcMDU3XHVmZmQ3XDA2MFx1ZmZkN1wwNjFcdWZmZDdcMDYyXHVmZmQ3XDA2M1x1ZmZkN1wwNjRcdWZmZDdcMDY1IiArCi0gICAgIlx1ZmZkN1wwNjZcdWZmZDdcMDY3XHVmZmQ3XDA3MVx1MDEzZlwwNzVcdWZmZDdcMTAwXHVmZmQ3XDEwMVx1ZmZkNyIgKwotICAgICJcMTAyXHVmZmQ3XDEwN1x1ZmZkN1wxMTBcdWZmZDdcMTExXHVmZmQ3XDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjlmXDAwNFx1ZmY5ZlwwMDVcdWZmOWZcMDA3XHVmZjlmXDAxMFx1ZmY5ZlwwMTFcdWZmOWZcMDEyXHVmZjlmIiArCi0gICAgIlwwMTNcdWZmOWZcMDE0XHVmZjlmXDAxNVx1ZmY5ZlwwMTZcdWZmOWZcMDE3XHVmZjlmXDAyMFx1ZmY5ZlwwMjEiICsKLSAgICAiXHVmZjlmXDAyMlx1ZmY5ZlwwMjNcdWZmOWZcMDI0XHVmZjlmXDAyNVx1ZmY5ZlwwMzJcdWZmOWZcMDUzXHVmZjlmIiArCi0gICAgIlwwNTRcdWZmOWZcMDU1XHVmZjlmXDA1Nlx1ZmY5ZlwwNTdcdWZmOWZcMDYwXHVmZjlmXDA2MVx1ZmY5ZlwwNjIiICsKLSAgICAiXHVmZjlmXDA2M1x1ZmY5ZlwwNjRcdWZmOWZcMDY1XHVmZjlmXDA2Nlx1ZmY5ZlwwNjdcdWZmOWZcMDcxXHVmZjlmIiArCi0gICAgIlwwNzNcdWZmOWZcMDc0XHVmZjlmXDA3NVx1ZmY5ZlwxMDBcdWZmOWZcMTAxXHVmZjlmXDEwMlx1ZmY5ZlwxMDciICsKLSAgICAiXHVmZjlmXDExMFx1ZmY5ZlwxMTFcdWZmOWZcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzOVwwMDRcdWZmMzkiICsKLSAgICAiXDAwNVx1ZmYzOVwwMDZcdWZmMDJcMDA3XHVmZjM5XDAxMFx1ZmYzOVwwMTFcdWZmMzlcMDEyXHVmZjM5XDAxMyIgKwotICAgICJcdWZmMzlcMDE0XHVmZjM5XDAxNVx1ZmYzOVwwMTZcdWZmMzlcMDE3XHVmZjM5XDAyMFx1ZmYzOVwwMjFcdWZmMzkiICsKLSAgICAiXDAyMlx1ZmYzOVwwMjNcdWZmMzlcMDI0XHVmZjM5XDAyNVx1ZmYzOVwwMjZcdTAxM2VcMDMxXHVmZjM5XDAzMiIgKwotICAgICJcdWZmMzlcMDUzXHVmZjM5XDA1NFx1ZmYzOVwwNTVcdWZmMzlcMDU2XHVmZjM5XDA1N1x1ZmYzOVwwNjBcdWZmMzkiICsKLSAgICAiXDA2MVx1ZmYzOVwwNjJcdWZmMzlcMDYzXHVmZjM5XDA2NFx1ZmYzOVwwNjVcdWZmMzlcMDY2XHVmZjM5XDA2NyIgKwotICAgICJcdWZmMzlcMDcxXHVmZjM5XDA3M1x1ZmYzOVwwNzRcdWZmMzlcMDc1XHVmZjM5XDEwMFx1ZmYzOVwxMDFcdWZmMzkiICsKLSAgICAiXDEwMlx1ZmYzOVwxMDdcdWZmMzlcMTEwXHVmZjM5XDExMVx1ZmYzOVwwMDFcMDAyXDAwMFwwMjRcMDAyIiArCi0gICAgIlx1ZmZlZlwwMDVcdWZmZWZcMDA3XHVmZmVmXDAzMlx1ZmZlZlwxMDBcdWZmZWZcMTAxXHVmZmVmXDEwN1x1ZmZlZiIgKwotICAgICJcMTEwXHVmZmVmXDExMVx1ZmZlZlwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjE1XDAwNFx1ZmYxNVwwMDUiICsKLSAgICAiXHVmZjE1XDAwNlx1ZmVlYVwwMDdcdWZmMTVcMDEwXHVmZjE1XDAxMVx1ZmYxNVwwMTJcdWZmMTVcMDEzXHVmZjE1IiArCi0gICAgIlwwMTRcdWZmMTVcMDE1XHVmZjE1XDAxNlx1ZmYxNVwwMTdcdWZmMTVcMDIwXHVmZjE1XDAyMVx1ZmYxNVwwMjIiICsKLSAgICAiXHVmZjE1XDAyM1x1ZmYxNVwwMjRcdWZmMTVcMDI1XHVmZjE1XDAzMVx1ZmYxNVwwMzJcdWZmMTVcMDUzXHVmZjE1IiArCi0gICAgIlwwNTRcdWZmMTVcMDU1XHVmZjE1XDA1Nlx1ZmYxNVwwNTdcdWZmMTVcMDYwXHVmZjE1XDA2MVx1ZmYxNVwwNjIiICsKLSAgICAiXHVmZjE1XDA2M1x1ZmYxNVwwNjRcdWZmMTVcMDY1XHVmZjE1XDA2Nlx1ZmYxNVwwNjdcdWZmMTVcMDcxXHVmZjE1IiArCi0gICAgIlwwNzNcdWZmMTVcMDc0XHVmZjE1XDA3NVx1ZmYxNVwxMDBcdWZmMTVcMTAxXHVmZjE1XDEwMlx1ZmYxNVwxMDciICsKLSAgICAiXHVmZjE1XDExMFx1ZmYxNVwxMTFcdWZmMTVcMDAxXDAwMlwwMDBcMDYyXDAwMlx1ZmZlZFwwMDVcdWZmZWQiICsKLSAgICAiXDAwN1x1ZmZlZFwwMTRcdTAxMzFcMDE1XHUwMTMyXDAxNlx1MDEzM1wwMTdcdTAxMmZcMDIwXHUwMTJkXDAyMSIgKwotICAgICJcdTAxM2FcMDIyXHUwMTM3XDAyM1x1MDEyY1wwMzJcdWZmZWRcMDUzXHUwMTM2XDA1NFx1MDEyYlwwNTVcdTAxMmEiICsKLSAgICAiXDA1Nlx1MDEzMFwwNTdcdTAxMmVcMDYwXHUwMTM1XDA3NVx1MDEyOVwxMDBcdWZmZWRcMTAxXHVmZmVkXDEwNyIgKwotICAgICJcdWZmZWRcMTEwXHVmZmVkXDExMVx1ZmZlZFwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjljXDAwNFx1ZmY5YyIgKwotICAgICJcMDA1XHVmZjljXDAwN1x1ZmY5Y1wwMTBcdWZmOWNcMDExXHVmZjljXDAxMlx1ZmY5Y1wwMTNcdWZmOWNcMDE0IiArCi0gICAgIlx1ZmY5Y1wwMTVcdWZmOWNcMDE2XHVmZjljXDAxN1x1ZmY5Y1wwMjBcdWZmOWNcMDIxXHVmZjljXDAyMlx1ZmY5YyIgKwotICAgICJcMDIzXHVmZjljXDAyNFx1ZmY5Y1wwMjVcdWZmOWNcMDMyXHVmZjljXDA1M1x1ZmY5Y1wwNTRcdWZmOWNcMDU1IiArCi0gICAgIlx1ZmY5Y1wwNTZcdWZmOWNcMDU3XHVmZjljXDA2MFx1ZmY5Y1wwNjFcdWZmOWNcMDYyXHVmZjljXDA2M1x1ZmY5YyIgKwotICAgICJcMDY0XHVmZjljXDA2NVx1ZmY5Y1wwNjZcdWZmOWNcMDY3XHVmZjljXDA3MVx1ZmY5Y1wwNzNcdWZmOWNcMDc0IiArCi0gICAgIlx1ZmY5Y1wwNzVcdWZmOWNcMTAwXHVmZjljXDEwMVx1ZmY5Y1wxMDJcdWZmOWNcMTA3XHVmZjljXDExMFx1ZmY5YyIgKwotICAgICJcMTExXHVmZjljXDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZmJcMDA1XHVmZmZiXDAwN1x1ZmZmYlwwMzIiICsKLSAgICAiXHVmZmZiXDEwMFx1ZmZmYlwxMDFcdWZmZmJcMTA3XHVmZmZiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2EiICsKLSAgICAiXDAwNFx1ZmYzYVwwMDVcdWZmM2FcMDA2XHVmZjAzXDAwN1x1ZmYzYVwwMTBcdWZmM2FcMDExXHVmZjNhXDAxMiIgKwotICAgICJcdWZmM2FcMDEzXHVmZjNhXDAxNFx1ZmYzYVwwMTVcdWZmM2FcMDE2XHVmZjNhXDAxN1x1ZmYzYVwwMjBcdWZmM2EiICsKLSAgICAiXDAyMVx1ZmYzYVwwMjJcdWZmM2FcMDIzXHVmZjNhXDAyNFx1ZmYzYVwwMjVcdWZmM2FcMDI2XHUwMTI4XDAzMSIgKwotICAgICJcdWZmM2FcMDMyXHVmZjNhXDA1M1x1ZmYzYVwwNTRcdWZmM2FcMDU1XHVmZjNhXDA1Nlx1ZmYzYVwwNTdcdWZmM2EiICsKLSAgICAiXDA2MFx1ZmYzYVwwNjFcdWZmM2FcMDYyXHVmZjNhXDA2M1x1ZmYzYVwwNjRcdWZmM2FcMDY1XHVmZjNhXDA2NiIgKwotICAgICJcdWZmM2FcMDY3XHVmZjNhXDA3MVx1ZmYzYVwwNzNcdWZmM2FcMDc0XHVmZjNhXDA3NVx1ZmYzYVwxMDBcdWZmM2EiICsKLSAgICAiXDEwMVx1ZmYzYVwxMDJcdWZmM2FcMTA3XHVmZjNhXDExMFx1ZmYzYVwxMTFcdWZmM2FcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzMlwwMDJcdWZmMTZcMDA0XHVmZjE2XDAwNVx1ZmYxNlwwMDZcdWZlZWJcMDA3XHVmZjE2XDAxMFx1ZmYxNiIgKwotICAgICJcMDExXHVmZjE2XDAxMlx1ZmYxNlwwMTNcdWZmMTZcMDE0XHVmZjE2XDAxNVx1ZmYxNlwwMTZcdWZmMTZcMDE3IiArCi0gICAgIlx1ZmYxNlwwMjBcdWZmMTZcMDIxXHVmZjE2XDAyMlx1ZmYxNlwwMjNcdWZmMTZcMDI0XHVmZjE2XDAyNVx1ZmYxNiIgKwotICAgICJcMDMxXHVmZjE2XDAzMlx1ZmYxNlwwNTNcdWZmMTZcMDU0XHVmZjE2XDA1NVx1ZmYxNlwwNTZcdWZmMTZcMDU3IiArCi0gICAgIlx1ZmYxNlwwNjBcdWZmMTZcMDYxXHVmZjE2XDA2Mlx1ZmYxNlwwNjNcdWZmMTZcMDY0XHVmZjE2XDA2NVx1ZmYxNiIgKwotICAgICJcMDY2XHVmZjE2XDA2N1x1ZmYxNlwwNzFcdWZmMTZcMDczXHVmZjE2XDA3NFx1ZmYxNlwwNzVcdWZmMTZcMTAwIiArCi0gICAgIlx1ZmYxNlwxMDFcdWZmMTZcMTAyXHVmZjE2XDEwN1x1ZmYxNlwxMTBcdWZmMTZcMTExXHVmZjE2XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxNjRcMDEyXDExNlwwMzZcMjQ2XDAzN1wyNjNcMDQwXHUwMTI0XDA0MVwyNjdcMDQyIiArCi0gICAgIlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzUiICsKLSAgICAiXDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1NyIgKwotICAgICJcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0IiArCi0gICAgIlwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzQiICsKLSAgICAiXDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMiIgKwotICAgICJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExIiArCi0gICAgIlwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzMiICsKLSAgICAiXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMzFcMjcwXDAwMSIgKwotICAgICJcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxIiArCi0gICAgIlwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTEiICsKLSAgICAiXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxNyIgKwotICAgICJcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2IiArCi0gICAgIlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzMiICsKLSAgICAiXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwMyIgKwotICAgICJcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1IiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjAiICsKLSAgICAiXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzMlwwMDJcdWZmMzZcMDA0XHVmZjM2XDAwNVx1ZmYzNlwwMDZcdWZlZmZcMDA3XHVmZjM2XDAxMCIgKwotICAgICJcdWZmMzZcMDExXHVmZjM2XDAxMlx1ZmYzNlwwMTNcdWZmMzZcMDE0XHVmZjM2XDAxNVx1ZmYzNlwwMTZcdWZmMzYiICsKLSAgICAiXDAxN1x1ZmYzNlwwMjBcdWZmMzZcMDIxXHVmZjM2XDAyMlx1ZmYzNlwwMjNcdWZmMzZcMDI0XHVmZjM2XDAyNSIgKwotICAgICJcdWZmMzZcMDMxXHVmZjM2XDAzMlx1ZmYzNlwwNTNcdWZmMzZcMDU0XHVmZjM2XDA1NVx1ZmYzNlwwNTZcdWZmMzYiICsKLSAgICAiXDA1N1x1ZmYzNlwwNjBcdWZmMzZcMDYxXHVmZjM2XDA2Mlx1ZmYzNlwwNjNcdWZmMzZcMDY0XHVmZjM2XDA2NSIgKwotICAgICJcdWZmMzZcMDY2XHVmZjM2XDA2N1x1ZmYzNlwwNzFcdWZmMzZcMDczXHVmZjM2XDA3NFx1ZmYzNlwwNzVcdWZmMzYiICsKLSAgICAiXDEwMFx1ZmYzNlwxMDFcdWZmMzZcMTAyXHVmZjM2XDEwN1x1ZmYzNlwxMTBcdWZmMzZcMTExXHVmZjM2XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMjRcMDAyXHVmZmI2XDAwNVx1ZmZiNlwwMDdcdWZmYjZcMDEwXHVmZmI2XDAxMVx1ZmZiNiIgKwotICAgICJcMDEyXHVmZmI2XDAxM1x1ZmZiNlwwMTRcdWZmYjZcMDE1XHVmZmI2XDAxNlx1ZmZiNlwwMTdcdWZmYjZcMDIwIiArCi0gICAgIlx1ZmZiNlwwMjFcdWZmYjZcMDIyXHVmZmI2XDAyM1x1ZmZiNlwwMjRcdWZmYjZcMDI1XHVmZmI2XDAzMlx1ZmZiNiIgKwotICAgICJcMDUzXHVmZmI2XDA1NFx1ZmZiNlwwNTVcdWZmYjZcMDU2XHVmZmI2XDA1N1x1ZmZiNlwwNjBcdWZmYjZcMDYxIiArCi0gICAgIlx1ZmZiNlwwNjJcdWZmYjZcMDYzXHVmZmI2XDA2NFx1ZmZiNlwwNjVcdWZmYjZcMDY2XHVmZmI2XDA2N1x1ZmZiNiIgKwotICAgICJcMDcxXHVmZmI2XDA3M1x1ZmZiNlwwNzRcdWZmYjZcMDc1XHVmZmI2XDEwMFx1ZmZiNlwxMDFcdWZmYjZcMTAyIiArCi0gICAgIlx1ZmZiNlwxMDdcdWZmYjZcMTEwXHVmZmI2XDExMVx1ZmZiNlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjcxIiArCi0gICAgIlwwMDRcdWZmNzFcMDA1XHVmZjcxXDAwN1x1ZmY3MVwwMTBcdWZmNzFcMDExXHVmZjcxXDAxMlx1ZmY3MVwwMTMiICsKLSAgICAiXHVmZjcxXDAxNFx1ZmY3MVwwMTVcdWZmNzFcMDE2XHVmZjcxXDAxN1x1ZmY3MVwwMjBcdWZmNzFcMDIxXHVmZjcxIiArCi0gICAgIlwwMjJcdWZmNzFcMDIzXHVmZjcxXDAyNFx1ZmY3MVwwMjVcdWZmNzFcMDMyXHVmZjcxXDAzNVx1ZmY3MVwwNTMiICsKLSAgICAiXHVmZjcxXDA1NFx1ZmY3MVwwNTVcdWZmNzFcMDU2XHVmZjcxXDA1N1x1ZmY3MVwwNjBcdWZmNzFcMDYxXHVmZjcxIiArCi0gICAgIlwwNjJcdWZmNzFcMDYzXHVmZjcxXDA2NFx1ZmY3MVwwNjVcdWZmNzFcMDY2XHVmZjcxXDA2N1x1ZmY3MVwwNzEiICsKLSAgICAiXHVmZjcxXDA3M1x1ZmY3MVwwNzRcdWZmNzFcMDc1XHVmZjcxXDEwMFx1ZmY3MVwxMDFcdWZmNzFcMTAyXHVmZjcxIiArCi0gICAgIlwxMDdcdWZmNzFcMTEwXHVmZjcxXDExMVx1ZmY3MVwwMDFcMDAyXDAwMFwwMTJcMDAyXHVmZmZmXDAwNSIgKwotICAgICJcdWZmZmZcMDA3XHVmZmZmXDAzMlx1ZmZmZlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1IiArCi0gICAgIlwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzMiICsKLSAgICAiXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxIiArCi0gICAgIlwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDYiICsKLSAgICAiXDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NiIgKwotICAgICJcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxIiArCi0gICAgIlwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDMiICsKLSAgICAiXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MiIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwIiArCi0gICAgIlwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDIiICsKLSAgICAiXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMjJcMDA0IiArCi0gICAgIlx1ZmYyMlwwMDVcdWZmMjJcMDA2XHVmZWVjXDAwN1x1ZmYyMlwwMTBcdWZmMjJcMDExXHVmZjIyXDAxMlx1ZmYyMiIgKwotICAgICJcMDEzXHVmZjIyXDAxNFx1ZmYyMlwwMTVcdWZmMjJcMDE2XHVmZjIyXDAxN1x1ZmYyMlwwMjBcdWZmMjJcMDIxIiArCi0gICAgIlx1ZmYyMlwwMjJcdWZmMjJcMDIzXHVmZjIyXDAyNFx1ZmYyMlwwMjVcdWZmMjJcMDMxXHVmZjIyXDAzMlx1ZmYyMiIgKwotICAgICJcMDUzXHVmZjIyXDA1NFx1ZmYyMlwwNTVcdWZmMjJcMDU2XHVmZjIyXDA1N1x1ZmYyMlwwNjBcdWZmMjJcMDYxIiArCi0gICAgIlx1ZmYyMlwwNjJcdWZmMjJcMDYzXHVmZjIyXDA2NFx1ZmYyMlwwNjVcdWZmMjJcMDY2XHVmZjIyXDA2N1x1ZmYyMiIgKwotICAgICJcMDcxXHVmZjIyXDA3M1x1ZmYyMlwwNzRcdWZmMjJcMDc1XHVmZjIyXDEwMFx1ZmYyMlwxMDFcdWZmMjJcMTAyIiArCi0gICAgIlx1ZmYyMlwxMDdcdWZmMjJcMTEwXHVmZjIyXDExMVx1ZmYyMlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk2IiArCi0gICAgIlwwMDRcdWZmOTZcMDA1XHVmZjk2XDAwN1x1ZmY5NlwwMTBcdWZmOTZcMDExXHVmZjk2XDAxMlx1ZmY5NlwwMTMiICsKLSAgICAiXHVmZjk2XDAxNFx1ZmY5NlwwMTVcdWZmOTZcMDE2XHVmZjk2XDAxN1x1ZmY5NlwwMjBcdWZmOTZcMDIxXHVmZjk2IiArCi0gICAgIlwwMjJcdWZmOTZcMDIzXHVmZjk2XDAyNFx1ZmY5NlwwMjVcdWZmOTZcMDMyXHVmZjk2XDA1M1x1ZmY5NlwwNTQiICsKLSAgICAiXHVmZjk2XDA1NVx1ZmY5NlwwNTZcdWZmOTZcMDU3XHVmZjk2XDA2MFx1ZmY5NlwwNjFcdWZmOTZcMDYyXHVmZjk2IiArCi0gICAgIlwwNjNcdWZmOTZcMDY0XHVmZjk2XDA2NVx1ZmY5NlwwNjZcdWZmOTZcMDY3XHVmZjk2XDA3MVx1ZmY5NlwwNzMiICsKLSAgICAiXHVmZjk2XDA3NFx1ZmY5NlwwNzVcdWZmOTZcMTAwXHVmZjk2XDEwMVx1ZmY5NlwxMDJcdWZmOTZcMTA3XHVmZjk2IiArCi0gICAgIlwxMTBcdWZmOTZcMTExXHVmZjk2XDAwMVwwMDJcMDAwXDIyMFwwMDZcMTEwXDAwN1x1MDExZVwwMTAiICsKLSAgICAiXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNSIgKwotICAgICJcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyIiArCi0gICAgIlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTciICsKLSAgICAiXDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1NyIgKwotICAgICJcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxIiArCi0gICAgIlwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzQiICsKLSAgICAiXDE2MVwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMiIgKwotICAgICJcMTAzXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExIiArCi0gICAgIlwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzMiICsKLSAgICAiXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNiIgKwotICAgICJcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMzgiICsKLSAgICAiXDAwNFx1ZmYzOFwwMDVcdWZmMzhcMDA2XHVmZjAxXDAwN1x1ZmYzOFwwMTBcdWZmMzhcMDExXHVmZjM4XDAxMiIgKwotICAgICJcdWZmMzhcMDEzXHVmZjM4XDAxNFx1ZmYzOFwwMTVcdWZmMzhcMDE2XHVmZjM4XDAxN1x1ZmYzOFwwMjBcdWZmMzgiICsKLSAgICAiXDAyMVx1ZmYzOFwwMjJcdWZmMzhcMDIzXHVmZjM4XDAyNFx1ZmYzOFwwMjVcdWZmMzhcMDMxXHVmZjM4XDAzMiIgKwotICAgICJcdWZmMzhcMDUzXHVmZjM4XDA1NFx1ZmYzOFwwNTVcdWZmMzhcMDU2XHVmZjM4XDA1N1x1ZmYzOFwwNjBcdWZmMzgiICsKLSAgICAiXDA2MVx1ZmYzOFwwNjJcdWZmMzhcMDYzXHVmZjM4XDA2NFx1ZmYzOFwwNjVcdWZmMzhcMDY2XHVmZjM4XDA2NyIgKwotICAgICJcdWZmMzhcMDcxXHVmZjM4XDA3M1x1ZmYzOFwwNzRcdWZmMzhcMDc1XHVmZjM4XDEwMFx1ZmYzOFwxMDFcdWZmMzgiICsKLSAgICAiXDEwMlx1ZmYzOFwxMDdcdWZmMzhcMTEwXHVmZjM4XDExMVx1ZmYzOFwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY5ZFwwMDRcdWZmOWRcMDA1XHVmZjlkXDAwN1x1ZmY5ZFwwMTBcdWZmOWRcMDExXHVmZjlkXDAxMlx1ZmY5ZCIgKwotICAgICJcMDEzXHVmZjlkXDAxNFx1ZmY5ZFwwMTVcdWZmOWRcMDE2XHVmZjlkXDAxN1x1ZmY5ZFwwMjBcdWZmOWRcMDIxIiArCi0gICAgIlx1ZmY5ZFwwMjJcdWZmOWRcMDIzXHVmZjlkXDAyNFx1ZmY5ZFwwMjVcdWZmOWRcMDMyXHVmZjlkXDA1M1x1ZmY5ZCIgKwotICAgICJcMDU0XHVmZjlkXDA1NVx1ZmY5ZFwwNTZcdWZmOWRcMDU3XHVmZjlkXDA2MFx1ZmY5ZFwwNjFcdWZmOWRcMDYyIiArCi0gICAgIlx1ZmY5ZFwwNjNcdWZmOWRcMDY0XHVmZjlkXDA2NVx1ZmY5ZFwwNjZcdWZmOWRcMDY3XHVmZjlkXDA3MVx1ZmY5ZCIgKwotICAgICJcMDczXHVmZjlkXDA3NFx1ZmY5ZFwwNzVcdWZmOWRcMTAwXHVmZjlkXDEwMVx1ZmY5ZFwxMDJcdWZmOWRcMTA3IiArCi0gICAgIlx1ZmY5ZFwxMTBcdWZmOWRcMTExXHVmZjlkXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmNTFcMDA0XHVmZjUxIiArCi0gICAgIlwwMDVcdWZmNTFcMDA3XHVmZjUxXDAxMFx1ZmY1MVwwMTFcdWZmNTFcMDEyXHVmZjUxXDAxM1x1ZmY1MVwwMTQiICsKLSAgICAiXHVmZjUxXDAxNVx1ZmY1MVwwMTZcdWZmNTFcMDE3XHVmZjUxXDAyMFx1ZmY1MVwwMjFcdWZmNTFcMDIyXHVmZjUxIiArCi0gICAgIlwwMjNcdWZmNTFcMDI0XHVmZjUxXDAyNVx1ZmY1MVwwMzJcdWZmNTFcMDUzXHVmZjUxXDA1NFx1ZmY1MVwwNTUiICsKLSAgICAiXHVmZjUxXDA1Nlx1ZmY1MVwwNTdcdWZmNTFcMDYwXHVmZjUxXDA2MVx1ZmY1MVwwNjJcdWZmNTFcMDYzXHVmZjUxIiArCi0gICAgIlwwNjRcdWZmNTFcMDY1XHVmZjUxXDA2Nlx1ZmY1MVwwNjdcdWZmNTFcMDcxXHVmZjUxXDA3M1x1ZmY1MVwwNzQiICsKLSAgICAiXHVmZjUxXDA3NVx1ZmY1MVwxMDBcdWZmNTFcMTAxXHVmZjUxXDEwMlx1ZmY1MVwxMDdcdWZmNTFcMTEwXHVmZjUxIiArCi0gICAgIlwxMTFcdWZmNTFcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3NVwwMDRcdWZmNzVcMDA1XHVmZjc1XDAwNyIgKwotICAgICJcdWZmNzVcMDEwXHVmZjc1XDAxMVx1ZmY3NVwwMTJcdWZmNzVcMDEzXHVmZjc1XDAxNFx1ZmY3NVwwMTVcdWZmNzUiICsKLSAgICAiXDAxNlx1ZmY3NVwwMTdcdWZmNzVcMDIwXHVmZjc1XDAyMVx1ZmY3NVwwMjJcdWZmNzVcMDIzXHVmZjc1XDAyNCIgKwotICAgICJcdWZmNzVcMDI1XHVmZjc1XDAzMlx1ZmY3NVwwMzVcdWZmNzVcMDUzXHVmZjc1XDA1NFx1ZmY3NVwwNTVcdWZmNzUiICsKLSAgICAiXDA1Nlx1ZmY3NVwwNTdcdWZmNzVcMDYwXHVmZjc1XDA2MVx1ZmY3NVwwNjJcdWZmNzVcMDYzXHVmZjc1XDA2NCIgKwotICAgICJcdWZmNzVcMDY1XHVmZjc1XDA2Nlx1ZmY3NVwwNjdcdWZmNzVcMDcxXHVmZjc1XDA3M1x1ZmY3NVwwNzRcdWZmNzUiICsKLSAgICAiXDA3NVx1ZmY3NVwxMDBcdWZmNzVcMTAxXHVmZjc1XDEwMlx1ZmY3NVwxMDdcdWZmNzVcMTEwXHVmZjc1XDExMSIgKwotICAgICJcdWZmNzVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyZVwwMDRcdWZmMmVcMDA1XHVmZjJlXDAwNlx1ZmVmNyIgKwotICAgICJcMDA3XHVmZjJlXDAxMFx1ZmYyZVwwMTFcdWZmMmVcMDEyXHVmZjJlXDAxM1x1ZmYyZVwwMTRcdWZmMmVcMDE1IiArCi0gICAgIlx1ZmYyZVwwMTZcdWZmMmVcMDE3XHVmZjJlXDAyMFx1ZmYyZVwwMjFcdWZmMmVcMDIyXHVmZjJlXDAyM1x1ZmYyZSIgKwotICAgICJcMDI0XHVmZjJlXDAyNVx1ZmYyZVwwMzFcdWZmMmVcMDMyXHVmZjJlXDAzM1x1MDExOVwwNTNcdWZmMmVcMDU0IiArCi0gICAgIlx1ZmYyZVwwNTVcdWZmMmVcMDU2XHVmZjJlXDA1N1x1ZmYyZVwwNjBcdWZmMmVcMDYxXHVmZjJlXDA2Mlx1ZmYyZSIgKwotICAgICJcMDYzXHVmZjJlXDA2NFx1ZmYyZVwwNjVcdWZmMmVcMDY2XHVmZjJlXDA2N1x1ZmYyZVwwNzFcdWZmMmVcMDczIiArCi0gICAgIlx1ZmYyZVwwNzRcdWZmMmVcMDc1XHVmZjJlXDEwMFx1ZmYyZVwxMDFcdWZmMmVcMTAyXHVmZjJlXDEwN1x1ZmYyZSIgKwotICAgICJcMTEwXHVmZjJlXDExMVx1ZmYyZVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjliXDAwNFx1ZmY5YlwwMDUiICsKLSAgICAiXHVmZjliXDAwN1x1ZmY5YlwwMTBcdWZmOWJcMDExXHVmZjliXDAxMlx1ZmY5YlwwMTNcdWZmOWJcMDE0XHVmZjliIiArCi0gICAgIlwwMTVcdWZmOWJcMDE2XHVmZjliXDAxN1x1ZmY5YlwwMjBcdWZmOWJcMDIxXHVmZjliXDAyMlx1ZmY5YlwwMjMiICsKLSAgICAiXHVmZjliXDAyNFx1ZmY5YlwwMjVcdWZmOWJcMDMxXHUwMTE3XDAzMlx1ZmY5YlwwNTNcdWZmOWJcMDU0XHVmZjliIiArCi0gICAgIlwwNTVcdWZmOWJcMDU2XHVmZjliXDA1N1x1ZmY5YlwwNjBcdWZmOWJcMDYxXHVmZjliXDA2Mlx1ZmY5YlwwNjMiICsKLSAgICAiXHVmZjliXDA2NFx1ZmY5YlwwNjVcdWZmOWJcMDY2XHVmZjliXDA2N1x1ZmY5YlwwNzFcdWZmOWJcMDczXHVmZjliIiArCi0gICAgIlwwNzRcdWZmOWJcMDc1XHVmZjliXDEwMFx1ZmY5YlwxMDFcdWZmOWJcMTAyXHVmZjliXDEwN1x1ZmY5YlwxMTAiICsKLSAgICAiXHVmZjliXDExMVx1ZmY5YlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjNiXDAwNFx1ZmYzYlwwMDVcdWZmM2IiICsKLSAgICAiXDAwNlx1ZmYwNFwwMDdcdWZmM2JcMDEwXHVmZjNiXDAxMVx1ZmYzYlwwMTJcdWZmM2JcMDEzXHVmZjNiXDAxNCIgKwotICAgICJcdWZmM2JcMDE1XHVmZjNiXDAxNlx1ZmYzYlwwMTdcdWZmM2JcMDIwXHVmZjNiXDAyMVx1ZmYzYlwwMjJcdWZmM2IiICsKLSAgICAiXDAyM1x1ZmYzYlwwMjRcdWZmM2JcMDI1XHVmZjNiXDAyNlx1MDExNlwwMzFcdWZmM2JcMDMyXHVmZjNiXDA1MyIgKwotICAgICJcdWZmM2JcMDU0XHVmZjNiXDA1NVx1ZmYzYlwwNTZcdWZmM2JcMDU3XHVmZjNiXDA2MFx1ZmYzYlwwNjFcdWZmM2IiICsKLSAgICAiXDA2Mlx1ZmYzYlwwNjNcdWZmM2JcMDY0XHVmZjNiXDA2NVx1ZmYzYlwwNjZcdWZmM2JcMDY3XHVmZjNiXDA3MSIgKwotICAgICJcdWZmM2JcMDczXHVmZjNiXDA3NFx1ZmYzYlwwNzVcdWZmM2JcMTAwXHVmZjNiXDEwMVx1ZmYzYlwxMDJcdWZmM2IiICsKLSAgICAiXDEwN1x1ZmYzYlwxMTBcdWZmM2JcMTExXHVmZjNiXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMjNcMDA0IiArCi0gICAgIlx1ZmYyM1wwMDVcdWZmMjNcMDA2XHVmZWVkXDAwN1x1ZmYyM1wwMTBcdWZmMjNcMDExXHVmZjIzXDAxMlx1ZmYyMyIgKwotICAgICJcMDEzXHVmZjIzXDAxNFx1ZmYyM1wwMTVcdWZmMjNcMDE2XHVmZjIzXDAxN1x1ZmYyM1wwMjBcdWZmMjNcMDIxIiArCi0gICAgIlx1ZmYyM1wwMjJcdWZmMjNcMDIzXHVmZjIzXDAyNFx1ZmYyM1wwMjVcdWZmMjNcMDMxXHVmZjIzXDAzMlx1ZmYyMyIgKwotICAgICJcMDUzXHVmZjIzXDA1NFx1ZmYyM1wwNTVcdWZmMjNcMDU2XHVmZjIzXDA1N1x1ZmYyM1wwNjBcdWZmMjNcMDYxIiArCi0gICAgIlx1ZmYyM1wwNjJcdWZmMjNcMDYzXHVmZjIzXDA2NFx1ZmYyM1wwNjVcdWZmMjNcMDY2XHVmZjIzXDA2N1x1ZmYyMyIgKwotICAgICJcMDcxXHVmZjIzXDA3M1x1ZmYyM1wwNzRcdWZmMjNcMDc1XHVmZjIzXDEwMFx1ZmYyM1wxMDFcdWZmMjNcMTAyIiArCi0gICAgIlx1ZmYyM1wxMDdcdWZmMjNcMTEwXHVmZjIzXDExMVx1ZmYyM1wwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjJjIiArCi0gICAgIlwwMDRcdWZmMmNcMDA1XHVmZjJjXDAwNlx1ZmVmNVwwMDdcdWZmMmNcMDEwXHVmZjJjXDAxMVx1ZmYyY1wwMTIiICsKLSAgICAiXHVmZjJjXDAxM1x1ZmYyY1wwMTRcdWZmMmNcMDE1XHVmZjJjXDAxNlx1ZmYyY1wwMTdcdWZmMmNcMDIwXHVmZjJjIiArCi0gICAgIlwwMjFcdWZmMmNcMDIyXHVmZjJjXDAyM1x1ZmYyY1wwMjRcdWZmMmNcMDI1XHVmZjJjXDAzMVx1ZmYyY1wwMzIiICsKLSAgICAiXHVmZjJjXDA1M1x1ZmYyY1wwNTRcdWZmMmNcMDU1XHVmZjJjXDA1Nlx1ZmYyY1wwNTdcdWZmMmNcMDYwXHVmZjJjIiArCi0gICAgIlwwNjFcdWZmMmNcMDYyXHVmZjJjXDA2M1x1ZmYyY1wwNjRcdWZmMmNcMDY1XHVmZjJjXDA2Nlx1ZmYyY1wwNjciICsKLSAgICAiXHVmZjJjXDA3MVx1ZmYyY1wwNzNcdWZmMmNcMDc0XHVmZjJjXDA3NVx1ZmYyY1wxMDBcdWZmMmNcMTAxXHVmZjJjIiArCi0gICAgIlwxMDJcdWZmMmNcMTA3XHVmZjJjXDExMFx1ZmYyY1wxMTFcdWZmMmNcMDAxXDAwMlwwMDBcMTMyXDAwMiIgKwotICAgICJcdWZmMjZcMDA0XHVmZjI2XDAwNVx1ZmYyNlwwMDZcdWZlZjBcMDA3XHVmZjI2XDAxMFx1ZmYyNlwwMTFcdWZmMjYiICsKLSAgICAiXDAxMlx1ZmYyNlwwMTNcdWZmMjZcMDE0XHVmZjI2XDAxNVx1ZmYyNlwwMTZcdWZmMjZcMDE3XHVmZjI2XDAyMCIgKwotICAgICJcdWZmMjZcMDIxXHVmZjI2XDAyMlx1ZmYyNlwwMjNcdWZmMjZcMDI0XHVmZjI2XDAyNVx1ZmYyNlwwMzFcdWZmMjYiICsKLSAgICAiXDAzMlx1ZmYyNlwwNTNcdWZmMjZcMDU0XHVmZjI2XDA1NVx1ZmYyNlwwNTZcdWZmMjZcMDU3XHVmZjI2XDA2MCIgKwotICAgICJcdWZmMjZcMDYxXHVmZjI2XDA2Mlx1ZmYyNlwwNjNcdWZmMjZcMDY0XHVmZjI2XDA2NVx1ZmYyNlwwNjZcdWZmMjYiICsKLSAgICAiXDA2N1x1ZmYyNlwwNzFcdWZmMjZcMDczXHVmZjI2XDA3NFx1ZmYyNlwwNzVcdWZmMjZcMTAwXHVmZjI2XDEwMSIgKwotICAgICJcdWZmMjZcMTAyXHVmZjI2XDEwN1x1ZmYyNlwxMTBcdWZmMjZcMTExXHVmZjI2XDAwMVwwMDJcMDAwXDEyNiIgKwotICAgICJcMDAyXHVmZjkzXDAwNFx1ZmY5M1wwMDVcdWZmOTNcMDA3XHVmZjkzXDAxMFx1ZmY5M1wwMTFcdWZmOTNcMDEyIiArCi0gICAgIlx1ZmY5M1wwMTNcdWZmOTNcMDE0XHVmZjkzXDAxNVx1ZmY5M1wwMTZcdWZmOTNcMDE3XHVmZjkzXDAyMFx1ZmY5MyIgKwotICAgICJcMDIxXHVmZjkzXDAyMlx1ZmY5M1wwMjNcdWZmOTNcMDI0XHVmZjkzXDAyNVx1ZmY5M1wwMzJcdWZmOTNcMDUzIiArCi0gICAgIlx1ZmY5M1wwNTRcdWZmOTNcMDU1XHVmZjkzXDA1Nlx1ZmY5M1wwNTdcdWZmOTNcMDYwXHVmZjkzXDA2MVx1ZmY5MyIgKwotICAgICJcMDYyXHVmZjkzXDA2M1x1ZmY5M1wwNjRcdWZmOTNcMDY1XHVmZjkzXDA2Nlx1ZmY5M1wwNjdcdWZmOTNcMDcxIiArCi0gICAgIlx1ZmY5M1wwNzNcdWZmOTNcMDc0XHVmZjkzXDA3NVx1ZmY5M1wxMDBcdWZmOTNcMTAxXHVmZjkzXDEwMlx1ZmY5MyIgKwotICAgICJcMTA3XHVmZjkzXDExMFx1ZmY5M1wxMTFcdWZmOTNcMDAxXDAwMlwwMDBcMDIwXDAwMlx1ZmZmZFwwMDUiICsKLSAgICAiXHVmZmZkXDAwN1x1ZmZmZFwwMzJcdWZmZmRcMTAwXHVmZmZkXDEwMVx1ZmZmZFwxMDdcdWZmZmRcMDAxXDAwMiIgKwotICAgICJcMDAwXDEyNlwwMDJcdWZmYTBcMDA0XHVmZmEwXDAwNVx1ZmZhMFwwMDdcdWZmYTBcMDEwXHVmZmEwXDAxMSIgKwotICAgICJcdWZmYTBcMDEyXHVmZmEwXDAxM1x1ZmZhMFwwMTRcdWZmYTBcMDE1XHVmZmEwXDAxNlx1ZmZhMFwwMTdcdWZmYTAiICsKLSAgICAiXDAyMFx1ZmZhMFwwMjFcdWZmYTBcMDIyXHVmZmEwXDAyM1x1ZmZhMFwwMjRcdWZmYTBcMDI1XHVmZmEwXDAzMiIgKwotICAgICJcdWZmYTBcMDUzXHVmZmEwXDA1NFx1ZmZhMFwwNTVcdWZmYTBcMDU2XHVmZmEwXDA1N1x1ZmZhMFwwNjBcdWZmYTAiICsKLSAgICAiXDA2MVx1ZmZhMFwwNjJcdWZmYTBcMDYzXHVmZmEwXDA2NFx1ZmZhMFwwNjVcdWZmYTBcMDY2XHVmZmEwXDA2NyIgKwotICAgICJcdWZmYTBcMDcxXHVmZmEwXDA3M1x1ZmZhMFwwNzRcdWZmYTBcMDc1XHVmZmEwXDEwMFx1ZmZhMFwxMDFcdWZmYTAiICsKLSAgICAiXDEwMlx1ZmZhMFwxMDdcdWZmYTBcMTEwXHVmZmEwXDExMVx1ZmZhMFwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY4N1wwMDRcdWZmODdcMDA1XHVmZjg3XDAwN1x1ZmY4N1wwMTBcdWZmODdcMDExXHVmZjg3XDAxMlx1ZmY4NyIgKwotICAgICJcMDEzXHVmZjg3XDAxNFx1ZmY4N1wwMTVcdWZmODdcMDE2XHVmZjg3XDAxN1x1ZmY4N1wwMjBcdWZmODdcMDIxIiArCi0gICAgIlx1ZmY4N1wwMjJcdWZmODdcMDIzXHVmZjg3XDAyNFx1ZmY4N1wwMjVcdWZmODdcMDMyXHVmZjg3XDA1M1x1ZmY4NyIgKwotICAgICJcMDU0XHVmZjg3XDA1NVx1ZmY4N1wwNTZcdWZmODdcMDU3XHVmZjg3XDA2MFx1ZmY4N1wwNjFcdWZmODdcMDYyIiArCi0gICAgIlx1ZmY4N1wwNjNcdWZmODdcMDY0XHVmZjg3XDA2NVx1ZmY4N1wwNjZcdWZmODdcMDY3XHVmZjg3XDA3MVx1ZmY4NyIgKwotICAgICJcMDczXHVmZjg3XDA3NFx1ZmY4N1wwNzVcdWZmODdcMTAwXHVmZjg3XDEwMVx1ZmY4N1wxMDJcdWZmODdcMTA3IiArCi0gICAgIlx1ZmY4N1wxMTBcdWZmODdcMTExXHVmZjg3XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzNcMDA0XHVmZjczIiArCi0gICAgIlwwMDVcdWZmNzNcMDA3XHVmZjczXDAxMFx1ZmY3M1wwMTFcdWZmNzNcMDEyXHVmZjczXDAxM1x1ZmY3M1wwMTQiICsKLSAgICAiXHVmZjczXDAxNVx1ZmY3M1wwMTZcdWZmNzNcMDE3XHVmZjczXDAyMFx1ZmY3M1wwMjFcdWZmNzNcMDIyXHVmZjczIiArCi0gICAgIlwwMjNcdWZmNzNcMDI0XHVmZjczXDAyNVx1ZmY3M1wwMzJcdWZmNzNcMDM1XHVmZjczXDA1M1x1ZmY3M1wwNTQiICsKLSAgICAiXHVmZjczXDA1NVx1ZmY3M1wwNTZcdWZmNzNcMDU3XHVmZjczXDA2MFx1ZmY3M1wwNjFcdWZmNzNcMDYyXHVmZjczIiArCi0gICAgIlwwNjNcdWZmNzNcMDY0XHVmZjczXDA2NVx1ZmY3M1wwNjZcdWZmNzNcMDY3XHVmZjczXDA3MVx1ZmY3M1wwNzMiICsKLSAgICAiXHVmZjczXDA3NFx1ZmY3M1wwNzVcdWZmNzNcMTAwXHVmZjczXDEwMVx1ZmY3M1wxMDJcdWZmNzNcMTA3XHVmZjczIiArCi0gICAgIlwxMTBcdWZmNzNcMTExXHVmZjczXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzRcMDA0XHVmZjc0XDAwNSIgKwotICAgICJcdWZmNzRcMDA3XHVmZjc0XDAxMFx1ZmY3NFwwMTFcdWZmNzRcMDEyXHVmZjc0XDAxM1x1ZmY3NFwwMTRcdWZmNzQiICsKLSAgICAiXDAxNVx1ZmY3NFwwMTZcdWZmNzRcMDE3XHVmZjc0XDAyMFx1ZmY3NFwwMjFcdWZmNzRcMDIyXHVmZjc0XDAyMyIgKwotICAgICJcdWZmNzRcMDI0XHVmZjc0XDAyNVx1ZmY3NFwwMzJcdWZmNzRcMDM1XHVmZjc0XDA1M1x1ZmY3NFwwNTRcdWZmNzQiICsKLSAgICAiXDA1NVx1ZmY3NFwwNTZcdWZmNzRcMDU3XHVmZjc0XDA2MFx1ZmY3NFwwNjFcdWZmNzRcMDYyXHVmZjc0XDA2MyIgKwotICAgICJcdWZmNzRcMDY0XHVmZjc0XDA2NVx1ZmY3NFwwNjZcdWZmNzRcMDY3XHVmZjc0XDA3MVx1ZmY3NFwwNzNcdWZmNzQiICsKLSAgICAiXDA3NFx1ZmY3NFwwNzVcdWZmNzRcMTAwXHVmZjc0XDEwMVx1ZmY3NFwxMDJcdWZmNzRcMTA3XHVmZjc0XDExMCIgKwotICAgICJcdWZmNzRcMTExXHVmZjc0XDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMzdcMDA0XHVmZjM3XDAwNVx1ZmYzNyIgKwotICAgICJcMDA2XHVmZjAwXDAwN1x1ZmYzN1wwMTBcdWZmMzdcMDExXHVmZjM3XDAxMlx1ZmYzN1wwMTNcdWZmMzdcMDE0IiArCi0gICAgIlx1ZmYzN1wwMTVcdWZmMzdcMDE2XHVmZjM3XDAxN1x1ZmYzN1wwMjBcdWZmMzdcMDIxXHVmZjM3XDAyMlx1ZmYzNyIgKwotICAgICJcMDIzXHVmZjM3XDAyNFx1ZmYzN1wwMjVcdWZmMzdcMDMxXHVmZjM3XDAzMlx1ZmYzN1wwNTNcdWZmMzdcMDU0IiArCi0gICAgIlx1ZmYzN1wwNTVcdWZmMzdcMDU2XHVmZjM3XDA1N1x1ZmYzN1wwNjBcdWZmMzdcMDYxXHVmZjM3XDA2Mlx1ZmYzNyIgKwotICAgICJcMDYzXHVmZjM3XDA2NFx1ZmYzN1wwNjVcdWZmMzdcMDY2XHVmZjM3XDA2N1x1ZmYzN1wwNzFcdWZmMzdcMDczIiArCi0gICAgIlx1ZmYzN1wwNzRcdWZmMzdcMDc1XHVmZjM3XDEwMFx1ZmYzN1wxMDFcdWZmMzdcMTAyXHVmZjM3XDEwN1x1ZmYzNyIgKwotICAgICJcMTEwXHVmZjM3XDExMVx1ZmYzN1wwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjQ3XDAwNFx1ZmY0N1wwMDUiICsKLSAgICAiXHVmZjQ3XDAwNlx1ZmYwZlwwMDdcdWZmNDdcMDEwXHVmZjQ3XDAxMVx1ZmY0N1wwMTJcdWZmNDdcMDEzXHVmZjQ3IiArCi0gICAgIlwwMTRcdWZmNDdcMDE1XHVmZjQ3XDAxNlx1ZmY0N1wwMTdcdWZmNDdcMDIwXHVmZjQ3XDAyMVx1ZmY0N1wwMjIiICsKLSAgICAiXHVmZjQ3XDAyM1x1ZmY0N1wwMjRcdWZmNDdcMDI1XHVmZjQ3XDAzMVx1ZmY0N1wwMzJcdWZmNDdcMDUzXHVmZjQ3IiArCi0gICAgIlwwNTRcdWZmNDdcMDU1XHVmZjQ3XDA1Nlx1ZmY0N1wwNTdcdWZmNDdcMDYwXHVmZjQ3XDA2MVx1ZmY0N1wwNjIiICsKLSAgICAiXHVmZjQ3XDA2M1x1ZmY0N1wwNjRcdWZmNDdcMDY1XHVmZjQ3XDA2Nlx1ZmY0N1wwNjdcdWZmNDdcMDcxXHVmZjQ3IiArCi0gICAgIlwwNzNcdWZmNDdcMDc0XHVmZjQ3XDA3NVx1ZmY0N1wxMDBcdWZmNDdcMTAxXHVmZjQ3XDEwMlx1ZmY0N1wxMDciICsKLSAgICAiXHVmZjQ3XDExMFx1ZmY0N1wxMTFcdWZmNDdcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyMVwwMDRcdWZmMjEiICsKLSAgICAiXDAwNVx1ZmYyMVwwMDZcdTAxMTRcMDA3XHVmZjIxXDAxMFx1ZmYyMVwwMTFcdWZmMjFcMDEyXHVmZjIxXDAxMyIgKwotICAgICJcdWZmMjFcMDE0XHVmZjIxXDAxNVx1ZmYyMVwwMTZcdWZmMjFcMDE3XHVmZjIxXDAyMFx1ZmYyMVwwMjFcdWZmMjEiICsKLSAgICAiXDAyMlx1ZmYyMVwwMjNcdWZmMjFcMDI0XHVmZjIxXDAyNVx1ZmYyMVwwMzFcdWZmMjFcMDMyXHVmZjIxXDAzNSIgKwotICAgICJcdWZmMjFcMDUzXHVmZjIxXDA1NFx1ZmYyMVwwNTVcdWZmMjFcMDU2XHVmZjIxXDA1N1x1ZmYyMVwwNjBcdWZmMjEiICsKLSAgICAiXDA2MVx1ZmYyMVwwNjJcdWZmMjFcMDYzXHVmZjIxXDA2NFx1ZmYyMVwwNjVcdWZmMjFcMDY2XHVmZjIxXDA2NyIgKwotICAgICJcdWZmMjFcMDcxXHVmZjIxXDA3M1x1ZmYyMVwwNzRcdWZmMjFcMDc1XHVmZjIxXDEwMFx1ZmYyMVwxMDFcdWZmMjEiICsKLSAgICAiXDEwMlx1ZmYyMVwxMDdcdWZmMjFcMTEwXHVmZjIxXDExMVx1ZmYyMVwwMDFcMDAyXDAwMFwxMzZcMDAyIiArCi0gICAgIlx1ZmYxZFwwMDRcdWZmMWRcMDA1XHVmZjFkXDAwNlx1ZmYxZFwwMDdcdWZmMWRcMDEwXHVmZjFkXDAxMVx1ZmYxZCIgKwotICAgICJcMDEyXHVmZjFkXDAxM1x1ZmYxZFwwMTRcdWZmMWRcMDE1XHVmZjFkXDAxNlx1ZmYxZFwwMTdcdWZmMWRcMDIwIiArCi0gICAgIlx1ZmYxZFwwMjFcdWZmMWRcMDIyXHVmZjFkXDAyM1x1ZmYxZFwwMjRcdWZmMWRcMDI1XHVmZjFkXDAzMVx1ZmYxZCIgKwotICAgICJcMDMyXHVmZjFkXDAzNVx1ZmYxZFwwNTNcdWZmMWRcMDU0XHVmZjFkXDA1NVx1ZmYxZFwwNTZcdWZmMWRcMDU3IiArCi0gICAgIlx1ZmYxZFwwNjBcdWZmMWRcMDYxXHVmZjFkXDA2Mlx1ZmYxZFwwNjNcdWZmMWRcMDY0XHVmZjFkXDA2NVx1ZmYxZCIgKwotICAgICJcMDY2XHVmZjFkXDA2N1x1ZmYxZFwwNzFcdWZmMWRcMDczXHVmZjFkXDA3NFx1ZmYxZFwwNzVcdWZmMWRcMDc3IiArCi0gICAgIlx1ZmYxZFwxMDBcdWZmMWRcMTAxXHVmZjFkXDEwMlx1ZmYxZFwxMDdcdWZmMWRcMTEwXHVmZjFkXDExMVx1ZmYxZCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTAwXDAwMlx1ZmZlN1wwMDVcdWZmZTdcMDA3XHVmZmU3XDAxMFx1ZmZlN1wwMTEiICsKLSAgICAiXHVmZmU3XDAxMlx1MDEwOFwwMTRcdWZmZTdcMDE1XHVmZmU3XDAxNlx1ZmZlN1wwMTdcdWZmZTdcMDIwXHVmZmU3IiArCi0gICAgIlwwMjFcdWZmZTdcMDIyXHVmZmU3XDAyM1x1ZmZlN1wwMzJcdWZmZTdcMDUzXHVmZmU3XDA1NFx1ZmZlN1wwNTUiICsKLSAgICAiXHVmZmU3XDA1Nlx1ZmZlN1wwNTdcdWZmZTdcMDYwXHVmZmU3XDA2MVx1MDEwYVwwNjJcdTAxMGJcMDYzXHUwMTA5IiArCi0gICAgIlwwNzVcdWZmZTdcMTAwXHVmZmU3XDEwMVx1ZmZlN1wxMDJcdWZmZTdcMTA3XHVmZmU3XDExMFx1ZmZlN1wxMTEiICsKLSAgICAiXHVmZmU3XDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYmJcMDA1XHVmZmJiXDAwN1x1ZmZiYlwwMTBcdWZmYmIiICsKLSAgICAiXDAxMVx1ZmZiYlwwMTJcdWZmYmJcMDEzXHVmZmJiXDAxNFx1ZmZiYlwwMTVcdWZmYmJcMDE2XHVmZmJiXDAxNyIgKwotICAgICJcdWZmYmJcMDIwXHVmZmJiXDAyMVx1ZmZiYlwwMjJcdWZmYmJcMDIzXHVmZmJiXDAyNFx1MDEwNFwwMjVcdTAxMDUiICsKLSAgICAiXDAzMlx1ZmZiYlwwNTNcdWZmYmJcMDU0XHVmZmJiXDA1NVx1ZmZiYlwwNTZcdWZmYmJcMDU3XHVmZmJiXDA2MCIgKwotICAgICJcdWZmYmJcMDYxXHVmZmJiXDA2Mlx1ZmZiYlwwNjNcdWZmYmJcMDY0XHVmZmJiXDA2NVx1ZmZiYlwwNjZcdWZmYmIiICsKLSAgICAiXDA2N1x1ZmZiYlwwNzFcdWZmYmJcMDczXHVmZmJiXDA3NFx1ZmZiYlwwNzVcdWZmYmJcMTAwXHVmZmJiXDEwMSIgKwotICAgICJcdWZmYmJcMTAyXHVmZmJiXDEwN1x1ZmZiYlwxMTBcdWZmYmJcMTExXHVmZmJiXDAwMVwwMDJcMDAwXDAwNCIgKwotICAgICJcMDA2XDM3NVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjcyXDAwNFx1ZmY3MlwwMDVcdWZmNzJcMDA3IiArCi0gICAgIlx1ZmY3MlwwMTBcdWZmNzJcMDExXHVmZjcyXDAxMlx1ZmY3MlwwMTNcdWZmNzJcMDE0XHVmZjcyXDAxNVx1ZmY3MiIgKwotICAgICJcMDE2XHVmZjcyXDAxN1x1ZmY3MlwwMjBcdWZmNzJcMDIxXHVmZjcyXDAyMlx1ZmY3MlwwMjNcdWZmNzJcMDI0IiArCi0gICAgIlx1ZmY3MlwwMjVcdWZmNzJcMDMyXHVmZjcyXDAzNVx1ZmY3MlwwNTNcdWZmNzJcMDU0XHVmZjcyXDA1NVx1ZmY3MiIgKwotICAgICJcMDU2XHVmZjcyXDA1N1x1ZmY3MlwwNjBcdWZmNzJcMDYxXHVmZjcyXDA2Mlx1ZmY3MlwwNjNcdWZmNzJcMDY0IiArCi0gICAgIlx1ZmY3MlwwNjVcdWZmNzJcMDY2XHVmZjcyXDA2N1x1ZmY3MlwwNzFcdWZmNzJcMDczXHVmZjcyXDA3NFx1ZmY3MiIgKwotICAgICJcMDc1XHVmZjcyXDEwMFx1ZmY3MlwxMDFcdWZmNzJcMTAyXHVmZjcyXDEwN1x1ZmY3MlwxMTBcdWZmNzJcMTExIiArCi0gICAgIlx1ZmY3MlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjFlXDAwNFx1ZmYxZVwwMDVcdWZmMWVcMDA2XHVmZjFlIiArCi0gICAgIlwwMDdcdWZmMWVcMDEwXHVmZjFlXDAxMVx1ZmYxZVwwMTJcdWZmMWVcMDEzXHVmZjFlXDAxNFx1ZmYxZVwwMTUiICsKLSAgICAiXHVmZjFlXDAxNlx1ZmYxZVwwMTdcdWZmMWVcMDIwXHVmZjFlXDAyMVx1ZmYxZVwwMjJcdWZmMWVcMDIzXHVmZjFlIiArCi0gICAgIlwwMjRcdWZmMWVcMDI1XHVmZjFlXDAzMVx1ZmYxZVwwMzJcdWZmMWVcMDM1XHVmZjFlXDA1M1x1ZmYxZVwwNTQiICsKLSAgICAiXHVmZjFlXDA1NVx1ZmYxZVwwNTZcdWZmMWVcMDU3XHVmZjFlXDA2MFx1ZmYxZVwwNjFcdWZmMWVcMDYyXHVmZjFlIiArCi0gICAgIlwwNjNcdWZmMWVcMDY0XHVmZjFlXDA2NVx1ZmYxZVwwNjZcdWZmMWVcMDY3XHVmZjFlXDA3MVx1ZmYxZVwwNzMiICsKLSAgICAiXHVmZjFlXDA3NFx1ZmYxZVwwNzVcdWZmMWVcMDc3XHVmZjFlXDEwMFx1ZmYxZVwxMDFcdWZmMWVcMTAyXHVmZjFlIiArCi0gICAgIlwxMDdcdWZmMWVcMTEwXHVmZjFlXDExMVx1ZmYxZVwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjMxXDAwNCIgKwotICAgICJcdWZmMzFcMDA1XHVmZjMxXDAwNlx1ZmVmYVwwMDdcdWZmMzFcMDEwXHVmZjMxXDAxMVx1ZmYzMVwwMTJcdWZmMzEiICsKLSAgICAiXDAxM1x1ZmYzMVwwMTRcdWZmMzFcMDE1XHVmZjMxXDAxNlx1ZmYzMVwwMTdcdWZmMzFcMDIwXHVmZjMxXDAyMSIgKwotICAgICJcdWZmMzFcMDIyXHVmZjMxXDAyM1x1ZmYzMVwwMjRcdWZmMzFcMDI1XHVmZjMxXDAzMVx1ZmYzMVwwMzJcdWZmMzEiICsKLSAgICAiXDA1M1x1ZmYzMVwwNTRcdWZmMzFcMDU1XHVmZjMxXDA1Nlx1ZmYzMVwwNTdcdWZmMzFcMDYwXHVmZjMxXDA2MSIgKwotICAgICJcdWZmMzFcMDYyXHVmZjMxXDA2M1x1ZmYzMVwwNjRcdWZmMzFcMDY1XHVmZjMxXDA2Nlx1ZmYzMVwwNjdcdWZmMzEiICsKLSAgICAiXDA3MVx1ZmYzMVwwNzNcdWZmMzFcMDc0XHVmZjMxXDA3NVx1ZmYzMVwxMDBcdWZmMzFcMTAxXHVmZjMxXDEwMiIgKwotICAgICJcdWZmMzFcMTA3XHVmZjMxXDExMFx1ZmYzMVwxMTFcdWZmMzFcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyZiIgKwotICAgICJcMDA0XHVmZjJmXDAwNVx1ZmYyZlwwMDZcdWZlZjhcMDA3XHVmZjJmXDAxMFx1ZmYyZlwwMTFcdWZmMmZcMDEyIiArCi0gICAgIlx1ZmYyZlwwMTNcdWZmMmZcMDE0XHVmZjJmXDAxNVx1ZmYyZlwwMTZcdWZmMmZcMDE3XHVmZjJmXDAyMFx1ZmYyZiIgKwotICAgICJcMDIxXHVmZjJmXDAyMlx1ZmYyZlwwMjNcdWZmMmZcMDI0XHVmZjJmXDAyNVx1ZmYyZlwwMzFcdWZmMmZcMDMyIiArCi0gICAgIlx1ZmYyZlwwNTNcdWZmMmZcMDU0XHVmZjJmXDA1NVx1ZmYyZlwwNTZcdWZmMmZcMDU3XHVmZjJmXDA2MFx1ZmYyZiIgKwotICAgICJcMDYxXHVmZjJmXDA2Mlx1ZmYyZlwwNjNcdWZmMmZcMDY0XHVmZjJmXDA2NVx1ZmYyZlwwNjZcdWZmMmZcMDY3IiArCi0gICAgIlx1ZmYyZlwwNzFcdWZmMmZcMDczXHVmZjJmXDA3NFx1ZmYyZlwwNzVcdWZmMmZcMTAwXHVmZjJmXDEwMVx1ZmYyZiIgKwotICAgICJcMTAyXHVmZjJmXDEwN1x1ZmYyZlwxMTBcdWZmMmZcMTExXHVmZjJmXDAwMVwwMDJcMDAwXDIxNlwwMDYiICsKLSAgICAiXDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3NyIgKwotICAgICJcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxIiArCi0gICAgIlwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzQiICsKLSAgICAiXDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NiIgKwotICAgICJcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExIiArCi0gICAgIlwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzMiICsKLSAgICAiXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NiIgKwotICAgICJcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwIiArCi0gICAgIlwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTYiICsKLSAgICAiXDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNSIgKwotICAgICJcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTI2IiArCi0gICAgIlwwMDJcdWZmOTJcMDA0XHVmZjkyXDAwNVx1ZmY5MlwwMDdcdWZmOTJcMDEwXHVmZjkyXDAxMVx1ZmY5MlwwMTIiICsKLSAgICAiXHVmZjkyXDAxM1x1ZmY5MlwwMTRcdWZmOTJcMDE1XHVmZjkyXDAxNlx1ZmY5MlwwMTdcdWZmOTJcMDIwXHVmZjkyIiArCi0gICAgIlwwMjFcdWZmOTJcMDIyXHVmZjkyXDAyM1x1ZmY5MlwwMjRcdWZmOTJcMDI1XHVmZjkyXDAzMlx1ZmY5MlwwNTMiICsKLSAgICAiXHVmZjkyXDA1NFx1ZmY5MlwwNTVcdWZmOTJcMDU2XHVmZjkyXDA1N1x1ZmY5MlwwNjBcdWZmOTJcMDYxXHVmZjkyIiArCi0gICAgIlwwNjJcdWZmOTJcMDYzXHVmZjkyXDA2NFx1ZmY5MlwwNjVcdWZmOTJcMDY2XHVmZjkyXDA2N1x1ZmY5MlwwNzEiICsKLSAgICAiXHVmZjkyXDA3M1x1ZmY5MlwwNzRcdWZmOTJcMDc1XHVmZjkyXDEwMFx1ZmY5MlwxMDFcdWZmOTJcMTAyXHVmZjkyIiArCi0gICAgIlwxMDdcdWZmOTJcMTEwXHVmZjkyXDExMVx1ZmY5MlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZmE2XDAwNCIgKwotICAgICJcdWZmYTZcMDA1XHVmZmE2XDAwN1x1ZmZhNlwwMTBcdWZmYTZcMDExXHVmZmE2XDAxMlx1ZmZhNlwwMTNcdWZmYTYiICsKLSAgICAiXDAxNFx1ZmZhNlwwMTVcdWZmYTZcMDE2XHVmZmE2XDAxN1x1ZmZhNlwwMjBcdWZmYTZcMDIxXHVmZmE2XDAyMiIgKwotICAgICJcdWZmYTZcMDIzXHVmZmE2XDAyNFx1ZmZhNlwwMjVcdWZmYTZcMDMyXHVmZmE2XDA1M1x1ZmZhNlwwNTRcdWZmYTYiICsKLSAgICAiXDA1NVx1ZmZhNlwwNTZcdWZmYTZcMDU3XHVmZmE2XDA2MFx1ZmZhNlwwNjFcdWZmYTZcMDYyXHVmZmE2XDA2MyIgKwotICAgICJcdWZmYTZcMDY0XHVmZmE2XDA2NVx1ZmZhNlwwNjZcdWZmYTZcMDY3XHVmZmE2XDA3MVx1ZmZhNlwwNzNcdWZmYTYiICsKLSAgICAiXDA3NFx1ZmZhNlwwNzVcdWZmYTZcMTAwXHVmZmE2XDEwMVx1ZmZhNlwxMDJcdWZmYTZcMTA3XHVmZmE2XDExMCIgKwotICAgICJcdWZmYTZcMTExXHVmZmE2XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMWJcMDA0XHVmZjFiXDAwNVx1ZmYxYiIgKwotICAgICJcMDA2XDM2NlwwMDdcdWZmMWJcMDEwXHVmZjFiXDAxMVx1ZmYxYlwwMTJcdWZmMWJcMDEzXHVmZjFiXDAxNCIgKwotICAgICJcdWZmMWJcMDE1XHVmZjFiXDAxNlx1ZmYxYlwwMTdcdWZmMWJcMDIwXHVmZjFiXDAyMVx1ZmYxYlwwMjJcdWZmMWIiICsKLSAgICAiXDAyM1x1ZmYxYlwwMjRcdWZmMWJcMDI1XHVmZjFiXDAzMVx1ZmYxYlwwMzJcdWZmMWJcMDM1XHVmZjFiXDA1MyIgKwotICAgICJcdWZmMWJcMDU0XHVmZjFiXDA1NVx1ZmYxYlwwNTZcdWZmMWJcMDU3XHVmZjFiXDA2MFx1ZmYxYlwwNjFcdWZmMWIiICsKLSAgICAiXDA2Mlx1ZmYxYlwwNjNcdWZmMWJcMDY0XHVmZjFiXDA2NVx1ZmYxYlwwNjZcdWZmMWJcMDY3XHVmZjFiXDA3MSIgKwotICAgICJcdWZmMWJcMDczXHVmZjFiXDA3NFx1ZmYxYlwwNzVcdWZmMWJcMTAwXHVmZjFiXDEwMVx1ZmYxYlwxMDJcdWZmMWIiICsKLSAgICAiXDEwN1x1ZmYxYlwxMTBcdWZmMWJcMTExXHVmZjFiXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMmRcMDA0IiArCi0gICAgIlx1ZmYyZFwwMDVcdWZmMmRcMDA2XHVmZWY2XDAwN1x1ZmYyZFwwMTBcdWZmMmRcMDExXHVmZjJkXDAxMlx1ZmYyZCIgKwotICAgICJcMDEzXHVmZjJkXDAxNFx1ZmYyZFwwMTVcdWZmMmRcMDE2XHVmZjJkXDAxN1x1ZmYyZFwwMjBcdWZmMmRcMDIxIiArCi0gICAgIlx1ZmYyZFwwMjJcdWZmMmRcMDIzXHVmZjJkXDAyNFx1ZmYyZFwwMjVcdWZmMmRcMDMxXHVmZjJkXDAzMlx1ZmYyZCIgKwotICAgICJcMDUzXHVmZjJkXDA1NFx1ZmYyZFwwNTVcdWZmMmRcMDU2XHVmZjJkXDA1N1x1ZmYyZFwwNjBcdWZmMmRcMDYxIiArCi0gICAgIlx1ZmYyZFwwNjJcdWZmMmRcMDYzXHVmZjJkXDA2NFx1ZmYyZFwwNjVcdWZmMmRcMDY2XHVmZjJkXDA2N1x1ZmYyZCIgKwotICAgICJcMDcxXHVmZjJkXDA3M1x1ZmYyZFwwNzRcdWZmMmRcMDc1XHVmZjJkXDEwMFx1ZmYyZFwxMDFcdWZmMmRcMTAyIiArCi0gICAgIlx1ZmYyZFwxMDdcdWZmMmRcMTEwXHVmZjJkXDExMVx1ZmYyZFwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk0IiArCi0gICAgIlwwMDRcdWZmOTRcMDA1XHVmZjk0XDAwN1x1ZmY5NFwwMTBcdWZmOTRcMDExXHVmZjk0XDAxMlx1ZmY5NFwwMTMiICsKLSAgICAiXHVmZjk0XDAxNFx1ZmY5NFwwMTVcdWZmOTRcMDE2XHVmZjk0XDAxN1x1ZmY5NFwwMjBcdWZmOTRcMDIxXHVmZjk0IiArCi0gICAgIlwwMjJcdWZmOTRcMDIzXHVmZjk0XDAyNFx1ZmY5NFwwMjVcdWZmOTRcMDMyXHVmZjk0XDA1M1x1ZmY5NFwwNTQiICsKLSAgICAiXHVmZjk0XDA1NVx1ZmY5NFwwNTZcdWZmOTRcMDU3XHVmZjk0XDA2MFx1ZmY5NFwwNjFcdWZmOTRcMDYyXHVmZjk0IiArCi0gICAgIlwwNjNcdWZmOTRcMDY0XHVmZjk0XDA2NVx1ZmY5NFwwNjZcdWZmOTRcMDY3XHVmZjk0XDA3MVx1ZmY5NFwwNzMiICsKLSAgICAiXHVmZjk0XDA3NFx1ZmY5NFwwNzVcdWZmOTRcMTAwXHVmZjk0XDEwMVx1ZmY5NFwxMDJcdWZmOTRcMTA3XHVmZjk0IiArCi0gICAgIlwxMTBcdWZmOTRcMTExXHVmZjk0XDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMjRcMDA0XHVmZjI0XDAwNSIgKwotICAgICJcdWZmMjRcMDA2XHVmZWVlXDAwN1x1ZmYyNFwwMTBcdWZmMjRcMDExXHVmZjI0XDAxMlx1ZmYyNFwwMTNcdWZmMjQiICsKLSAgICAiXDAxNFx1ZmYyNFwwMTVcdWZmMjRcMDE2XHVmZjI0XDAxN1x1ZmYyNFwwMjBcdWZmMjRcMDIxXHVmZjI0XDAyMiIgKwotICAgICJcdWZmMjRcMDIzXHVmZjI0XDAyNFx1ZmYyNFwwMjVcdWZmMjRcMDMxXHVmZjI0XDAzMlx1ZmYyNFwwNTNcdWZmMjQiICsKLSAgICAiXDA1NFx1ZmYyNFwwNTVcdWZmMjRcMDU2XHVmZjI0XDA1N1x1ZmYyNFwwNjBcdWZmMjRcMDYxXHVmZjI0XDA2MiIgKwotICAgICJcdWZmMjRcMDYzXHVmZjI0XDA2NFx1ZmYyNFwwNjVcdWZmMjRcMDY2XHVmZjI0XDA2N1x1ZmYyNFwwNzFcdWZmMjQiICsKLSAgICAiXDA3M1x1ZmYyNFwwNzRcdWZmMjRcMDc1XHVmZjI0XDEwMFx1ZmYyNFwxMDFcdWZmMjRcMTAyXHVmZjI0XDEwNyIgKwotICAgICJcdWZmMjRcMTEwXHVmZjI0XDExMVx1ZmYyNFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQzXDAwNFx1ZmY0MyIgKwotICAgICJcMDA1XHVmZjQzXDAwNlwzNTNcMDA3XHVmZjQzXDAxMFx1ZmY0M1wwMTFcdWZmNDNcMDEyXHVmZjQzXDAxMyIgKwotICAgICJcdWZmNDNcMDE0XHVmZjQzXDAxNVx1ZmY0M1wwMTZcdWZmNDNcMDE3XHVmZjQzXDAyMFx1ZmY0M1wwMjFcdWZmNDMiICsKLSAgICAiXDAyMlx1ZmY0M1wwMjNcdWZmNDNcMDI0XHVmZjQzXDAyNVx1ZmY0M1wwMjZcMzUyXDAzMVx1ZmY0M1wwMzIiICsKLSAgICAiXHVmZjQzXDA1M1x1ZmY0M1wwNTRcdWZmNDNcMDU1XHVmZjQzXDA1Nlx1ZmY0M1wwNTdcdWZmNDNcMDYwXHVmZjQzIiArCi0gICAgIlwwNjFcdWZmNDNcMDYyXHVmZjQzXDA2M1x1ZmY0M1wwNjRcdWZmNDNcMDY1XHVmZjQzXDA2Nlx1ZmY0M1wwNjciICsKLSAgICAiXHVmZjQzXDA3MVx1ZmY0M1wwNzNcdWZmNDNcMDc0XHVmZjQzXDA3NVx1ZmY0M1wxMDBcdWZmNDNcMTAxXHVmZjQzIiArCi0gICAgIlwxMDJcdWZmNDNcMTA3XHVmZjQzXDExMFx1ZmY0M1wxMTFcdWZmNDNcMDAxXDAwMlwwMDBcMTIwXDAwMiIgKwotICAgICJcdWZmZDFcMDA1XHVmZmQxXDAwN1x1ZmZkMVwwMTBcdWZmZDFcMDExXHVmZmQxXDAxMlx1ZmZkMVwwMTNcdWZmZDEiICsKLSAgICAiXDAxNFx1ZmZkMVwwMTVcdWZmZDFcMDE2XHVmZmQxXDAxN1x1ZmZkMVwwMjBcdWZmZDFcMDIxXHVmZmQxXDAyMiIgKwotICAgICJcdWZmZDFcMDIzXHVmZmQxXDAzMlx1ZmZkMVwwNTNcdWZmZDFcMDU0XHVmZmQxXDA1NVx1ZmZkMVwwNTZcdWZmZDEiICsKLSAgICAiXDA1N1x1ZmZkMVwwNjBcdWZmZDFcMDYxXHVmZmQxXDA2Mlx1ZmZkMVwwNjNcdWZmZDFcMDY0XHVmZmQxXDA2NSIgKwotICAgICJcdWZmZDFcMDY2XHVmZmQxXDA2N1x1ZmZkMVwwNzFcdWZmZDFcMDczXHVmZmQxXDA3NFx1ZmZkMVwwNzVcdWZmZDEiICsKLSAgICAiXDEwMFx1ZmZkMVwxMDFcdWZmZDFcMTAyXHVmZmQxXDEwN1x1ZmZkMVwxMTBcdWZmZDFcMTExXHVmZmQxXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzJcMDAyXHVmZjI4XDAwNFx1ZmYyOFwwMDVcdWZmMjhcMDA2XDM0M1wwMDdcdWZmMjgiICsKLSAgICAiXDAxMFx1ZmYyOFwwMTFcdWZmMjhcMDEyXHVmZjI4XDAxM1x1ZmYyOFwwMTRcdWZmMjhcMDE1XHVmZjI4XDAxNiIgKwotICAgICJcdWZmMjhcMDE3XHVmZjI4XDAyMFx1ZmYyOFwwMjFcdWZmMjhcMDIyXHVmZjI4XDAyM1x1ZmYyOFwwMjRcdWZmMjgiICsKLSAgICAiXDAyNVx1ZmYyOFwwMzFcdWZmMjhcMDMyXHVmZjI4XDA1M1x1ZmYyOFwwNTRcdWZmMjhcMDU1XHVmZjI4XDA1NiIgKwotICAgICJcdWZmMjhcMDU3XHVmZjI4XDA2MFx1ZmYyOFwwNjFcdWZmMjhcMDYyXHVmZjI4XDA2M1x1ZmYyOFwwNjRcdWZmMjgiICsKLSAgICAiXDA2NVx1ZmYyOFwwNjZcdWZmMjhcMDY3XHVmZjI4XDA3MVx1ZmYyOFwwNzNcdWZmMjhcMDc0XHVmZjI4XDA3NSIgKwotICAgICJcdWZmMjhcMTAwXHVmZjI4XDEwMVx1ZmYyOFwxMDJcdWZmMjhcMTA3XHVmZjI4XDExMFx1ZmYyOFwxMTFcdWZmMjgiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmZcMDA0XHVmZjZmXDAwNVx1ZmY2ZlwwMDdcdWZmNmZcMDEwIiArCi0gICAgIlx1ZmY2ZlwwMTFcdWZmNmZcMDEyXHVmZjZmXDAxM1x1ZmY2ZlwwMTRcdWZmNmZcMDE1XHVmZjZmXDAxNlx1ZmY2ZiIgKwotICAgICJcMDE3XHVmZjZmXDAyMFx1ZmY2ZlwwMjFcdWZmNmZcMDIyXHVmZjZmXDAyM1x1ZmY2ZlwwMjRcdWZmNmZcMDI1IiArCi0gICAgIlx1ZmY2ZlwwMzJcdWZmNmZcMDM1XHVmZjZmXDA1M1x1ZmY2ZlwwNTRcdWZmNmZcMDU1XHVmZjZmXDA1Nlx1ZmY2ZiIgKwotICAgICJcMDU3XHVmZjZmXDA2MFx1ZmY2ZlwwNjFcdWZmNmZcMDYyXHVmZjZmXDA2M1x1ZmY2ZlwwNjRcdWZmNmZcMDY1IiArCi0gICAgIlx1ZmY2ZlwwNjZcdWZmNmZcMDY3XHVmZjZmXDA3MVx1ZmY2ZlwwNzNcdWZmNmZcMDc0XHVmZjZmXDA3NVx1ZmY2ZiIgKwotICAgICJcMTAwXHVmZjZmXDEwMVx1ZmY2ZlwxMDJcdWZmNmZcMTA3XHVmZjZmXDExMFx1ZmY2ZlwxMTFcdWZmNmZcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEyMFwwMDJcdWZmY2VcMDA1XHVmZmNlXDAwN1x1ZmZjZVwwMTBcdWZmY2VcMDExXHVmZmNlIiArCi0gICAgIlwwMTJcdWZmY2VcMDEzXHVmZmNlXDAxNFx1ZmZjZVwwMTVcdWZmY2VcMDE2XHVmZmNlXDAxN1x1ZmZjZVwwMjAiICsKLSAgICAiXHVmZmNlXDAyMVx1ZmZjZVwwMjJcdWZmY2VcMDIzXHVmZmNlXDAzMlx1ZmZjZVwwNTNcdWZmY2VcMDU0XHVmZmNlIiArCi0gICAgIlwwNTVcdWZmY2VcMDU2XHVmZmNlXDA1N1x1ZmZjZVwwNjBcdWZmY2VcMDYxXHVmZmNlXDA2Mlx1ZmZjZVwwNjMiICsKLSAgICAiXHVmZmNlXDA2NFx1ZmZjZVwwNjVcdWZmY2VcMDY2XHVmZmNlXDA2N1x1ZmZjZVwwNzFcdWZmY2VcMDczXHVmZmNlIiArCi0gICAgIlwwNzRcdWZmY2VcMDc1XHVmZmNlXDEwMFx1ZmZjZVwxMDFcdWZmY2VcMTAyXHVmZmNlXDEwN1x1ZmZjZVwxMTAiICsKLSAgICAiXHVmZmNlXDExMVx1ZmZjZVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjE3XDAwNFx1ZmYxN1wwMDVcdWZmMTciICsKLSAgICAiXDAwNlx1ZmYxN1wwMDdcdWZmMTdcMDEwXHVmZjE3XDAxMVx1ZmYxN1wwMTJcdWZmMTdcMDEzXHVmZjE3XDAxNCIgKwotICAgICJcdWZmMTdcMDE1XHVmZjE3XDAxNlx1ZmYxN1wwMTdcdWZmMTdcMDIwXHVmZjE3XDAyMVx1ZmYxN1wwMjJcdWZmMTciICsKLSAgICAiXDAyM1x1ZmYxN1wwMjRcdWZmMTdcMDI1XHVmZjE3XDAzMVx1ZmYxN1wwMzJcdWZmMTdcMDM1XHVmZjE3XDA1MyIgKwotICAgICJcdWZmMTdcMDU0XHVmZjE3XDA1NVx1ZmYxN1wwNTZcdWZmMTdcMDU3XHVmZjE3XDA2MFx1ZmYxN1wwNjFcdWZmMTciICsKLSAgICAiXDA2Mlx1ZmYxN1wwNjNcdWZmMTdcMDY0XHVmZjE3XDA2NVx1ZmYxN1wwNjZcdWZmMTdcMDY3XHVmZjE3XDA3MSIgKwotICAgICJcdWZmMTdcMDczXHVmZjE3XDA3NFx1ZmYxN1wwNzVcdWZmMTdcMDc3XHVmZjE3XDEwMFx1ZmYxN1wxMDFcdWZmMTciICsKLSAgICAiXDEwMlx1ZmYxN1wxMDdcdWZmMTdcMTEwXHVmZjE3XDExMVx1ZmYxN1wwMDFcMDAyXDAwMFwxMzJcMDAyIiArCi0gICAgIlx1ZmYzMFwwMDRcdWZmMzBcMDA1XHVmZjMwXDAwNlx1ZmVmOVwwMDdcdWZmMzBcMDEwXHVmZjMwXDAxMVx1ZmYzMCIgKwotICAgICJcMDEyXHVmZjMwXDAxM1x1ZmYzMFwwMTRcdWZmMzBcMDE1XHVmZjMwXDAxNlx1ZmYzMFwwMTdcdWZmMzBcMDIwIiArCi0gICAgIlx1ZmYzMFwwMjFcdWZmMzBcMDIyXHVmZjMwXDAyM1x1ZmYzMFwwMjRcdWZmMzBcMDI1XHVmZjMwXDAzMVx1ZmYzMCIgKwotICAgICJcMDMyXHVmZjMwXDA1M1x1ZmYzMFwwNTRcdWZmMzBcMDU1XHVmZjMwXDA1Nlx1ZmYzMFwwNTdcdWZmMzBcMDYwIiArCi0gICAgIlx1ZmYzMFwwNjFcdWZmMzBcMDYyXHVmZjMwXDA2M1x1ZmYzMFwwNjRcdWZmMzBcMDY1XHVmZjMwXDA2Nlx1ZmYzMCIgKwotICAgICJcMDY3XHVmZjMwXDA3MVx1ZmYzMFwwNzNcdWZmMzBcMDc0XHVmZjMwXDA3NVx1ZmYzMFwxMDBcdWZmMzBcMTAxIiArCi0gICAgIlx1ZmYzMFwxMDJcdWZmMzBcMTA3XHVmZjMwXDExMFx1ZmYzMFwxMTFcdWZmMzBcMDAxXDAwMlwwMDBcMTMyIiArCi0gICAgIlwwMDJcdWZmMzRcMDA0XHVmZjM0XDAwNVx1ZmYzNFwwMDZcdWZlZmRcMDA3XHVmZjM0XDAxMFx1ZmYzNFwwMTEiICsKLSAgICAiXHVmZjM0XDAxMlx1ZmYzNFwwMTNcdWZmMzRcMDE0XHVmZjM0XDAxNVx1ZmYzNFwwMTZcdWZmMzRcMDE3XHVmZjM0IiArCi0gICAgIlwwMjBcdWZmMzRcMDIxXHVmZjM0XDAyMlx1ZmYzNFwwMjNcdWZmMzRcMDI0XHVmZjM0XDAyNVx1ZmYzNFwwMzEiICsKLSAgICAiXHVmZjM0XDAzMlx1ZmYzNFwwNTNcdWZmMzRcMDU0XHVmZjM0XDA1NVx1ZmYzNFwwNTZcdWZmMzRcMDU3XHVmZjM0IiArCi0gICAgIlwwNjBcdWZmMzRcMDYxXHVmZjM0XDA2Mlx1ZmYzNFwwNjNcdWZmMzRcMDY0XHVmZjM0XDA2NVx1ZmYzNFwwNjYiICsKLSAgICAiXHVmZjM0XDA2N1x1ZmYzNFwwNzFcdWZmMzRcMDczXHVmZjM0XDA3NFx1ZmYzNFwwNzVcdWZmMzRcMTAwXHVmZjM0IiArCi0gICAgIlwxMDFcdWZmMzRcMTAyXHVmZjM0XDEwN1x1ZmYzNFwxMTBcdWZmMzRcMTExXHVmZjM0XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzRcMDAyXHVmZjQ0XDAwNFx1ZmY0NFwwMDVcdWZmNDRcMDA2XHVmZjBjXDAwN1x1ZmY0NFwwMTBcdWZmNDQiICsKLSAgICAiXDAxMVx1ZmY0NFwwMTJcdWZmNDRcMDEzXHVmZjQ0XDAxNFx1ZmY0NFwwMTVcdWZmNDRcMDE2XHVmZjQ0XDAxNyIgKwotICAgICJcdWZmNDRcMDIwXHVmZjQ0XDAyMVx1ZmY0NFwwMjJcdWZmNDRcMDIzXHVmZjQ0XDAyNFx1ZmY0NFwwMjVcdWZmNDQiICsKLSAgICAiXDAyNlwzNDJcMDMxXHVmZjQ0XDAzMlx1ZmY0NFwwNTNcdWZmNDRcMDU0XHVmZjQ0XDA1NVx1ZmY0NFwwNTYiICsKLSAgICAiXHVmZjQ0XDA1N1x1ZmY0NFwwNjBcdWZmNDRcMDYxXHVmZjQ0XDA2Mlx1ZmY0NFwwNjNcdWZmNDRcMDY0XHVmZjQ0IiArCi0gICAgIlwwNjVcdWZmNDRcMDY2XHVmZjQ0XDA2N1x1ZmY0NFwwNzFcdWZmNDRcMDczXHVmZjQ0XDA3NFx1ZmY0NFwwNzUiICsKLSAgICAiXHVmZjQ0XDEwMFx1ZmY0NFwxMDFcdWZmNDRcMTAyXHVmZjQ0XDEwN1x1ZmY0NFwxMTBcdWZmNDRcMTExXHVmZjQ0IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjJhXDAwNFx1ZmYyYVwwMDVcdWZmMmFcMDA2XHVmZWYzXDAwNyIgKwotICAgICJcdWZmMmFcMDEwXHVmZjJhXDAxMVx1ZmYyYVwwMTJcdWZmMmFcMDEzXHVmZjJhXDAxNFx1ZmYyYVwwMTVcdWZmMmEiICsKLSAgICAiXDAxNlx1ZmYyYVwwMTdcdWZmMmFcMDIwXHVmZjJhXDAyMVx1ZmYyYVwwMjJcdWZmMmFcMDIzXHVmZjJhXDAyNCIgKwotICAgICJcdWZmMmFcMDI1XHVmZjJhXDAzMVx1ZmYyYVwwMzJcdWZmMmFcMDMzXDMyNlwwNTNcdWZmMmFcMDU0XHVmZjJhIiArCi0gICAgIlwwNTVcdWZmMmFcMDU2XHVmZjJhXDA1N1x1ZmYyYVwwNjBcdWZmMmFcMDYxXHVmZjJhXDA2Mlx1ZmYyYVwwNjMiICsKLSAgICAiXHVmZjJhXDA2NFx1ZmYyYVwwNjVcdWZmMmFcMDY2XHVmZjJhXDA2N1x1ZmYyYVwwNzFcdWZmMmFcMDczXHVmZjJhIiArCi0gICAgIlwwNzRcdWZmMmFcMDc1XHVmZjJhXDEwMFx1ZmYyYVwxMDFcdWZmMmFcMTAyXHVmZjJhXDEwN1x1ZmYyYVwxMTAiICsKLSAgICAiXHVmZjJhXDExMVx1ZmYyYVwwMDFcMDAyXDAwMFwwMDZcMDMyXDIyN1wxMDBcMjMwXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjZcMDAyXHVmZjllXDAwNFx1ZmY5ZVwwMDVcdWZmOWVcMDA3XHVmZjllXDAxMFx1ZmY5ZVwwMTEiICsKLSAgICAiXHVmZjllXDAxMlx1ZmY5ZVwwMTNcdWZmOWVcMDE0XHVmZjllXDAxNVx1ZmY5ZVwwMTZcdWZmOWVcMDE3XHVmZjllIiArCi0gICAgIlwwMjBcdWZmOWVcMDIxXHVmZjllXDAyMlx1ZmY5ZVwwMjNcdWZmOWVcMDI0XHVmZjllXDAyNVx1ZmY5ZVwwMzIiICsKLSAgICAiXHVmZjllXDA1M1x1ZmY5ZVwwNTRcdWZmOWVcMDU1XHVmZjllXDA1Nlx1ZmY5ZVwwNTdcdWZmOWVcMDYwXHVmZjllIiArCi0gICAgIlwwNjFcdWZmOWVcMDYyXHVmZjllXDA2M1x1ZmY5ZVwwNjRcdWZmOWVcMDY1XHVmZjllXDA2Nlx1ZmY5ZVwwNjciICsKLSAgICAiXHVmZjllXDA3MVx1ZmY5ZVwwNzNcdWZmOWVcMDc0XHVmZjllXDA3NVx1ZmY5ZVwxMDBcdWZmOWVcMTAxXHVmZjllIiArCi0gICAgIlwxMDJcdWZmOWVcMTA3XHVmZjllXDExMFx1ZmY5ZVwxMTFcdWZmOWVcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmOTZcMDA0XHVmZjk2XDAwNVx1ZmY5NlwwMDdcdWZmOTZcMDEwXHVmZjk2XDAxMVx1ZmY5NlwwMTJcdWZmOTYiICsKLSAgICAiXDAxM1x1ZmY5NlwwMTRcdWZmOTZcMDE1XHVmZjk2XDAxNlx1ZmY5NlwwMTdcdWZmOTZcMDIwXHVmZjk2XDAyMSIgKwotICAgICJcdWZmOTZcMDIyXHVmZjk2XDAyM1x1ZmY5NlwwMjRcdWZmOTZcMDI1XHVmZjk2XDAzMlx1ZmY5NlwwNTNcdWZmOTYiICsKLSAgICAiXDA1NFx1ZmY5NlwwNTVcdWZmOTZcMDU2XHVmZjk2XDA1N1x1ZmY5NlwwNjBcdWZmOTZcMDYxXHVmZjk2XDA2MiIgKwotICAgICJcdWZmOTZcMDYzXHVmZjk2XDA2NFx1ZmY5NlwwNjVcdWZmOTZcMDY2XHVmZjk2XDA2N1x1ZmY5NlwwNzFcdWZmOTYiICsKLSAgICAiXDA3M1x1ZmY5NlwwNzRcdWZmOTZcMDc1XHVmZjk2XDEwMFx1ZmY5NlwxMDFcdWZmOTZcMTAyXHVmZjk2XDEwNyIgKwotICAgICJcdWZmOTZcMTEwXHVmZjk2XDExMVx1ZmY5NlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZlXDAwNFx1ZmY2ZSIgKwotICAgICJcMDA1XHVmZjZlXDAwN1x1ZmY2ZVwwMTBcdWZmNmVcMDExXHVmZjZlXDAxMlx1ZmY2ZVwwMTNcdWZmNmVcMDE0IiArCi0gICAgIlx1ZmY2ZVwwMTVcdWZmNmVcMDE2XHVmZjZlXDAxN1x1ZmY2ZVwwMjBcdWZmNmVcMDIxXHVmZjZlXDAyMlx1ZmY2ZSIgKwotICAgICJcMDIzXHVmZjZlXDAyNFx1ZmY2ZVwwMjVcdWZmNmVcMDMyXHVmZjZlXDAzNVx1ZmY2ZVwwNTNcdWZmNmVcMDU0IiArCi0gICAgIlx1ZmY2ZVwwNTVcdWZmNmVcMDU2XHVmZjZlXDA1N1x1ZmY2ZVwwNjBcdWZmNmVcMDYxXHVmZjZlXDA2Mlx1ZmY2ZSIgKwotICAgICJcMDYzXHVmZjZlXDA2NFx1ZmY2ZVwwNjVcdWZmNmVcMDY2XHVmZjZlXDA2N1x1ZmY2ZVwwNzFcdWZmNmVcMDczIiArCi0gICAgIlx1ZmY2ZVwwNzRcdWZmNmVcMDc1XHVmZjZlXDEwMFx1ZmY2ZVwxMDFcdWZmNmVcMTAyXHVmZjZlXDEwN1x1ZmY2ZSIgKwotICAgICJcMTEwXHVmZjZlXDExMVx1ZmY2ZVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjhkXDAwNFx1ZmY4ZFwwMDUiICsKLSAgICAiXHVmZjhkXDAwN1x1ZmY4ZFwwMTBcdWZmOGRcMDExXHVmZjhkXDAxMlx1ZmY4ZFwwMTNcdWZmOGRcMDE0XHVmZjhkIiArCi0gICAgIlwwMTVcdWZmOGRcMDE2XHVmZjhkXDAxN1x1ZmY4ZFwwMjBcdWZmOGRcMDIxXHVmZjhkXDAyMlx1ZmY4ZFwwMjMiICsKLSAgICAiXHVmZjhkXDAyNFx1ZmY4ZFwwMjVcdWZmOGRcMDMyXHVmZjhkXDA1M1x1ZmY4ZFwwNTRcdWZmOGRcMDU1XHVmZjhkIiArCi0gICAgIlwwNTZcdWZmOGRcMDU3XHVmZjhkXDA2MFx1ZmY4ZFwwNjFcdWZmOGRcMDYyXHVmZjhkXDA2M1x1ZmY4ZFwwNjQiICsKLSAgICAiXHVmZjhkXDA2NVx1ZmY4ZFwwNjZcdWZmOGRcMDY3XHVmZjhkXDA3MVx1ZmY4ZFwwNzNcdWZmOGRcMDc0XHVmZjhkIiArCi0gICAgIlwwNzVcdWZmOGRcMTAwXHVmZjhkXDEwMVx1ZmY4ZFwxMDJcdWZmOGRcMTA3XHVmZjhkXDExMFx1ZmY4ZFwxMTEiICsKLSAgICAiXHVmZjhkXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYjJcMDA0XHVmZmIyXDAwNVx1ZmZiMlwwMDdcdWZmYjIiICsKLSAgICAiXDAxMFx1ZmZiMlwwMTFcdWZmYjJcMDEyXHVmZmIyXDAxM1x1ZmZiMlwwMTRcdWZmYjJcMDE1XHVmZmIyXDAxNiIgKwotICAgICJcdWZmYjJcMDE3XHVmZmIyXDAyMFx1ZmZiMlwwMjFcdWZmYjJcMDIyXHVmZmIyXDAyM1x1ZmZiMlwwMjRcdWZmYjIiICsKLSAgICAiXDAyNVx1ZmZiMlwwMzJcdWZmYjJcMDUzXHVmZmIyXDA1NFx1ZmZiMlwwNTVcdWZmYjJcMDU2XHVmZmIyXDA1NyIgKwotICAgICJcdWZmYjJcMDYwXHVmZmIyXDA2MVx1ZmZiMlwwNjJcdWZmYjJcMDYzXHVmZmIyXDA2NFx1ZmZiMlwwNjVcdWZmYjIiICsKLSAgICAiXDA2Nlx1ZmZiMlwwNjdcdWZmYjJcMDcxXHVmZmIyXDA3M1x1ZmZiMlwwNzRcdWZmYjJcMDc1XHVmZmIyXDEwMCIgKwotICAgICJcdWZmYjJcMTAxXHVmZmIyXDEwMlx1ZmZiMlwxMDdcdWZmYjJcMTEwXHVmZmIyXDExMVx1ZmZiMlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTI2XDAwMlx1ZmY4ZlwwMDRcdWZmOGZcMDA1XHVmZjhmXDAwN1x1ZmY4ZlwwMTBcdWZmOGZcMDExIiArCi0gICAgIlx1ZmY4ZlwwMTJcdWZmOGZcMDEzXHVmZjhmXDAxNFx1ZmY4ZlwwMTVcdWZmOGZcMDE2XHVmZjhmXDAxN1x1ZmY4ZiIgKwotICAgICJcMDIwXHVmZjhmXDAyMVx1ZmY4ZlwwMjJcdWZmOGZcMDIzXHVmZjhmXDAyNFx1ZmY4ZlwwMjVcdWZmOGZcMDMyIiArCi0gICAgIlx1ZmY4ZlwwNTNcdWZmOGZcMDU0XHVmZjhmXDA1NVx1ZmY4ZlwwNTZcdWZmOGZcMDU3XHVmZjhmXDA2MFx1ZmY4ZiIgKwotICAgICJcMDYxXHVmZjhmXDA2Mlx1ZmY4ZlwwNjNcdWZmOGZcMDY0XHVmZjhmXDA2NVx1ZmY4ZlwwNjZcdWZmOGZcMDY3IiArCi0gICAgIlx1ZmY4ZlwwNzFcdWZmOGZcMDczXHVmZjhmXDA3NFx1ZmY4ZlwwNzVcdWZmOGZcMTAwXHVmZjhmXDEwMVx1ZmY4ZiIgKwotICAgICJcMTAyXHVmZjhmXDEwN1x1ZmY4ZlwxMTBcdWZmOGZcMTExXHVmZjhmXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjRmXDAwNFx1ZmY0ZlwwMDVcdWZmNGZcMDA3XHVmZjRmXDAxMFx1ZmY0ZlwwMTFcdWZmNGZcMDEyXHVmZjRmIiArCi0gICAgIlwwMTNcdWZmNGZcMDE0XHVmZjRmXDAxNVx1ZmY0ZlwwMTZcdWZmNGZcMDE3XHVmZjRmXDAyMFx1ZmY0ZlwwMjEiICsKLSAgICAiXHVmZjRmXDAyMlx1ZmY0ZlwwMjNcdWZmNGZcMDI0XHVmZjRmXDAyNVx1ZmY0ZlwwMzJcdWZmNGZcMDUzXHVmZjRmIiArCi0gICAgIlwwNTRcdWZmNGZcMDU1XHVmZjRmXDA1Nlx1ZmY0ZlwwNTdcdWZmNGZcMDYwXHVmZjRmXDA2MVx1ZmY0ZlwwNjIiICsKLSAgICAiXHVmZjRmXDA2M1x1ZmY0ZlwwNjRcdWZmNGZcMDY1XHVmZjRmXDA2Nlx1ZmY0ZlwwNjdcdWZmNGZcMDcxXHVmZjRmIiArCi0gICAgIlwwNzNcdWZmNGZcMDc0XHVmZjRmXDA3NVx1ZmY0ZlwxMDBcdWZmNGZcMTAxXHVmZjRmXDEwMlx1ZmY0ZlwxMDciICsKLSAgICAiXHVmZjRmXDExMFx1ZmY0ZlwxMTFcdWZmNGZcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZhOFwwMDRcdWZmYTgiICsKLSAgICAiXDAwNVx1ZmZhOFwwMDdcdWZmYThcMDEwXHVmZmE4XDAxMVx1ZmZhOFwwMTJcdWZmYThcMDEzXHVmZmE4XDAxNCIgKwotICAgICJcdWZmYThcMDE1XHVmZmE4XDAxNlx1ZmZhOFwwMTdcdWZmYThcMDIwXHVmZmE4XDAyMVx1ZmZhOFwwMjJcdWZmYTgiICsKLSAgICAiXDAyM1x1ZmZhOFwwMjRcdWZmYThcMDI1XHVmZmE4XDAzMlx1ZmZhOFwwNTNcdWZmYThcMDU0XHVmZmE4XDA1NSIgKwotICAgICJcdWZmYThcMDU2XHVmZmE4XDA1N1x1ZmZhOFwwNjBcdWZmYThcMDYxXHVmZmE4XDA2Mlx1ZmZhOFwwNjNcdWZmYTgiICsKLSAgICAiXDA2NFx1ZmZhOFwwNjVcdWZmYThcMDY2XHVmZmE4XDA2N1x1ZmZhOFwwNzFcdWZmYThcMDczXHVmZmE4XDA3NCIgKwotICAgICJcdWZmYThcMDc1XHVmZmE4XDEwMFx1ZmZhOFwxMDFcdWZmYThcMTAyXHVmZmE4XDEwN1x1ZmZhOFwxMTBcdWZmYTgiICsKLSAgICAiXDExMVx1ZmZhOFwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjJiXDAwNFx1ZmYyYlwwMDVcdWZmMmJcMDA2IiArCi0gICAgIlx1ZmVmNFwwMDdcdWZmMmJcMDEwXHVmZjJiXDAxMVx1ZmYyYlwwMTJcdWZmMmJcMDEzXHVmZjJiXDAxNFx1ZmYyYiIgKwotICAgICJcMDE1XHVmZjJiXDAxNlx1ZmYyYlwwMTdcdWZmMmJcMDIwXHVmZjJiXDAyMVx1ZmYyYlwwMjJcdWZmMmJcMDIzIiArCi0gICAgIlx1ZmYyYlwwMjRcdWZmMmJcMDI1XHVmZjJiXDAzMVx1ZmYyYlwwMzJcdWZmMmJcMDUzXHVmZjJiXDA1NFx1ZmYyYiIgKwotICAgICJcMDU1XHVmZjJiXDA1Nlx1ZmYyYlwwNTdcdWZmMmJcMDYwXHVmZjJiXDA2MVx1ZmYyYlwwNjJcdWZmMmJcMDYzIiArCi0gICAgIlx1ZmYyYlwwNjRcdWZmMmJcMDY1XHVmZjJiXDA2Nlx1ZmYyYlwwNjdcdWZmMmJcMDcxXHVmZjJiXDA3M1x1ZmYyYiIgKwotICAgICJcMDc0XHVmZjJiXDA3NVx1ZmYyYlwxMDBcdWZmMmJcMTAxXHVmZjJiXDEwMlx1ZmYyYlwxMDdcdWZmMmJcMTEwIiArCi0gICAgIlx1ZmYyYlwxMTFcdWZmMmJcMDAxXDAwMlwwMDBcMTEwXDAwMlx1ZmZkZlwwMDVcdWZmZGZcMDA3XHVmZmRmIiArCi0gICAgIlwwMTBcdWZmZGZcMDExXHVmZmRmXDAxMlx1ZmZkZlwwMTNcdWZmZGZcMDE0XHVmZmRmXDAxNVx1ZmZkZlwwMTYiICsKLSAgICAiXHVmZmRmXDAxN1x1ZmZkZlwwMjBcdWZmZGZcMDIxXHVmZmRmXDAyMlx1ZmZkZlwwMjNcdWZmZGZcMDMyXHVmZmRmIiArCi0gICAgIlwwNTNcdWZmZGZcMDU0XHVmZmRmXDA1NVx1ZmZkZlwwNTZcdWZmZGZcMDU3XHVmZmRmXDA2MFx1ZmZkZlwwNjEiICsKLSAgICAiXHVmZmRmXDA2Mlx1ZmZkZlwwNjNcdWZmZGZcMDY0XHVmZmRmXDA2NVwyMTVcMDY2XDIxNFwwNzVcdWZmZGYiICsKLSAgICAiXDEwMFx1ZmZkZlwxMDFcdWZmZGZcMTAyXHVmZmRmXDEwN1x1ZmZkZlwxMTBcdWZmZGZcMTExXHVmZmRmXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzJcMDAyXHVmZjI1XDAwNFx1ZmYyNVwwMDVcdWZmMjVcMDA2XHVmZWVmXDAwN1x1ZmYyNSIgKwotICAgICJcMDEwXHVmZjI1XDAxMVx1ZmYyNVwwMTJcdWZmMjVcMDEzXHVmZjI1XDAxNFx1ZmYyNVwwMTVcdWZmMjVcMDE2IiArCi0gICAgIlx1ZmYyNVwwMTdcdWZmMjVcMDIwXHVmZjI1XDAyMVx1ZmYyNVwwMjJcdWZmMjVcMDIzXHVmZjI1XDAyNFx1ZmYyNSIgKwotICAgICJcMDI1XHVmZjI1XDAzMVx1ZmYyNVwwMzJcdWZmMjVcMDUzXHVmZjI1XDA1NFx1ZmYyNVwwNTVcdWZmMjVcMDU2IiArCi0gICAgIlx1ZmYyNVwwNTdcdWZmMjVcMDYwXHVmZjI1XDA2MVx1ZmYyNVwwNjJcdWZmMjVcMDYzXHVmZjI1XDA2NFx1ZmYyNSIgKwotICAgICJcMDY1XHVmZjI1XDA2Nlx1ZmYyNVwwNjdcdWZmMjVcMDcxXHVmZjI1XDA3M1x1ZmYyNVwwNzRcdWZmMjVcMDc1IiArCi0gICAgIlx1ZmYyNVwxMDBcdWZmMjVcMTAxXHVmZjI1XDEwMlx1ZmYyNVwxMDdcdWZmMjVcMTEwXHVmZjI1XDExMVx1ZmYyNSIgKwotICAgICJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4ZVwwMDRcdWZmOGVcMDA1XHVmZjhlXDAwN1x1ZmY4ZVwwMTAiICsKLSAgICAiXHVmZjhlXDAxMVx1ZmY4ZVwwMTJcdWZmOGVcMDEzXHVmZjhlXDAxNFx1ZmY4ZVwwMTVcdWZmOGVcMDE2XHVmZjhlIiArCi0gICAgIlwwMTdcdWZmOGVcMDIwXHVmZjhlXDAyMVx1ZmY4ZVwwMjJcdWZmOGVcMDIzXHVmZjhlXDAyNFx1ZmY4ZVwwMjUiICsKLSAgICAiXHVmZjhlXDAzMlx1ZmY4ZVwwNTNcdWZmOGVcMDU0XHVmZjhlXDA1NVx1ZmY4ZVwwNTZcdWZmOGVcMDU3XHVmZjhlIiArCi0gICAgIlwwNjBcdWZmOGVcMDYxXHVmZjhlXDA2Mlx1ZmY4ZVwwNjNcdWZmOGVcMDY0XHVmZjhlXDA2NVx1ZmY4ZVwwNjYiICsKLSAgICAiXHVmZjhlXDA2N1x1ZmY4ZVwwNzFcdWZmOGVcMDczXHVmZjhlXDA3NFx1ZmY4ZVwwNzVcdWZmOGVcMTAwXHVmZjhlIiArCi0gICAgIlwxMDFcdWZmOGVcMTAyXHVmZjhlXDEwN1x1ZmY4ZVwxMTBcdWZmOGVcMTExXHVmZjhlXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzJcMDAyXHVmZjQ2XDAwNFx1ZmY0NlwwMDVcdWZmNDZcMDA2XHVmZjBlXDAwN1x1ZmY0NlwwMTBcdWZmNDYiICsKLSAgICAiXDAxMVx1ZmY0NlwwMTJcdWZmNDZcMDEzXHVmZjQ2XDAxNFx1ZmY0NlwwMTVcdWZmNDZcMDE2XHVmZjQ2XDAxNyIgKwotICAgICJcdWZmNDZcMDIwXHVmZjQ2XDAyMVx1ZmY0NlwwMjJcdWZmNDZcMDIzXHVmZjQ2XDAyNFx1ZmY0NlwwMjVcdWZmNDYiICsKLSAgICAiXDAzMVx1ZmY0NlwwMzJcdWZmNDZcMDUzXHVmZjQ2XDA1NFx1ZmY0NlwwNTVcdWZmNDZcMDU2XHVmZjQ2XDA1NyIgKwotICAgICJcdWZmNDZcMDYwXHVmZjQ2XDA2MVx1ZmY0NlwwNjJcdWZmNDZcMDYzXHVmZjQ2XDA2NFx1ZmY0NlwwNjVcdWZmNDYiICsKLSAgICAiXDA2Nlx1ZmY0NlwwNjdcdWZmNDZcMDcxXHVmZjQ2XDA3M1x1ZmY0NlwwNzRcdWZmNDZcMDc1XHVmZjQ2XDEwMCIgKwotICAgICJcdWZmNDZcMTAxXHVmZjQ2XDEwMlx1ZmY0NlwxMDdcdWZmNDZcMTEwXHVmZjQ2XDExMVx1ZmY0NlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDI0XDAwMlx1ZmZmMVwwMDVcdWZmZjFcMDA3XHVmZmYxXDAzMlx1ZmZmMVwxMDBcdWZmZjFcMTAxIiArCi0gICAgIlx1ZmZmMVwxMDdcdWZmZjFcMTEwXDIwNlwxMTFcdWZmZjFcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiYSIgKwotICAgICJcMDA1XHVmZmJhXDAwN1x1ZmZiYVwwMTBcdWZmYmFcMDExXHVmZmJhXDAxMlx1ZmZiYVwwMTNcdWZmYmFcMDE0IiArCi0gICAgIlx1ZmZiYVwwMTVcdWZmYmFcMDE2XHVmZmJhXDAxN1x1ZmZiYVwwMjBcdWZmYmFcMDIxXHVmZmJhXDAyMlx1ZmZiYSIgKwotICAgICJcMDIzXHVmZmJhXDAyNFx1ZmZiYVwwMjVcdWZmYmFcMDMyXHVmZmJhXDA1M1x1ZmZiYVwwNTRcdWZmYmFcMDU1IiArCi0gICAgIlx1ZmZiYVwwNTZcdWZmYmFcMDU3XHVmZmJhXDA2MFx1ZmZiYVwwNjFcdWZmYmFcMDYyXHVmZmJhXDA2M1x1ZmZiYSIgKwotICAgICJcMDY0XHVmZmJhXDA2NVx1ZmZiYVwwNjZcdWZmYmFcMDY3XHVmZmJhXDA3MVx1ZmZiYVwwNzNcdWZmYmFcMDc0IiArCi0gICAgIlx1ZmZiYVwwNzVcdWZmYmFcMTAwXHVmZmJhXDEwMVx1ZmZiYVwxMDJcdWZmYmFcMTA3XHVmZmJhXDExMFx1ZmZiYSIgKwotICAgICJcMTExXHVmZmJhXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMTRcMDA0XHVmZjE0XDAwNVx1ZmYxNFwwMDYiICsKLSAgICAiXHVmZWU5XDAwN1x1ZmYxNFwwMTBcdWZmMTRcMDExXHVmZjE0XDAxMlx1ZmYxNFwwMTNcdWZmMTRcMDE0XHVmZjE0IiArCi0gICAgIlwwMTVcdWZmMTRcMDE2XHVmZjE0XDAxN1x1ZmYxNFwwMjBcdWZmMTRcMDIxXHVmZjE0XDAyMlx1ZmYxNFwwMjMiICsKLSAgICAiXHVmZjE0XDAyNFx1ZmYxNFwwMjVcdWZmMTRcMDMxXHVmZjE0XDAzMlx1ZmYxNFwwNTNcdWZmMTRcMDU0XHVmZjE0IiArCi0gICAgIlwwNTVcdWZmMTRcMDU2XHVmZjE0XDA1N1x1ZmYxNFwwNjBcdWZmMTRcMDYxXHVmZjE0XDA2Mlx1ZmYxNFwwNjMiICsKLSAgICAiXHVmZjE0XDA2NFx1ZmYxNFwwNjVcdWZmMTRcMDY2XHVmZjE0XDA2N1x1ZmYxNFwwNzFcdWZmMTRcMDczXHVmZjE0IiArCi0gICAgIlwwNzRcdWZmMTRcMDc1XHVmZjE0XDEwMFx1ZmYxNFwxMDFcdWZmMTRcMTAyXHVmZjE0XDEwN1x1ZmYxNFwxMTAiICsKLSAgICAiXHVmZjE0XDExMVx1ZmYxNFwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDQiICsKLSAgICAiXDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNCIgKwotICAgICJcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2IiArCi0gICAgIlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTIiICsKLSAgICAiXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxNyIgKwotICAgICJcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3IiArCi0gICAgIlwwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDMiICsKLSAgICAiXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzXDEwNCIgKwotICAgICJcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxIiArCi0gICAgIlwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjEiICsKLSAgICAiXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExMyIgKwotICAgICJcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMjlcMDA0XHVmZjI5XDAwNSIgKwotICAgICJcdWZmMjlcMDA2XHVmZWYyXDAwN1x1ZmYyOVwwMTBcdWZmMjlcMDExXHVmZjI5XDAxMlx1ZmYyOVwwMTNcdWZmMjkiICsKLSAgICAiXDAxNFx1ZmYyOVwwMTVcdWZmMjlcMDE2XHVmZjI5XDAxN1x1ZmYyOVwwMjBcdWZmMjlcMDIxXHVmZjI5XDAyMiIgKwotICAgICJcdWZmMjlcMDIzXHVmZjI5XDAyNFx1ZmYyOVwwMjVcdWZmMjlcMDMxXHVmZjI5XDAzMlx1ZmYyOVwwNTNcdWZmMjkiICsKLSAgICAiXDA1NFx1ZmYyOVwwNTVcdWZmMjlcMDU2XHVmZjI5XDA1N1x1ZmYyOVwwNjBcdWZmMjlcMDYxXHVmZjI5XDA2MiIgKwotICAgICJcdWZmMjlcMDYzXHVmZjI5XDA2NFx1ZmYyOVwwNjVcdWZmMjlcMDY2XHVmZjI5XDA2N1x1ZmYyOVwwNzFcdWZmMjkiICsKLSAgICAiXDA3M1x1ZmYyOVwwNzRcdWZmMjlcMDc1XHVmZjI5XDEwMFx1ZmYyOVwxMDFcdWZmMjlcMTAyXHVmZjI5XDEwNyIgKwotICAgICJcdWZmMjlcMTEwXHVmZjI5XDExMVx1ZmYyOVwwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmVlXDAwNVx1ZmZlZSIgKwotICAgICJcMDA3XHVmZmVlXDAzMlx1ZmZlZVwxMDBcdWZmZWVcMTAxXHVmZmVlXDEwN1x1ZmZlZVwxMTBcdWZmZWVcMTExIiArCi0gICAgIlx1ZmZlZVwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjJlXDAwNFx1ZmYyZVwwMDVcdWZmMmVcMDA2XHVmZWY3IiArCi0gICAgIlwwMDdcdWZmMmVcMDEwXHVmZjJlXDAxMVx1ZmYyZVwwMTJcdWZmMmVcMDEzXHVmZjJlXDAxNFx1ZmYyZVwwMTUiICsKLSAgICAiXHVmZjJlXDAxNlx1ZmYyZVwwMTdcdWZmMmVcMDIwXHVmZjJlXDAyMVx1ZmYyZVwwMjJcdWZmMmVcMDIzXHVmZjJlIiArCi0gICAgIlwwMjRcdWZmMmVcMDI1XHVmZjJlXDAzMVx1ZmYyZVwwMzJcdWZmMmVcMDUzXHVmZjJlXDA1NFx1ZmYyZVwwNTUiICsKLSAgICAiXHVmZjJlXDA1Nlx1ZmYyZVwwNTdcdWZmMmVcMDYwXHVmZjJlXDA2MVx1ZmYyZVwwNjJcdWZmMmVcMDYzXHVmZjJlIiArCi0gICAgIlwwNjRcdWZmMmVcMDY1XHVmZjJlXDA2Nlx1ZmYyZVwwNjdcdWZmMmVcMDcxXHVmZjJlXDA3M1x1ZmYyZVwwNzQiICsKLSAgICAiXHVmZjJlXDA3NVx1ZmYyZVwxMDBcdWZmMmVcMTAxXHVmZjJlXDEwMlx1ZmYyZVwxMDdcdWZmMmVcMTEwXHVmZjJlIiArCi0gICAgIlwxMTFcdWZmMmVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyOFwwMDRcdWZmMjhcMDA1XHVmZjI4XDAwNiIgKwotICAgICJcdWZmMjhcMDA3XHVmZjI4XDAxMFx1ZmYyOFwwMTFcdWZmMjhcMDEyXHVmZjI4XDAxM1x1ZmYyOFwwMTRcdWZmMjgiICsKLSAgICAiXDAxNVx1ZmYyOFwwMTZcdWZmMjhcMDE3XHVmZjI4XDAyMFx1ZmYyOFwwMjFcdWZmMjhcMDIyXHVmZjI4XDAyMyIgKwotICAgICJcdWZmMjhcMDI0XHVmZjI4XDAyNVx1ZmYyOFwwMzFcdWZmMjhcMDMyXHVmZjI4XDAzNVx1ZmYyOFwwNTNcdWZmMjgiICsKLSAgICAiXDA1NFx1ZmYyOFwwNTVcdWZmMjhcMDU2XHVmZjI4XDA1N1x1ZmYyOFwwNjBcdWZmMjhcMDYxXHVmZjI4XDA2MiIgKwotICAgICJcdWZmMjhcMDYzXHVmZjI4XDA2NFx1ZmYyOFwwNjVcdWZmMjhcMDY2XHVmZjI4XDA2N1x1ZmYyOFwwNzFcdWZmMjgiICsKLSAgICAiXDA3M1x1ZmYyOFwwNzRcdWZmMjhcMDc1XHVmZjI4XDA3N1x1ZmYyOFwxMDBcdWZmMjhcMTAxXHVmZjI4XDEwMiIgKwotICAgICJcdWZmMjhcMTA3XHVmZjI4XDExMFx1ZmYyOFwxMTFcdWZmMjhcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyYSIgKwotICAgICJcMDA0XHVmZjJhXDAwNVx1ZmYyYVwwMDZcdWZlZjNcMDA3XHVmZjJhXDAxMFx1ZmYyYVwwMTFcdWZmMmFcMDEyIiArCi0gICAgIlx1ZmYyYVwwMTNcdWZmMmFcMDE0XHVmZjJhXDAxNVx1ZmYyYVwwMTZcdWZmMmFcMDE3XHVmZjJhXDAyMFx1ZmYyYSIgKwotICAgICJcMDIxXHVmZjJhXDAyMlx1ZmYyYVwwMjNcdWZmMmFcMDI0XHVmZjJhXDAyNVx1ZmYyYVwwMzFcdWZmMmFcMDMyIiArCi0gICAgIlx1ZmYyYVwwNTNcdWZmMmFcMDU0XHVmZjJhXDA1NVx1ZmYyYVwwNTZcdWZmMmFcMDU3XHVmZjJhXDA2MFx1ZmYyYSIgKwotICAgICJcMDYxXHVmZjJhXDA2Mlx1ZmYyYVwwNjNcdWZmMmFcMDY0XHVmZjJhXDA2NVx1ZmYyYVwwNjZcdWZmMmFcMDY3IiArCi0gICAgIlx1ZmYyYVwwNzFcdWZmMmFcMDczXHVmZjJhXDA3NFx1ZmYyYVwwNzVcdWZmMmFcMTAwXHVmZjJhXDEwMVx1ZmYyYSIgKwotICAgICJcMTAyXHVmZjJhXDEwN1x1ZmYyYVwxMTBcdWZmMmFcMTExXHVmZjJhXDAwMVwwMDJcMDAwXDIxNlwwMDYiICsKLSAgICAiXDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3NyIgKwotICAgICJcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxIiArCi0gICAgIlwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzQiICsKLSAgICAiXDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NiIgKwotICAgICJcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExIiArCi0gICAgIlwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzMiICsKLSAgICAiXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NiIgKwotICAgICJcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwIiArCi0gICAgIlwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTYiICsKLSAgICAiXDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNSIgKwotICAgICJcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMjE2IiArCi0gICAgIlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjciICsKLSAgICAiXDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1MyIgKwotICAgICJcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3IiArCi0gICAgIlwwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzciICsKLSAgICAiXDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NCIgKwotICAgICJcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1IiArCi0gICAgIlwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDEiICsKLSAgICAiXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMiIgKwotICAgICJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2IiArCi0gICAgIlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjAiICsKLSAgICAiXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTEwXDAwMlx1ZmZkYlwwMDVcdWZmZGJcMDA3XHVmZmRiXDAxMFx1ZmZkYlwwMTFcdWZmZGJcMDEyXHVmZmRiIiArCi0gICAgIlwwMTNcdWZmZGJcMDE0XHVmZmRiXDAxNVx1ZmZkYlwwMTZcdWZmZGJcMDE3XHVmZmRiXDAyMFx1ZmZkYlwwMjEiICsKLSAgICAiXHVmZmRiXDAyMlx1ZmZkYlwwMjNcdWZmZGJcMDMyXHVmZmRiXDA1M1x1ZmZkYlwwNTRcdWZmZGJcMDU1XHVmZmRiIiArCi0gICAgIlwwNTZcdWZmZGJcMDU3XHVmZmRiXDA2MFx1ZmZkYlwwNjFcdWZmZGJcMDYyXHVmZmRiXDA2M1x1ZmZkYlwwNjQiICsKLSAgICAiXHVmZmRiXDA2NVx1ZmZkYlwwNjZcdWZmZGJcMDc1XHVmZmRiXDEwMFx1ZmZkYlwxMDFcdWZmZGJcMTAyXHVmZmRiIiArCi0gICAgIlwxMDdcdWZmZGJcMTEwXHVmZmRiXDExMVx1ZmZkYlwwMDFcMDAyXDAwMFwxMTBcMDAyXHVmZmRhXDAwNSIgKwotICAgICJcdWZmZGFcMDA3XHVmZmRhXDAxMFx1ZmZkYVwwMTFcdWZmZGFcMDEyXHVmZmRhXDAxM1x1ZmZkYVwwMTRcdWZmZGEiICsKLSAgICAiXDAxNVx1ZmZkYVwwMTZcdWZmZGFcMDE3XHVmZmRhXDAyMFx1ZmZkYVwwMjFcdWZmZGFcMDIyXHVmZmRhXDAyMyIgKwotICAgICJcdWZmZGFcMDMyXHVmZmRhXDA1M1x1ZmZkYVwwNTRcdWZmZGFcMDU1XHVmZmRhXDA1Nlx1ZmZkYVwwNTdcdWZmZGEiICsKLSAgICAiXDA2MFx1ZmZkYVwwNjFcdWZmZGFcMDYyXHVmZmRhXDA2M1x1ZmZkYVwwNjRcdWZmZGFcMDY1XHVmZmRhXDA2NiIgKwotICAgICJcdWZmZGFcMDc1XHVmZmRhXDEwMFx1ZmZkYVwxMDFcdWZmZGFcMTAyXHVmZmRhXDEwN1x1ZmZkYVwxMTBcdWZmZGEiICsKLSAgICAiXDExMVx1ZmZkYVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjk4XDAwNFwyMjJcMDA1XHVmZjk4XDAwNyIgKwotICAgICJcdWZmOThcMDEwXHVmZjk4XDAxMVx1ZmY5OFwwMTJcdWZmOThcMDEzXHVmZjk4XDAxNFx1ZmY5OFwwMTVcdWZmOTgiICsKLSAgICAiXDAxNlx1ZmY5OFwwMTdcdWZmOThcMDIwXHVmZjk4XDAyMVx1ZmY5OFwwMjJcdWZmOThcMDIzXHVmZjk4XDAyNCIgKwotICAgICJcdWZmOThcMDI1XHVmZjk4XDAzMlx1ZmY5OFwwNTNcdWZmOThcMDU0XHVmZjk4XDA1NVx1ZmY5OFwwNTZcdWZmOTgiICsKLSAgICAiXDA1N1x1ZmY5OFwwNjBcdWZmOThcMDYxXHVmZjk4XDA2Mlx1ZmY5OFwwNjNcdWZmOThcMDY0XHVmZjk4XDA2NSIgKwotICAgICJcdWZmOThcMDY2XHVmZjk4XDA2N1x1ZmY5OFwwNzFcdWZmOThcMDczXHVmZjk4XDA3NFx1ZmY5OFwwNzVcdWZmOTgiICsKLSAgICAiXDEwMFx1ZmY5OFwxMDFcdWZmOThcMTAyXHVmZjk4XDEwN1x1ZmY5OFwxMTBcdWZmOThcMTExXHVmZjk4XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMjZcMDAyXHVmZjk3XDAwNFx1ZmY5N1wwMDVcdWZmOTdcMDA3XHVmZjk3XDAxMFx1ZmY5NyIgKwotICAgICJcMDExXHVmZjk3XDAxMlx1ZmY5N1wwMTNcdWZmOTdcMDE0XHVmZjk3XDAxNVx1ZmY5N1wwMTZcdWZmOTdcMDE3IiArCi0gICAgIlx1ZmY5N1wwMjBcdWZmOTdcMDIxXHVmZjk3XDAyMlx1ZmY5N1wwMjNcdWZmOTdcMDI0XHVmZjk3XDAyNVx1ZmY5NyIgKwotICAgICJcMDMyXHVmZjk3XDA1M1x1ZmY5N1wwNTRcdWZmOTdcMDU1XHVmZjk3XDA1Nlx1ZmY5N1wwNTdcdWZmOTdcMDYwIiArCi0gICAgIlx1ZmY5N1wwNjFcdWZmOTdcMDYyXHVmZjk3XDA2M1x1ZmY5N1wwNjRcdWZmOTdcMDY1XHVmZjk3XDA2Nlx1ZmY5NyIgKwotICAgICJcMDY3XHVmZjk3XDA3MVx1ZmY5N1wwNzNcdWZmOTdcMDc0XHVmZjk3XDA3NVx1ZmY5N1wxMDBcdWZmOTdcMTAxIiArCi0gICAgIlx1ZmY5N1wxMDJcdWZmOTdcMTA3XHVmZjk3XDExMFx1ZmY5N1wxMTFcdWZmOTdcMDAxXDAwMlwwMDBcMjE2IiArCi0gICAgIlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjciICsKLSAgICAiXDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1MyIgKwotICAgICJcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3IiArCi0gICAgIlwwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzciICsKLSAgICAiXDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NCIgKwotICAgICJcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1IiArCi0gICAgIlwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDEiICsKLSAgICAiXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMiIgKwotICAgICJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2IiArCi0gICAgIlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjAiICsKLSAgICAiXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMCIgKwotICAgICJcMDA2XDAwNVwyMjVcMDMyXDIyNFwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1IiArCi0gICAgIlwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzMiICsKLSAgICAiXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxIiArCi0gICAgIlwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDYiICsKLSAgICAiXDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NiIgKwotICAgICJcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxIiArCi0gICAgIlwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDMiICsKLSAgICAiXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MiIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwIiArCi0gICAgIlwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDIiICsKLSAgICAiXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTVcMDA0IiArCi0gICAgIlx1ZmY5NVwwMDVcdWZmOTVcMDA3XHVmZjk1XDAxMFx1ZmY5NVwwMTFcdWZmOTVcMDEyXHVmZjk1XDAxM1x1ZmY5NSIgKwotICAgICJcMDE0XHVmZjk1XDAxNVx1ZmY5NVwwMTZcdWZmOTVcMDE3XHVmZjk1XDAyMFx1ZmY5NVwwMjFcdWZmOTVcMDIyIiArCi0gICAgIlx1ZmY5NVwwMjNcdWZmOTVcMDI0XHVmZjk1XDAyNVx1ZmY5NVwwMzJcdWZmOTVcMDUzXHVmZjk1XDA1NFx1ZmY5NSIgKwotICAgICJcMDU1XHVmZjk1XDA1Nlx1ZmY5NVwwNTdcdWZmOTVcMDYwXHVmZjk1XDA2MVx1ZmY5NVwwNjJcdWZmOTVcMDYzIiArCi0gICAgIlx1ZmY5NVwwNjRcdWZmOTVcMDY1XHVmZjk1XDA2Nlx1ZmY5NVwwNjdcdWZmOTVcMDcxXHVmZjk1XDA3M1x1ZmY5NSIgKwotICAgICJcMDc0XHVmZjk1XDA3NVx1ZmY5NVwxMDBcdWZmOTVcMTAxXHVmZjk1XDEwMlx1ZmY5NVwxMDdcdWZmOTVcMTEwIiArCi0gICAgIlx1ZmY5NVwxMTFcdWZmOTVcMDAxXDAwMlwwMDBcMDEyXDAwMlx1ZmZmZVwwMDVcdWZmZmVcMDA3XHVmZmZlIiArCi0gICAgIlwwMzJcdWZmZmVcMDAxXDAwMlwwMDBcMDA0XDAzM1wyMzJcMDAxXDAwMlwwMDBcMjE2XDAwNiIgKwotICAgICJcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3IiArCi0gICAgIlwwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDEiICsKLSAgICAiXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNCIgKwotICAgICJcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2IiArCi0gICAgIlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTEiICsKLSAgICAiXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3MyIgKwotICAgICJcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2IiArCi0gICAgIlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTAiICsKLSAgICAiXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NiIgKwotICAgICJcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1IiArCi0gICAgIlwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMjAiICsKLSAgICAiXDAwMlx1ZmZmOVwwMDVcdWZmZjlcMDA3XHVmZmY5XDAzMlx1ZmZmOVwxMDBcdWZmZjlcMTAxXHVmZmY5XDEwNyIgKwotICAgICJcdWZmZjlcMDAxXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjciICsKLSAgICAiXDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MCIgKwotICAgICJcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyIiArCi0gICAgIlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjUiICsKLSAgICAiXDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwMyIgKwotICAgICJcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyIiArCi0gICAgIlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTAiICsKLSAgICAiXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExNyIgKwotICAgICJcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjMwXDAwNFx1ZmYzMFwwMDVcdWZmMzBcMDA2XHVmZjMwXDAwNyIgKwotICAgICJcdWZmMzBcMDEwXHVmZjMwXDAxMVx1ZmYzMFwwMTJcdWZmMzBcMDEzXHVmZjMwXDAxNFx1ZmYzMFwwMTVcdWZmMzAiICsKLSAgICAiXDAxNlx1ZmYzMFwwMTdcdWZmMzBcMDIwXHVmZjMwXDAyMVx1ZmYzMFwwMjJcdWZmMzBcMDIzXHVmZjMwXDAyNCIgKwotICAgICJcdWZmMzBcMDI1XHVmZjMwXDAzMVx1ZmYzMFwwMzJcdWZmMzBcMDM1XHVmZjMwXDA1M1x1ZmYzMFwwNTRcdWZmMzAiICsKLSAgICAiXDA1NVx1ZmYzMFwwNTZcdWZmMzBcMDU3XHVmZjMwXDA2MFx1ZmYzMFwwNjFcdWZmMzBcMDYyXHVmZjMwXDA2MyIgKwotICAgICJcdWZmMzBcMDY0XHVmZjMwXDA2NVx1ZmYzMFwwNjZcdWZmMzBcMDY3XHVmZjMwXDA3MVx1ZmYzMFwwNzNcdWZmMzAiICsKLSAgICAiXDA3NFx1ZmYzMFwwNzVcdWZmMzBcMDc3XHVmZjMwXDEwMFx1ZmYzMFwxMDFcdWZmMzBcMTAyXHVmZjMwXDEwNyIgKwotICAgICJcdWZmMzBcMTEwXHVmZjMwXDExMVx1ZmYzMFwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjM2XDAwNFx1ZmYzNiIgKwotICAgICJcMDA1XHVmZjM2XDAwNlx1ZmYzNlwwMDdcdWZmMzZcMDEwXHVmZjM2XDAxMVx1ZmYzNlwwMTJcdWZmMzZcMDEzIiArCi0gICAgIlx1ZmYzNlwwMTRcdWZmMzZcMDE1XHVmZjM2XDAxNlx1ZmYzNlwwMTdcdWZmMzZcMDIwXHVmZjM2XDAyMVx1ZmYzNiIgKwotICAgICJcMDIyXHVmZjM2XDAyM1x1ZmYzNlwwMjRcdWZmMzZcMDI1XHVmZjM2XDAzMVx1ZmYzNlwwMzJcdWZmMzZcMDM1IiArCi0gICAgIlx1ZmYzNlwwNTNcdWZmMzZcMDU0XHVmZjM2XDA1NVx1ZmYzNlwwNTZcdWZmMzZcMDU3XHVmZjM2XDA2MFx1ZmYzNiIgKwotICAgICJcMDYxXHVmZjM2XDA2Mlx1ZmYzNlwwNjNcdWZmMzZcMDY0XHVmZjM2XDA2NVx1ZmYzNlwwNjZcdWZmMzZcMDY3IiArCi0gICAgIlx1ZmYzNlwwNzFcdWZmMzZcMDczXHVmZjM2XDA3NFx1ZmYzNlwwNzVcdWZmMzZcMDc3XHVmZjM2XDEwMFx1ZmYzNiIgKwotICAgICJcMTAxXHVmZjM2XDEwMlx1ZmYzNlwxMDdcdWZmMzZcMTEwXHVmZjM2XDExMVx1ZmYzNlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYzYlwwMDRcdWZmM2JcMDA1XHVmZjNiXDAwNlx1ZmYzYlwwMDdcdWZmM2JcMDEwXHVmZjNiIiArCi0gICAgIlwwMTFcdWZmM2JcMDEyXHVmZjNiXDAxM1x1ZmYzYlwwMTRcdWZmM2JcMDE1XHVmZjNiXDAxNlx1ZmYzYlwwMTciICsKLSAgICAiXHVmZjNiXDAyMFx1ZmYzYlwwMjFcdWZmM2JcMDIyXHVmZjNiXDAyM1x1ZmYzYlwwMjRcdWZmM2JcMDI1XHVmZjNiIiArCi0gICAgIlwwMzFcdWZmM2JcMDMyXHVmZjNiXDAzNVx1ZmYzYlwwNTNcdWZmM2JcMDU0XHVmZjNiXDA1NVx1ZmYzYlwwNTYiICsKLSAgICAiXHVmZjNiXDA1N1x1ZmYzYlwwNjBcdWZmM2JcMDYxXHVmZjNiXDA2Mlx1ZmYzYlwwNjNcdWZmM2JcMDY0XHVmZjNiIiArCi0gICAgIlwwNjVcdWZmM2JcMDY2XHVmZjNiXDA2N1x1ZmYzYlwwNzFcdWZmM2JcMDczXHVmZjNiXDA3NFx1ZmYzYlwwNzUiICsKLSAgICAiXHVmZjNiXDA3N1x1ZmYzYlwxMDBcdWZmM2JcMTAxXHVmZjNiXDEwMlx1ZmYzYlwxMDdcdWZmM2JcMTEwXHVmZjNiIiArCi0gICAgIlwxMTFcdWZmM2JcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyYVwwMDRcdWZmMmFcMDA1XHVmZjJhXDAwNiIgKwotICAgICJcdWZmMmFcMDA3XHVmZjJhXDAxMFx1ZmYyYVwwMTFcdWZmMmFcMDEyXHVmZjJhXDAxM1x1ZmYyYVwwMTRcdWZmMmEiICsKLSAgICAiXDAxNVx1ZmYyYVwwMTZcdWZmMmFcMDE3XHVmZjJhXDAyMFx1ZmYyYVwwMjFcdWZmMmFcMDIyXHVmZjJhXDAyMyIgKwotICAgICJcdWZmMmFcMDI0XHVmZjJhXDAyNVx1ZmYyYVwwMzFcdWZmMmFcMDMyXHVmZjJhXDAzNVx1ZmYyYVwwNTNcdWZmMmEiICsKLSAgICAiXDA1NFx1ZmYyYVwwNTVcdWZmMmFcMDU2XHVmZjJhXDA1N1x1ZmYyYVwwNjBcdWZmMmFcMDYxXHVmZjJhXDA2MiIgKwotICAgICJcdWZmMmFcMDYzXHVmZjJhXDA2NFx1ZmYyYVwwNjVcdWZmMmFcMDY2XHVmZjJhXDA2N1x1ZmYyYVwwNzFcdWZmMmEiICsKLSAgICAiXDA3M1x1ZmYyYVwwNzRcdWZmMmFcMDc1XHVmZjJhXDA3N1x1ZmYyYVwxMDBcdWZmMmFcMTAxXHVmZjJhXDEwMiIgKwotICAgICJcdWZmMmFcMTA3XHVmZjJhXDExMFx1ZmYyYVwxMTFcdWZmMmFcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0ZCIgKwotICAgICJcMDA0XHVmZjRkXDAwNVx1ZmY0ZFwwMDdcdWZmNGRcMDEwXHVmZjRkXDAxMVx1ZmY0ZFwwMTJcdWZmNGRcMDEzIiArCi0gICAgIlx1ZmY0ZFwwMTRcdWZmNGRcMDE1XHVmZjRkXDAxNlx1ZmY0ZFwwMTdcdWZmNGRcMDIwXHVmZjRkXDAyMVx1ZmY0ZCIgKwotICAgICJcMDIyXHVmZjRkXDAyM1x1ZmY0ZFwwMjRcdWZmNGRcMDI1XHVmZjRkXDAzMVwzMjRcMDMyXHVmZjRkXDAzNSIgKwotICAgICJcdWZmNGRcMDUzXHVmZjRkXDA1NFx1ZmY0ZFwwNTVcdWZmNGRcMDU2XHVmZjRkXDA1N1x1ZmY0ZFwwNjBcdWZmNGQiICsKLSAgICAiXDA2MVx1ZmY0ZFwwNjJcdWZmNGRcMDYzXHVmZjRkXDA2NFx1ZmY0ZFwwNjVcdWZmNGRcMDY2XHVmZjRkXDA2NyIgKwotICAgICJcdWZmNGRcMDcxXHVmZjRkXDA3M1x1ZmY0ZFwwNzRcdWZmNGRcMDc1XHVmZjRkXDA3N1x1ZmY0ZFwxMDBcdWZmNGQiICsKLSAgICAiXDEwMVx1ZmY0ZFwxMDJcdWZmNGRcMTA3XHVmZjRkXDExMFx1ZmY0ZFwxMTFcdWZmNGRcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNlwwMDJcdWZmMTBcMDA0XHVmZjEwXDAwNVx1ZmYxMFwwMDZcdWZmMTBcMDA3XHVmZjEwXDAxMFx1ZmYxMCIgKwotICAgICJcMDExXHVmZjEwXDAxMlx1ZmYxMFwwMTNcdWZmMTBcMDE0XHVmZjEwXDAxNVx1ZmYxMFwwMTZcdWZmMTBcMDE3IiArCi0gICAgIlx1ZmYxMFwwMjBcdWZmMTBcMDIxXHVmZjEwXDAyMlx1ZmYxMFwwMjNcdWZmMTBcMDI0XHVmZjEwXDAyNVx1ZmYxMCIgKwotICAgICJcMDMxXHVmZjEwXDAzMlx1ZmYxMFwwMzVcdWZmMTBcMDUzXHVmZjEwXDA1NFx1ZmYxMFwwNTVcdWZmMTBcMDU2IiArCi0gICAgIlx1ZmYxMFwwNTdcdWZmMTBcMDYwXHVmZjEwXDA2MVx1ZmYxMFwwNjJcdWZmMTBcMDYzXHVmZjEwXDA2NFx1ZmYxMCIgKwotICAgICJcMDY1XHVmZjEwXDA2Nlx1ZmYxMFwwNjdcdWZmMTBcMDcxXHVmZjEwXDA3M1x1ZmYxMFwwNzRcdWZmMTBcMDc1IiArCi0gICAgIlx1ZmYxMFwwNzdcdWZmMTBcMTAwXHVmZjEwXDEwMVx1ZmYxMFwxMDJcdWZmMTBcMTA3XHVmZjEwXDExMFx1ZmYxMCIgKwotICAgICJcMTExXHVmZjEwXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmM2VcMDA0XHVmZjNlXDAwNVx1ZmYzZVwwMDYiICsKLSAgICAiXHVmZjNlXDAwN1x1ZmYzZVwwMTBcdWZmM2VcMDExXHVmZjNlXDAxMlx1ZmYzZVwwMTNcdWZmM2VcMDE0XHVmZjNlIiArCi0gICAgIlwwMTVcdWZmM2VcMDE2XHVmZjNlXDAxN1x1ZmYzZVwwMjBcdWZmM2VcMDIxXHVmZjNlXDAyMlx1ZmYzZVwwMjMiICsKLSAgICAiXHVmZjNlXDAyNFx1ZmYzZVwwMjVcdWZmM2VcMDMxXHVmZjNlXDAzMlx1ZmYzZVwwMzVcdWZmM2VcMDUzXHVmZjNlIiArCi0gICAgIlwwNTRcdWZmM2VcMDU1XHVmZjNlXDA1Nlx1ZmYzZVwwNTdcdWZmM2VcMDYwXHVmZjNlXDA2MVx1ZmYzZVwwNjIiICsKLSAgICAiXHVmZjNlXDA2M1x1ZmYzZVwwNjRcdWZmM2VcMDY1XHVmZjNlXDA2Nlx1ZmYzZVwwNjdcdWZmM2VcMDcxXHVmZjNlIiArCi0gICAgIlwwNzNcdWZmM2VcMDc0XHVmZjNlXDA3NVx1ZmYzZVwwNzdcdWZmM2VcMTAwXHVmZjNlXDEwMVx1ZmYzZVwxMDIiICsKLSAgICAiXHVmZjNlXDEwN1x1ZmYzZVwxMTBcdWZmM2VcMTExXHVmZjNlXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMWEiICsKLSAgICAiXDAwNFx1ZmYxYVwwMDVcdWZmMWFcMDA2XHVmZjFhXDAwN1x1ZmYxYVwwMTBcdWZmMWFcMDExXHVmZjFhXDAxMiIgKwotICAgICJcdWZmMWFcMDEzXHVmZjFhXDAxNFx1ZmYxYVwwMTVcdWZmMWFcMDE2XHVmZjFhXDAxN1x1ZmYxYVwwMjBcdWZmMWEiICsKLSAgICAiXDAyMVx1ZmYxYVwwMjJcdWZmMWFcMDIzXHVmZjFhXDAyNFx1ZmYxYVwwMjVcdWZmMWFcMDMxXHVmZjFhXDAzMiIgKwotICAgICJcdWZmMWFcMDM1XHVmZjFhXDA1M1x1ZmYxYVwwNTRcdWZmMWFcMDU1XHVmZjFhXDA1Nlx1ZmYxYVwwNTdcdWZmMWEiICsKLSAgICAiXDA2MFx1ZmYxYVwwNjFcdWZmMWFcMDYyXHVmZjFhXDA2M1x1ZmYxYVwwNjRcdWZmMWFcMDY1XHVmZjFhXDA2NiIgKwotICAgICJcdWZmMWFcMDY3XHVmZjFhXDA3MVx1ZmYxYVwwNzNcdWZmMWFcMDc0XHVmZjFhXDA3NVx1ZmYxYVwwNzdcdWZmMWEiICsKLSAgICAiXDEwMFx1ZmYxYVwxMDFcdWZmMWFcMTAyXHVmZjFhXDEwN1x1ZmYxYVwxMTBcdWZmMWFcMTExXHVmZjFhXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZjIxXDAwNFx1ZmYyMVwwMDVcdWZmMjFcMDA2XHVmZjIxXDAwN1x1ZmYyMSIgKwotICAgICJcMDEwXHVmZjIxXDAxMVx1ZmYyMVwwMTJcdWZmMjFcMDEzXHVmZjIxXDAxNFx1ZmYyMVwwMTVcdWZmMjFcMDE2IiArCi0gICAgIlx1ZmYyMVwwMTdcdWZmMjFcMDIwXHVmZjIxXDAyMVx1ZmYyMVwwMjJcdWZmMjFcMDIzXHVmZjIxXDAyNFx1ZmYyMSIgKwotICAgICJcMDI1XHVmZjIxXDAzMVx1ZmYyMVwwMzJcdWZmMjFcMDM1XHVmZjIxXDA1M1x1ZmYyMVwwNTRcdWZmMjFcMDU1IiArCi0gICAgIlx1ZmYyMVwwNTZcdWZmMjFcMDU3XHVmZjIxXDA2MFx1ZmYyMVwwNjFcdWZmMjFcMDYyXHVmZjIxXDA2M1x1ZmYyMSIgKwotICAgICJcMDY0XHVmZjIxXDA2NVx1ZmYyMVwwNjZcdWZmMjFcMDY3XHVmZjIxXDA3MVx1ZmYyMVwwNzNcdWZmMjFcMDc0IiArCi0gICAgIlx1ZmYyMVwwNzVcdWZmMjFcMDc3XHVmZjIxXDEwMFx1ZmYyMVwxMDFcdWZmMjFcMTAyXHVmZjIxXDEwN1x1ZmYyMSIgKwotICAgICJcMTEwXHVmZjIxXDExMVx1ZmYyMVwwMDFcMDAyXDAwMFwwMDRcMDc3XDMyMlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYyZVwwMDRcdWZmMmVcMDA1XHVmZjJlXDAwNlx1ZmYyZVwwMDdcdWZmMmVcMDEwXHVmZjJlIiArCi0gICAgIlwwMTFcdWZmMmVcMDEyXHVmZjJlXDAxM1x1ZmYyZVwwMTRcdWZmMmVcMDE1XHVmZjJlXDAxNlx1ZmYyZVwwMTciICsKLSAgICAiXHVmZjJlXDAyMFx1ZmYyZVwwMjFcdWZmMmVcMDIyXHVmZjJlXDAyM1x1ZmYyZVwwMjRcdWZmMmVcMDI1XHVmZjJlIiArCi0gICAgIlwwMzFcdWZmMmVcMDMyXHVmZjJlXDAzNVx1ZmYyZVwwNTNcdWZmMmVcMDU0XHVmZjJlXDA1NVx1ZmYyZVwwNTYiICsKLSAgICAiXHVmZjJlXDA1N1x1ZmYyZVwwNjBcdWZmMmVcMDYxXHVmZjJlXDA2Mlx1ZmYyZVwwNjNcdWZmMmVcMDY0XHVmZjJlIiArCi0gICAgIlwwNjVcdWZmMmVcMDY2XHVmZjJlXDA2N1x1ZmYyZVwwNzFcdWZmMmVcMDczXHVmZjJlXDA3NFx1ZmYyZVwwNzUiICsKLSAgICAiXHVmZjJlXDA3N1x1ZmYyZVwxMDBcdWZmMmVcMTAxXHVmZjJlXDEwMlx1ZmYyZVwxMDdcdWZmMmVcMTEwXHVmZjJlIiArCi0gICAgIlwxMTFcdWZmMmVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmY0NVwwMDRcdWZmNDVcMDA1XHVmZjQ1XDAwNiIgKwotICAgICJcdWZmNDVcMDA3XHVmZjQ1XDAxMFx1ZmY0NVwwMTFcdWZmNDVcMDEyXHVmZjQ1XDAxM1x1ZmY0NVwwMTRcdWZmNDUiICsKLSAgICAiXDAxNVx1ZmY0NVwwMTZcdWZmNDVcMDE3XHVmZjQ1XDAyMFx1ZmY0NVwwMjFcdWZmNDVcMDIyXHVmZjQ1XDAyMyIgKwotICAgICJcdWZmNDVcMDI0XHVmZjQ1XDAyNVx1ZmY0NVwwMzFcdWZmNDVcMDMyXHVmZjQ1XDAzNVx1ZmY0NVwwNTNcdWZmNDUiICsKLSAgICAiXDA1NFx1ZmY0NVwwNTVcdWZmNDVcMDU2XHVmZjQ1XDA1N1x1ZmY0NVwwNjBcdWZmNDVcMDYxXHVmZjQ1XDA2MiIgKwotICAgICJcdWZmNDVcMDYzXHVmZjQ1XDA2NFx1ZmY0NVwwNjVcdWZmNDVcMDY2XHVmZjQ1XDA2N1x1ZmY0NVwwNzFcdWZmNDUiICsKLSAgICAiXDA3M1x1ZmY0NVwwNzRcdWZmNDVcMDc1XHVmZjQ1XDA3N1x1ZmY0NVwxMDBcdWZmNDVcMTAxXHVmZjQ1XDEwMiIgKwotICAgICJcdWZmNDVcMTA3XHVmZjQ1XDExMFx1ZmY0NVwxMTFcdWZmNDVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxYiIgKwotICAgICJcMDA0XHVmZjFiXDAwNVx1ZmYxYlwwMDZcdWZmMWJcMDA3XHVmZjFiXDAxMFx1ZmYxYlwwMTFcdWZmMWJcMDEyIiArCi0gICAgIlx1ZmYxYlwwMTNcdWZmMWJcMDE0XHVmZjFiXDAxNVx1ZmYxYlwwMTZcdWZmMWJcMDE3XHVmZjFiXDAyMFx1ZmYxYiIgKwotICAgICJcMDIxXHVmZjFiXDAyMlx1ZmYxYlwwMjNcdWZmMWJcMDI0XHVmZjFiXDAyNVx1ZmYxYlwwMzFcdWZmMWJcMDMyIiArCi0gICAgIlx1ZmYxYlwwMzVcdWZmMWJcMDUzXHVmZjFiXDA1NFx1ZmYxYlwwNTVcdWZmMWJcMDU2XHVmZjFiXDA1N1x1ZmYxYiIgKwotICAgICJcMDYwXHVmZjFiXDA2MVx1ZmYxYlwwNjJcdWZmMWJcMDYzXHVmZjFiXDA2NFx1ZmYxYlwwNjVcdWZmMWJcMDY2IiArCi0gICAgIlx1ZmYxYlwwNjdcdWZmMWJcMDcxXHVmZjFiXDA3M1x1ZmYxYlwwNzRcdWZmMWJcMDc1XHVmZjFiXDA3N1x1ZmYxYiIgKwotICAgICJcMTAwXHVmZjFiXDEwMVx1ZmYxYlwxMDJcdWZmMWJcMTA3XHVmZjFiXDExMFx1ZmYxYlwxMTFcdWZmMWJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNlwwMDJcdWZmMjVcMDA0XHVmZjI1XDAwNVx1ZmYyNVwwMDZcdWZmMjVcMDA3XHVmZjI1IiArCi0gICAgIlwwMTBcdWZmMjVcMDExXHVmZjI1XDAxMlx1ZmYyNVwwMTNcdWZmMjVcMDE0XHVmZjI1XDAxNVx1ZmYyNVwwMTYiICsKLSAgICAiXHVmZjI1XDAxN1x1ZmYyNVwwMjBcdWZmMjVcMDIxXHVmZjI1XDAyMlx1ZmYyNVwwMjNcdWZmMjVcMDI0XHVmZjI1IiArCi0gICAgIlwwMjVcdWZmMjVcMDMxXHVmZjI1XDAzMlx1ZmYyNVwwMzVcdWZmMjVcMDUzXHVmZjI1XDA1NFx1ZmYyNVwwNTUiICsKLSAgICAiXHVmZjI1XDA1Nlx1ZmYyNVwwNTdcdWZmMjVcMDYwXHVmZjI1XDA2MVx1ZmYyNVwwNjJcdWZmMjVcMDYzXHVmZjI1IiArCi0gICAgIlwwNjRcdWZmMjVcMDY1XHVmZjI1XDA2Nlx1ZmYyNVwwNjdcdWZmMjVcMDcxXHVmZjI1XDA3M1x1ZmYyNVwwNzQiICsKLSAgICAiXHVmZjI1XDA3NVx1ZmYyNVwwNzdcdWZmMjVcMTAwXHVmZjI1XDEwMVx1ZmYyNVwxMDJcdWZmMjVcMTA3XHVmZjI1IiArCi0gICAgIlwxMTBcdWZmMjVcMTExXHVmZjI1XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMmZcMDA0XHVmZjJmXDAwNSIgKwotICAgICJcdWZmMmZcMDA2XHVmZjJmXDAwN1x1ZmYyZlwwMTBcdWZmMmZcMDExXHVmZjJmXDAxMlx1ZmYyZlwwMTNcdWZmMmYiICsKLSAgICAiXDAxNFx1ZmYyZlwwMTVcdWZmMmZcMDE2XHVmZjJmXDAxN1x1ZmYyZlwwMjBcdWZmMmZcMDIxXHVmZjJmXDAyMiIgKwotICAgICJcdWZmMmZcMDIzXHVmZjJmXDAyNFx1ZmYyZlwwMjVcdWZmMmZcMDMxXHVmZjJmXDAzMlx1ZmYyZlwwMzVcdWZmMmYiICsKLSAgICAiXDA1M1x1ZmYyZlwwNTRcdWZmMmZcMDU1XHVmZjJmXDA1Nlx1ZmYyZlwwNTdcdWZmMmZcMDYwXHVmZjJmXDA2MSIgKwotICAgICJcdWZmMmZcMDYyXHVmZjJmXDA2M1x1ZmYyZlwwNjRcdWZmMmZcMDY1XHVmZjJmXDA2Nlx1ZmYyZlwwNjdcdWZmMmYiICsKLSAgICAiXDA3MVx1ZmYyZlwwNzNcdWZmMmZcMDc0XHVmZjJmXDA3NVx1ZmYyZlwwNzdcdWZmMmZcMTAwXHVmZjJmXDEwMSIgKwotICAgICJcdWZmMmZcMTAyXHVmZjJmXDEwN1x1ZmYyZlwxMTBcdWZmMmZcMTExXHVmZjJmXDAwMVwwMDJcMDAwXDEzNiIgKwotICAgICJcMDAyXHVmZjEzXDAwNFx1ZmYxM1wwMDVcdWZmMTNcMDA2XHVmZjEzXDAwN1x1ZmYxM1wwMTBcdWZmMTNcMDExIiArCi0gICAgIlx1ZmYxM1wwMTJcdWZmMTNcMDEzXHVmZjEzXDAxNFx1ZmYxM1wwMTVcdWZmMTNcMDE2XHVmZjEzXDAxN1x1ZmYxMyIgKwotICAgICJcMDIwXHVmZjEzXDAyMVx1ZmYxM1wwMjJcdWZmMTNcMDIzXHVmZjEzXDAyNFx1ZmYxM1wwMjVcdWZmMTNcMDMxIiArCi0gICAgIlx1ZmYxM1wwMzJcdWZmMTNcMDM1XHVmZjEzXDA1M1x1ZmYxM1wwNTRcdWZmMTNcMDU1XHVmZjEzXDA1Nlx1ZmYxMyIgKwotICAgICJcMDU3XHVmZjEzXDA2MFx1ZmYxM1wwNjFcdWZmMTNcMDYyXHVmZjEzXDA2M1x1ZmYxM1wwNjRcdWZmMTNcMDY1IiArCi0gICAgIlx1ZmYxM1wwNjZcdWZmMTNcMDY3XHVmZjEzXDA3MVx1ZmYxM1wwNzNcdWZmMTNcMDc0XHVmZjEzXDA3NVx1ZmYxMyIgKwotICAgICJcMDc3XHVmZjEzXDEwMFx1ZmYxM1wxMDFcdWZmMTNcMTAyXHVmZjEzXDEwN1x1ZmYxM1wxMTBcdWZmMTNcMTExIiArCi0gICAgIlx1ZmYxM1wwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjE5XDAwNFx1ZmYxOVwwMDVcdWZmMTlcMDA2XHVmZjE5IiArCi0gICAgIlwwMDdcdWZmMTlcMDEwXHVmZjE5XDAxMVx1ZmYxOVwwMTJcdWZmMTlcMDEzXHVmZjE5XDAxNFx1ZmYxOVwwMTUiICsKLSAgICAiXHVmZjE5XDAxNlx1ZmYxOVwwMTdcdWZmMTlcMDIwXHVmZjE5XDAyMVx1ZmYxOVwwMjJcdWZmMTlcMDIzXHVmZjE5IiArCi0gICAgIlwwMjRcdWZmMTlcMDI1XHVmZjE5XDAzMVx1ZmYxOVwwMzJcdWZmMTlcMDM1XHVmZjE5XDA1M1x1ZmYxOVwwNTQiICsKLSAgICAiXHVmZjE5XDA1NVx1ZmYxOVwwNTZcdWZmMTlcMDU3XHVmZjE5XDA2MFx1ZmYxOVwwNjFcdWZmMTlcMDYyXHVmZjE5IiArCi0gICAgIlwwNjNcdWZmMTlcMDY0XHVmZjE5XDA2NVx1ZmYxOVwwNjZcdWZmMTlcMDY3XHVmZjE5XDA3MVx1ZmYxOVwwNzMiICsKLSAgICAiXHVmZjE5XDA3NFx1ZmYxOVwwNzVcdWZmMTlcMDc3XHVmZjE5XDEwMFx1ZmYxOVwxMDFcdWZmMTlcMTAyXHVmZjE5IiArCi0gICAgIlwxMDdcdWZmMTlcMTEwXHVmZjE5XDExMVx1ZmYxOVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjJkXDAwNCIgKwotICAgICJcdWZmMmRcMDA1XHVmZjJkXDAwNlx1ZmYyZFwwMDdcdWZmMmRcMDEwXHVmZjJkXDAxMVx1ZmYyZFwwMTJcdWZmMmQiICsKLSAgICAiXDAxM1x1ZmYyZFwwMTRcdWZmMmRcMDE1XHVmZjJkXDAxNlx1ZmYyZFwwMTdcdWZmMmRcMDIwXHVmZjJkXDAyMSIgKwotICAgICJcdWZmMmRcMDIyXHVmZjJkXDAyM1x1ZmYyZFwwMjRcdWZmMmRcMDI1XHVmZjJkXDAzMVx1ZmYyZFwwMzJcdWZmMmQiICsKLSAgICAiXDAzNVx1ZmYyZFwwNTNcdWZmMmRcMDU0XHVmZjJkXDA1NVx1ZmYyZFwwNTZcdWZmMmRcMDU3XHVmZjJkXDA2MCIgKwotICAgICJcdWZmMmRcMDYxXHVmZjJkXDA2Mlx1ZmYyZFwwNjNcdWZmMmRcMDY0XHVmZjJkXDA2NVx1ZmYyZFwwNjZcdWZmMmQiICsKLSAgICAiXDA2N1x1ZmYyZFwwNzFcdWZmMmRcMDczXHVmZjJkXDA3NFx1ZmYyZFwwNzVcdWZmMmRcMDc3XHVmZjJkXDEwMCIgKwotICAgICJcdWZmMmRcMTAxXHVmZjJkXDEwMlx1ZmYyZFwxMDdcdWZmMmRcMTEwXHVmZjJkXDExMVx1ZmYyZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM2XDAwMlx1ZmYyNFwwMDRcdWZmMjRcMDA1XHVmZjI0XDAwNlx1ZmYyNFwwMDdcdWZmMjRcMDEwIiArCi0gICAgIlx1ZmYyNFwwMTFcdWZmMjRcMDEyXHVmZjI0XDAxM1x1ZmYyNFwwMTRcdWZmMjRcMDE1XHVmZjI0XDAxNlx1ZmYyNCIgKwotICAgICJcMDE3XHVmZjI0XDAyMFx1ZmYyNFwwMjFcdWZmMjRcMDIyXHVmZjI0XDAyM1x1ZmYyNFwwMjRcdWZmMjRcMDI1IiArCi0gICAgIlx1ZmYyNFwwMzFcdWZmMjRcMDMyXHVmZjI0XDAzNVx1ZmYyNFwwNTNcdWZmMjRcMDU0XHVmZjI0XDA1NVx1ZmYyNCIgKwotICAgICJcMDU2XHVmZjI0XDA1N1x1ZmYyNFwwNjBcdWZmMjRcMDYxXHVmZjI0XDA2Mlx1ZmYyNFwwNjNcdWZmMjRcMDY0IiArCi0gICAgIlx1ZmYyNFwwNjVcdWZmMjRcMDY2XHVmZjI0XDA2N1x1ZmYyNFwwNzFcdWZmMjRcMDczXHVmZjI0XDA3NFx1ZmYyNCIgKwotICAgICJcMDc1XHVmZjI0XDA3N1x1ZmYyNFwxMDBcdWZmMjRcMTAxXHVmZjI0XDEwMlx1ZmYyNFwxMDdcdWZmMjRcMTEwIiArCi0gICAgIlx1ZmYyNFwxMTFcdWZmMjRcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyMlwwMDRcdWZmMjJcMDA1XHVmZjIyIiArCi0gICAgIlwwMDZcdWZmMjJcMDA3XHVmZjIyXDAxMFx1ZmYyMlwwMTFcdWZmMjJcMDEyXHVmZjIyXDAxM1x1ZmYyMlwwMTQiICsKLSAgICAiXHVmZjIyXDAxNVx1ZmYyMlwwMTZcdWZmMjJcMDE3XHVmZjIyXDAyMFx1ZmYyMlwwMjFcdWZmMjJcMDIyXHVmZjIyIiArCi0gICAgIlwwMjNcdWZmMjJcMDI0XHVmZjIyXDAyNVx1ZmYyMlwwMzFcdWZmMjJcMDMyXHVmZjIyXDAzNVx1ZmYyMlwwNTMiICsKLSAgICAiXHVmZjIyXDA1NFx1ZmYyMlwwNTVcdWZmMjJcMDU2XHVmZjIyXDA1N1x1ZmYyMlwwNjBcdWZmMjJcMDYxXHVmZjIyIiArCi0gICAgIlwwNjJcdWZmMjJcMDYzXHVmZjIyXDA2NFx1ZmYyMlwwNjVcdWZmMjJcMDY2XHVmZjIyXDA2N1x1ZmYyMlwwNzEiICsKLSAgICAiXHVmZjIyXDA3M1x1ZmYyMlwwNzRcdWZmMjJcMDc1XHVmZjIyXDA3N1x1ZmYyMlwxMDBcdWZmMjJcMTAxXHVmZjIyIiArCi0gICAgIlwxMDJcdWZmMjJcMTA3XHVmZjIyXDExMFx1ZmYyMlwxMTFcdWZmMjJcMDAxXDAwMlwwMDBcMTM2XDAwMiIgKwotICAgICJcdWZmNDBcMDA0XHVmZjQwXDAwNVx1ZmY0MFwwMDZcdWZmNDBcMDA3XHVmZjQwXDAxMFx1ZmY0MFwwMTFcdWZmNDAiICsKLSAgICAiXDAxMlx1ZmY0MFwwMTNcdWZmNDBcMDE0XHVmZjQwXDAxNVx1ZmY0MFwwMTZcdWZmNDBcMDE3XHVmZjQwXDAyMCIgKwotICAgICJcdWZmNDBcMDIxXHVmZjQwXDAyMlx1ZmY0MFwwMjNcdWZmNDBcMDI0XHVmZjQwXDAyNVx1ZmY0MFwwMzFcdWZmNDAiICsKLSAgICAiXDAzMlx1ZmY0MFwwMzVcdWZmNDBcMDUzXHVmZjQwXDA1NFx1ZmY0MFwwNTVcdWZmNDBcMDU2XHVmZjQwXDA1NyIgKwotICAgICJcdWZmNDBcMDYwXHVmZjQwXDA2MVx1ZmY0MFwwNjJcdWZmNDBcMDYzXHVmZjQwXDA2NFx1ZmY0MFwwNjVcdWZmNDAiICsKLSAgICAiXDA2Nlx1ZmY0MFwwNjdcdWZmNDBcMDcxXHVmZjQwXDA3M1x1ZmY0MFwwNzRcdWZmNDBcMDc1XHVmZjQwXDA3NyIgKwotICAgICJcdWZmNDBcMTAwXHVmZjQwXDEwMVx1ZmY0MFwxMDJcdWZmNDBcMTA3XHVmZjQwXDExMFx1ZmY0MFwxMTFcdWZmNDAiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjNcMDA0XHVmZjIzXDAwNVx1ZmYyM1wwMDZcdWZmMjNcMDA3IiArCi0gICAgIlx1ZmYyM1wwMTBcdWZmMjNcMDExXHVmZjIzXDAxMlx1ZmYyM1wwMTNcdWZmMjNcMDE0XHVmZjIzXDAxNVx1ZmYyMyIgKwotICAgICJcMDE2XHVmZjIzXDAxN1x1ZmYyM1wwMjBcdWZmMjNcMDIxXHVmZjIzXDAyMlx1ZmYyM1wwMjNcdWZmMjNcMDI0IiArCi0gICAgIlx1ZmYyM1wwMjVcdWZmMjNcMDMxXHVmZjIzXDAzMlx1ZmYyM1wwMzVcdWZmMjNcMDUzXHVmZjIzXDA1NFx1ZmYyMyIgKwotICAgICJcMDU1XHVmZjIzXDA1Nlx1ZmYyM1wwNTdcdWZmMjNcMDYwXHVmZjIzXDA2MVx1ZmYyM1wwNjJcdWZmMjNcMDYzIiArCi0gICAgIlx1ZmYyM1wwNjRcdWZmMjNcMDY1XHVmZjIzXDA2Nlx1ZmYyM1wwNjdcdWZmMjNcMDcxXHVmZjIzXDA3M1x1ZmYyMyIgKwotICAgICJcMDc0XHVmZjIzXDA3NVx1ZmYyM1wwNzdcdWZmMjNcMTAwXHVmZjIzXDEwMVx1ZmYyM1wxMDJcdWZmMjNcMTA3IiArCi0gICAgIlx1ZmYyM1wxMTBcdWZmMjNcMTExXHVmZjIzXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmNDFcMDA0XHVmZjQxIiArCi0gICAgIlwwMDVcdWZmNDFcMDA2XHVmZjQxXDAwN1x1ZmY0MVwwMTBcdWZmNDFcMDExXHVmZjQxXDAxMlx1ZmY0MVwwMTMiICsKLSAgICAiXHVmZjQxXDAxNFx1ZmY0MVwwMTVcdWZmNDFcMDE2XHVmZjQxXDAxN1x1ZmY0MVwwMjBcdWZmNDFcMDIxXHVmZjQxIiArCi0gICAgIlwwMjJcdWZmNDFcMDIzXHVmZjQxXDAyNFx1ZmY0MVwwMjVcdWZmNDFcMDMxXHVmZjQxXDAzMlx1ZmY0MVwwMzUiICsKLSAgICAiXHVmZjQxXDA1M1x1ZmY0MVwwNTRcdWZmNDFcMDU1XHVmZjQxXDA1Nlx1ZmY0MVwwNTdcdWZmNDFcMDYwXHVmZjQxIiArCi0gICAgIlwwNjFcdWZmNDFcMDYyXHVmZjQxXDA2M1x1ZmY0MVwwNjRcdWZmNDFcMDY1XHVmZjQxXDA2Nlx1ZmY0MVwwNjciICsKLSAgICAiXHVmZjQxXDA3MVx1ZmY0MVwwNzNcdWZmNDFcMDc0XHVmZjQxXDA3NVx1ZmY0MVwwNzdcdWZmNDFcMTAwXHVmZjQxIiArCi0gICAgIlwxMDFcdWZmNDFcMTAyXHVmZjQxXDEwN1x1ZmY0MVwxMTBcdWZmNDFcMTExXHVmZjQxXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzZcMDAyXHVmZjEyXDAwNFx1ZmYxMlwwMDVcdWZmMTJcMDA2XHVmZjEyXDAwN1x1ZmYxMlwwMTBcdWZmMTIiICsKLSAgICAiXDAxMVx1ZmYxMlwwMTJcdWZmMTJcMDEzXHVmZjEyXDAxNFx1ZmYxMlwwMTVcdWZmMTJcMDE2XHVmZjEyXDAxNyIgKwotICAgICJcdWZmMTJcMDIwXHVmZjEyXDAyMVx1ZmYxMlwwMjJcdWZmMTJcMDIzXHVmZjEyXDAyNFx1ZmYxMlwwMjVcdWZmMTIiICsKLSAgICAiXDAzMVx1ZmYxMlwwMzJcdWZmMTJcMDM1XHVmZjEyXDA1M1x1ZmYxMlwwNTRcdWZmMTJcMDU1XHVmZjEyXDA1NiIgKwotICAgICJcdWZmMTJcMDU3XHVmZjEyXDA2MFx1ZmYxMlwwNjFcdWZmMTJcMDYyXHVmZjEyXDA2M1x1ZmYxMlwwNjRcdWZmMTIiICsKLSAgICAiXDA2NVx1ZmYxMlwwNjZcdWZmMTJcMDY3XHVmZjEyXDA3MVx1ZmYxMlwwNzNcdWZmMTJcMDc0XHVmZjEyXDA3NSIgKwotICAgICJcdWZmMTJcMDc3XHVmZjEyXDEwMFx1ZmYxMlwxMDFcdWZmMTJcMTAyXHVmZjEyXDEwN1x1ZmYxMlwxMTBcdWZmMTIiICsKLSAgICAiXDExMVx1ZmYxMlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjQ0XDAwNFx1ZmY0NFwwMDVcdWZmNDRcMDA2IiArCi0gICAgIlx1ZmY0NFwwMDdcdWZmNDRcMDEwXHVmZjQ0XDAxMVx1ZmY0NFwwMTJcdWZmNDRcMDEzXHVmZjQ0XDAxNFx1ZmY0NCIgKwotICAgICJcMDE1XHVmZjQ0XDAxNlx1ZmY0NFwwMTdcdWZmNDRcMDIwXHVmZjQ0XDAyMVx1ZmY0NFwwMjJcdWZmNDRcMDIzIiArCi0gICAgIlx1ZmY0NFwwMjRcdWZmNDRcMDI1XHVmZjQ0XDAzMVx1ZmY0NFwwMzJcdWZmNDRcMDM1XHVmZjQ0XDA1M1x1ZmY0NCIgKwotICAgICJcMDU0XHVmZjQ0XDA1NVx1ZmY0NFwwNTZcdWZmNDRcMDU3XHVmZjQ0XDA2MFx1ZmY0NFwwNjFcdWZmNDRcMDYyIiArCi0gICAgIlx1ZmY0NFwwNjNcdWZmNDRcMDY0XHVmZjQ0XDA2NVx1ZmY0NFwwNjZcdWZmNDRcMDY3XHVmZjQ0XDA3MVx1ZmY0NCIgKwotICAgICJcMDczXHVmZjQ0XDA3NFx1ZmY0NFwwNzVcdWZmNDRcMDc3XHVmZjQ0XDEwMFx1ZmY0NFwxMDFcdWZmNDRcMTAyIiArCi0gICAgIlx1ZmY0NFwxMDdcdWZmNDRcMTEwXHVmZjQ0XDExMVx1ZmY0NFwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjM0IiArCi0gICAgIlwwMDRcdWZmMzRcMDA1XHVmZjM0XDAwNlx1ZmYzNFwwMDdcdWZmMzRcMDEwXHVmZjM0XDAxMVx1ZmYzNFwwMTIiICsKLSAgICAiXHVmZjM0XDAxM1x1ZmYzNFwwMTRcdWZmMzRcMDE1XHVmZjM0XDAxNlx1ZmYzNFwwMTdcdWZmMzRcMDIwXHVmZjM0IiArCi0gICAgIlwwMjFcdWZmMzRcMDIyXHVmZjM0XDAyM1x1ZmYzNFwwMjRcdWZmMzRcMDI1XHVmZjM0XDAzMVx1ZmYzNFwwMzIiICsKLSAgICAiXHVmZjM0XDAzNVx1ZmYzNFwwNTNcdWZmMzRcMDU0XHVmZjM0XDA1NVx1ZmYzNFwwNTZcdWZmMzRcMDU3XHVmZjM0IiArCi0gICAgIlwwNjBcdWZmMzRcMDYxXHVmZjM0XDA2Mlx1ZmYzNFwwNjNcdWZmMzRcMDY0XHVmZjM0XDA2NVx1ZmYzNFwwNjYiICsKLSAgICAiXHVmZjM0XDA2N1x1ZmYzNFwwNzFcdWZmMzRcMDczXHVmZjM0XDA3NFx1ZmYzNFwwNzVcdWZmMzRcMDc3XHVmZjM0IiArCi0gICAgIlwxMDBcdWZmMzRcMTAxXHVmZjM0XDEwMlx1ZmYzNFwxMDdcdWZmMzRcMTEwXHVmZjM0XDExMVx1ZmYzNFwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM2XDAwMlx1ZmYyYlwwMDRcdWZmMmJcMDA1XHVmZjJiXDAwNlx1ZmYyYlwwMDdcdWZmMmIiICsKLSAgICAiXDAxMFx1ZmYyYlwwMTFcdWZmMmJcMDEyXHVmZjJiXDAxM1x1ZmYyYlwwMTRcdWZmMmJcMDE1XHVmZjJiXDAxNiIgKwotICAgICJcdWZmMmJcMDE3XHVmZjJiXDAyMFx1ZmYyYlwwMjFcdWZmMmJcMDIyXHVmZjJiXDAyM1x1ZmYyYlwwMjRcdWZmMmIiICsKLSAgICAiXDAyNVx1ZmYyYlwwMzFcdWZmMmJcMDMyXHVmZjJiXDAzNVx1ZmYyYlwwNTNcdWZmMmJcMDU0XHVmZjJiXDA1NSIgKwotICAgICJcdWZmMmJcMDU2XHVmZjJiXDA1N1x1ZmYyYlwwNjBcdWZmMmJcMDYxXHVmZjJiXDA2Mlx1ZmYyYlwwNjNcdWZmMmIiICsKLSAgICAiXDA2NFx1ZmYyYlwwNjVcdWZmMmJcMDY2XHVmZjJiXDA2N1x1ZmYyYlwwNzFcdWZmMmJcMDczXHVmZjJiXDA3NCIgKwotICAgICJcdWZmMmJcMDc1XHVmZjJiXDA3N1x1ZmYyYlwxMDBcdWZmMmJcMTAxXHVmZjJiXDEwMlx1ZmYyYlwxMDdcdWZmMmIiICsKLSAgICAiXDExMFx1ZmYyYlwxMTFcdWZmMmJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyY1wwMDRcdWZmMmNcMDA1IiArCi0gICAgIlx1ZmYyY1wwMDZcdWZmMmNcMDA3XHVmZjJjXDAxMFx1ZmYyY1wwMTFcdWZmMmNcMDEyXHVmZjJjXDAxM1x1ZmYyYyIgKwotICAgICJcMDE0XHVmZjJjXDAxNVx1ZmYyY1wwMTZcdWZmMmNcMDE3XHVmZjJjXDAyMFx1ZmYyY1wwMjFcdWZmMmNcMDIyIiArCi0gICAgIlx1ZmYyY1wwMjNcdWZmMmNcMDI0XHVmZjJjXDAyNVx1ZmYyY1wwMzFcdWZmMmNcMDMyXHVmZjJjXDAzNVx1ZmYyYyIgKwotICAgICJcMDUzXHVmZjJjXDA1NFx1ZmYyY1wwNTVcdWZmMmNcMDU2XHVmZjJjXDA1N1x1ZmYyY1wwNjBcdWZmMmNcMDYxIiArCi0gICAgIlx1ZmYyY1wwNjJcdWZmMmNcMDYzXHVmZjJjXDA2NFx1ZmYyY1wwNjVcdWZmMmNcMDY2XHVmZjJjXDA2N1x1ZmYyYyIgKwotICAgICJcMDcxXHVmZjJjXDA3M1x1ZmYyY1wwNzRcdWZmMmNcMDc1XHVmZjJjXDA3N1x1ZmYyY1wxMDBcdWZmMmNcMTAxIiArCi0gICAgIlx1ZmYyY1wxMDJcdWZmMmNcMTA3XHVmZjJjXDExMFx1ZmYyY1wxMTFcdWZmMmNcMDAxXDAwMlwwMDBcMTM2IiArCi0gICAgIlwwMDJcdWZmNDJcMDA0XHVmZjQyXDAwNVx1ZmY0MlwwMDZcdWZmNDJcMDA3XHVmZjQyXDAxMFx1ZmY0MlwwMTEiICsKLSAgICAiXHVmZjQyXDAxMlx1ZmY0MlwwMTNcdWZmNDJcMDE0XHVmZjQyXDAxNVx1ZmY0MlwwMTZcdWZmNDJcMDE3XHVmZjQyIiArCi0gICAgIlwwMjBcdWZmNDJcMDIxXHVmZjQyXDAyMlx1ZmY0MlwwMjNcdWZmNDJcMDI0XHVmZjQyXDAyNVx1ZmY0MlwwMzEiICsKLSAgICAiXHVmZjQyXDAzMlx1ZmY0MlwwMzVcdWZmNDJcMDUzXHVmZjQyXDA1NFx1ZmY0MlwwNTVcdWZmNDJcMDU2XHVmZjQyIiArCi0gICAgIlwwNTdcdWZmNDJcMDYwXHVmZjQyXDA2MVx1ZmY0MlwwNjJcdWZmNDJcMDYzXHVmZjQyXDA2NFx1ZmY0MlwwNjUiICsKLSAgICAiXHVmZjQyXDA2Nlx1ZmY0MlwwNjdcdWZmNDJcMDcxXHVmZjQyXDA3M1x1ZmY0MlwwNzRcdWZmNDJcMDc1XHVmZjQyIiArCi0gICAgIlwwNzdcdWZmNDJcMTAwXHVmZjQyXDEwMVx1ZmY0MlwxMDJcdWZmNDJcMTA3XHVmZjQyXDExMFx1ZmY0MlwxMTEiICsKLSAgICAiXHVmZjQyXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmNDdcMDA0XHVmZjQ3XDAwNVx1ZmY0N1wwMDZcdWZmNDciICsKLSAgICAiXDAwN1x1ZmY0N1wwMTBcdWZmNDdcMDExXHVmZjQ3XDAxMlx1ZmY0N1wwMTNcdWZmNDdcMDE0XHVmZjQ3XDAxNSIgKwotICAgICJcdWZmNDdcMDE2XHVmZjQ3XDAxN1x1ZmY0N1wwMjBcdWZmNDdcMDIxXHVmZjQ3XDAyMlx1ZmY0N1wwMjNcdWZmNDciICsKLSAgICAiXDAyNFx1ZmY0N1wwMjVcdWZmNDdcMDMxXHVmZjQ3XDAzMlx1ZmY0N1wwMzVcdWZmNDdcMDUzXHVmZjQ3XDA1NCIgKwotICAgICJcdWZmNDdcMDU1XHVmZjQ3XDA1Nlx1ZmY0N1wwNTdcdWZmNDdcMDYwXHVmZjQ3XDA2MVx1ZmY0N1wwNjJcdWZmNDciICsKLSAgICAiXDA2M1x1ZmY0N1wwNjRcdWZmNDdcMDY1XHVmZjQ3XDA2Nlx1ZmY0N1wwNjdcdWZmNDdcMDcxXHVmZjQ3XDA3MyIgKwotICAgICJcdWZmNDdcMDc0XHVmZjQ3XDA3NVx1ZmY0N1wwNzdcdWZmNDdcMTAwXHVmZjQ3XDEwMVx1ZmY0N1wxMDJcdWZmNDciICsKLSAgICAiXDEwN1x1ZmY0N1wxMTBcdWZmNDdcMTExXHVmZjQ3XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMTZcMDA0IiArCi0gICAgIlx1ZmYxNlwwMDVcdWZmMTZcMDA2XHVmZjE2XDAwN1x1ZmYxNlwwMTBcdWZmMTZcMDExXHVmZjE2XDAxMlx1ZmYxNiIgKwotICAgICJcMDEzXHVmZjE2XDAxNFx1ZmYxNlwwMTVcdWZmMTZcMDE2XHVmZjE2XDAxN1x1ZmYxNlwwMjBcdWZmMTZcMDIxIiArCi0gICAgIlx1ZmYxNlwwMjJcdWZmMTZcMDIzXHVmZjE2XDAyNFx1ZmYxNlwwMjVcdWZmMTZcMDMxXHVmZjE2XDAzMlx1ZmYxNiIgKwotICAgICJcMDM1XHVmZjE2XDA1M1x1ZmYxNlwwNTRcdWZmMTZcMDU1XHVmZjE2XDA1Nlx1ZmYxNlwwNTdcdWZmMTZcMDYwIiArCi0gICAgIlx1ZmYxNlwwNjFcdWZmMTZcMDYyXHVmZjE2XDA2M1x1ZmYxNlwwNjRcdWZmMTZcMDY1XHVmZjE2XDA2Nlx1ZmYxNiIgKwotICAgICJcMDY3XHVmZjE2XDA3MVx1ZmYxNlwwNzNcdWZmMTZcMDc0XHVmZjE2XDA3NVx1ZmYxNlwwNzdcdWZmMTZcMTAwIiArCi0gICAgIlx1ZmYxNlwxMDFcdWZmMTZcMTAyXHVmZjE2XDEwN1x1ZmYxNlwxMTBcdWZmMTZcMTExXHVmZjE2XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzZcMDAyXHVmZjMyXDAwNFx1ZmYzMlwwMDVcdWZmMzJcMDA2XHVmZjMyXDAwN1x1ZmYzMlwwMTAiICsKLSAgICAiXHVmZjMyXDAxMVx1ZmYzMlwwMTJcdWZmMzJcMDEzXHVmZjMyXDAxNFx1ZmYzMlwwMTVcdWZmMzJcMDE2XHVmZjMyIiArCi0gICAgIlwwMTdcdWZmMzJcMDIwXHVmZjMyXDAyMVx1ZmYzMlwwMjJcdWZmMzJcMDIzXHVmZjMyXDAyNFx1ZmYzMlwwMjUiICsKLSAgICAiXHVmZjMyXDAzMVx1ZmYzMlwwMzJcdWZmMzJcMDM1XHVmZjMyXDA1M1x1ZmYzMlwwNTRcdWZmMzJcMDU1XHVmZjMyIiArCi0gICAgIlwwNTZcdWZmMzJcMDU3XHVmZjMyXDA2MFx1ZmYzMlwwNjFcdWZmMzJcMDYyXHVmZjMyXDA2M1x1ZmYzMlwwNjQiICsKLSAgICAiXHVmZjMyXDA2NVx1ZmYzMlwwNjZcdWZmMzJcMDY3XHVmZjMyXDA3MVx1ZmYzMlwwNzNcdWZmMzJcMDc0XHVmZjMyIiArCi0gICAgIlwwNzVcdWZmMzJcMDc3XHVmZjMyXDEwMFx1ZmYzMlwxMDFcdWZmMzJcMTAyXHVmZjMyXDEwN1x1ZmYzMlwxMTAiICsKLSAgICAiXHVmZjMyXDExMVx1ZmYzMlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjNhXDAwNFx1ZmYzYVwwMDVcdWZmM2EiICsKLSAgICAiXDAwNlx1ZmYzYVwwMDdcdWZmM2FcMDEwXHVmZjNhXDAxMVx1ZmYzYVwwMTJcdWZmM2FcMDEzXHVmZjNhXDAxNCIgKwotICAgICJcdWZmM2FcMDE1XHVmZjNhXDAxNlx1ZmYzYVwwMTdcdWZmM2FcMDIwXHVmZjNhXDAyMVx1ZmYzYVwwMjJcdWZmM2EiICsKLSAgICAiXDAyM1x1ZmYzYVwwMjRcdWZmM2FcMDI1XHVmZjNhXDAzMVx1ZmYzYVwwMzJcdWZmM2FcMDM1XHVmZjNhXDA1MyIgKwotICAgICJcdWZmM2FcMDU0XHVmZjNhXDA1NVx1ZmYzYVwwNTZcdWZmM2FcMDU3XHVmZjNhXDA2MFx1ZmYzYVwwNjFcdWZmM2EiICsKLSAgICAiXDA2Mlx1ZmYzYVwwNjNcdWZmM2FcMDY0XHVmZjNhXDA2NVx1ZmYzYVwwNjZcdWZmM2FcMDY3XHVmZjNhXDA3MSIgKwotICAgICJcdWZmM2FcMDczXHVmZjNhXDA3NFx1ZmYzYVwwNzVcdWZmM2FcMDc3XHVmZjNhXDEwMFx1ZmYzYVwxMDFcdWZmM2EiICsKLSAgICAiXDEwMlx1ZmYzYVwxMDdcdWZmM2FcMTEwXHVmZjNhXDExMVx1ZmYzYVwwMDFcMDAyXDAwMFwxMzZcMDAyIiArCi0gICAgIlx1ZmYxNVwwMDRcdWZmMTVcMDA1XHVmZjE1XDAwNlx1ZmYxNVwwMDdcdWZmMTVcMDEwXHVmZjE1XDAxMVx1ZmYxNSIgKwotICAgICJcMDEyXHVmZjE1XDAxM1x1ZmYxNVwwMTRcdWZmMTVcMDE1XHVmZjE1XDAxNlx1ZmYxNVwwMTdcdWZmMTVcMDIwIiArCi0gICAgIlx1ZmYxNVwwMjFcdWZmMTVcMDIyXHVmZjE1XDAyM1x1ZmYxNVwwMjRcdWZmMTVcMDI1XHVmZjE1XDAzMVx1ZmYxNSIgKwotICAgICJcMDMyXHVmZjE1XDAzNVx1ZmYxNVwwNTNcdWZmMTVcMDU0XHVmZjE1XDA1NVx1ZmYxNVwwNTZcdWZmMTVcMDU3IiArCi0gICAgIlx1ZmYxNVwwNjBcdWZmMTVcMDYxXHVmZjE1XDA2Mlx1ZmYxNVwwNjNcdWZmMTVcMDY0XHVmZjE1XDA2NVx1ZmYxNSIgKwotICAgICJcMDY2XHVmZjE1XDA2N1x1ZmYxNVwwNzFcdWZmMTVcMDczXHVmZjE1XDA3NFx1ZmYxNVwwNzVcdWZmMTVcMDc3IiArCi0gICAgIlx1ZmYxNVwxMDBcdWZmMTVcMTAxXHVmZjE1XDEwMlx1ZmYxNVwxMDdcdWZmMTVcMTEwXHVmZjE1XDExMVx1ZmYxNSIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYzOVwwMDRcdWZmMzlcMDA1XHVmZjM5XDAwNlx1ZmYzOVwwMDciICsKLSAgICAiXHVmZjM5XDAxMFx1ZmYzOVwwMTFcdWZmMzlcMDEyXHVmZjM5XDAxM1x1ZmYzOVwwMTRcdWZmMzlcMDE1XHVmZjM5IiArCi0gICAgIlwwMTZcdWZmMzlcMDE3XHVmZjM5XDAyMFx1ZmYzOVwwMjFcdWZmMzlcMDIyXHVmZjM5XDAyM1x1ZmYzOVwwMjQiICsKLSAgICAiXHVmZjM5XDAyNVx1ZmYzOVwwMzFcdWZmMzlcMDMyXHVmZjM5XDAzNVx1ZmYzOVwwNTNcdWZmMzlcMDU0XHVmZjM5IiArCi0gICAgIlwwNTVcdWZmMzlcMDU2XHVmZjM5XDA1N1x1ZmYzOVwwNjBcdWZmMzlcMDYxXHVmZjM5XDA2Mlx1ZmYzOVwwNjMiICsKLSAgICAiXHVmZjM5XDA2NFx1ZmYzOVwwNjVcdWZmMzlcMDY2XHVmZjM5XDA2N1x1ZmYzOVwwNzFcdWZmMzlcMDczXHVmZjM5IiArCi0gICAgIlwwNzRcdWZmMzlcMDc1XHVmZjM5XDA3N1x1ZmYzOVwxMDBcdWZmMzlcMTAxXHVmZjM5XDEwMlx1ZmYzOVwxMDciICsKLSAgICAiXHVmZjM5XDExMFx1ZmYzOVwxMTFcdWZmMzlcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYzY1wwMDRcdWZmM2MiICsKLSAgICAiXDAwNVx1ZmYzY1wwMDZcdWZmM2NcMDA3XHVmZjNjXDAxMFx1ZmYzY1wwMTFcdWZmM2NcMDEyXHVmZjNjXDAxMyIgKwotICAgICJcdWZmM2NcMDE0XHVmZjNjXDAxNVx1ZmYzY1wwMTZcdWZmM2NcMDE3XHVmZjNjXDAyMFx1ZmYzY1wwMjFcdWZmM2MiICsKLSAgICAiXDAyMlx1ZmYzY1wwMjNcdWZmM2NcMDI0XHVmZjNjXDAyNVx1ZmYzY1wwMzFcdWZmM2NcMDMyXHVmZjNjXDAzNSIgKwotICAgICJcdWZmM2NcMDUzXHVmZjNjXDA1NFx1ZmYzY1wwNTVcdWZmM2NcMDU2XHVmZjNjXDA1N1x1ZmYzY1wwNjBcdWZmM2MiICsKLSAgICAiXDA2MVx1ZmYzY1wwNjJcdWZmM2NcMDYzXHVmZjNjXDA2NFx1ZmYzY1wwNjVcdWZmM2NcMDY2XHVmZjNjXDA2NyIgKwotICAgICJcdWZmM2NcMDcxXHVmZjNjXDA3M1x1ZmYzY1wwNzRcdWZmM2NcMDc1XHVmZjNjXDA3N1x1ZmYzY1wxMDBcdWZmM2MiICsKLSAgICAiXDEwMVx1ZmYzY1wxMDJcdWZmM2NcMTA3XHVmZjNjXDExMFx1ZmYzY1wxMTFcdWZmM2NcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNlwwMDJcdWZmMzhcMDA0XHVmZjM4XDAwNVx1ZmYzOFwwMDZcdWZmMzhcMDA3XHVmZjM4XDAxMFx1ZmYzOCIgKwotICAgICJcMDExXHVmZjM4XDAxMlx1ZmYzOFwwMTNcdWZmMzhcMDE0XHVmZjM4XDAxNVx1ZmYzOFwwMTZcdWZmMzhcMDE3IiArCi0gICAgIlx1ZmYzOFwwMjBcdWZmMzhcMDIxXHVmZjM4XDAyMlx1ZmYzOFwwMjNcdWZmMzhcMDI0XHVmZjM4XDAyNVx1ZmYzOCIgKwotICAgICJcMDMxXHVmZjM4XDAzMlx1ZmYzOFwwMzVcdWZmMzhcMDUzXHVmZjM4XDA1NFx1ZmYzOFwwNTVcdWZmMzhcMDU2IiArCi0gICAgIlx1ZmYzOFwwNTdcdWZmMzhcMDYwXHVmZjM4XDA2MVx1ZmYzOFwwNjJcdWZmMzhcMDYzXHVmZjM4XDA2NFx1ZmYzOCIgKwotICAgICJcMDY1XHVmZjM4XDA2Nlx1ZmYzOFwwNjdcdWZmMzhcMDcxXHVmZjM4XDA3M1x1ZmYzOFwwNzRcdWZmMzhcMDc1IiArCi0gICAgIlx1ZmYzOFwwNzdcdWZmMzhcMTAwXHVmZjM4XDEwMVx1ZmYzOFwxMDJcdWZmMzhcMTA3XHVmZjM4XDExMFx1ZmYzOCIgKwotICAgICJcMTExXHVmZjM4XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjZcMDA0XHVmZjI2XDAwNVx1ZmYyNlwwMDYiICsKLSAgICAiXHVmZjI2XDAwN1x1ZmYyNlwwMTBcdWZmMjZcMDExXHVmZjI2XDAxMlx1ZmYyNlwwMTNcdWZmMjZcMDE0XHVmZjI2IiArCi0gICAgIlwwMTVcdWZmMjZcMDE2XHVmZjI2XDAxN1x1ZmYyNlwwMjBcdWZmMjZcMDIxXHVmZjI2XDAyMlx1ZmYyNlwwMjMiICsKLSAgICAiXHVmZjI2XDAyNFx1ZmYyNlwwMjVcdWZmMjZcMDMxXHVmZjI2XDAzMlx1ZmYyNlwwMzVcdWZmMjZcMDUzXHVmZjI2IiArCi0gICAgIlwwNTRcdWZmMjZcMDU1XHVmZjI2XDA1Nlx1ZmYyNlwwNTdcdWZmMjZcMDYwXHVmZjI2XDA2MVx1ZmYyNlwwNjIiICsKLSAgICAiXHVmZjI2XDA2M1x1ZmYyNlwwNjRcdWZmMjZcMDY1XHVmZjI2XDA2Nlx1ZmYyNlwwNjdcdWZmMjZcMDcxXHVmZjI2IiArCi0gICAgIlwwNzNcdWZmMjZcMDc0XHVmZjI2XDA3NVx1ZmYyNlwwNzdcdWZmMjZcMTAwXHVmZjI2XDEwMVx1ZmYyNlwxMDIiICsKLSAgICAiXHVmZjI2XDEwN1x1ZmYyNlwxMTBcdWZmMjZcMTExXHVmZjI2XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjkiICsKLSAgICAiXDAwNFx1ZmYyOVwwMDVcdWZmMjlcMDA2XHVmZjI5XDAwN1x1ZmYyOVwwMTBcdWZmMjlcMDExXHVmZjI5XDAxMiIgKwotICAgICJcdWZmMjlcMDEzXHVmZjI5XDAxNFx1ZmYyOVwwMTVcdWZmMjlcMDE2XHVmZjI5XDAxN1x1ZmYyOVwwMjBcdWZmMjkiICsKLSAgICAiXDAyMVx1ZmYyOVwwMjJcdWZmMjlcMDIzXHVmZjI5XDAyNFx1ZmYyOVwwMjVcdWZmMjlcMDMxXHVmZjI5XDAzMiIgKwotICAgICJcdWZmMjlcMDM1XHVmZjI5XDA1M1x1ZmYyOVwwNTRcdWZmMjlcMDU1XHVmZjI5XDA1Nlx1ZmYyOVwwNTdcdWZmMjkiICsKLSAgICAiXDA2MFx1ZmYyOVwwNjFcdWZmMjlcMDYyXHVmZjI5XDA2M1x1ZmYyOVwwNjRcdWZmMjlcMDY1XHVmZjI5XDA2NiIgKwotICAgICJcdWZmMjlcMDY3XHVmZjI5XDA3MVx1ZmYyOVwwNzNcdWZmMjlcMDc0XHVmZjI5XDA3NVx1ZmYyOVwwNzdcdWZmMjkiICsKLSAgICAiXDEwMFx1ZmYyOVwxMDFcdWZmMjlcMTAyXHVmZjI5XDEwN1x1ZmYyOVwxMTBcdWZmMjlcMTExXHVmZjI5XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZjQ2XDAwNFx1ZmY0NlwwMDVcdWZmNDZcMDA2XHVmZjQ2XDAwN1x1ZmY0NiIgKwotICAgICJcMDEwXHVmZjQ2XDAxMVx1ZmY0NlwwMTJcdWZmNDZcMDEzXHVmZjQ2XDAxNFx1ZmY0NlwwMTVcdWZmNDZcMDE2IiArCi0gICAgIlx1ZmY0NlwwMTdcdWZmNDZcMDIwXHVmZjQ2XDAyMVx1ZmY0NlwwMjJcdWZmNDZcMDIzXHVmZjQ2XDAyNFx1ZmY0NiIgKwotICAgICJcMDI1XHVmZjQ2XDAzMVx1ZmY0NlwwMzJcdWZmNDZcMDM1XHVmZjQ2XDA1M1x1ZmY0NlwwNTRcdWZmNDZcMDU1IiArCi0gICAgIlx1ZmY0NlwwNTZcdWZmNDZcMDU3XHVmZjQ2XDA2MFx1ZmY0NlwwNjFcdWZmNDZcMDYyXHVmZjQ2XDA2M1x1ZmY0NiIgKwotICAgICJcMDY0XHVmZjQ2XDA2NVx1ZmY0NlwwNjZcdWZmNDZcMDY3XHVmZjQ2XDA3MVx1ZmY0NlwwNzNcdWZmNDZcMDc0IiArCi0gICAgIlx1ZmY0NlwwNzVcdWZmNDZcMDc3XHVmZjQ2XDEwMFx1ZmY0NlwxMDFcdWZmNDZcMTAyXHVmZjQ2XDEwN1x1ZmY0NiIgKwotICAgICJcMTEwXHVmZjQ2XDExMVx1ZmY0NlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjMxXDAwNFx1ZmYzMVwwMDUiICsKLSAgICAiXHVmZjMxXDAwNlx1ZmYzMVwwMDdcdWZmMzFcMDEwXHVmZjMxXDAxMVx1ZmYzMVwwMTJcdWZmMzFcMDEzXHVmZjMxIiArCi0gICAgIlwwMTRcdWZmMzFcMDE1XHVmZjMxXDAxNlx1ZmYzMVwwMTdcdWZmMzFcMDIwXHVmZjMxXDAyMVx1ZmYzMVwwMjIiICsKLSAgICAiXHVmZjMxXDAyM1x1ZmYzMVwwMjRcdWZmMzFcMDI1XHVmZjMxXDAzMVx1ZmYzMVwwMzJcdWZmMzFcMDM1XHVmZjMxIiArCi0gICAgIlwwNTNcdWZmMzFcMDU0XHVmZjMxXDA1NVx1ZmYzMVwwNTZcdWZmMzFcMDU3XHVmZjMxXDA2MFx1ZmYzMVwwNjEiICsKLSAgICAiXHVmZjMxXDA2Mlx1ZmYzMVwwNjNcdWZmMzFcMDY0XHVmZjMxXDA2NVx1ZmYzMVwwNjZcdWZmMzFcMDY3XHVmZjMxIiArCi0gICAgIlwwNzFcdWZmMzFcMDczXHVmZjMxXDA3NFx1ZmYzMVwwNzVcdWZmMzFcMDc3XHVmZjMxXDEwMFx1ZmYzMVwxMDEiICsKLSAgICAiXHVmZjMxXDEwMlx1ZmYzMVwxMDdcdWZmMzFcMTEwXHVmZjMxXDExMVx1ZmYzMVwwMDFcMDAyXDAwMFwxMzYiICsKLSAgICAiXDAwMlx1ZmYxZlwwMDRcdWZmMWZcMDA1XHVmZjFmXDAwNlx1ZmYxZlwwMDdcdWZmMWZcMDEwXHVmZjFmXDAxMSIgKwotICAgICJcdWZmMWZcMDEyXHVmZjFmXDAxM1x1ZmYxZlwwMTRcdWZmMWZcMDE1XHVmZjFmXDAxNlx1ZmYxZlwwMTdcdWZmMWYiICsKLSAgICAiXDAyMFx1ZmYxZlwwMjFcdWZmMWZcMDIyXHVmZjFmXDAyM1x1ZmYxZlwwMjRcdWZmMWZcMDI1XHVmZjFmXDAzMSIgKwotICAgICJcdWZmMWZcMDMyXHVmZjFmXDAzNVx1ZmYxZlwwNTNcdWZmMWZcMDU0XHVmZjFmXDA1NVx1ZmYxZlwwNTZcdWZmMWYiICsKLSAgICAiXDA1N1x1ZmYxZlwwNjBcdWZmMWZcMDYxXHVmZjFmXDA2Mlx1ZmYxZlwwNjNcdWZmMWZcMDY0XHVmZjFmXDA2NSIgKwotICAgICJcdWZmMWZcMDY2XHVmZjFmXDA2N1x1ZmYxZlwwNzFcdWZmMWZcMDczXHVmZjFmXDA3NFx1ZmYxZlwwNzVcdWZmMWYiICsKLSAgICAiXDA3N1x1ZmYxZlwxMDBcdWZmMWZcMTAxXHVmZjFmXDEwMlx1ZmYxZlwxMDdcdWZmMWZcMTEwXHVmZjFmXDExMSIgKwotICAgICJcdWZmMWZcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYzNVwwMDRcdWZmMzVcMDA1XHVmZjM1XDAwNlx1ZmYzNSIgKwotICAgICJcMDA3XHVmZjM1XDAxMFx1ZmYzNVwwMTFcdWZmMzVcMDEyXHVmZjM1XDAxM1x1ZmYzNVwwMTRcdWZmMzVcMDE1IiArCi0gICAgIlx1ZmYzNVwwMTZcdWZmMzVcMDE3XHVmZjM1XDAyMFx1ZmYzNVwwMjFcdWZmMzVcMDIyXHVmZjM1XDAyM1x1ZmYzNSIgKwotICAgICJcMDI0XHVmZjM1XDAyNVx1ZmYzNVwwMzFcdWZmMzVcMDMyXHVmZjM1XDAzNVx1ZmYzNVwwNTNcdWZmMzVcMDU0IiArCi0gICAgIlx1ZmYzNVwwNTVcdWZmMzVcMDU2XHVmZjM1XDA1N1x1ZmYzNVwwNjBcdWZmMzVcMDYxXHVmZjM1XDA2Mlx1ZmYzNSIgKwotICAgICJcMDYzXHVmZjM1XDA2NFx1ZmYzNVwwNjVcdWZmMzVcMDY2XHVmZjM1XDA2N1x1ZmYzNVwwNzFcdWZmMzVcMDczIiArCi0gICAgIlx1ZmYzNVwwNzRcdWZmMzVcMDc1XHVmZjM1XDA3N1x1ZmYzNVwxMDBcdWZmMzVcMTAxXHVmZjM1XDEwMlx1ZmYzNSIgKwotICAgICJcMTA3XHVmZjM1XDExMFx1ZmYzNVwxMTFcdWZmMzVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyN1wwMDQiICsKLSAgICAiXHVmZjI3XDAwNVx1ZmYyN1wwMDZcdWZmMjdcMDA3XHVmZjI3XDAxMFx1ZmYyN1wwMTFcdWZmMjdcMDEyXHVmZjI3IiArCi0gICAgIlwwMTNcdWZmMjdcMDE0XHVmZjI3XDAxNVx1ZmYyN1wwMTZcdWZmMjdcMDE3XHVmZjI3XDAyMFx1ZmYyN1wwMjEiICsKLSAgICAiXHVmZjI3XDAyMlx1ZmYyN1wwMjNcdWZmMjdcMDI0XHVmZjI3XDAyNVx1ZmYyN1wwMzFcdWZmMjdcMDMyXHVmZjI3IiArCi0gICAgIlwwMzVcdWZmMjdcMDUzXHVmZjI3XDA1NFx1ZmYyN1wwNTVcdWZmMjdcMDU2XHVmZjI3XDA1N1x1ZmYyN1wwNjAiICsKLSAgICAiXHVmZjI3XDA2MVx1ZmYyN1wwNjJcdWZmMjdcMDYzXHVmZjI3XDA2NFx1ZmYyN1wwNjVcdWZmMjdcMDY2XHVmZjI3IiArCi0gICAgIlwwNjdcdWZmMjdcMDcxXHVmZjI3XDA3M1x1ZmYyN1wwNzRcdWZmMjdcMDc1XHVmZjI3XDA3N1x1ZmYyN1wxMDAiICsKLSAgICAiXHVmZjI3XDEwMVx1ZmYyN1wxMDJcdWZmMjdcMTA3XHVmZjI3XDExMFx1ZmYyN1wxMTFcdWZmMjdcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNlwwMDJcdWZmMTRcMDA0XHVmZjE0XDAwNVx1ZmYxNFwwMDZcdWZmMTRcMDA3XHVmZjE0XDAxMCIgKwotICAgICJcdWZmMTRcMDExXHVmZjE0XDAxMlx1ZmYxNFwwMTNcdWZmMTRcMDE0XHVmZjE0XDAxNVx1ZmYxNFwwMTZcdWZmMTQiICsKLSAgICAiXDAxN1x1ZmYxNFwwMjBcdWZmMTRcMDIxXHVmZjE0XDAyMlx1ZmYxNFwwMjNcdWZmMTRcMDI0XHVmZjE0XDAyNSIgKwotICAgICJcdWZmMTRcMDMxXHVmZjE0XDAzMlx1ZmYxNFwwMzVcdWZmMTRcMDUzXHVmZjE0XDA1NFx1ZmYxNFwwNTVcdWZmMTQiICsKLSAgICAiXDA1Nlx1ZmYxNFwwNTdcdWZmMTRcMDYwXHVmZjE0XDA2MVx1ZmYxNFwwNjJcdWZmMTRcMDYzXHVmZjE0XDA2NCIgKwotICAgICJcdWZmMTRcMDY1XHVmZjE0XDA2Nlx1ZmYxNFwwNjdcdWZmMTRcMDcxXHVmZjE0XDA3M1x1ZmYxNFwwNzRcdWZmMTQiICsKLSAgICAiXDA3NVx1ZmYxNFwwNzdcdWZmMTRcMTAwXHVmZjE0XDEwMVx1ZmYxNFwxMDJcdWZmMTRcMTA3XHVmZjE0XDExMCIgKwotICAgICJcdWZmMTRcMTExXHVmZjE0XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmM2RcMDA0XHVmZjNkXDAwNVx1ZmYzZCIgKwotICAgICJcMDA2XHVmZjNkXDAwN1x1ZmYzZFwwMTBcdWZmM2RcMDExXHVmZjNkXDAxMlx1ZmYzZFwwMTNcdWZmM2RcMDE0IiArCi0gICAgIlx1ZmYzZFwwMTVcdWZmM2RcMDE2XHVmZjNkXDAxN1x1ZmYzZFwwMjBcdWZmM2RcMDIxXHVmZjNkXDAyMlx1ZmYzZCIgKwotICAgICJcMDIzXHVmZjNkXDAyNFx1ZmYzZFwwMjVcdWZmM2RcMDMxXHVmZjNkXDAzMlx1ZmYzZFwwMzVcdWZmM2RcMDUzIiArCi0gICAgIlx1ZmYzZFwwNTRcdWZmM2RcMDU1XHVmZjNkXDA1Nlx1ZmYzZFwwNTdcdWZmM2RcMDYwXHVmZjNkXDA2MVx1ZmYzZCIgKwotICAgICJcMDYyXHVmZjNkXDA2M1x1ZmYzZFwwNjRcdWZmM2RcMDY1XHVmZjNkXDA2Nlx1ZmYzZFwwNjdcdWZmM2RcMDcxIiArCi0gICAgIlx1ZmYzZFwwNzNcdWZmM2RcMDc0XHVmZjNkXDA3NVx1ZmYzZFwwNzdcdWZmM2RcMTAwXHVmZjNkXDEwMVx1ZmYzZCIgKwotICAgICJcMTAyXHVmZjNkXDEwN1x1ZmYzZFwxMTBcdWZmM2RcMTExXHVmZjNkXDAwMVwwMDJcMDAwXDEzNlwwMDIiICsKLSAgICAiXHVmZjNmXDAwNFx1ZmYzZlwwMDVcdWZmM2ZcMDA2XHVmZjNmXDAwN1x1ZmYzZlwwMTBcdWZmM2ZcMDExXHVmZjNmIiArCi0gICAgIlwwMTJcdWZmM2ZcMDEzXHVmZjNmXDAxNFx1ZmYzZlwwMTVcdWZmM2ZcMDE2XHVmZjNmXDAxN1x1ZmYzZlwwMjAiICsKLSAgICAiXHVmZjNmXDAyMVx1ZmYzZlwwMjJcdWZmM2ZcMDIzXHVmZjNmXDAyNFx1ZmYzZlwwMjVcdWZmM2ZcMDMxXHVmZjNmIiArCi0gICAgIlwwMzJcdWZmM2ZcMDM1XHVmZjNmXDA1M1x1ZmYzZlwwNTRcdWZmM2ZcMDU1XHVmZjNmXDA1Nlx1ZmYzZlwwNTciICsKLSAgICAiXHVmZjNmXDA2MFx1ZmYzZlwwNjFcdWZmM2ZcMDYyXHVmZjNmXDA2M1x1ZmYzZlwwNjRcdWZmM2ZcMDY1XHVmZjNmIiArCi0gICAgIlwwNjZcdWZmM2ZcMDY3XHVmZjNmXDA3MVx1ZmYzZlwwNzNcdWZmM2ZcMDc0XHVmZjNmXDA3NVx1ZmYzZlwwNzciICsKLSAgICAiXHVmZjNmXDEwMFx1ZmYzZlwxMDFcdWZmM2ZcMTAyXHVmZjNmXDEwN1x1ZmYzZlwxMTBcdWZmM2ZcMTExXHVmZjNmIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjIwXDAwNFx1ZmYyMFwwMDVcdWZmMjBcMDA2XHVmZjIwXDAwNyIgKwotICAgICJcdWZmMjBcMDEwXHVmZjIwXDAxMVx1ZmYyMFwwMTJcdWZmMjBcMDEzXHVmZjIwXDAxNFx1ZmYyMFwwMTVcdWZmMjAiICsKLSAgICAiXDAxNlx1ZmYyMFwwMTdcdWZmMjBcMDIwXHVmZjIwXDAyMVx1ZmYyMFwwMjJcdWZmMjBcMDIzXHVmZjIwXDAyNCIgKwotICAgICJcdWZmMjBcMDI1XHVmZjIwXDAzMVx1ZmYyMFwwMzJcdWZmMjBcMDM1XHVmZjIwXDA1M1x1ZmYyMFwwNTRcdWZmMjAiICsKLSAgICAiXDA1NVx1ZmYyMFwwNTZcdWZmMjBcMDU3XHVmZjIwXDA2MFx1ZmYyMFwwNjFcdWZmMjBcMDYyXHVmZjIwXDA2MyIgKwotICAgICJcdWZmMjBcMDY0XHVmZjIwXDA2NVx1ZmYyMFwwNjZcdWZmMjBcMDY3XHVmZjIwXDA3MVx1ZmYyMFwwNzNcdWZmMjAiICsKLSAgICAiXDA3NFx1ZmYyMFwwNzVcdWZmMjBcMDc3XHVmZjIwXDEwMFx1ZmYyMFwxMDFcdWZmMjBcMTAyXHVmZjIwXDEwNyIgKwotICAgICJcdWZmMjBcMTEwXHVmZjIwXDExMVx1ZmYyMFwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjE4XDAwNFx1ZmYxOCIgKwotICAgICJcMDA1XHVmZjE4XDAwNlx1ZmYxOFwwMDdcdWZmMThcMDEwXHVmZjE4XDAxMVx1ZmYxOFwwMTJcdWZmMThcMDEzIiArCi0gICAgIlx1ZmYxOFwwMTRcdWZmMThcMDE1XHVmZjE4XDAxNlx1ZmYxOFwwMTdcdWZmMThcMDIwXHVmZjE4XDAyMVx1ZmYxOCIgKwotICAgICJcMDIyXHVmZjE4XDAyM1x1ZmYxOFwwMjRcdWZmMThcMDI1XHVmZjE4XDAzMVx1ZmYxOFwwMzJcdWZmMThcMDM1IiArCi0gICAgIlx1ZmYxOFwwNTNcdWZmMThcMDU0XHVmZjE4XDA1NVx1ZmYxOFwwNTZcdWZmMThcMDU3XHVmZjE4XDA2MFx1ZmYxOCIgKwotICAgICJcMDYxXHVmZjE4XDA2Mlx1ZmYxOFwwNjNcdWZmMThcMDY0XHVmZjE4XDA2NVx1ZmYxOFwwNjZcdWZmMThcMDY3IiArCi0gICAgIlx1ZmYxOFwwNzFcdWZmMThcMDczXHVmZjE4XDA3NFx1ZmYxOFwwNzVcdWZmMThcMDc3XHVmZjE4XDEwMFx1ZmYxOCIgKwotICAgICJcMTAxXHVmZjE4XDEwMlx1ZmYxOFwxMDdcdWZmMThcMTEwXHVmZjE4XDExMVx1ZmYxOFwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYzN1wwMDRcdWZmMzdcMDA1XHVmZjM3XDAwNlx1ZmYzN1wwMDdcdWZmMzdcMDEwXHVmZjM3IiArCi0gICAgIlwwMTFcdWZmMzdcMDEyXHVmZjM3XDAxM1x1ZmYzN1wwMTRcdWZmMzdcMDE1XHVmZjM3XDAxNlx1ZmYzN1wwMTciICsKLSAgICAiXHVmZjM3XDAyMFx1ZmYzN1wwMjFcdWZmMzdcMDIyXHVmZjM3XDAyM1x1ZmYzN1wwMjRcdWZmMzdcMDI1XHVmZjM3IiArCi0gICAgIlwwMzFcdWZmMzdcMDMyXHVmZjM3XDAzNVx1ZmYzN1wwNTNcdWZmMzdcMDU0XHVmZjM3XDA1NVx1ZmYzN1wwNTYiICsKLSAgICAiXHVmZjM3XDA1N1x1ZmYzN1wwNjBcdWZmMzdcMDYxXHVmZjM3XDA2Mlx1ZmYzN1wwNjNcdWZmMzdcMDY0XHVmZjM3IiArCi0gICAgIlwwNjVcdWZmMzdcMDY2XHVmZjM3XDA2N1x1ZmYzN1wwNzFcdWZmMzdcMDczXHVmZjM3XDA3NFx1ZmYzN1wwNzUiICsKLSAgICAiXHVmZjM3XDA3N1x1ZmYzN1wxMDBcdWZmMzdcMTAxXHVmZjM3XDEwMlx1ZmYzN1wxMDdcdWZmMzdcMTEwXHVmZjM3IiArCi0gICAgIlwxMTFcdWZmMzdcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYzM1wwMDRcdWZmMzNcMDA1XHVmZjMzXDAwNiIgKwotICAgICJcdWZmMzNcMDA3XHVmZjMzXDAxMFx1ZmYzM1wwMTFcdWZmMzNcMDEyXHVmZjMzXDAxM1x1ZmYzM1wwMTRcdWZmMzMiICsKLSAgICAiXDAxNVx1ZmYzM1wwMTZcdWZmMzNcMDE3XHVmZjMzXDAyMFx1ZmYzM1wwMjFcdWZmMzNcMDIyXHVmZjMzXDAyMyIgKwotICAgICJcdWZmMzNcMDI0XHVmZjMzXDAyNVx1ZmYzM1wwMzFcdWZmMzNcMDMyXHVmZjMzXDAzNVx1ZmYzM1wwNTNcdWZmMzMiICsKLSAgICAiXDA1NFx1ZmYzM1wwNTVcdWZmMzNcMDU2XHVmZjMzXDA1N1x1ZmYzM1wwNjBcdWZmMzNcMDYxXHVmZjMzXDA2MiIgKwotICAgICJcdWZmMzNcMDYzXHVmZjMzXDA2NFx1ZmYzM1wwNjVcdWZmMzNcMDY2XHVmZjMzXDA2N1x1ZmYzM1wwNzFcdWZmMzMiICsKLSAgICAiXDA3M1x1ZmYzM1wwNzRcdWZmMzNcMDc1XHVmZjMzXDA3N1x1ZmYzM1wxMDBcdWZmMzNcMTAxXHVmZjMzXDEwMiIgKwotICAgICJcdWZmMzNcMTA3XHVmZjMzXDExMFx1ZmYzM1wxMTFcdWZmMzNcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmY0MyIgKwotICAgICJcMDA0XHVmZjQzXDAwNVx1ZmY0M1wwMDZcdWZmNDNcMDA3XHVmZjQzXDAxMFx1ZmY0M1wwMTFcdWZmNDNcMDEyIiArCi0gICAgIlx1ZmY0M1wwMTNcdWZmNDNcMDE0XHVmZjQzXDAxNVx1ZmY0M1wwMTZcdWZmNDNcMDE3XHVmZjQzXDAyMFx1ZmY0MyIgKwotICAgICJcMDIxXHVmZjQzXDAyMlx1ZmY0M1wwMjNcdWZmNDNcMDI0XHVmZjQzXDAyNVx1ZmY0M1wwMzFcdWZmNDNcMDMyIiArCi0gICAgIlx1ZmY0M1wwMzVcdWZmNDNcMDUzXHVmZjQzXDA1NFx1ZmY0M1wwNTVcdWZmNDNcMDU2XHVmZjQzXDA1N1x1ZmY0MyIgKwotICAgICJcMDYwXHVmZjQzXDA2MVx1ZmY0M1wwNjJcdWZmNDNcMDYzXHVmZjQzXDA2NFx1ZmY0M1wwNjVcdWZmNDNcMDY2IiArCi0gICAgIlx1ZmY0M1wwNjdcdWZmNDNcMDcxXHVmZjQzXDA3M1x1ZmY0M1wwNzRcdWZmNDNcMDc1XHVmZjQzXDA3N1x1ZmY0MyIgKwotICAgICJcMTAwXHVmZjQzXDEwMVx1ZmY0M1wxMDJcdWZmNDNcMTA3XHVmZjQzXDExMFx1ZmY0M1wxMTFcdWZmNDNcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNlwwMDJcdWZmMTFcMDA0XHVmZjExXDAwNVx1ZmYxMVwwMDZcdWZmMTFcMDA3XHVmZjExIiArCi0gICAgIlwwMTBcdWZmMTFcMDExXHVmZjExXDAxMlx1ZmYxMVwwMTNcdWZmMTFcMDE0XHVmZjExXDAxNVx1ZmYxMVwwMTYiICsKLSAgICAiXHVmZjExXDAxN1x1ZmYxMVwwMjBcdWZmMTFcMDIxXHVmZjExXDAyMlx1ZmYxMVwwMjNcdWZmMTFcMDI0XHVmZjExIiArCi0gICAgIlwwMjVcdWZmMTFcMDMxXHVmZjExXDAzMlx1ZmYxMVwwMzVcdWZmMTFcMDUzXHVmZjExXDA1NFx1ZmYxMVwwNTUiICsKLSAgICAiXHVmZjExXDA1Nlx1ZmYxMVwwNTdcdWZmMTFcMDYwXHVmZjExXDA2MVx1ZmYxMVwwNjJcdWZmMTFcMDYzXHVmZjExIiArCi0gICAgIlwwNjRcdWZmMTFcMDY1XHVmZjExXDA2Nlx1ZmYxMVwwNjdcdWZmMTFcMDcxXHVmZjExXDA3M1x1ZmYxMVwwNzQiICsKLSAgICAiXHVmZjExXDA3NVx1ZmYxMVwwNzdcdWZmMTFcMTAwXHVmZjExXDEwMVx1ZmYxMVwxMDJcdWZmMTFcMTA3XHVmZjExIiArCi0gICAgIlwxMTBcdWZmMTFcMTExXHVmZjExXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMWNcMDA0XHVmZjFjXDAwNSIgKwotICAgICJcdWZmMWNcMDA2XHVmZjFjXDAwN1x1ZmYxY1wwMTBcdWZmMWNcMDExXHVmZjFjXDAxMlx1ZmYxY1wwMTNcdWZmMWMiICsKLSAgICAiXDAxNFx1ZmYxY1wwMTVcdWZmMWNcMDE2XHVmZjFjXDAxN1x1ZmYxY1wwMjBcdWZmMWNcMDIxXHVmZjFjXDAyMiIgKwotICAgICJcdWZmMWNcMDIzXHVmZjFjXDAyNFx1ZmYxY1wwMjVcdWZmMWNcMDMxXHVmZjFjXDAzMlx1ZmYxY1wwMzVcdWZmMWMiICsKLSAgICAiXDA1M1x1ZmYxY1wwNTRcdWZmMWNcMDU1XHVmZjFjXDA1Nlx1ZmYxY1wwNTdcdWZmMWNcMDYwXHVmZjFjXDA2MSIgKwotICAgICJcdWZmMWNcMDYyXHVmZjFjXDA2M1x1ZmYxY1wwNjRcdWZmMWNcMDY1XHVmZjFjXDA2Nlx1ZmYxY1wwNjdcdWZmMWMiICsKLSAgICAiXDA3MVx1ZmYxY1wwNzNcdWZmMWNcMDc0XHVmZjFjXDA3NVx1ZmYxY1wwNzdcdWZmMWNcMTAwXHVmZjFjXDEwMSIgKwotICAgICJcdWZmMWNcMTAyXHVmZjFjXDEwN1x1ZmYxY1wxMTBcdWZmMWNcMTExXHVmZjFjXDAwMVwwMDJcMDAwXDEzMCIgKwotICAgICJcMDAyXHVmZjRlXDAwNFx1ZmY0ZVwwMDVcdWZmNGVcMDA3XHVmZjRlXDAxMFx1ZmY0ZVwwMTFcdWZmNGVcMDEyIiArCi0gICAgIlx1ZmY0ZVwwMTNcdWZmNGVcMDE0XHVmZjRlXDAxNVx1ZmY0ZVwwMTZcdWZmNGVcMDE3XHVmZjRlXDAyMFx1ZmY0ZSIgKwotICAgICJcMDIxXHVmZjRlXDAyMlx1ZmY0ZVwwMjNcdWZmNGVcMDI0XHVmZjRlXDAyNVx1ZmY0ZVwwMzJcdWZmNGVcMDUzIiArCi0gICAgIlx1ZmY0ZVwwNTRcdWZmNGVcMDU1XHVmZjRlXDA1Nlx1ZmY0ZVwwNTdcdWZmNGVcMDYwXHVmZjRlXDA2MVx1ZmY0ZSIgKwotICAgICJcMDYyXHVmZjRlXDA2M1x1ZmY0ZVwwNjRcdWZmNGVcMDY1XHVmZjRlXDA2Nlx1ZmY0ZVwwNjdcdWZmNGVcMDcxIiArCi0gICAgIlx1ZmY0ZVwwNzNcdWZmNGVcMDc0XHVmZjRlXDA3NVx1ZmY0ZVwwNzdcdWZmNGVcMTAwXHVmZjRlXDEwMVx1ZmY0ZSIgKwotICAgICJcMTAyXHVmZjRlXDEwN1x1ZmY0ZVwxMTBcdWZmNGVcMTExXHVmZjRlXDAwMVwwMDJcMDAwXDIxNlwwMDYiICsKLSAgICAiXDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3NyIgKwotICAgICJcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxIiArCi0gICAgIlwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzQiICsKLSAgICAiXDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NiIgKwotICAgICJcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExIiArCi0gICAgIlwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzMiICsKLSAgICAiXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDExNVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NiIgKwotICAgICJcMTAyXDIwMlwxMDNcMTY0XDEwNFwwNTNcMTA1XDE1NVwxMDZcMDYwXDEwN1wxMjJcMTEwIiArCi0gICAgIlwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTYiICsKLSAgICAiXDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNSIgKwotICAgICJcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMDA2IiArCi0gICAgIlwwMzJcdWZmZjdcMTAwXHVmZmY3XDAwMVwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwIiArCi0gICAgIlwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTAiICsKLSAgICAiXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NSIgKwotICAgICJcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxIiArCi0gICAgIlwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzIiICsKLSAgICAiXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NiIgKwotICAgICJcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3IiArCi0gICAgIlwzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTIiICsKLSAgICAiXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNCIgKwotICAgICJcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmY0Y1wwMDRcdWZmNGNcMDA1XHVmZjRjIiArCi0gICAgIlwwMDdcdWZmNGNcMDEwXHVmZjRjXDAxMVx1ZmY0Y1wwMTJcdWZmNGNcMDEzXHVmZjRjXDAxNFx1ZmY0Y1wwMTUiICsKLSAgICAiXHVmZjRjXDAxNlx1ZmY0Y1wwMTdcdWZmNGNcMDIwXHVmZjRjXDAyMVx1ZmY0Y1wwMjJcdWZmNGNcMDIzXHVmZjRjIiArCi0gICAgIlwwMjRcdWZmNGNcMDI1XHVmZjRjXDAzMlx1ZmY0Y1wwMzVcdWZmNGNcMDUzXHVmZjRjXDA1NFx1ZmY0Y1wwNTUiICsKLSAgICAiXHVmZjRjXDA1Nlx1ZmY0Y1wwNTdcdWZmNGNcMDYwXHVmZjRjXDA2MVx1ZmY0Y1wwNjJcdWZmNGNcMDYzXHVmZjRjIiArCi0gICAgIlwwNjRcdWZmNGNcMDY1XHVmZjRjXDA2Nlx1ZmY0Y1wwNjdcdWZmNGNcMDcxXHVmZjRjXDA3M1x1ZmY0Y1wwNzQiICsKLSAgICAiXHVmZjRjXDA3NVx1ZmY0Y1wwNzdcdWZmNGNcMTAwXHVmZjRjXDEwMVx1ZmY0Y1wxMDJcdWZmNGNcMTA3XHVmZjRjIiArCi0gICAgIlwxMTBcdWZmNGNcMTExXHVmZjRjXDAwMVwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwIiArCi0gICAgIlwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTAiICsKLSAgICAiXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NSIgKwotICAgICJcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxIiArCi0gICAgIlwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzIiICsKLSAgICAiXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NiIgKwotICAgICJcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3IiArCi0gICAgIlwzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTIiICsKLSAgICAiXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNCIgKwotICAgICJcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMDA2XDAzMlwzMzNcMTAxXDMzNFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA0XDA3N1wzMzFcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTEiICsKLSAgICAiXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMCIgKwotICAgICJcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzIiArCi0gICAgIlwwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzUiICsKLSAgICAiXDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MCIgKwotICAgICJcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxIiArCi0gICAgIlwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzUiICsKLSAgICAiXDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDE2NCIgKwotICAgICJcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyIiArCi0gICAgIlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDciICsKLSAgICAiXDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyNyIgKwotICAgICJcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMDZcMDMyXHVmZmY0XDEwMVx1ZmZmNCIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAzM1wzMzZcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwIiArCi0gICAgIlwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjUiICsKLSAgICAiXDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MiIgKwotICAgICJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3IiArCi0gICAgIlwwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTciICsKLSAgICAiXDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMSIgKwotICAgICJcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0IiArCi0gICAgIlwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDIiICsKLSAgICAiXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMSIgKwotICAgICJcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzIiArCi0gICAgIlwxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjYiICsKLSAgICAiXDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmY2IiArCi0gICAgIlwwMDVcdWZmZjZcMDA3XHVmZmY2XDAzMlx1ZmZmNlwxMDBcdWZmZjZcMTAxXHVmZmY2XDEwN1x1ZmZmNlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MSIgKwotICAgICJcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxIiArCi0gICAgIlwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTciICsKLSAgICAiXDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NiIgKwotICAgICJcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzIiArCi0gICAgIlwwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDMiICsKLSAgICAiXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NSIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwIiArCi0gICAgIlwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDc3XDM0MFwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMSIgKwotICAgICJcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwIiArCi0gICAgIlwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDMiICsKLSAgICAiXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NSIgKwotICAgICJcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwIiArCi0gICAgIlwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDEiICsKLSAgICAiXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NSIgKwotICAgICJcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0IiArCi0gICAgIlwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTIiICsKLSAgICAiXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0NyIgKwotICAgICJcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3IiArCi0gICAgIlwxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDAwNlwwMzJcdWZmZjNcMTAxXHVmZmYzIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmIwXDAzNlx1ZmZiMFwwMzdcdWZmYjBcMDQwXHVmZmIwXDA0MSIgKwotICAgICJcdWZmYjBcMDQyXHVmZmIwXDA0M1x1ZmZiMFwwNDRcdWZmYjBcMDQ1XHVmZmIwXDA0Nlx1ZmZiMFwwNDdcdWZmYjAiICsKLSAgICAiXDA1MFx1ZmZiMFwwNTFcdWZmYjBcMDUyXHVmZmIwXDA1M1x1ZmZiMFwwNTRcdWZmYjBcMDU1XHVmZmIwXDA1NiIgKwotICAgICJcdWZmYjBcMDU3XHVmZmIwXDA2MFx1ZmZiMFwwNjFcdWZmYjBcMDYyXHVmZmIwXDA2M1x1ZmZiMFwwNjRcdWZmYjAiICsKLSAgICAiXDA2NVx1ZmZiMFwwNjZcdWZmYjBcMDY3XHVmZmIwXDA3MFx1ZmZiMFwwNzFcdWZmYjBcMDcyXHVmZmIwXDA3MyIgKwotICAgICJcdWZmYjBcMDc0XHVmZmIwXDA3NVx1ZmZiMFwwNzZcdWZmYjBcMDc3XHVmZmIwXDEwMFx1ZmZiMFwxMDFcdWZmYjAiICsKLSAgICAiXDEwMlx1ZmZiMFwxMDNcdWZmYjBcMTA0XHVmZmIwXDEwNVx1ZmZiMFwxMDZcdWZmYjBcMTA3XHVmZmIwXDExMCIgKwotICAgICJcdWZmYjBcMTExXHVmZmIwXDExMlx1ZmZiMFwxMTNcdWZmYjBcMTE0XHVmZmIwXDExNVx1ZmZiMFwxMTZcdWZmYjAiICsKLSAgICAiXDExN1x1ZmZiMFwxMjBcdWZmYjBcMTIxXHVmZmIwXDEyMlx1ZmZiMFwxMjNcdWZmYjBcMTI0XHVmZmIwXDEzMSIgKwotICAgICJcdWZmYjBcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTYiICsKLSAgICAiXDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNiIgKwotICAgICJcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyIiArCi0gICAgIlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTMiICsKLSAgICAiXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMCIgKwotICAgICJcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwIiArCi0gICAgIlwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwxMTUiICsKLSAgICAiXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDE2NFwxMDRcMDUzXDEwNSIgKwotICAgICJcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0IiArCi0gICAgIlwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjIiICsKLSAgICAiXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NCIgKwotICAgICJcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMDZcMDA3XDM0NVwwMzJcMjI0XDAwMVwwMDJcMDAwIiArCi0gICAgIlwwMDRcMTA2XDM0NlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDQiICsKLSAgICAiXDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNCIgKwotICAgICJcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2IiArCi0gICAgIlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTIiICsKLSAgICAiXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxNyIgKwotICAgICJcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3IiArCi0gICAgIlwwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDMiICsKLSAgICAiXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0XDEwNCIgKwotICAgICJcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxIiArCi0gICAgIlwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjEiICsKLSAgICAiXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExMyIgKwotICAgICJcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDAwNFwxMDdcMzUwXDAwMVwwMDJcMDAwIiArCi0gICAgIlwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTAiICsKLSAgICAiXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MCIgKwotICAgICJcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0IiArCi0gICAgIlwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTUiICsKLSAgICAiXDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NiIgKwotICAgICJcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyIiArCi0gICAgIlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDExNVwwNzdcMTUwXDEwMFwxMjEiICsKLSAgICAiXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0XDEwNFwwNTNcMTA1XDE1NVwxMDZcMDYwXDEwNyIgKwotICAgICJcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxIiArCi0gICAgIlwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjQiICsKLSAgICAiXDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMiIgKwotICAgICJcMDAwXDAyMFwwMDJcdWZmZjJcMDA1XHVmZmYyXDAwN1x1ZmZmMlwwMzJcdWZmZjJcMTAwXHVmZmYyXDEwMSIgKwotICAgICJcdWZmZjJcMTA3XHVmZmYyXDAwMVwwMDJcMDAwXDE2NFwwMTJcdWZmYWZcMDM2XHVmZmFmXDAzN1x1ZmZhZiIgKwotICAgICJcMDQwXHVmZmFmXDA0MVx1ZmZhZlwwNDJcdWZmYWZcMDQzXHVmZmFmXDA0NFx1ZmZhZlwwNDVcdWZmYWZcMDQ2IiArCi0gICAgIlx1ZmZhZlwwNDdcdWZmYWZcMDUwXHVmZmFmXDA1MVx1ZmZhZlwwNTJcdWZmYWZcMDUzXHVmZmFmXDA1NFx1ZmZhZiIgKwotICAgICJcMDU1XHVmZmFmXDA1Nlx1ZmZhZlwwNTdcdWZmYWZcMDYwXHVmZmFmXDA2MVx1ZmZhZlwwNjJcdWZmYWZcMDYzIiArCi0gICAgIlx1ZmZhZlwwNjRcdWZmYWZcMDY1XHVmZmFmXDA2Nlx1ZmZhZlwwNjdcdWZmYWZcMDcwXHVmZmFmXDA3MVx1ZmZhZiIgKwotICAgICJcMDcyXHVmZmFmXDA3M1x1ZmZhZlwwNzRcdWZmYWZcMDc1XHVmZmFmXDA3Nlx1ZmZhZlwwNzdcdWZmYWZcMTAwIiArCi0gICAgIlx1ZmZhZlwxMDFcdWZmYWZcMTAyXHVmZmFmXDEwM1x1ZmZhZlwxMDRcdWZmYWZcMTA1XHVmZmFmXDEwNlx1ZmZhZiIgKwotICAgICJcMTA3XHVmZmFmXDExMFx1ZmZhZlwxMTFcdWZmYWZcMTEyXHVmZmFmXDExM1x1ZmZhZlwxMTRcdWZmYWZcMTE1IiArCi0gICAgIlx1ZmZhZlwxMTZcdWZmYWZcMTE3XHVmZmFmXDEyMFx1ZmZhZlwxMjFcdWZmYWZcMTIyXHVmZmFmXDEyM1x1ZmZhZiIgKwotICAgICJcMTI0XHVmZmFmXDEzMVx1ZmZhZlwwMDFcMDAyXDAwMFwxNjZcMDA3XDM1NVwwMTJcMzU0XDAzNiIgKwotICAgICJcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExIiArCi0gICAgIlwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTMiICsKLSAgICAiXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MCIgKwotICAgICJcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwIiArCi0gICAgIlwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDUiICsKLSAgICAiXDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNSIgKwotICAgICJcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0IiArCi0gICAgIlwxMTRcMzIwXDExNVwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjIiICsKLSAgICAiXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjYwIiArCi0gICAgIlwwMzJcdWZmNjBcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2NFwwMDRcdWZmNjRcMDA1XHVmZjY0XDAwNyIgKwotICAgICJcdWZmNjRcMDEwXHVmZjY0XDAxMVx1ZmY2NFwwMTJcdWZmNjRcMDEzXHVmZjY0XDAxNFx1ZmY2NFwwMTVcdWZmNjQiICsKLSAgICAiXDAxNlx1ZmY2NFwwMTdcdWZmNjRcMDIwXHVmZjY0XDAyMVx1ZmY2NFwwMjJcdWZmNjRcMDIzXHVmZjY0XDAyNCIgKwotICAgICJcdWZmNjRcMDI1XHVmZjY0XDAzMlx1ZmY2NFwwMzVcdWZmNjRcMDUzXHVmZjY0XDA1NFx1ZmY2NFwwNTVcdWZmNjQiICsKLSAgICAiXDA1Nlx1ZmY2NFwwNTdcdWZmNjRcMDYwXHVmZjY0XDA2MVx1ZmY2NFwwNjJcdWZmNjRcMDYzXHVmZjY0XDA2NCIgKwotICAgICJcdWZmNjRcMDY1XHVmZjY0XDA2Nlx1ZmY2NFwwNjdcdWZmNjRcMDcxXHVmZjY0XDA3M1x1ZmY2NFwwNzRcdWZmNjQiICsKLSAgICAiXDA3NVx1ZmY2NFwxMDBcdWZmNjRcMTAxXHVmZjY0XDEwMlx1ZmY2NFwxMDdcdWZmNjRcMTEwXHVmZjY0XDExMSIgKwotICAgICJcdWZmNjRcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY2MVwwMzJcdWZmNjFcMDAxXDAwMlwwMDBcMDA2IiArCi0gICAgIlwwMDdcMzYyXDAzMlwzNjFcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY1NVwwMzJcdWZmNTVcMDAxIiArCi0gICAgIlwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjEiICsKLSAgICAiXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MSIgKwotICAgICJcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3IiArCi0gICAgIlwwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjYiICsKLSAgICAiXDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzMyIgKwotICAgICJcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzIiArCi0gICAgIlwyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTUiICsKLSAgICAiXDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMCIgKwotICAgICJcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTMwXDAwMlx1ZmY2M1wwMDRcdWZmNjNcMDA1XHVmZjYzXDAwN1x1ZmY2M1wwMTBcdWZmNjNcMDExIiArCi0gICAgIlx1ZmY2M1wwMTJcdWZmNjNcMDEzXHVmZjYzXDAxNFx1ZmY2M1wwMTVcdWZmNjNcMDE2XHVmZjYzXDAxN1x1ZmY2MyIgKwotICAgICJcMDIwXHVmZjYzXDAyMVx1ZmY2M1wwMjJcdWZmNjNcMDIzXHVmZjYzXDAyNFx1ZmY2M1wwMjVcdWZmNjNcMDMyIiArCi0gICAgIlx1ZmY2M1wwMzVcdWZmNjNcMDUzXHVmZjYzXDA1NFx1ZmY2M1wwNTVcdWZmNjNcMDU2XHVmZjYzXDA1N1x1ZmY2MyIgKwotICAgICJcMDYwXHVmZjYzXDA2MVx1ZmY2M1wwNjJcdWZmNjNcMDYzXHVmZjYzXDA2NFx1ZmY2M1wwNjVcdWZmNjNcMDY2IiArCi0gICAgIlx1ZmY2M1wwNjdcdWZmNjNcMDcxXHVmZjYzXDA3M1x1ZmY2M1wwNzRcdWZmNjNcMDc1XHVmZjYzXDEwMFx1ZmY2MyIgKwotICAgICJcMTAxXHVmZjYzXDEwMlx1ZmY2M1wxMDdcdWZmNjNcMTEwXHVmZjYzXDExMVx1ZmY2M1wwMDFcMDAyXDAwMCIgKwotICAgICJcMDA0XDAwN1wzNjVcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY1M1wwMzVcdWZmNTNcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzMFwwMDJcdWZmNjJcMDA0XHVmZjYyXDAwNVx1ZmY2MlwwMDdcdWZmNjJcMDEwXHVmZjYyXDAxMSIgKwotICAgICJcdWZmNjJcMDEyXHVmZjYyXDAxM1x1ZmY2MlwwMTRcdWZmNjJcMDE1XHVmZjYyXDAxNlx1ZmY2MlwwMTdcdWZmNjIiICsKLSAgICAiXDAyMFx1ZmY2MlwwMjFcdWZmNjJcMDIyXHVmZjYyXDAyM1x1ZmY2MlwwMjRcdWZmNjJcMDI1XHVmZjYyXDAzMiIgKwotICAgICJcdWZmNjJcMDM1XHVmZjYyXDA1M1x1ZmY2MlwwNTRcdWZmNjJcMDU1XHVmZjYyXDA1Nlx1ZmY2MlwwNTdcdWZmNjIiICsKLSAgICAiXDA2MFx1ZmY2MlwwNjFcdWZmNjJcMDYyXHVmZjYyXDA2M1x1ZmY2MlwwNjRcdWZmNjJcMDY1XHVmZjYyXDA2NiIgKwotICAgICJcdWZmNjJcMDY3XHVmZjYyXDA3MVx1ZmY2MlwwNzNcdWZmNjJcMDc0XHVmZjYyXDA3NVx1ZmY2MlwxMDBcdWZmNjIiICsKLSAgICAiXDEwMVx1ZmY2MlwxMDJcdWZmNjJcMTA3XHVmZjYyXDExMFx1ZmY2MlwxMTFcdWZmNjJcMDAxXDAwMlwwMDAiICsKLSAgICAiXDE2NlwwMDdcMzcxXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MSIgKwotICAgICJcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxIiArCi0gICAgIlwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTciICsKLSAgICAiXDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NiIgKwotICAgICJcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzIiArCi0gICAgIlwwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDMiICsKLSAgICAiXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NSIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwIiArCi0gICAgIlwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzBcMTc0XDEzMVwyNzAiICsKLSAgICAiXDAwMVwwMDJcMDAwXDAwNFwwMDdcMzczXDAwMVwwMDJcMDAwXDAwNFwwMDdcMzcyXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzBcMDAyXHVmZjY3XDAwNFx1ZmY2N1wwMDVcdWZmNjdcMDA3XHVmZjY3XDAxMFx1ZmY2NyIgKwotICAgICJcMDExXHVmZjY3XDAxMlx1ZmY2N1wwMTNcdWZmNjdcMDE0XHVmZjY3XDAxNVx1ZmY2N1wwMTZcdWZmNjdcMDE3IiArCi0gICAgIlx1ZmY2N1wwMjBcdWZmNjdcMDIxXHVmZjY3XDAyMlx1ZmY2N1wwMjNcdWZmNjdcMDI0XHVmZjY3XDAyNVx1ZmY2NyIgKwotICAgICJcMDMyXHVmZjY3XDAzNVx1ZmY2N1wwNTNcdWZmNjdcMDU0XHVmZjY3XDA1NVx1ZmY2N1wwNTZcdWZmNjdcMDU3IiArCi0gICAgIlx1ZmY2N1wwNjBcdWZmNjdcMDYxXHVmZjY3XDA2Mlx1ZmY2N1wwNjNcdWZmNjdcMDY0XHVmZjY3XDA2NVx1ZmY2NyIgKwotICAgICJcMDY2XHVmZjY3XDA2N1x1ZmY2N1wwNzFcdWZmNjdcMDczXHVmZjY3XDA3NFx1ZmY2N1wwNzVcdWZmNjdcMTAwIiArCi0gICAgIlx1ZmY2N1wxMDFcdWZmNjdcMTAyXHVmZjY3XDEwN1x1ZmY2N1wxMTBcdWZmNjdcMTExXHVmZjY3XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzBcMDAyXHVmZjY1XDAwNFx1ZmY2NVwwMDVcdWZmNjVcMDA3XHVmZjY1XDAxMFx1ZmY2NVwwMTEiICsKLSAgICAiXHVmZjY1XDAxMlx1ZmY2NVwwMTNcdWZmNjVcMDE0XHVmZjY1XDAxNVx1ZmY2NVwwMTZcdWZmNjVcMDE3XHVmZjY1IiArCi0gICAgIlwwMjBcdWZmNjVcMDIxXHVmZjY1XDAyMlx1ZmY2NVwwMjNcdWZmNjVcMDI0XHVmZjY1XDAyNVx1ZmY2NVwwMzIiICsKLSAgICAiXHVmZjY1XDAzNVx1ZmY2NVwwNTNcdWZmNjVcMDU0XHVmZjY1XDA1NVx1ZmY2NVwwNTZcdWZmNjVcMDU3XHVmZjY1IiArCi0gICAgIlwwNjBcdWZmNjVcMDYxXHVmZjY1XDA2Mlx1ZmY2NVwwNjNcdWZmNjVcMDY0XHVmZjY1XDA2NVx1ZmY2NVwwNjYiICsKLSAgICAiXHVmZjY1XDA2N1x1ZmY2NVwwNzFcdWZmNjVcMDczXHVmZjY1XDA3NFx1ZmY2NVwwNzVcdWZmNjVcMTAwXHVmZjY1IiArCi0gICAgIlwxMDFcdWZmNjVcMTAyXHVmZjY1XDEwN1x1ZmY2NVwxMTBcdWZmNjVcMTExXHVmZjY1XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzBcMDAyXHVmZjY2XDAwNFx1ZmY2NlwwMDVcdWZmNjZcMDA3XHVmZjY2XDAxMFx1ZmY2NlwwMTFcdWZmNjYiICsKLSAgICAiXDAxMlx1ZmY2NlwwMTNcdWZmNjZcMDE0XHVmZjY2XDAxNVx1ZmY2NlwwMTZcdWZmNjZcMDE3XHVmZjY2XDAyMCIgKwotICAgICJcdWZmNjZcMDIxXHVmZjY2XDAyMlx1ZmY2NlwwMjNcdWZmNjZcMDI0XHVmZjY2XDAyNVx1ZmY2NlwwMzJcdWZmNjYiICsKLSAgICAiXDAzNVx1ZmY2NlwwNTNcdWZmNjZcMDU0XHVmZjY2XDA1NVx1ZmY2NlwwNTZcdWZmNjZcMDU3XHVmZjY2XDA2MCIgKwotICAgICJcdWZmNjZcMDYxXHVmZjY2XDA2Mlx1ZmY2NlwwNjNcdWZmNjZcMDY0XHVmZjY2XDA2NVx1ZmY2NlwwNjZcdWZmNjYiICsKLSAgICAiXDA2N1x1ZmY2NlwwNzFcdWZmNjZcMDczXHVmZjY2XDA3NFx1ZmY2NlwwNzVcdWZmNjZcMTAwXHVmZjY2XDEwMSIgKwotICAgICJcdWZmNjZcMTAyXHVmZjY2XDEwN1x1ZmY2NlwxMTBcdWZmNjZcMTExXHVmZjY2XDAwMVwwMDJcMDAwXDEyMCIgKwotICAgICJcMDAyXHVmZmQwXDAwNVx1ZmZkMFwwMDdcdWZmZDBcMDEwXHVmZmQwXDAxMVx1ZmZkMFwwMTJcdWZmZDBcMDEzIiArCi0gICAgIlx1ZmZkMFwwMTRcdWZmZDBcMDE1XHVmZmQwXDAxNlx1ZmZkMFwwMTdcdWZmZDBcMDIwXHVmZmQwXDAyMVx1ZmZkMCIgKwotICAgICJcMDIyXHVmZmQwXDAyM1x1ZmZkMFwwMzJcdWZmZDBcMDUzXHVmZmQwXDA1NFx1ZmZkMFwwNTVcdWZmZDBcMDU2IiArCi0gICAgIlx1ZmZkMFwwNTdcdWZmZDBcMDYwXHVmZmQwXDA2MVx1ZmZkMFwwNjJcdWZmZDBcMDYzXHVmZmQwXDA2NFx1ZmZkMCIgKwotICAgICJcMDY1XHVmZmQwXDA2Nlx1ZmZkMFwwNjdcdWZmZDBcMDcxXHVmZmQwXDA3M1x1ZmZkMFwwNzRcdWZmZDBcMDc1IiArCi0gICAgIlx1ZmZkMFwxMDBcdWZmZDBcMTAxXHVmZmQwXDEwMlx1ZmZkMFwxMDdcdWZmZDBcMTEwXHVmZmQwXDExMVx1ZmZkMCIgKwotICAgICJcMDAxXDAwMlwwMDBcMjIwXDAwNlwxMTBcMDA3XHUwMTAwXDAxMFwxMDVcMDExXDE0NFwwMTIiICsKLSAgICAiXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNiIgKwotICAgICJcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0IiArCi0gICAgIlwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjciICsKLSAgICAiXDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MSIgKwotICAgICJcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1IiArCi0gICAgIlwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzYiICsKLSAgICAiXDExNVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1MyIgKwotICAgICJcMTA1XDE1NVwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzIiArCi0gICAgIlwxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjQiICsKLSAgICAiXDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMCIgKwotICAgICJcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMDA2XDAwN1x1MDEwMlwwMzJcdTAxMDFcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNlwwMDdcdWZmODRcMDMyXHVmZjg0XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmODZcMDA0IiArCi0gICAgIlx1ZmY4NlwwMDVcdWZmODZcMDA3XHVmZjg2XDAxMFx1ZmY4NlwwMTFcdWZmODZcMDEyXHVmZjg2XDAxM1x1ZmY4NiIgKwotICAgICJcMDE0XHVmZjg2XDAxNVx1ZmY4NlwwMTZcdWZmODZcMDE3XHVmZjg2XDAyMFx1ZmY4NlwwMjFcdWZmODZcMDIyIiArCi0gICAgIlx1ZmY4NlwwMjNcdWZmODZcMDI0XHVmZjg2XDAyNVx1ZmY4NlwwMzJcdWZmODZcMDUzXHVmZjg2XDA1NFx1ZmY4NiIgKwotICAgICJcMDU1XHVmZjg2XDA1Nlx1ZmY4NlwwNTdcdWZmODZcMDYwXHVmZjg2XDA2MVx1ZmY4NlwwNjJcdWZmODZcMDYzIiArCi0gICAgIlx1ZmY4NlwwNjRcdWZmODZcMDY1XHVmZjg2XDA2Nlx1ZmY4NlwwNjdcdWZmODZcMDcxXHVmZjg2XDA3M1x1ZmY4NiIgKwotICAgICJcMDc0XHVmZjg2XDA3NVx1ZmY4NlwxMDBcdWZmODZcMTAxXHVmZjg2XDEwMlx1ZmY4NlwxMDdcdWZmODZcMTEwIiArCi0gICAgIlx1ZmY4NlwxMTFcdWZmODZcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0IiArCi0gICAgIlwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzQiICsKLSAgICAiXDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NiIgKwotICAgICJcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyIiArCi0gICAgIlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTciICsKLSAgICAiXDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2NyIgKwotICAgICJcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzIiArCi0gICAgIlwwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDE2NFwxMDQiICsKLSAgICAiXDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MSIgKwotICAgICJcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxIiArCi0gICAgIlwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTMiICsKLSAgICAiXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjg1XDAwNFx1ZmY4NVwwMDUiICsKLSAgICAiXHVmZjg1XDAwN1x1ZmY4NVwwMTBcdWZmODVcMDExXHVmZjg1XDAxMlx1ZmY4NVwwMTNcdWZmODVcMDE0XHVmZjg1IiArCi0gICAgIlwwMTVcdWZmODVcMDE2XHVmZjg1XDAxN1x1ZmY4NVwwMjBcdWZmODVcMDIxXHVmZjg1XDAyMlx1ZmY4NVwwMjMiICsKLSAgICAiXHVmZjg1XDAyNFx1ZmY4NVwwMjVcdWZmODVcMDMyXHVmZjg1XDA1M1x1ZmY4NVwwNTRcdWZmODVcMDU1XHVmZjg1IiArCi0gICAgIlwwNTZcdWZmODVcMDU3XHVmZjg1XDA2MFx1ZmY4NVwwNjFcdWZmODVcMDYyXHVmZjg1XDA2M1x1ZmY4NVwwNjQiICsKLSAgICAiXHVmZjg1XDA2NVx1ZmY4NVwwNjZcdWZmODVcMDY3XHVmZjg1XDA3MVx1ZmY4NVwwNzNcdWZmODVcMDc0XHVmZjg1IiArCi0gICAgIlwwNzVcdWZmODVcMTAwXHVmZjg1XDEwMVx1ZmY4NVwxMDJcdWZmODVcMTA3XHVmZjg1XDExMFx1ZmY4NVwxMTEiICsKLSAgICAiXHVmZjg1XDAwMVwwMDJcMDAwXDAwNlwwMDdcdWZmODNcMDMyXHVmZjgzXDAwMVwwMDJcMDAwXDIwNiIgKwotICAgICJcMDA2XDExMFwwMTJcMTE2XDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2IiArCi0gICAgIlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTIiICsKLSAgICAiXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1MyIgKwotICAgICJcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwIiArCi0gICAgIlwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzAiICsKLSAgICAiXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMSIgKwotICAgICJcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1IiArCi0gICAgIlwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzQiICsKLSAgICAiXDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMiIgKwotICAgICJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0IiArCi0gICAgIlwxMzFcMTMyXDAwMVwwMDJcMDAwXDIwNlwwMDZcMTEwXDAxMlwxMTZcMDI3XDA3N1wwMzAiICsKLSAgICAiXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NCIgKwotICAgICJcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwIiArCi0gICAgIlwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTIiICsKLSAgICAiXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NSIgKwotICAgICJcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyIiArCi0gICAgIlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDIiICsKLSAgICAiXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMCIgKwotICAgICJcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3IiArCi0gICAgIlwxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDAiICsKLSAgICAiXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTI0XDAwMiIgKwotICAgICJcdWZmYjhcMDA1XHVmZmI4XDAwN1x1ZmZiOFwwMTBcdWZmYjhcMDExXHVmZmI4XDAxMlx1ZmZiOFwwMTNcdWZmYjgiICsKLSAgICAiXDAxNFx1ZmZiOFwwMTVcdWZmYjhcMDE2XHVmZmI4XDAxN1x1ZmZiOFwwMjBcdWZmYjhcMDIxXHVmZmI4XDAyMiIgKwotICAgICJcdWZmYjhcMDIzXHVmZmI4XDAyNFx1ZmZiOFwwMjVcdWZmYjhcMDMyXHVmZmI4XDA1M1x1ZmZiOFwwNTRcdWZmYjgiICsKLSAgICAiXDA1NVx1ZmZiOFwwNTZcdWZmYjhcMDU3XHVmZmI4XDA2MFx1ZmZiOFwwNjFcdWZmYjhcMDYyXHVmZmI4XDA2MyIgKwotICAgICJcdWZmYjhcMDY0XHVmZmI4XDA2NVx1ZmZiOFwwNjZcdWZmYjhcMDY3XHVmZmI4XDA3MVx1ZmZiOFwwNzNcdWZmYjgiICsKLSAgICAiXDA3NFx1ZmZiOFwwNzVcdWZmYjhcMTAwXHVmZmI4XDEwMVx1ZmZiOFwxMDJcdWZmYjhcMTA3XHVmZmI4XDExMCIgKwotICAgICJcdWZmYjhcMTExXHVmZmI4XDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYjlcMDA1XHVmZmI5XDAwN1x1ZmZiOSIgKwotICAgICJcMDEwXHVmZmI5XDAxMVx1ZmZiOVwwMTJcdWZmYjlcMDEzXHVmZmI5XDAxNFx1ZmZiOVwwMTVcdWZmYjlcMDE2IiArCi0gICAgIlx1ZmZiOVwwMTdcdWZmYjlcMDIwXHVmZmI5XDAyMVx1ZmZiOVwwMjJcdWZmYjlcMDIzXHVmZmI5XDAyNFx1ZmZiOSIgKwotICAgICJcMDI1XHVmZmI5XDAzMlx1ZmZiOVwwNTNcdWZmYjlcMDU0XHVmZmI5XDA1NVx1ZmZiOVwwNTZcdWZmYjlcMDU3IiArCi0gICAgIlx1ZmZiOVwwNjBcdWZmYjlcMDYxXHVmZmI5XDA2Mlx1ZmZiOVwwNjNcdWZmYjlcMDY0XHVmZmI5XDA2NVx1ZmZiOSIgKwotICAgICJcMDY2XHVmZmI5XDA2N1x1ZmZiOVwwNzFcdWZmYjlcMDczXHVmZmI5XDA3NFx1ZmZiOVwwNzVcdWZmYjlcMTAwIiArCi0gICAgIlx1ZmZiOVwxMDFcdWZmYjlcMTAyXHVmZmI5XDEwN1x1ZmZiOVwxMTBcdWZmYjlcMTExXHVmZmI5XDAwMVwwMDIiICsKLSAgICAiXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNSIgKwotICAgICJcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzIiArCi0gICAgIlwwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDYiICsKLSAgICAiXDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNSIgKwotICAgICJcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzIiArCi0gICAgIlwwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjUiICsKLSAgICAiXDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMCIgKwotICAgICJcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwIiArCi0gICAgIlwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTUiICsKLSAgICAiXDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2MyIgKwotICAgICJcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjQiICsKLSAgICAiXDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzNyIgKwotICAgICJcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzIiArCi0gICAgIlwwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTQiICsKLSAgICAiXDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNiIgKwotICAgICJcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxIiArCi0gICAgIlwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTAiICsKLSAgICAiXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNiIgKwotICAgICJcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3IiArCi0gICAgIlwxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjMiICsKLSAgICAiXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMiIgKwotICAgICJcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0IiArCi0gICAgIlwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDUiICsKLSAgICAiXDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NSIgKwotICAgICJcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxIiArCi0gICAgIlwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjIiICsKLSAgICAiXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MiIgKwotICAgICJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwyMTFcMDc3IiArCi0gICAgIlwxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDIxM1wxMDRcMjA3XDEwNVwyMTIiICsKLSAgICAiXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNCIgKwotICAgICJcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3IiArCi0gICAgIlwxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzEiICsKLSAgICAiXDEzMlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNiIgKwotICAgICJcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2IiArCi0gICAgIlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTIiICsKLSAgICAiXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1MyIgKwotICAgICJcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwIiArCi0gICAgIlwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzAiICsKLSAgICAiXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMSIgKwotICAgICJcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1IiArCi0gICAgIlwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzQiICsKLSAgICAiXDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMiIgKwotICAgICJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0IiArCi0gICAgIlwxMzFcMTMyXDAwMVwwMDJcMDAwXDEwNFwwMDJcdWZmZTFcMDA1XHVmZmUxXDAwN1x1ZmZlMVwwMTAiICsKLSAgICAiXHVmZmUxXDAxMVx1ZmZlMVwwMTJcdWZmZTFcMDEzXHUwMTBlXDAxNFx1ZmZlMVwwMTVcdWZmZTFcMDE2XHVmZmUxIiArCi0gICAgIlwwMTdcdWZmZTFcMDIwXHVmZmUxXDAyMVx1ZmZlMVwwMjJcdWZmZTFcMDIzXHVmZmUxXDAzMlx1ZmZlMVwwNTMiICsKLSAgICAiXHVmZmUxXDA1NFx1ZmZlMVwwNTVcdWZmZTFcMDU2XHVmZmUxXDA1N1x1ZmZlMVwwNjBcdWZmZTFcMDYxXHVmZmUxIiArCi0gICAgIlwwNjJcdWZmZTFcMDYzXHVmZmUxXDA2NFx1MDEwZFwwNzVcdWZmZTFcMTAwXHVmZmUxXDEwMVx1ZmZlMVwxMDIiICsKLSAgICAiXHVmZmUxXDEwN1x1ZmZlMVwxMTBcdWZmZTFcMTExXHVmZmUxXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwIiArCi0gICAgIlwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzAiICsKLSAgICAiXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NCIgKwotICAgICJcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwIiArCi0gICAgIlwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTIiICsKLSAgICAiXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NSIgKwotICAgICJcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyIiArCi0gICAgIlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDIiICsKLSAgICAiXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMCIgKwotICAgICJcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3IiArCi0gICAgIlwxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDAiICsKLSAgICAiXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMjE2XDAwNiIgKwotICAgICJcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3IiArCi0gICAgIlwwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDEiICsKLSAgICAiXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNCIgKwotICAgICJcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2IiArCi0gICAgIlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTEiICsKLSAgICAiXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3MyIgKwotICAgICJcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2IiArCi0gICAgIlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTAiICsKLSAgICAiXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NiIgKwotICAgICJcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1IiArCi0gICAgIlwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwxMTAiICsKLSAgICAiXDAwMlx1ZmZkZFwwMDVcdWZmZGRcMDA3XHVmZmRkXDAxMFx1ZmZkZFwwMTFcdWZmZGRcMDEyXHVmZmRkXDAxMyIgKwotICAgICJcdWZmZGRcMDE0XHVmZmRkXDAxNVx1ZmZkZFwwMTZcdWZmZGRcMDE3XHVmZmRkXDAyMFx1ZmZkZFwwMjFcdWZmZGQiICsKLSAgICAiXDAyMlx1ZmZkZFwwMjNcdWZmZGRcMDMyXHVmZmRkXDA1M1x1ZmZkZFwwNTRcdWZmZGRcMDU1XHVmZmRkXDA1NiIgKwotICAgICJcdWZmZGRcMDU3XHVmZmRkXDA2MFx1ZmZkZFwwNjFcdWZmZGRcMDYyXHVmZmRkXDA2M1x1ZmZkZFwwNjRcdWZmZGQiICsKLSAgICAiXDA2NVwyMTVcMDY2XDIxNFwwNzVcdWZmZGRcMTAwXHVmZmRkXDEwMVx1ZmZkZFwxMDJcdWZmZGRcMTA3IiArCi0gICAgIlx1ZmZkZFwxMTBcdWZmZGRcMTExXHVmZmRkXDAwMVwwMDJcMDAwXDExMFwwMDJcdWZmZGVcMDA1XHVmZmRlIiArCi0gICAgIlwwMDdcdWZmZGVcMDEwXHVmZmRlXDAxMVx1ZmZkZVwwMTJcdWZmZGVcMDEzXHVmZmRlXDAxNFx1ZmZkZVwwMTUiICsKLSAgICAiXHVmZmRlXDAxNlx1ZmZkZVwwMTdcdWZmZGVcMDIwXHVmZmRlXDAyMVx1ZmZkZVwwMjJcdWZmZGVcMDIzXHVmZmRlIiArCi0gICAgIlwwMzJcdWZmZGVcMDUzXHVmZmRlXDA1NFx1ZmZkZVwwNTVcdWZmZGVcMDU2XHVmZmRlXDA1N1x1ZmZkZVwwNjAiICsKLSAgICAiXHVmZmRlXDA2MVx1ZmZkZVwwNjJcdWZmZGVcMDYzXHVmZmRlXDA2NFx1ZmZkZVwwNjVcMjE1XDA2NlwyMTQiICsKLSAgICAiXDA3NVx1ZmZkZVwxMDBcdWZmZGVcMTAxXHVmZmRlXDEwMlx1ZmZkZVwxMDdcdWZmZGVcMTEwXHVmZmRlXDExMSIgKwotICAgICJcdWZmZGVcMDAxXDAwMlwwMDBcMTA0XDAwMlx1ZmZlMlwwMDVcdWZmZTJcMDA3XHVmZmUyXDAxMFx1ZmZlMiIgKwotICAgICJcMDExXHVmZmUyXDAxMlx1ZmZlMlwwMTNcdTAxMGVcMDE0XHVmZmUyXDAxNVx1ZmZlMlwwMTZcdWZmZTJcMDE3IiArCi0gICAgIlx1ZmZlMlwwMjBcdWZmZTJcMDIxXHVmZmUyXDAyMlx1ZmZlMlwwMjNcdWZmZTJcMDMyXHVmZmUyXDA1M1x1ZmZlMiIgKwotICAgICJcMDU0XHVmZmUyXDA1NVx1ZmZlMlwwNTZcdWZmZTJcMDU3XHVmZmUyXDA2MFx1ZmZlMlwwNjFcdWZmZTJcMDYyIiArCi0gICAgIlx1ZmZlMlwwNjNcdWZmZTJcMDY0XHUwMTBkXDA3NVx1ZmZlMlwxMDBcdWZmZTJcMTAxXHVmZmUyXDEwMlx1ZmZlMiIgKwotICAgICJcMTA3XHVmZmUyXDExMFx1ZmZlMlwxMTFcdWZmZTJcMDAxXDAwMlwwMDBcMTA0XDAwMlx1ZmZlMFwwMDUiICsKLSAgICAiXHVmZmUwXDAwN1x1ZmZlMFwwMTBcdWZmZTBcMDExXHVmZmUwXDAxMlx1ZmZlMFwwMTNcdTAxMGVcMDE0XHVmZmUwIiArCi0gICAgIlwwMTVcdWZmZTBcMDE2XHVmZmUwXDAxN1x1ZmZlMFwwMjBcdWZmZTBcMDIxXHVmZmUwXDAyMlx1ZmZlMFwwMjMiICsKLSAgICAiXHVmZmUwXDAzMlx1ZmZlMFwwNTNcdWZmZTBcMDU0XHVmZmUwXDA1NVx1ZmZlMFwwNTZcdWZmZTBcMDU3XHVmZmUwIiArCi0gICAgIlwwNjBcdWZmZTBcMDYxXHVmZmUwXDA2Mlx1ZmZlMFwwNjNcdWZmZTBcMDY0XHUwMTBkXDA3NVx1ZmZlMFwxMDAiICsKLSAgICAiXHVmZmUwXDEwMVx1ZmZlMFwxMDJcdWZmZTBcMTA3XHVmZmUwXDExMFx1ZmZlMFwxMTFcdWZmZTBcMDAxXDAwMiIgKwotICAgICJcMDAwXDEwNFwwMDJcdWZmZTNcMDA1XHVmZmUzXDAwN1x1ZmZlM1wwMTBcdWZmZTNcMDExXHVmZmUzXDAxMiIgKwotICAgICJcdWZmZTNcMDEzXHUwMTBlXDAxNFx1ZmZlM1wwMTVcdWZmZTNcMDE2XHVmZmUzXDAxN1x1ZmZlM1wwMjBcdWZmZTMiICsKLSAgICAiXDAyMVx1ZmZlM1wwMjJcdWZmZTNcMDIzXHVmZmUzXDAzMlx1ZmZlM1wwNTNcdWZmZTNcMDU0XHVmZmUzXDA1NSIgKwotICAgICJcdWZmZTNcMDU2XHVmZmUzXDA1N1x1ZmZlM1wwNjBcdWZmZTNcMDYxXHVmZmUzXDA2Mlx1ZmZlM1wwNjNcdWZmZTMiICsKLSAgICAiXDA2NFx1MDEwZFwwNzVcdWZmZTNcMTAwXHVmZmUzXDEwMVx1ZmZlM1wxMDJcdWZmZTNcMTA3XHVmZmUzXDExMCIgKwotICAgICJcdWZmZTNcMTExXHVmZmUzXDAwMVwwMDJcMDAwXDAwNFwwMDdcdTAxMTVcMDAxXDAwMlwwMDBcMTMwIiArCi0gICAgIlwwMDJcdWZmNjhcMDA0XHVmZjY4XDAwNVx1ZmY2OFwwMDdcdWZmNjhcMDEwXHVmZjY4XDAxMVx1ZmY2OFwwMTIiICsKLSAgICAiXHVmZjY4XDAxM1x1ZmY2OFwwMTRcdWZmNjhcMDE1XHVmZjY4XDAxNlx1ZmY2OFwwMTdcdWZmNjhcMDIwXHVmZjY4IiArCi0gICAgIlwwMjFcdWZmNjhcMDIyXHVmZjY4XDAyM1x1ZmY2OFwwMjRcdWZmNjhcMDI1XHVmZjY4XDAzMlx1ZmY2OFwwMzUiICsKLSAgICAiXHVmZjY4XDA1M1x1ZmY2OFwwNTRcdWZmNjhcMDU1XHVmZjY4XDA1Nlx1ZmY2OFwwNTdcdWZmNjhcMDYwXHVmZjY4IiArCi0gICAgIlwwNjFcdWZmNjhcMDYyXHVmZjY4XDA2M1x1ZmY2OFwwNjRcdWZmNjhcMDY1XHVmZjY4XDA2Nlx1ZmY2OFwwNjciICsKLSAgICAiXHVmZjY4XDA3MVx1ZmY2OFwwNzNcdWZmNjhcMDc0XHVmZjY4XDA3NVx1ZmY2OFwxMDBcdWZmNjhcMTAxXHVmZjY4IiArCi0gICAgIlwxMDJcdWZmNjhcMTA3XHVmZjY4XDExMFx1ZmY2OFwxMTFcdWZmNjhcMDAxXDAwMlwwMDBcMTY0XDAxMiIgKwotICAgICJcdWZmYTNcMDM2XHVmZmEzXDAzN1x1ZmZhM1wwNDBcdWZmYTNcMDQxXHVmZmEzXDA0Mlx1ZmZhM1wwNDNcdWZmYTMiICsKLSAgICAiXDA0NFx1ZmZhM1wwNDVcdWZmYTNcMDQ2XHVmZmEzXDA0N1x1ZmZhM1wwNTBcdWZmYTNcMDUxXHVmZmEzXDA1MiIgKwotICAgICJcdWZmYTNcMDUzXHVmZmEzXDA1NFx1ZmZhM1wwNTVcdWZmYTNcMDU2XHVmZmEzXDA1N1x1ZmZhM1wwNjBcdWZmYTMiICsKLSAgICAiXDA2MVx1ZmZhM1wwNjJcdWZmYTNcMDYzXHVmZmEzXDA2NFx1ZmZhM1wwNjVcdWZmYTNcMDY2XHVmZmEzXDA2NyIgKwotICAgICJcdWZmYTNcMDcwXHVmZmEzXDA3MVx1ZmZhM1wwNzJcdWZmYTNcMDczXHVmZmEzXDA3NFx1ZmZhM1wwNzVcdWZmYTMiICsKLSAgICAiXDA3Nlx1ZmZhM1wwNzdcdWZmYTNcMTAwXHVmZmEzXDEwMVx1ZmZhM1wxMDJcdWZmYTNcMTAzXHVmZmEzXDEwNCIgKwotICAgICJcdWZmYTNcMTA1XHVmZmEzXDEwNlx1ZmZhM1wxMDdcdWZmYTNcMTEwXHVmZmEzXDExMVx1ZmZhM1wxMTJcdWZmYTMiICsKLSAgICAiXDExM1x1ZmZhM1wxMTRcdWZmYTNcMTE1XHVmZmEzXDExNlx1ZmZhM1wxMTdcdWZmYTNcMTIwXHVmZmEzXDEyMSIgKwotICAgICJcdWZmYTNcMTIyXHVmZmEzXDEyM1x1ZmZhM1wxMjRcdWZmYTNcMTMxXHVmZmEzXDAwMVwwMDJcMDAwXDE2MiIgKwotICAgICJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0IiArCi0gICAgIlwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzUiICsKLSAgICAiXDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MSIgKwotICAgICJcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1IiArCi0gICAgIlwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzYiICsKLSAgICAiXDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMSIgKwotICAgICJcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzIiArCi0gICAgIlwxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDIiICsKLSAgICAiXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmOTlcMDA0XHVmZjk5XDAwNVx1ZmY5OVwwMDdcdWZmOTlcMDEwXHVmZjk5XDAxMVx1ZmY5OVwwMTJcdWZmOTkiICsKLSAgICAiXDAxM1x1ZmY5OVwwMTRcdWZmOTlcMDE1XHVmZjk5XDAxNlx1ZmY5OVwwMTdcdWZmOTlcMDIwXHVmZjk5XDAyMSIgKwotICAgICJcdWZmOTlcMDIyXHVmZjk5XDAyM1x1ZmY5OVwwMjRcdWZmOTlcMDI1XHVmZjk5XDAzMlx1ZmY5OVwwNTNcdWZmOTkiICsKLSAgICAiXDA1NFx1ZmY5OVwwNTVcdWZmOTlcMDU2XHVmZjk5XDA1N1x1ZmY5OVwwNjBcdWZmOTlcMDYxXHVmZjk5XDA2MiIgKwotICAgICJcdWZmOTlcMDYzXHVmZjk5XDA2NFx1ZmY5OVwwNjVcdWZmOTlcMDY2XHVmZjk5XDA2N1x1ZmY5OVwwNzFcdWZmOTkiICsKLSAgICAiXDA3M1x1ZmY5OVwwNzRcdWZmOTlcMDc1XHVmZjk5XDEwMFx1ZmY5OVwxMDFcdWZmOTlcMTAyXHVmZjk5XDEwNyIgKwotICAgICJcdWZmOTlcMTEwXHVmZjk5XDExMVx1ZmY5OVwwMDFcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzIiArCi0gICAgIlwwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDYiICsKLSAgICAiXDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwNyIgKwotICAgICJcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzIiArCi0gICAgIlwyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzIiICsKLSAgICAiXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMCIgKwotICAgICJcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2IiArCi0gICAgIlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTUiICsKLSAgICAiXDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1MyIgKwotICAgICJcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDAwNFwwNzdcdTAxMWJcMDAxXDAwMlwwMDAiICsKLSAgICAiXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMCIgKwotICAgICJcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwIiArCi0gICAgIlwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTQiICsKLSAgICAiXDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NSIgKwotICAgICJcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2IiArCi0gICAgIlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzIiICsKLSAgICAiXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMSIgKwotICAgICJcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3IiArCi0gICAgIlwxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjEiICsKLSAgICAiXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNCIgKwotICAgICJcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAzMlx1ZmZmOFwxMDBcdWZmZjhcMDAxXDAwMlwwMDBcMDA2XDAwN1x1MDExZlwwMzIiICsKLSAgICAiXDIyNFwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjg5XDAwNFx1ZmY4OVwwMDVcdWZmODlcMDA3XHVmZjg5IiArCi0gICAgIlwwMTBcdWZmODlcMDExXHVmZjg5XDAxMlx1ZmY4OVwwMTNcdWZmODlcMDE0XHVmZjg5XDAxNVx1ZmY4OVwwMTYiICsKLSAgICAiXHVmZjg5XDAxN1x1ZmY4OVwwMjBcdWZmODlcMDIxXHVmZjg5XDAyMlx1ZmY4OVwwMjNcdWZmODlcMDI0XHVmZjg5IiArCi0gICAgIlwwMjVcdWZmODlcMDMyXHVmZjg5XDA1M1x1ZmY4OVwwNTRcdWZmODlcMDU1XHVmZjg5XDA1Nlx1ZmY4OVwwNTciICsKLSAgICAiXHVmZjg5XDA2MFx1ZmY4OVwwNjFcdWZmODlcMDYyXHVmZjg5XDA2M1x1ZmY4OVwwNjRcdWZmODlcMDY1XHVmZjg5IiArCi0gICAgIlwwNjZcdWZmODlcMDY3XHVmZjg5XDA3MVx1ZmY4OVwwNzNcdWZmODlcMDc0XHVmZjg5XDA3NVx1ZmY4OVwxMDAiICsKLSAgICAiXHVmZjg5XDEwMVx1ZmY4OVwxMDJcdWZmODlcMTA3XHVmZjg5XDExMFx1ZmY4OVwxMTFcdWZmODlcMDAxXDAwMiIgKwotICAgICJcMDAwXDEyNlwwMDJcdWZmODhcMDA0XHVmZjg4XDAwNVx1ZmY4OFwwMDdcdWZmODhcMDEwXHVmZjg4XDAxMSIgKwotICAgICJcdWZmODhcMDEyXHVmZjg4XDAxM1x1ZmY4OFwwMTRcdWZmODhcMDE1XHVmZjg4XDAxNlx1ZmY4OFwwMTdcdWZmODgiICsKLSAgICAiXDAyMFx1ZmY4OFwwMjFcdWZmODhcMDIyXHVmZjg4XDAyM1x1ZmY4OFwwMjRcdWZmODhcMDI1XHVmZjg4XDAzMiIgKwotICAgICJcdWZmODhcMDUzXHVmZjg4XDA1NFx1ZmY4OFwwNTVcdWZmODhcMDU2XHVmZjg4XDA1N1x1ZmY4OFwwNjBcdWZmODgiICsKLSAgICAiXDA2MVx1ZmY4OFwwNjJcdWZmODhcMDYzXHVmZjg4XDA2NFx1ZmY4OFwwNjVcdWZmODhcMDY2XHVmZjg4XDA2NyIgKwotICAgICJcdWZmODhcMDcxXHVmZjg4XDA3M1x1ZmY4OFwwNzRcdWZmODhcMDc1XHVmZjg4XDEwMFx1ZmY4OFwxMDFcdWZmODgiICsKLSAgICAiXDEwMlx1ZmY4OFwxMDdcdWZmODhcMTEwXHVmZjg4XDExMVx1ZmY4OFwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmZiNVwwMDRcMjIyXDAwNVx1ZmZiNVwwMDdcdWZmYjVcMDEwXHVmZmI1XDAxMVx1ZmZiNVwwMTJcdWZmYjUiICsKLSAgICAiXDAxM1x1ZmZiNVwwMTRcdWZmYjVcMDE1XHVmZmI1XDAxNlx1ZmZiNVwwMTdcdWZmYjVcMDIwXHVmZmI1XDAyMSIgKwotICAgICJcdWZmYjVcMDIyXHVmZmI1XDAyM1x1ZmZiNVwwMjRcdWZmYjVcMDI1XHVmZmI1XDAzMlx1ZmZiNVwwNTNcdWZmYjUiICsKLSAgICAiXDA1NFx1ZmZiNVwwNTVcdWZmYjVcMDU2XHVmZmI1XDA1N1x1ZmZiNVwwNjBcdWZmYjVcMDYxXHVmZmI1XDA2MiIgKwotICAgICJcdWZmYjVcMDYzXHVmZmI1XDA2NFx1ZmZiNVwwNjVcdWZmYjVcMDY2XHVmZmI1XDA2N1x1ZmZiNVwwNzFcdWZmYjUiICsKLSAgICAiXDA3M1x1ZmZiNVwwNzRcdWZmYjVcMDc1XHVmZmI1XDEwMFx1ZmZiNVwxMDFcdWZmYjVcMTAyXHVmZmI1XDEwNyIgKwotICAgICJcdWZmYjVcMTEwXHVmZmI1XDExMVx1ZmZiNVwwMDFcMDAyXDAwMFwxMjBcMDAyXHVmZmNmXDAwNVx1ZmZjZiIgKwotICAgICJcMDA3XHVmZmNmXDAxMFx1ZmZjZlwwMTFcdWZmY2ZcMDEyXHVmZmNmXDAxM1x1ZmZjZlwwMTRcdWZmY2ZcMDE1IiArCi0gICAgIlx1ZmZjZlwwMTZcdWZmY2ZcMDE3XHVmZmNmXDAyMFx1ZmZjZlwwMjFcdWZmY2ZcMDIyXHVmZmNmXDAyM1x1ZmZjZiIgKwotICAgICJcMDMyXHVmZmNmXDA1M1x1ZmZjZlwwNTRcdWZmY2ZcMDU1XHVmZmNmXDA1Nlx1ZmZjZlwwNTdcdWZmY2ZcMDYwIiArCi0gICAgIlx1ZmZjZlwwNjFcdWZmY2ZcMDYyXHVmZmNmXDA2M1x1ZmZjZlwwNjRcdWZmY2ZcMDY1XHVmZmNmXDA2Nlx1ZmZjZiIgKwotICAgICJcMDY3XHVmZmNmXDA3MVx1ZmZjZlwwNzNcdWZmY2ZcMDc0XHVmZmNmXDA3NVx1ZmZjZlwxMDBcdWZmY2ZcMTAxIiArCi0gICAgIlx1ZmZjZlwxMDJcdWZmY2ZcMTA3XHVmZmNmXDExMFx1ZmZjZlwxMTFcdWZmY2ZcMDAxXDAwMlwwMDBcMTI2IiArCi0gICAgIlwwMDJcdWZmOGFcMDA0XHVmZjhhXDAwNVx1ZmY4YVwwMDdcdWZmOGFcMDEwXHVmZjhhXDAxMVx1ZmY4YVwwMTIiICsKLSAgICAiXHVmZjhhXDAxM1x1ZmY4YVwwMTRcdWZmOGFcMDE1XHVmZjhhXDAxNlx1ZmY4YVwwMTdcdWZmOGFcMDIwXHVmZjhhIiArCi0gICAgIlwwMjFcdWZmOGFcMDIyXHVmZjhhXDAyM1x1ZmY4YVwwMjRcdWZmOGFcMDI1XHVmZjhhXDAzMlx1ZmY4YVwwNTMiICsKLSAgICAiXHVmZjhhXDA1NFx1ZmY4YVwwNTVcdWZmOGFcMDU2XHVmZjhhXDA1N1x1ZmY4YVwwNjBcdWZmOGFcMDYxXHVmZjhhIiArCi0gICAgIlwwNjJcdWZmOGFcMDYzXHVmZjhhXDA2NFx1ZmY4YVwwNjVcdWZmOGFcMDY2XHVmZjhhXDA2N1x1ZmY4YVwwNzEiICsKLSAgICAiXHVmZjhhXDA3M1x1ZmY4YVwwNzRcdWZmOGFcMDc1XHVmZjhhXDEwMFx1ZmY4YVwxMDFcdWZmOGFcMTAyXHVmZjhhIiArCi0gICAgIlwxMDdcdWZmOGFcMTEwXHVmZjhhXDExMVx1ZmY4YVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjRkXDAwNCIgKwotICAgICJcdWZmNGRcMDA1XHVmZjRkXDAwN1x1ZmY0ZFwwMTBcdWZmNGRcMDExXHVmZjRkXDAxMlx1ZmY0ZFwwMTNcdWZmNGQiICsKLSAgICAiXDAxNFx1ZmY0ZFwwMTVcdWZmNGRcMDE2XHVmZjRkXDAxN1x1ZmY0ZFwwMjBcdWZmNGRcMDIxXHVmZjRkXDAyMiIgKwotICAgICJcdWZmNGRcMDIzXHVmZjRkXDAyNFx1ZmY0ZFwwMjVcdWZmNGRcMDMxXHUwMTI2XDAzMlx1ZmY0ZFwwNTNcdWZmNGQiICsKLSAgICAiXDA1NFx1ZmY0ZFwwNTVcdWZmNGRcMDU2XHVmZjRkXDA1N1x1ZmY0ZFwwNjBcdWZmNGRcMDYxXHVmZjRkXDA2MiIgKwotICAgICJcdWZmNGRcMDYzXHVmZjRkXDA2NFx1ZmY0ZFwwNjVcdWZmNGRcMDY2XHVmZjRkXDA2N1x1ZmY0ZFwwNzFcdWZmNGQiICsKLSAgICAiXDA3M1x1ZmY0ZFwwNzRcdWZmNGRcMDc1XHVmZjRkXDEwMFx1ZmY0ZFwxMDFcdWZmNGRcMTAyXHVmZjRkXDEwNyIgKwotICAgICJcdWZmNGRcMTEwXHVmZjRkXDExMVx1ZmY0ZFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjQzXDAwNFx1ZmY0MyIgKwotICAgICJcMDA1XHVmZjQzXDAwNlwzNTNcMDA3XHVmZjQzXDAxMFx1ZmY0M1wwMTFcdWZmNDNcMDEyXHVmZjQzXDAxMyIgKwotICAgICJcdWZmNDNcMDE0XHVmZjQzXDAxNVx1ZmY0M1wwMTZcdWZmNDNcMDE3XHVmZjQzXDAyMFx1ZmY0M1wwMjFcdWZmNDMiICsKLSAgICAiXDAyMlx1ZmY0M1wwMjNcdWZmNDNcMDI0XHVmZjQzXDAyNVx1ZmY0M1wwMzFcdWZmNDNcMDMyXHVmZjQzXDAzNSIgKwotICAgICJcdWZmNDNcMDUzXHVmZjQzXDA1NFx1ZmY0M1wwNTVcdWZmNDNcMDU2XHVmZjQzXDA1N1x1ZmY0M1wwNjBcdWZmNDMiICsKLSAgICAiXDA2MVx1ZmY0M1wwNjJcdWZmNDNcMDYzXHVmZjQzXDA2NFx1ZmY0M1wwNjVcdWZmNDNcMDY2XHVmZjQzXDA2NyIgKwotICAgICJcdWZmNDNcMDcxXHVmZjQzXDA3M1x1ZmY0M1wwNzRcdWZmNDNcMDc1XHVmZjQzXDEwMFx1ZmY0M1wxMDFcdWZmNDMiICsKLSAgICAiXDEwMlx1ZmY0M1wxMDdcdWZmNDNcMTEwXHVmZjQzXDExMVx1ZmY0M1wwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmZhOVwwMDRcdWZmYTlcMDA1XHVmZmE5XDAwN1x1ZmZhOVwwMTBcdWZmYTlcMDExXHVmZmE5XDAxMlx1ZmZhOSIgKwotICAgICJcMDEzXHVmZmE5XDAxNFx1ZmZhOVwwMTVcdWZmYTlcMDE2XHVmZmE5XDAxN1x1ZmZhOVwwMjBcdWZmYTlcMDIxIiArCi0gICAgIlx1ZmZhOVwwMjJcdWZmYTlcMDIzXHVmZmE5XDAyNFx1ZmZhOVwwMjVcdWZmYTlcMDMyXHVmZmE5XDA1M1x1ZmZhOSIgKwotICAgICJcMDU0XHVmZmE5XDA1NVx1ZmZhOVwwNTZcdWZmYTlcMDU3XHVmZmE5XDA2MFx1ZmZhOVwwNjFcdWZmYTlcMDYyIiArCi0gICAgIlx1ZmZhOVwwNjNcdWZmYTlcMDY0XHVmZmE5XDA2NVx1ZmZhOVwwNjZcdWZmYTlcMDY3XHVmZmE5XDA3MVx1ZmZhOSIgKwotICAgICJcMDczXHVmZmE5XDA3NFx1ZmZhOVwwNzVcdWZmYTlcMTAwXHVmZmE5XDEwMVx1ZmZhOVwxMDJcdWZmYTlcMTA3IiArCi0gICAgIlx1ZmZhOVwxMTBcdWZmYTlcMTExXHVmZmE5XDAwMVwwMDJcMDAwXDE2NFwwMTJcdTAxMjdcMDM2XDI0NiIgKwotICAgICJcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1IiArCi0gICAgIlwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzQiICsKLSAgICAiXDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MiIgKwotICAgICJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0IiArCi0gICAgIlwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzciICsKLSAgICAiXDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMiIgKwotICAgICJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0IiArCi0gICAgIlwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMlwzMDQiICsKLSAgICAiXDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOWFcMDA0IiArCi0gICAgIlx1ZmY5YVwwMDVcdWZmOWFcMDA3XHVmZjlhXDAxMFx1ZmY5YVwwMTFcdWZmOWFcMDEyXHVmZjlhXDAxM1x1ZmY5YSIgKwotICAgICJcMDE0XHVmZjlhXDAxNVx1ZmY5YVwwMTZcdWZmOWFcMDE3XHVmZjlhXDAyMFx1ZmY5YVwwMjFcdWZmOWFcMDIyIiArCi0gICAgIlx1ZmY5YVwwMjNcdWZmOWFcMDI0XHVmZjlhXDAyNVx1ZmY5YVwwMzJcdWZmOWFcMDUzXHVmZjlhXDA1NFx1ZmY5YSIgKwotICAgICJcMDU1XHVmZjlhXDA1Nlx1ZmY5YVwwNTdcdWZmOWFcMDYwXHVmZjlhXDA2MVx1ZmY5YVwwNjJcdWZmOWFcMDYzIiArCi0gICAgIlx1ZmY5YVwwNjRcdWZmOWFcMDY1XHVmZjlhXDA2Nlx1ZmY5YVwwNjdcdWZmOWFcMDcxXHVmZjlhXDA3M1x1ZmY5YSIgKwotICAgICJcMDc0XHVmZjlhXDA3NVx1ZmY5YVwxMDBcdWZmOWFcMTAxXHVmZjlhXDEwMlx1ZmY5YVwxMDdcdWZmOWFcMTEwIiArCi0gICAgIlx1ZmY5YVwxMTFcdWZmOWFcMDAxXDAwMlwwMDBcMTY0XDAxMlx1ZmZhMlwwMzZcdWZmYTJcMDM3XHVmZmEyIiArCi0gICAgIlwwNDBcdWZmYTJcMDQxXHVmZmEyXDA0Mlx1ZmZhMlwwNDNcdWZmYTJcMDQ0XHVmZmEyXDA0NVx1ZmZhMlwwNDYiICsKLSAgICAiXHVmZmEyXDA0N1x1ZmZhMlwwNTBcdWZmYTJcMDUxXHVmZmEyXDA1Mlx1ZmZhMlwwNTNcdWZmYTJcMDU0XHVmZmEyIiArCi0gICAgIlwwNTVcdWZmYTJcMDU2XHVmZmEyXDA1N1x1ZmZhMlwwNjBcdWZmYTJcMDYxXHVmZmEyXDA2Mlx1ZmZhMlwwNjMiICsKLSAgICAiXHVmZmEyXDA2NFx1ZmZhMlwwNjVcdWZmYTJcMDY2XHVmZmEyXDA2N1x1ZmZhMlwwNzBcdWZmYTJcMDcxXHVmZmEyIiArCi0gICAgIlwwNzJcdWZmYTJcMDczXHVmZmEyXDA3NFx1ZmZhMlwwNzVcdWZmYTJcMDc2XHVmZmEyXDA3N1x1ZmZhMlwxMDAiICsKLSAgICAiXHVmZmEyXDEwMVx1ZmZhMlwxMDJcdWZmYTJcMTAzXHVmZmEyXDEwNFx1ZmZhMlwxMDVcdWZmYTJcMTA2XHVmZmEyIiArCi0gICAgIlwxMDdcdWZmYTJcMTEwXHVmZmEyXDExMVx1ZmZhMlwxMTJcdWZmYTJcMTEzXHVmZmEyXDExNFx1ZmZhMlwxMTUiICsKLSAgICAiXHVmZmEyXDExNlx1ZmZhMlwxMTdcdWZmYTJcMTIwXHVmZmEyXDEyMVx1ZmZhMlwxMjJcdWZmYTJcMTIzXHVmZmEyIiArCi0gICAgIlwxMjRcdWZmYTJcMTMxXHVmZmEyXDAwMVwwMDJcMDAwXDIxNlwwMDZcdWZmYzFcMDEwXHVmZmMxXDAxMSIgKwotICAgICJcdWZmYzFcMDEyXHVmZmMxXDAyNFx1ZmZjMVwwMjVcdWZmYzFcMDI3XHVmZmMxXDAzMFx1ZmZjMVwwMzNcdWZmYzEiICsKLSAgICAiXDAzNFx1ZmZjMVwwMzZcdWZmYzFcMDM3XHVmZmMxXDA0MFx1ZmZjMVwwNDFcdWZmYzFcMDQyXHVmZmMxXDA0MyIgKwotICAgICJcdWZmYzFcMDQ0XHVmZmMxXDA0NVx1ZmZjMVwwNDZcdWZmYzFcMDQ3XHVmZmMxXDA1MFx1ZmZjMVwwNTFcdWZmYzEiICsKLSAgICAiXDA1Mlx1ZmZjMVwwNTNcdWZmYzFcMDU0XHVmZmMxXDA1NVx1ZmZjMVwwNTZcdWZmYzFcMDU3XHVmZmMxXDA2MCIgKwotICAgICJcdWZmYzFcMDYxXHVmZmMxXDA2Mlx1ZmZjMVwwNjNcdWZmYzFcMDY0XHVmZmMxXDA2NVx1ZmZjMVwwNjZcdWZmYzEiICsKLSAgICAiXDA2N1x1ZmZjMVwwNzBcdWZmYzFcMDcxXHVmZmMxXDA3Mlx1ZmZjMVwwNzNcdWZmYzFcMDc0XHVmZmMxXDA3NSIgKwotICAgICJcdWZmYzFcMDc2XHVmZmMxXDA3N1x1ZmZjMVwxMDBcdWZmYzFcMTAxXHVmZmMxXDEwMlx1ZmZjMVwxMDNcdWZmYzEiICsKLSAgICAiXDEwNFx1ZmZjMVwxMDVcdWZmYzFcMTA2XHVmZmMxXDEwN1x1ZmZjMVwxMTBcdWZmYzFcMTExXHVmZmMxXDExMiIgKwotICAgICJcdWZmYzFcMTEzXHVmZmMxXDExNFx1ZmZjMVwxMTVcdWZmYzFcMTE2XHVmZmMxXDExN1x1ZmZjMVwxMjBcdWZmYzEiICsKLSAgICAiXDEyMVx1ZmZjMVwxMjJcdWZmYzFcMTIzXHVmZmMxXDEyNFx1ZmZjMVwxMjVcdWZmYzFcMTI2XHVmZmMxXDEyNyIgKwotICAgICJcdWZmYzFcMTMwXHVmZmMxXDEzMVx1ZmZjMVwwMDFcMDAyXDAwMFwyMTZcMDA2XHVmZmM1XDAxMFx1ZmZjNSIgKwotICAgICJcMDExXHVmZmM1XDAxMlx1ZmZjNVwwMjRcdWZmYzVcMDI1XHVmZmM1XDAyN1x1ZmZjNVwwMzBcdWZmYzVcMDMzIiArCi0gICAgIlx1ZmZjNVwwMzRcdWZmYzVcMDM2XHVmZmM1XDAzN1x1ZmZjNVwwNDBcdWZmYzVcMDQxXHVmZmM1XDA0Mlx1ZmZjNSIgKwotICAgICJcMDQzXHVmZmM1XDA0NFx1ZmZjNVwwNDVcdWZmYzVcMDQ2XHVmZmM1XDA0N1x1ZmZjNVwwNTBcdWZmYzVcMDUxIiArCi0gICAgIlx1ZmZjNVwwNTJcdWZmYzVcMDUzXHVmZmM1XDA1NFx1ZmZjNVwwNTVcdWZmYzVcMDU2XHVmZmM1XDA1N1x1ZmZjNSIgKwotICAgICJcMDYwXHVmZmM1XDA2MVx1ZmZjNVwwNjJcdWZmYzVcMDYzXHVmZmM1XDA2NFx1ZmZjNVwwNjVcdWZmYzVcMDY2IiArCi0gICAgIlx1ZmZjNVwwNjdcdWZmYzVcMDcwXHVmZmM1XDA3MVx1ZmZjNVwwNzJcdWZmYzVcMDczXHVmZmM1XDA3NFx1ZmZjNSIgKwotICAgICJcMDc1XHVmZmM1XDA3Nlx1ZmZjNVwwNzdcdWZmYzVcMTAwXHVmZmM1XDEwMVx1ZmZjNVwxMDJcdWZmYzVcMTAzIiArCi0gICAgIlx1ZmZjNVwxMDRcdWZmYzVcMTA1XHVmZmM1XDEwNlx1ZmZjNVwxMDdcdWZmYzVcMTEwXHVmZmM1XDExMVx1ZmZjNSIgKwotICAgICJcMTEyXHVmZmM1XDExM1x1ZmZjNVwxMTRcdWZmYzVcMTE1XHVmZmM1XDExNlx1ZmZjNVwxMTdcdWZmYzVcMTIwIiArCi0gICAgIlx1ZmZjNVwxMjFcdWZmYzVcMTIyXHVmZmM1XDEyM1x1ZmZjNVwxMjRcdWZmYzVcMTI1XHVmZmM1XDEyNlx1ZmZjNSIgKwotICAgICJcMTI3XHVmZmM1XDEzMFx1ZmZjNVwxMzFcdWZmYzVcMDAxXDAwMlwwMDBcMjE2XDAwNlx1ZmZjNlwwMTAiICsKLSAgICAiXHVmZmM2XDAxMVx1ZmZjNlwwMTJcdWZmYzZcMDI0XHVmZmM2XDAyNVx1ZmZjNlwwMjdcdWZmYzZcMDMwXHVmZmM2IiArCi0gICAgIlwwMzNcdWZmYzZcMDM0XHVmZmM2XDAzNlx1ZmZjNlwwMzdcdWZmYzZcMDQwXHVmZmM2XDA0MVx1ZmZjNlwwNDIiICsKLSAgICAiXHVmZmM2XDA0M1x1ZmZjNlwwNDRcdWZmYzZcMDQ1XHVmZmM2XDA0Nlx1ZmZjNlwwNDdcdWZmYzZcMDUwXHVmZmM2IiArCi0gICAgIlwwNTFcdWZmYzZcMDUyXHVmZmM2XDA1M1x1ZmZjNlwwNTRcdWZmYzZcMDU1XHVmZmM2XDA1Nlx1ZmZjNlwwNTciICsKLSAgICAiXHVmZmM2XDA2MFx1ZmZjNlwwNjFcdWZmYzZcMDYyXHVmZmM2XDA2M1x1ZmZjNlwwNjRcdWZmYzZcMDY1XHVmZmM2IiArCi0gICAgIlwwNjZcdWZmYzZcMDY3XHVmZmM2XDA3MFx1ZmZjNlwwNzFcdWZmYzZcMDcyXHVmZmM2XDA3M1x1ZmZjNlwwNzQiICsKLSAgICAiXHVmZmM2XDA3NVx1ZmZjNlwwNzZcdWZmYzZcMDc3XHVmZmM2XDEwMFx1ZmZjNlwxMDFcdWZmYzZcMTAyXHVmZmM2IiArCi0gICAgIlwxMDNcdWZmYzZcMTA0XHVmZmM2XDEwNVx1ZmZjNlwxMDZcdWZmYzZcMTA3XHVmZmM2XDExMFx1ZmZjNlwxMTEiICsKLSAgICAiXHVmZmM2XDExMlx1ZmZjNlwxMTNcdWZmYzZcMTE0XHVmZmM2XDExNVx1ZmZjNlwxMTZcdWZmYzZcMTE3XHVmZmM2IiArCi0gICAgIlwxMjBcdWZmYzZcMTIxXHVmZmM2XDEyMlx1ZmZjNlwxMjNcdWZmYzZcMTI0XHVmZmM2XDEyNVx1ZmZjNlwxMjYiICsKLSAgICAiXHVmZmM2XDEyN1x1ZmZjNlwxMzBcdWZmYzZcMTMxXHVmZmM2XDAwMVwwMDJcMDAwXDIxNlwwMDZcdWZmYmYiICsKLSAgICAiXDAxMFx1ZmZiZlwwMTFcdWZmYmZcMDEyXHVmZmJmXDAyNFx1ZmZiZlwwMjVcdWZmYmZcMDI3XHVmZmJmXDAzMCIgKwotICAgICJcdWZmYmZcMDMzXHVmZmJmXDAzNFx1ZmZiZlwwMzZcdWZmYmZcMDM3XHVmZmJmXDA0MFx1ZmZiZlwwNDFcdWZmYmYiICsKLSAgICAiXDA0Mlx1ZmZiZlwwNDNcdWZmYmZcMDQ0XHVmZmJmXDA0NVx1ZmZiZlwwNDZcdWZmYmZcMDQ3XHVmZmJmXDA1MCIgKwotICAgICJcdWZmYmZcMDUxXHVmZmJmXDA1Mlx1ZmZiZlwwNTNcdWZmYmZcMDU0XHVmZmJmXDA1NVx1ZmZiZlwwNTZcdWZmYmYiICsKLSAgICAiXDA1N1x1ZmZiZlwwNjBcdWZmYmZcMDYxXHVmZmJmXDA2Mlx1ZmZiZlwwNjNcdWZmYmZcMDY0XHVmZmJmXDA2NSIgKwotICAgICJcdWZmYmZcMDY2XHVmZmJmXDA2N1x1ZmZiZlwwNzBcdWZmYmZcMDcxXHVmZmJmXDA3Mlx1ZmZiZlwwNzNcdWZmYmYiICsKLSAgICAiXDA3NFx1ZmZiZlwwNzVcdWZmYmZcMDc2XHVmZmJmXDA3N1x1ZmZiZlwxMDBcdWZmYmZcMTAxXHVmZmJmXDEwMiIgKwotICAgICJcdWZmYmZcMTAzXHVmZmJmXDEwNFx1ZmZiZlwxMDVcdWZmYmZcMTA2XHVmZmJmXDEwN1x1ZmZiZlwxMTBcdWZmYmYiICsKLSAgICAiXDExMVx1ZmZiZlwxMTJcdWZmYmZcMTEzXHVmZmJmXDExNFx1ZmZiZlwxMTVcdWZmYmZcMTE2XHVmZmJmXDExNyIgKwotICAgICJcdWZmYmZcMTIwXHVmZmJmXDEyMVx1ZmZiZlwxMjJcdWZmYmZcMTIzXHVmZmJmXDEyNFx1ZmZiZlwxMjVcdWZmYmYiICsKLSAgICAiXDEyNlx1ZmZiZlwxMjdcdWZmYmZcMTMwXHVmZmJmXDEzMVx1ZmZiZlwwMDFcMDAyXDAwMFwyMTZcMDA2IiArCi0gICAgIlx1ZmZjOVwwMTBcdWZmYzlcMDExXHVmZmM5XDAxMlx1ZmZjOVwwMjRcdWZmYzlcMDI1XHVmZmM5XDAyN1x1ZmZjOSIgKwotICAgICJcMDMwXHVmZmM5XDAzM1x1ZmZjOVwwMzRcdWZmYzlcMDM2XHVmZmM5XDAzN1x1ZmZjOVwwNDBcdWZmYzlcMDQxIiArCi0gICAgIlx1ZmZjOVwwNDJcdWZmYzlcMDQzXHVmZmM5XDA0NFx1ZmZjOVwwNDVcdWZmYzlcMDQ2XHVmZmM5XDA0N1x1ZmZjOSIgKwotICAgICJcMDUwXHVmZmM5XDA1MVx1ZmZjOVwwNTJcdWZmYzlcMDUzXHVmZmM5XDA1NFx1ZmZjOVwwNTVcdWZmYzlcMDU2IiArCi0gICAgIlx1ZmZjOVwwNTdcdWZmYzlcMDYwXHVmZmM5XDA2MVx1ZmZjOVwwNjJcdWZmYzlcMDYzXHVmZmM5XDA2NFx1ZmZjOSIgKwotICAgICJcMDY1XHVmZmM5XDA2Nlx1ZmZjOVwwNjdcdWZmYzlcMDcwXHVmZmM5XDA3MVx1ZmZjOVwwNzJcdWZmYzlcMDczIiArCi0gICAgIlx1ZmZjOVwwNzRcdWZmYzlcMDc1XHVmZmM5XDA3Nlx1ZmZjOVwwNzdcdWZmYzlcMTAwXHVmZmM5XDEwMVx1ZmZjOSIgKwotICAgICJcMTAyXHVmZmM5XDEwM1x1ZmZjOVwxMDRcdWZmYzlcMTA1XHVmZmM5XDEwNlx1ZmZjOVwxMDdcdWZmYzlcMTEwIiArCi0gICAgIlx1ZmZjOVwxMTFcdWZmYzlcMTEyXHVmZmM5XDExM1x1ZmZjOVwxMTRcdWZmYzlcMTE1XHVmZmM5XDExNlx1ZmZjOSIgKwotICAgICJcMTE3XHVmZmM5XDEyMFx1ZmZjOVwxMjFcdWZmYzlcMTIyXHVmZmM5XDEyM1x1ZmZjOVwxMjRcdWZmYzlcMTI1IiArCi0gICAgIlx1ZmZjOVwxMjZcdWZmYzlcMTI3XHVmZmM5XDEzMFx1ZmZjOVwxMzFcdWZmYzlcMDAxXDAwMlwwMDBcMjE2IiArCi0gICAgIlwwMDZcdWZmYzNcMDEwXHVmZmMzXDAxMVx1ZmZjM1wwMTJcdWZmYzNcMDI0XHVmZmMzXDAyNVx1ZmZjM1wwMjciICsKLSAgICAiXHVmZmMzXDAzMFx1ZmZjM1wwMzNcdWZmYzNcMDM0XHVmZmMzXDAzNlx1ZmZjM1wwMzdcdWZmYzNcMDQwXHVmZmMzIiArCi0gICAgIlwwNDFcdWZmYzNcMDQyXHVmZmMzXDA0M1x1ZmZjM1wwNDRcdWZmYzNcMDQ1XHVmZmMzXDA0Nlx1ZmZjM1wwNDciICsKLSAgICAiXHVmZmMzXDA1MFx1ZmZjM1wwNTFcdWZmYzNcMDUyXHVmZmMzXDA1M1x1ZmZjM1wwNTRcdWZmYzNcMDU1XHVmZmMzIiArCi0gICAgIlwwNTZcdWZmYzNcMDU3XHVmZmMzXDA2MFx1ZmZjM1wwNjFcdWZmYzNcMDYyXHVmZmMzXDA2M1x1ZmZjM1wwNjQiICsKLSAgICAiXHVmZmMzXDA2NVx1ZmZjM1wwNjZcdWZmYzNcMDY3XHVmZmMzXDA3MFx1ZmZjM1wwNzFcdWZmYzNcMDcyXHVmZmMzIiArCi0gICAgIlwwNzNcdWZmYzNcMDc0XHVmZmMzXDA3NVx1ZmZjM1wwNzZcdWZmYzNcMDc3XHVmZmMzXDEwMFx1ZmZjM1wxMDEiICsKLSAgICAiXHVmZmMzXDEwMlx1ZmZjM1wxMDNcdWZmYzNcMTA0XHVmZmMzXDEwNVx1ZmZjM1wxMDZcdWZmYzNcMTA3XHVmZmMzIiArCi0gICAgIlwxMTBcdWZmYzNcMTExXHVmZmMzXDExMlx1ZmZjM1wxMTNcdWZmYzNcMTE0XHVmZmMzXDExNVx1ZmZjM1wxMTYiICsKLSAgICAiXHVmZmMzXDExN1x1ZmZjM1wxMjBcdWZmYzNcMTIxXHVmZmMzXDEyMlx1ZmZjM1wxMjNcdWZmYzNcMTI0XHVmZmMzIiArCi0gICAgIlwxMjVcdWZmYzNcMTI2XHVmZmMzXDEyN1x1ZmZjM1wxMzBcdWZmYzNcMTMxXHVmZmMzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwyMTZcMDA2XHVmZmNhXDAxMFx1ZmZjYVwwMTFcdWZmY2FcMDEyXHVmZmNhXDAyNFx1ZmZjYVwwMjVcdWZmY2EiICsKLSAgICAiXDAyN1x1ZmZjYVwwMzBcdWZmY2FcMDMzXHVmZmNhXDAzNFx1ZmZjYVwwMzZcdWZmY2FcMDM3XHVmZmNhXDA0MCIgKwotICAgICJcdWZmY2FcMDQxXHVmZmNhXDA0Mlx1ZmZjYVwwNDNcdWZmY2FcMDQ0XHVmZmNhXDA0NVx1ZmZjYVwwNDZcdWZmY2EiICsKLSAgICAiXDA0N1x1ZmZjYVwwNTBcdWZmY2FcMDUxXHVmZmNhXDA1Mlx1ZmZjYVwwNTNcdWZmY2FcMDU0XHVmZmNhXDA1NSIgKwotICAgICJcdWZmY2FcMDU2XHVmZmNhXDA1N1x1ZmZjYVwwNjBcdWZmY2FcMDYxXHVmZmNhXDA2Mlx1ZmZjYVwwNjNcdWZmY2EiICsKLSAgICAiXDA2NFx1ZmZjYVwwNjVcdWZmY2FcMDY2XHVmZmNhXDA2N1x1ZmZjYVwwNzBcdWZmY2FcMDcxXHVmZmNhXDA3MiIgKwotICAgICJcdWZmY2FcMDczXHVmZmNhXDA3NFx1ZmZjYVwwNzVcdWZmY2FcMDc2XHVmZmNhXDA3N1x1ZmZjYVwxMDBcdWZmY2EiICsKLSAgICAiXDEwMVx1ZmZjYVwxMDJcdWZmY2FcMTAzXHVmZmNhXDEwNFx1ZmZjYVwxMDVcdWZmY2FcMTA2XHVmZmNhXDEwNyIgKwotICAgICJcdWZmY2FcMTEwXHVmZmNhXDExMVx1ZmZjYVwxMTJcdWZmY2FcMTEzXHVmZmNhXDExNFx1ZmZjYVwxMTVcdWZmY2EiICsKLSAgICAiXDExNlx1ZmZjYVwxMTdcdWZmY2FcMTIwXHVmZmNhXDEyMVx1ZmZjYVwxMjJcdWZmY2FcMTIzXHVmZmNhXDEyNCIgKwotICAgICJcdWZmY2FcMTI1XHVmZmNhXDEyNlx1ZmZjYVwxMjdcdWZmY2FcMTMwXHVmZmNhXDEzMVx1ZmZjYVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMjE2XDAwNlx1ZmZjNFwwMTBcdWZmYzRcMDExXHVmZmM0XDAxMlx1ZmZjNFwwMjRcdWZmYzRcMDI1IiArCi0gICAgIlx1ZmZjNFwwMjdcdWZmYzRcMDMwXHVmZmM0XDAzM1x1ZmZjNFwwMzRcdWZmYzRcMDM2XHVmZmM0XDAzN1x1ZmZjNCIgKwotICAgICJcMDQwXHVmZmM0XDA0MVx1ZmZjNFwwNDJcdWZmYzRcMDQzXHVmZmM0XDA0NFx1ZmZjNFwwNDVcdWZmYzRcMDQ2IiArCi0gICAgIlx1ZmZjNFwwNDdcdWZmYzRcMDUwXHVmZmM0XDA1MVx1ZmZjNFwwNTJcdWZmYzRcMDUzXHVmZmM0XDA1NFx1ZmZjNCIgKwotICAgICJcMDU1XHVmZmM0XDA1Nlx1ZmZjNFwwNTdcdWZmYzRcMDYwXHVmZmM0XDA2MVx1ZmZjNFwwNjJcdWZmYzRcMDYzIiArCi0gICAgIlx1ZmZjNFwwNjRcdWZmYzRcMDY1XHVmZmM0XDA2Nlx1ZmZjNFwwNjdcdWZmYzRcMDcwXHVmZmM0XDA3MVx1ZmZjNCIgKwotICAgICJcMDcyXHVmZmM0XDA3M1x1ZmZjNFwwNzRcdWZmYzRcMDc1XHVmZmM0XDA3Nlx1ZmZjNFwwNzdcdWZmYzRcMTAwIiArCi0gICAgIlx1ZmZjNFwxMDFcdWZmYzRcMTAyXHVmZmM0XDEwM1x1ZmZjNFwxMDRcdWZmYzRcMTA1XHVmZmM0XDEwNlx1ZmZjNCIgKwotICAgICJcMTA3XHVmZmM0XDExMFx1ZmZjNFwxMTFcdWZmYzRcMTEyXHVmZmM0XDExM1x1ZmZjNFwxMTRcdWZmYzRcMTE1IiArCi0gICAgIlx1ZmZjNFwxMTZcdWZmYzRcMTE3XHVmZmM0XDEyMFx1ZmZjNFwxMjFcdWZmYzRcMTIyXHVmZmM0XDEyM1x1ZmZjNCIgKwotICAgICJcMTI0XHVmZmM0XDEyNVx1ZmZjNFwxMjZcdWZmYzRcMTI3XHVmZmM0XDEzMFx1ZmZjNFwxMzFcdWZmYzRcMDAxIiArCi0gICAgIlwwMDJcMDAwXDIxNlwwMDZcdWZmY2RcMDEwXHVmZmNkXDAxMVx1ZmZjZFwwMTJcdWZmY2RcMDI0XHVmZmNkIiArCi0gICAgIlwwMjVcdWZmY2RcMDI3XHVmZmNkXDAzMFx1ZmZjZFwwMzNcdWZmY2RcMDM0XHVmZmNkXDAzNlx1ZmZjZFwwMzciICsKLSAgICAiXHVmZmNkXDA0MFx1ZmZjZFwwNDFcdWZmY2RcMDQyXHVmZmNkXDA0M1x1ZmZjZFwwNDRcdWZmY2RcMDQ1XHVmZmNkIiArCi0gICAgIlwwNDZcdWZmY2RcMDQ3XHVmZmNkXDA1MFx1ZmZjZFwwNTFcdWZmY2RcMDUyXHVmZmNkXDA1M1x1ZmZjZFwwNTQiICsKLSAgICAiXHVmZmNkXDA1NVx1ZmZjZFwwNTZcdWZmY2RcMDU3XHVmZmNkXDA2MFx1ZmZjZFwwNjFcdWZmY2RcMDYyXHVmZmNkIiArCi0gICAgIlwwNjNcdWZmY2RcMDY0XHVmZmNkXDA2NVx1ZmZjZFwwNjZcdWZmY2RcMDY3XHVmZmNkXDA3MFx1ZmZjZFwwNzEiICsKLSAgICAiXHVmZmNkXDA3Mlx1ZmZjZFwwNzNcdWZmY2RcMDc0XHVmZmNkXDA3NVx1ZmZjZFwwNzZcdWZmY2RcMDc3XHVmZmNkIiArCi0gICAgIlwxMDBcdWZmY2RcMTAxXHVmZmNkXDEwMlx1ZmZjZFwxMDNcdWZmY2RcMTA0XHVmZmNkXDEwNVx1ZmZjZFwxMDYiICsKLSAgICAiXHVmZmNkXDEwN1x1ZmZjZFwxMTBcdWZmY2RcMTExXHVmZmNkXDExMlx1ZmZjZFwxMTNcdWZmY2RcMTE0XHVmZmNkIiArCi0gICAgIlwxMTVcdWZmY2RcMTE2XHVmZmNkXDExN1x1ZmZjZFwxMjBcdWZmY2RcMTIxXHVmZmNkXDEyMlx1ZmZjZFwxMjMiICsKLSAgICAiXHVmZmNkXDEyNFx1ZmZjZFwxMjVcdWZmY2RcMTI2XHVmZmNkXDEyN1x1ZmZjZFwxMzBcdWZmY2RcMTMxXHVmZmNkIiArCi0gICAgIlwwMDFcMDAyXDAwMFwyMTZcMDA2XHVmZmNjXDAxMFx1ZmZjY1wwMTFcdWZmY2NcMDEyXHVmZmNjXDAyNCIgKwotICAgICJcdWZmY2NcMDI1XHVmZmNjXDAyN1x1ZmZjY1wwMzBcdWZmY2NcMDMzXHVmZmNjXDAzNFx1ZmZjY1wwMzZcdWZmY2MiICsKLSAgICAiXDAzN1x1ZmZjY1wwNDBcdWZmY2NcMDQxXHVmZmNjXDA0Mlx1ZmZjY1wwNDNcdWZmY2NcMDQ0XHVmZmNjXDA0NSIgKwotICAgICJcdWZmY2NcMDQ2XHVmZmNjXDA0N1x1ZmZjY1wwNTBcdWZmY2NcMDUxXHVmZmNjXDA1Mlx1ZmZjY1wwNTNcdWZmY2MiICsKLSAgICAiXDA1NFx1ZmZjY1wwNTVcdWZmY2NcMDU2XHVmZmNjXDA1N1x1ZmZjY1wwNjBcdWZmY2NcMDYxXHVmZmNjXDA2MiIgKwotICAgICJcdWZmY2NcMDYzXHVmZmNjXDA2NFx1ZmZjY1wwNjVcdWZmY2NcMDY2XHVmZmNjXDA2N1x1ZmZjY1wwNzBcdWZmY2MiICsKLSAgICAiXDA3MVx1ZmZjY1wwNzJcdWZmY2NcMDczXHVmZmNjXDA3NFx1ZmZjY1wwNzVcdWZmY2NcMDc2XHVmZmNjXDA3NyIgKwotICAgICJcdWZmY2NcMTAwXHVmZmNjXDEwMVx1ZmZjY1wxMDJcdWZmY2NcMTAzXHVmZmNjXDEwNFx1ZmZjY1wxMDVcdWZmY2MiICsKLSAgICAiXDEwNlx1ZmZjY1wxMDdcdWZmY2NcMTEwXHVmZmNjXDExMVx1ZmZjY1wxMTJcdWZmY2NcMTEzXHVmZmNjXDExNCIgKwotICAgICJcdWZmY2NcMTE1XHVmZmNjXDExNlx1ZmZjY1wxMTdcdWZmY2NcMTIwXHVmZmNjXDEyMVx1ZmZjY1wxMjJcdWZmY2MiICsKLSAgICAiXDEyM1x1ZmZjY1wxMjRcdWZmY2NcMTI1XHVmZmNjXDEyNlx1ZmZjY1wxMjdcdWZmY2NcMTMwXHVmZmNjXDEzMSIgKwotICAgICJcdWZmY2NcMDAxXDAwMlwwMDBcMjE2XDAwNlx1ZmZjYlwwMTBcdWZmY2JcMDExXHVmZmNiXDAxMlx1ZmZjYiIgKwotICAgICJcMDI0XHVmZmNiXDAyNVx1ZmZjYlwwMjdcdWZmY2JcMDMwXHVmZmNiXDAzM1x1ZmZjYlwwMzRcdWZmY2JcMDM2IiArCi0gICAgIlx1ZmZjYlwwMzdcdWZmY2JcMDQwXHVmZmNiXDA0MVx1ZmZjYlwwNDJcdWZmY2JcMDQzXHVmZmNiXDA0NFx1ZmZjYiIgKwotICAgICJcMDQ1XHVmZmNiXDA0Nlx1ZmZjYlwwNDdcdWZmY2JcMDUwXHVmZmNiXDA1MVx1ZmZjYlwwNTJcdWZmY2JcMDUzIiArCi0gICAgIlx1ZmZjYlwwNTRcdWZmY2JcMDU1XHVmZmNiXDA1Nlx1ZmZjYlwwNTdcdWZmY2JcMDYwXHVmZmNiXDA2MVx1ZmZjYiIgKwotICAgICJcMDYyXHVmZmNiXDA2M1x1ZmZjYlwwNjRcdWZmY2JcMDY1XHVmZmNiXDA2Nlx1ZmZjYlwwNjdcdWZmY2JcMDcwIiArCi0gICAgIlx1ZmZjYlwwNzFcdWZmY2JcMDcyXHVmZmNiXDA3M1x1ZmZjYlwwNzRcdWZmY2JcMDc1XHVmZmNiXDA3Nlx1ZmZjYiIgKwotICAgICJcMDc3XHVmZmNiXDEwMFx1ZmZjYlwxMDFcdWZmY2JcMTAyXHVmZmNiXDEwM1x1ZmZjYlwxMDRcdWZmY2JcMTA1IiArCi0gICAgIlx1ZmZjYlwxMDZcdWZmY2JcMTA3XHVmZmNiXDExMFx1ZmZjYlwxMTFcdWZmY2JcMTEyXHVmZmNiXDExM1x1ZmZjYiIgKwotICAgICJcMTE0XHVmZmNiXDExNVx1ZmZjYlwxMTZcdWZmY2JcMTE3XHVmZmNiXDEyMFx1ZmZjYlwxMjFcdWZmY2JcMTIyIiArCi0gICAgIlx1ZmZjYlwxMjNcdWZmY2JcMTI0XHVmZmNiXDEyNVx1ZmZjYlwxMjZcdWZmY2JcMTI3XHVmZmNiXDEzMFx1ZmZjYiIgKwotICAgICJcMTMxXHVmZmNiXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTIiICsKLSAgICAiXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNiIgKwotICAgICJcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0IiArCi0gICAgIlwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjciICsKLSAgICAiXDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MSIgKwotICAgICJcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1IiArCi0gICAgIlwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzYiICsKLSAgICAiXDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwNyIgKwotICAgICJcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzIiArCi0gICAgIlwxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjQiICsKLSAgICAiXDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMCIgKwotICAgICJcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMjE2XDAwNlx1ZmZjMlwwMTBcdWZmYzJcMDExXHVmZmMyIiArCi0gICAgIlwwMTJcdWZmYzJcMDI0XHVmZmMyXDAyNVx1ZmZjMlwwMjdcdWZmYzJcMDMwXHVmZmMyXDAzM1x1ZmZjMlwwMzQiICsKLSAgICAiXHVmZmMyXDAzNlx1ZmZjMlwwMzdcdWZmYzJcMDQwXHVmZmMyXDA0MVx1ZmZjMlwwNDJcdWZmYzJcMDQzXHVmZmMyIiArCi0gICAgIlwwNDRcdWZmYzJcMDQ1XHVmZmMyXDA0Nlx1ZmZjMlwwNDdcdWZmYzJcMDUwXHVmZmMyXDA1MVx1ZmZjMlwwNTIiICsKLSAgICAiXHVmZmMyXDA1M1x1ZmZjMlwwNTRcdWZmYzJcMDU1XHVmZmMyXDA1Nlx1ZmZjMlwwNTdcdWZmYzJcMDYwXHVmZmMyIiArCi0gICAgIlwwNjFcdWZmYzJcMDYyXHVmZmMyXDA2M1x1ZmZjMlwwNjRcdWZmYzJcMDY1XHVmZmMyXDA2Nlx1ZmZjMlwwNjciICsKLSAgICAiXHVmZmMyXDA3MFx1ZmZjMlwwNzFcdWZmYzJcMDcyXHVmZmMyXDA3M1x1ZmZjMlwwNzRcdWZmYzJcMDc1XHVmZmMyIiArCi0gICAgIlwwNzZcdWZmYzJcMDc3XHVmZmMyXDEwMFx1ZmZjMlwxMDFcdWZmYzJcMTAyXHVmZmMyXDEwM1x1ZmZjMlwxMDQiICsKLSAgICAiXHVmZmMyXDEwNVx1ZmZjMlwxMDZcdWZmYzJcMTA3XHVmZmMyXDExMFx1ZmZjMlwxMTFcdWZmYzJcMTEyXHVmZmMyIiArCi0gICAgIlwxMTNcdWZmYzJcMTE0XHVmZmMyXDExNVx1ZmZjMlwxMTZcdWZmYzJcMTE3XHVmZmMyXDEyMFx1ZmZjMlwxMjEiICsKLSAgICAiXHVmZmMyXDEyMlx1ZmZjMlwxMjNcdWZmYzJcMTI0XHVmZmMyXDEyNVx1ZmZjMlwxMjZcdWZmYzJcMTI3XHVmZmMyIiArCi0gICAgIlwxMzBcdWZmYzJcMTMxXHVmZmMyXDAwMVwwMDJcMDAwXDIxNlwwMDZcdWZmYzdcMDEwXHVmZmM3XDAxMSIgKwotICAgICJcdWZmYzdcMDEyXHVmZmM3XDAyNFx1ZmZjN1wwMjVcdWZmYzdcMDI3XHVmZmM3XDAzMFx1ZmZjN1wwMzNcdWZmYzciICsKLSAgICAiXDAzNFx1ZmZjN1wwMzZcdWZmYzdcMDM3XHVmZmM3XDA0MFx1ZmZjN1wwNDFcdWZmYzdcMDQyXHVmZmM3XDA0MyIgKwotICAgICJcdWZmYzdcMDQ0XHVmZmM3XDA0NVx1ZmZjN1wwNDZcdWZmYzdcMDQ3XHVmZmM3XDA1MFx1ZmZjN1wwNTFcdWZmYzciICsKLSAgICAiXDA1Mlx1ZmZjN1wwNTNcdWZmYzdcMDU0XHVmZmM3XDA1NVx1ZmZjN1wwNTZcdWZmYzdcMDU3XHVmZmM3XDA2MCIgKwotICAgICJcdWZmYzdcMDYxXHVmZmM3XDA2Mlx1ZmZjN1wwNjNcdWZmYzdcMDY0XHVmZmM3XDA2NVx1ZmZjN1wwNjZcdWZmYzciICsKLSAgICAiXDA2N1x1ZmZjN1wwNzBcdWZmYzdcMDcxXHVmZmM3XDA3Mlx1ZmZjN1wwNzNcdWZmYzdcMDc0XHVmZmM3XDA3NSIgKwotICAgICJcdWZmYzdcMDc2XHVmZmM3XDA3N1x1ZmZjN1wxMDBcdWZmYzdcMTAxXHVmZmM3XDEwMlx1ZmZjN1wxMDNcdWZmYzciICsKLSAgICAiXDEwNFx1ZmZjN1wxMDVcdWZmYzdcMTA2XHVmZmM3XDEwN1x1ZmZjN1wxMTBcdWZmYzdcMTExXHVmZmM3XDExMiIgKwotICAgICJcdWZmYzdcMTEzXHVmZmM3XDExNFx1ZmZjN1wxMTVcdWZmYzdcMTE2XHVmZmM3XDExN1x1ZmZjN1wxMjBcdWZmYzciICsKLSAgICAiXDEyMVx1ZmZjN1wxMjJcdWZmYzdcMTIzXHVmZmM3XDEyNFx1ZmZjN1wxMjVcdWZmYzdcMTI2XHVmZmM3XDEyNyIgKwotICAgICJcdWZmYzdcMTMwXHVmZmM3XDEzMVx1ZmZjN1wwMDFcMDAyXDAwMFwyMTZcMDA2XHVmZmMwXDAxMFx1ZmZjMCIgKwotICAgICJcMDExXHVmZmMwXDAxMlx1ZmZjMFwwMjRcdWZmYzBcMDI1XHVmZmMwXDAyN1x1ZmZjMFwwMzBcdWZmYzBcMDMzIiArCi0gICAgIlx1ZmZjMFwwMzRcdWZmYzBcMDM2XHVmZmMwXDAzN1x1ZmZjMFwwNDBcdWZmYzBcMDQxXHVmZmMwXDA0Mlx1ZmZjMCIgKwotICAgICJcMDQzXHVmZmMwXDA0NFx1ZmZjMFwwNDVcdWZmYzBcMDQ2XHVmZmMwXDA0N1x1ZmZjMFwwNTBcdWZmYzBcMDUxIiArCi0gICAgIlx1ZmZjMFwwNTJcdWZmYzBcMDUzXHVmZmMwXDA1NFx1ZmZjMFwwNTVcdWZmYzBcMDU2XHVmZmMwXDA1N1x1ZmZjMCIgKwotICAgICJcMDYwXHVmZmMwXDA2MVx1ZmZjMFwwNjJcdWZmYzBcMDYzXHVmZmMwXDA2NFx1ZmZjMFwwNjVcdWZmYzBcMDY2IiArCi0gICAgIlx1ZmZjMFwwNjdcdWZmYzBcMDcwXHVmZmMwXDA3MVx1ZmZjMFwwNzJcdWZmYzBcMDczXHVmZmMwXDA3NFx1ZmZjMCIgKwotICAgICJcMDc1XHVmZmMwXDA3Nlx1ZmZjMFwwNzdcdWZmYzBcMTAwXHVmZmMwXDEwMVx1ZmZjMFwxMDJcdWZmYzBcMTAzIiArCi0gICAgIlx1ZmZjMFwxMDRcdWZmYzBcMTA1XHVmZmMwXDEwNlx1ZmZjMFwxMDdcdWZmYzBcMTEwXHVmZmMwXDExMVx1ZmZjMCIgKwotICAgICJcMTEyXHVmZmMwXDExM1x1ZmZjMFwxMTRcdWZmYzBcMTE1XHVmZmMwXDExNlx1ZmZjMFwxMTdcdWZmYzBcMTIwIiArCi0gICAgIlx1ZmZjMFwxMjFcdWZmYzBcMTIyXHVmZmMwXDEyM1x1ZmZjMFwxMjRcdWZmYzBcMTI1XHVmZmMwXDEyNlx1ZmZjMCIgKwotICAgICJcMTI3XHVmZmMwXDEzMFx1ZmZjMFwxMzFcdWZmYzBcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwIiArCi0gICAgIlwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjUiICsKLSAgICAiXDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MiIgKwotICAgICJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3IiArCi0gICAgIlwwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTciICsKLSAgICAiXDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMSIgKwotICAgICJcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0IiArCi0gICAgIlwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDIiICsKLSAgICAiXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMSIgKwotICAgICJcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzIiArCi0gICAgIlwxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjYiICsKLSAgICAiXDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMCIgKwotICAgICJcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwIiArCi0gICAgIlwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTQiICsKLSAgICAiXDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MCIgKwotICAgICJcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyIiArCi0gICAgIlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjUiICsKLSAgICAiXDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MiIgKwotICAgICJcMDc0XDE2MVwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyIiArCi0gICAgIlwyMDJcMTAzXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDAiICsKLSAgICAiXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExNyIgKwotICAgICJcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwIiArCi0gICAgIlwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDIxNlwwMDYiICsKLSAgICAiXHVmZmM4XDAxMFx1ZmZjOFwwMTFcdWZmYzhcMDEyXHVmZmM4XDAyNFx1ZmZjOFwwMjVcdWZmYzhcMDI3XHVmZmM4IiArCi0gICAgIlwwMzBcdWZmYzhcMDMzXHVmZmM4XDAzNFx1ZmZjOFwwMzZcdWZmYzhcMDM3XHVmZmM4XDA0MFx1ZmZjOFwwNDEiICsKLSAgICAiXHVmZmM4XDA0Mlx1ZmZjOFwwNDNcdWZmYzhcMDQ0XHVmZmM4XDA0NVx1ZmZjOFwwNDZcdWZmYzhcMDQ3XHVmZmM4IiArCi0gICAgIlwwNTBcdWZmYzhcMDUxXHVmZmM4XDA1Mlx1ZmZjOFwwNTNcdWZmYzhcMDU0XHVmZmM4XDA1NVx1ZmZjOFwwNTYiICsKLSAgICAiXHVmZmM4XDA1N1x1ZmZjOFwwNjBcdWZmYzhcMDYxXHVmZmM4XDA2Mlx1ZmZjOFwwNjNcdWZmYzhcMDY0XHVmZmM4IiArCi0gICAgIlwwNjVcdWZmYzhcMDY2XHVmZmM4XDA2N1x1ZmZjOFwwNzBcdWZmYzhcMDcxXHVmZmM4XDA3Mlx1ZmZjOFwwNzMiICsKLSAgICAiXHVmZmM4XDA3NFx1ZmZjOFwwNzVcdWZmYzhcMDc2XHVmZmM4XDA3N1x1ZmZjOFwxMDBcdWZmYzhcMTAxXHVmZmM4IiArCi0gICAgIlwxMDJcdWZmYzhcMTAzXHVmZmM4XDEwNFx1ZmZjOFwxMDVcdWZmYzhcMTA2XHVmZmM4XDEwN1x1ZmZjOFwxMTAiICsKLSAgICAiXHVmZmM4XDExMVx1ZmZjOFwxMTJcdWZmYzhcMTEzXHVmZmM4XDExNFx1ZmZjOFwxMTVcdWZmYzhcMTE2XHVmZmM4IiArCi0gICAgIlwxMTdcdWZmYzhcMTIwXHVmZmM4XDEyMVx1ZmZjOFwxMjJcdWZmYzhcMTIzXHVmZmM4XDEyNFx1ZmZjOFwxMjUiICsKLSAgICAiXHVmZmM4XDEyNlx1ZmZjOFwxMjdcdWZmYzhcMTMwXHVmZmM4XDEzMVx1ZmZjOFwwMDFcMDAyXDAwMFwwMjQiICsKLSAgICAiXDAwMlx1ZmZlYVwwMDVcdWZmZWFcMDA3XHVmZmVhXDAzMlx1ZmZlYVwxMDBcdWZmZWFcMTAxXHVmZmVhXDEwNyIgKwotICAgICJcdWZmZWFcMTEwXHVmZmVhXDExMVx1ZmZlYVwwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmViXDAwNVx1ZmZlYiIgKwotICAgICJcMDA3XHVmZmViXDAzMlx1ZmZlYlwxMDBcdWZmZWJcMTAxXHVmZmViXDEwN1x1ZmZlYlwxMTBcdWZmZWJcMTExIiArCi0gICAgIlx1ZmZlYlwwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmVjXDAwNVx1ZmZlY1wwMDdcdWZmZWNcMDMyXHVmZmVjIiArCi0gICAgIlwxMDBcdWZmZWNcMTAxXHVmZmVjXDEwN1x1ZmZlY1wxMTBcdWZmZWNcMTExXHVmZmVjXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxNjRcMDEyXHVmZmExXDAzNlx1ZmZhMVwwMzdcdWZmYTFcMDQwXHVmZmExXDA0MVx1ZmZhMVwwNDJcdWZmYTEiICsKLSAgICAiXDA0M1x1ZmZhMVwwNDRcdWZmYTFcMDQ1XHVmZmExXDA0Nlx1ZmZhMVwwNDdcdWZmYTFcMDUwXHVmZmExXDA1MSIgKwotICAgICJcdWZmYTFcMDUyXHVmZmExXDA1M1x1ZmZhMVwwNTRcdWZmYTFcMDU1XHVmZmExXDA1Nlx1ZmZhMVwwNTdcdWZmYTEiICsKLSAgICAiXDA2MFx1ZmZhMVwwNjFcdWZmYTFcMDYyXHVmZmExXDA2M1x1ZmZhMVwwNjRcdWZmYTFcMDY1XHVmZmExXDA2NiIgKwotICAgICJcdWZmYTFcMDY3XHVmZmExXDA3MFx1ZmZhMVwwNzFcdWZmYTFcMDcyXHVmZmExXDA3M1x1ZmZhMVwwNzRcdWZmYTEiICsKLSAgICAiXDA3NVx1ZmZhMVwwNzZcdWZmYTFcMDc3XHVmZmExXDEwMFx1ZmZhMVwxMDFcdWZmYTFcMTAyXHVmZmExXDEwMyIgKwotICAgICJcdWZmYTFcMTA0XHVmZmExXDEwNVx1ZmZhMVwxMDZcdWZmYTFcMTA3XHVmZmExXDExMFx1ZmZhMVwxMTFcdWZmYTEiICsKLSAgICAiXDExMlx1ZmZhMVwxMTNcdWZmYTFcMTE0XHVmZmExXDExNVx1ZmZhMVwxMTZcdWZmYTFcMTE3XHVmZmExXDEyMCIgKwotICAgICJcdWZmYTFcMTIxXHVmZmExXDEyMlx1ZmZhMVwxMjNcdWZmYTFcMTI0XHVmZmExXDEzMVx1ZmZhMVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA0XDA3Mlx1MDE0MFwwMDFcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MCIgKwotICAgICJcdTAxMjRcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTAiICsKLSAgICAiXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NSIgKwotICAgICJcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxIiArCi0gICAgIlwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzIiICsKLSAgICAiXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NiIgKwotICAgICJcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3IiArCi0gICAgIlwzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlx1MDE0NlwxMTNcdTAxNDVcMTE0XDAyN1wxMTVcMDIxIiArCi0gICAgIlwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjQiICsKLSAgICAiXDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDExNFwwMDJcdWZmODBcMDA1XHVmZjgwXDAwN1x1ZmY4MCIgKwotICAgICJcMDEwXHUwMTRlXDAxMVx1ZmY4MFwwMTJcdTAxNGNcMDEzXHVmZjgwXDAxNFx1ZmY4MFwwMTVcdWZmODBcMDE2IiArCi0gICAgIlx1ZmY4MFwwMTdcdWZmODBcMDIwXHVmZjgwXDAyMVx1ZmY4MFwwMjJcdWZmODBcMDIzXHVmZjgwXDAzMlx1ZmY4MCIgKwotICAgICJcMDM1XHUwMTRmXDA1M1x1ZmY4MFwwNTRcdWZmODBcMDU1XHVmZjgwXDA1Nlx1ZmY4MFwwNTdcdWZmODBcMDYwIiArCi0gICAgIlx1ZmY4MFwwNjFcdWZmODBcMDYyXHVmZjgwXDA2M1x1ZmY4MFwwNjRcdWZmODBcMDY1XHVmZjgwXDA2Nlx1ZmY4MCIgKwotICAgICJcMDY3XHVmZjgwXDA3NVx1ZmY4MFwxMDBcdWZmODBcMTAxXHVmZjgwXDEwMlx1ZmY4MFwxMDdcdWZmODBcMTEwIiArCi0gICAgIlx1ZmY4MFwxMTFcdWZmODBcMDAxXDAwMlwwMDBcMTE0XDAwMlx1ZmY3OVwwMDVcdWZmNzlcMDA3XHVmZjc5IiArCi0gICAgIlwwMTBcdWZmNzlcMDExXHVmZjc5XDAxMlx1ZmY3OVwwMTNcdWZmNzlcMDE0XHVmZjc5XDAxNVx1ZmY3OVwwMTYiICsKLSAgICAiXHVmZjc5XDAxN1x1ZmY3OVwwMjBcdWZmNzlcMDIxXHVmZjc5XDAyMlx1ZmY3OVwwMjNcdWZmNzlcMDMyXHVmZjc5IiArCi0gICAgIlwwMzVcdWZmNzlcMDUzXHVmZjc5XDA1NFx1ZmY3OVwwNTVcdWZmNzlcMDU2XHVmZjc5XDA1N1x1ZmY3OVwwNjAiICsKLSAgICAiXHVmZjc5XDA2MVx1ZmY3OVwwNjJcdWZmNzlcMDYzXHVmZjc5XDA2NFx1ZmY3OVwwNjVcdWZmNzlcMDY2XHVmZjc5IiArCi0gICAgIlwwNjdcdWZmNzlcMDc1XHVmZjc5XDEwMFx1ZmY3OVwxMDFcdWZmNzlcMTAyXHVmZjc5XDEwN1x1ZmY3OVwxMTAiICsKLSAgICAiXHVmZjc5XDExMVx1ZmY3OVwwMDFcMDAyXDAwMFwxMTJcMDAyXHVmZmQ2XDAwNVx1ZmZkNlwwMDdcdWZmZDYiICsKLSAgICAiXDAxMFx1ZmZkNlwwMTFcdWZmZDZcMDEyXHVmZmQ2XDAxM1x1ZmZkNlwwMTRcdWZmZDZcMDE1XHVmZmQ2XDAxNiIgKwotICAgICJcdWZmZDZcMDE3XHVmZmQ2XDAyMFx1ZmZkNlwwMjFcdWZmZDZcMDIyXHVmZmQ2XDAyM1x1ZmZkNlwwMzJcdWZmZDYiICsKLSAgICAiXDA1M1x1ZmZkNlwwNTRcdWZmZDZcMDU1XHVmZmQ2XDA1Nlx1ZmZkNlwwNTdcdWZmZDZcMDYwXHVmZmQ2XDA2MSIgKwotICAgICJcdWZmZDZcMDYyXHVmZmQ2XDA2M1x1ZmZkNlwwNjRcdWZmZDZcMDY1XHVmZmQ2XDA2Nlx1ZmZkNlwwNjdcdWZmZDYiICsKLSAgICAiXDA3NVx1ZmZkNlwxMDBcdWZmZDZcMTAxXHVmZmQ2XDEwMlx1ZmZkNlwxMDdcdWZmZDZcMTEwXHVmZmQ2XDExMSIgKwotICAgICJcdWZmZDZcMDAxXDAwMlwwMDBcMTE0XDAwMlx1ZmY3YVwwMDVcdWZmN2FcMDA3XHVmZjdhXDAxMFx1ZmY3YSIgKwotICAgICJcMDExXHVmZjdhXDAxMlx1ZmY3YVwwMTNcdWZmN2FcMDE0XHVmZjdhXDAxNVx1ZmY3YVwwMTZcdWZmN2FcMDE3IiArCi0gICAgIlx1ZmY3YVwwMjBcdWZmN2FcMDIxXHVmZjdhXDAyMlx1ZmY3YVwwMjNcdWZmN2FcMDMyXHVmZjdhXDAzNVx1ZmY3YSIgKwotICAgICJcMDUzXHVmZjdhXDA1NFx1ZmY3YVwwNTVcdWZmN2FcMDU2XHVmZjdhXDA1N1x1ZmY3YVwwNjBcdWZmN2FcMDYxIiArCi0gICAgIlx1ZmY3YVwwNjJcdWZmN2FcMDYzXHVmZjdhXDA2NFx1ZmY3YVwwNjVcdWZmN2FcMDY2XHVmZjdhXDA2N1x1ZmY3YSIgKwotICAgICJcMDc1XHVmZjdhXDEwMFx1ZmY3YVwxMDFcdWZmN2FcMTAyXHVmZjdhXDEwN1x1ZmY3YVwxMTBcdWZmN2FcMTExIiArCi0gICAgIlx1ZmY3YVwwMDFcMDAyXDAwMFwxMjBcMDAyXHVmZjFkXDAwNVx1ZmYxZFwwMDZcdTAxNGFcMDA3XHVmZjFkIiArCi0gICAgIlwwMTBcdWZmMWRcMDExXHVmZjFkXDAxMlx1ZmYxZFwwMTNcdWZmMWRcMDE0XHVmZjFkXDAxNVx1ZmYxZFwwMTYiICsKLSAgICAiXHVmZjFkXDAxN1x1ZmYxZFwwMjBcdWZmMWRcMDIxXHVmZjFkXDAyMlx1ZmYxZFwwMjNcdWZmMWRcMDMxXHVmZjFkIiArCi0gICAgIlwwMzJcdWZmMWRcMDM1XHVmZjFkXDA1M1x1ZmYxZFwwNTRcdWZmMWRcMDU1XHVmZjFkXDA1Nlx1ZmYxZFwwNTciICsKLSAgICAiXHVmZjFkXDA2MFx1ZmYxZFwwNjFcdWZmMWRcMDYyXHVmZjFkXDA2M1x1ZmYxZFwwNjRcdWZmMWRcMDY1XHVmZjFkIiArCi0gICAgIlwwNjZcdWZmMWRcMDY3XHVmZjFkXDA3NVx1ZmYxZFwxMDBcdWZmMWRcMTAxXHVmZjFkXDEwMlx1ZmYxZFwxMDciICsKLSAgICAiXHVmZjFkXDExMFx1ZmYxZFwxMTFcdWZmMWRcMDAxXDAwMlwwMDBcMTIwXDAwMlx1ZmYxZVwwMDVcdWZmMWUiICsKLSAgICAiXDAwNlx1MDE0OFwwMDdcdWZmMWVcMDEwXHVmZjFlXDAxMVx1ZmYxZVwwMTJcdWZmMWVcMDEzXHVmZjFlXDAxNCIgKwotICAgICJcdWZmMWVcMDE1XHVmZjFlXDAxNlx1ZmYxZVwwMTdcdWZmMWVcMDIwXHVmZjFlXDAyMVx1ZmYxZVwwMjJcdWZmMWUiICsKLSAgICAiXDAyM1x1ZmYxZVwwMzFcdWZmMWVcMDMyXHVmZjFlXDAzNVx1ZmYxZVwwNTNcdWZmMWVcMDU0XHVmZjFlXDA1NSIgKwotICAgICJcdWZmMWVcMDU2XHVmZjFlXDA1N1x1ZmYxZVwwNjBcdWZmMWVcMDYxXHVmZjFlXDA2Mlx1ZmYxZVwwNjNcdWZmMWUiICsKLSAgICAiXDA2NFx1ZmYxZVwwNjVcdWZmMWVcMDY2XHVmZjFlXDA2N1x1ZmYxZVwwNzVcdWZmMWVcMTAwXHVmZjFlXDEwMSIgKwotICAgICJcdWZmMWVcMTAyXHVmZjFlXDEwN1x1ZmYxZVwxMTBcdWZmMWVcMTExXHVmZjFlXDAwMVwwMDJcMDAwXDEyMCIgKwotICAgICJcMDAyXHVmZjc3XDAwNVx1ZmY3N1wwMDdcdWZmNzdcMDEwXHVmZjc3XDAxMVx1ZmY3N1wwMTJcdWZmNzdcMDEzIiArCi0gICAgIlx1ZmY3N1wwMTRcdWZmNzdcMDE1XHVmZjc3XDAxNlx1ZmY3N1wwMTdcdWZmNzdcMDIwXHVmZjc3XDAyMVx1ZmY3NyIgKwotICAgICJcMDIyXHVmZjc3XDAyM1x1ZmY3N1wwMzJcdWZmNzdcMDM1XHVmZjc3XDA1M1x1ZmY3N1wwNTRcdWZmNzdcMDU1IiArCi0gICAgIlx1ZmY3N1wwNTZcdWZmNzdcMDU3XHVmZjc3XDA2MFx1ZmY3N1wwNjFcdWZmNzdcMDYyXHVmZjc3XDA2M1x1ZmY3NyIgKwotICAgICJcMDY0XHVmZjc3XDA2NVx1ZmY3N1wwNjZcdWZmNzdcMDY3XHVmZjc3XDA3MVx1ZmY3N1wwNzNcdWZmNzdcMDc1IiArCi0gICAgIlx1ZmY3N1wxMDBcdWZmNzdcMTAxXHVmZjc3XDEwMlx1ZmY3N1wxMDdcdWZmNzdcMTEwXHVmZjc3XDExMVx1ZmY3NyIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE0OVwwMDFcMDAyXDAwMFwxMTJcMDAyXHVmZjdlXDAwNSIgKwotICAgICJcdWZmN2VcMDA3XHVmZjdlXDAxMFx1ZmY3ZVwwMTFcdWZmN2VcMDEyXHVmZjdlXDAxM1x1ZmY3ZVwwMTRcdWZmN2UiICsKLSAgICAiXDAxNVx1ZmY3ZVwwMTZcdWZmN2VcMDE3XHVmZjdlXDAyMFx1ZmY3ZVwwMjFcdWZmN2VcMDIyXHVmZjdlXDAyMyIgKwotICAgICJcdWZmN2VcMDMyXHVmZjdlXDA1M1x1ZmY3ZVwwNTRcdWZmN2VcMDU1XHVmZjdlXDA1Nlx1ZmY3ZVwwNTdcdWZmN2UiICsKLSAgICAiXDA2MFx1ZmY3ZVwwNjFcdWZmN2VcMDYyXHVmZjdlXDA2M1x1ZmY3ZVwwNjRcdWZmN2VcMDY1XHVmZjdlXDA2NiIgKwotICAgICJcdWZmN2VcMDY3XHVmZjdlXDA3NVx1ZmY3ZVwxMDBcdWZmN2VcMTAxXHVmZjdlXDEwMlx1ZmY3ZVwxMDdcdWZmN2UiICsKLSAgICAiXDExMFx1ZmY3ZVwxMTFcdWZmN2VcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE0YlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTE0XDAwMlx1ZmY3OFwwMDVcdWZmNzhcMDA3XHVmZjc4XDAxMFx1ZmY3OFwwMTFcdWZmNzhcMDEyXHVmZjc4IiArCi0gICAgIlwwMTNcdWZmNzhcMDE0XHVmZjc4XDAxNVx1ZmY3OFwwMTZcdWZmNzhcMDE3XHVmZjc4XDAyMFx1ZmY3OFwwMjEiICsKLSAgICAiXHVmZjc4XDAyMlx1ZmY3OFwwMjNcdWZmNzhcMDMyXHVmZjc4XDAzNVx1ZmY3OFwwNTNcdWZmNzhcMDU0XHVmZjc4IiArCi0gICAgIlwwNTVcdWZmNzhcMDU2XHVmZjc4XDA1N1x1ZmY3OFwwNjBcdWZmNzhcMDYxXHVmZjc4XDA2Mlx1ZmY3OFwwNjMiICsKLSAgICAiXHVmZjc4XDA2NFx1ZmY3OFwwNjVcdWZmNzhcMDY2XHVmZjc4XDA2N1x1ZmY3OFwwNzVcdWZmNzhcMTAwXHVmZjc4IiArCi0gICAgIlwxMDFcdWZmNzhcMTAyXHVmZjc4XDEwN1x1ZmY3OFwxMTBcdWZmNzhcMTExXHVmZjc4XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTJcMDAyXHVmZjdjXDAwNVx1ZmY3Y1wwMDdcdWZmN2NcMDEwXHVmZjdjXDAxMVx1ZmY3Y1wwMTJcdWZmN2MiICsKLSAgICAiXDAxM1x1ZmY3Y1wwMTRcdWZmN2NcMDE1XHVmZjdjXDAxNlx1ZmY3Y1wwMTdcdWZmN2NcMDIwXHVmZjdjXDAyMSIgKwotICAgICJcdWZmN2NcMDIyXHVmZjdjXDAyM1x1ZmY3Y1wwMzJcdWZmN2NcMDUzXHVmZjdjXDA1NFx1ZmY3Y1wwNTVcdWZmN2MiICsKLSAgICAiXDA1Nlx1ZmY3Y1wwNTdcdWZmN2NcMDYwXHVmZjdjXDA2MVx1ZmY3Y1wwNjJcdWZmN2NcMDYzXHVmZjdjXDA2NCIgKwotICAgICJcdWZmN2NcMDY1XHVmZjdjXDA2Nlx1ZmY3Y1wwNjdcdWZmN2NcMDc1XHVmZjdjXDEwMFx1ZmY3Y1wxMDFcdWZmN2MiICsKLSAgICAiXDEwMlx1ZmY3Y1wxMDdcdWZmN2NcMTEwXHVmZjdjXDExMVx1ZmY3Y1wwMDFcMDAyXDAwMFwxMTJcMDAyIiArCi0gICAgIlx1ZmY3ZlwwMDVcdWZmN2ZcMDA3XHVmZjdmXDAxMFx1ZmY3ZlwwMTFcdWZmN2ZcMDEyXHVmZjdmXDAxM1x1ZmY3ZiIgKwotICAgICJcMDE0XHVmZjdmXDAxNVx1ZmY3ZlwwMTZcdWZmN2ZcMDE3XHVmZjdmXDAyMFx1ZmY3ZlwwMjFcdWZmN2ZcMDIyIiArCi0gICAgIlx1ZmY3ZlwwMjNcdWZmN2ZcMDMyXHVmZjdmXDA1M1x1ZmY3ZlwwNTRcdWZmN2ZcMDU1XHVmZjdmXDA1Nlx1ZmY3ZiIgKwotICAgICJcMDU3XHVmZjdmXDA2MFx1ZmY3ZlwwNjFcdWZmN2ZcMDYyXHVmZjdmXDA2M1x1ZmY3ZlwwNjRcdWZmN2ZcMDY1IiArCi0gICAgIlx1ZmY3ZlwwNjZcdWZmN2ZcMDY3XHVmZjdmXDA3NVx1ZmY3ZlwxMDBcdWZmN2ZcMTAxXHVmZjdmXDEwMlx1ZmY3ZiIgKwotICAgICJcMTA3XHVmZjdmXDExMFx1ZmY3ZlwxMTFcdWZmN2ZcMDAxXDAwMlwwMDBcMTEyXDAwMlx1ZmY3YlwwMDUiICsKLSAgICAiXHVmZjdiXDAwN1x1ZmY3YlwwMTBcdWZmN2JcMDExXHVmZjdiXDAxMlx1ZmY3YlwwMTNcdWZmN2JcMDE0XHVmZjdiIiArCi0gICAgIlwwMTVcdWZmN2JcMDE2XHVmZjdiXDAxN1x1ZmY3YlwwMjBcdWZmN2JcMDIxXHVmZjdiXDAyMlx1ZmY3YlwwMjMiICsKLSAgICAiXHVmZjdiXDAzMlx1ZmY3YlwwNTNcdWZmN2JcMDU0XHVmZjdiXDA1NVx1ZmY3YlwwNTZcdWZmN2JcMDU3XHVmZjdiIiArCi0gICAgIlwwNjBcdWZmN2JcMDYxXHVmZjdiXDA2Mlx1ZmY3YlwwNjNcdWZmN2JcMDY0XHVmZjdiXDA2NVx1ZmY3YlwwNjYiICsKLSAgICAiXHVmZjdiXDA2N1x1ZmY3YlwwNzVcdWZmN2JcMTAwXHVmZjdiXDEwMVx1ZmY3YlwxMDJcdWZmN2JcMTA3XHVmZjdiIiArCi0gICAgIlwxMTBcdWZmN2JcMTExXHVmZjdiXDAwMVwwMDJcMDAwXDExMlwwMDJcdWZmN2RcMDA1XHVmZjdkXDAwNyIgKwotICAgICJcdWZmN2RcMDEwXHVmZjdkXDAxMVx1ZmY3ZFwwMTJcdWZmN2RcMDEzXHVmZjdkXDAxNFx1ZmY3ZFwwMTVcdWZmN2QiICsKLSAgICAiXDAxNlx1ZmY3ZFwwMTdcdWZmN2RcMDIwXHVmZjdkXDAyMVx1ZmY3ZFwwMjJcdWZmN2RcMDIzXHVmZjdkXDAzMiIgKwotICAgICJcdWZmN2RcMDUzXHVmZjdkXDA1NFx1ZmY3ZFwwNTVcdWZmN2RcMDU2XHVmZjdkXDA1N1x1ZmY3ZFwwNjBcdWZmN2QiICsKLSAgICAiXDA2MVx1ZmY3ZFwwNjJcdWZmN2RcMDYzXHVmZjdkXDA2NFx1ZmY3ZFwwNjVcdWZmN2RcMDY2XHVmZjdkXDA2NyIgKwotICAgICJcdWZmN2RcMDc1XHVmZjdkXDEwMFx1ZmY3ZFwxMDFcdWZmN2RcMTAyXHVmZjdkXDEwN1x1ZmY3ZFwxMTBcdWZmN2QiICsKLSAgICAiXDExMVx1ZmY3ZFwwMDFcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxIiArCi0gICAgIlwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzYiICsKLSAgICAiXDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NiIgKwotICAgICJcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3IiArCi0gICAgIlwwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzMiICsKLSAgICAiXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NSIgKwotICAgICJcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwIiArCi0gICAgIlwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTMiICsKLSAgICAiXDExN1wyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMSIgKwotICAgICJcMjcwXDAwMVwwMDJcMDAwXDAwNFwwMDdcdTAxNTNcMDAxXDAwMlwwMDBcMDA0XDAwN1x1ZmY1ZSIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1ZlwwMDRcdWZmNWZcMDA1XHVmZjVmXDAwN1x1ZmY1ZlwwMTAiICsKLSAgICAiXHVmZjVmXDAxMVx1ZmY1ZlwwMTJcdWZmNWZcMDEzXHVmZjVmXDAxNFx1ZmY1ZlwwMTVcdWZmNWZcMDE2XHVmZjVmIiArCi0gICAgIlwwMTdcdWZmNWZcMDIwXHVmZjVmXDAyMVx1ZmY1ZlwwMjJcdWZmNWZcMDIzXHVmZjVmXDAyNFx1ZmY1ZlwwMjUiICsKLSAgICAiXHVmZjVmXDAzMlx1ZmY1ZlwwMzVcdWZmNWZcMDUzXHVmZjVmXDA1NFx1ZmY1ZlwwNTVcdWZmNWZcMDU2XHVmZjVmIiArCi0gICAgIlwwNTdcdWZmNWZcMDYwXHVmZjVmXDA2MVx1ZmY1ZlwwNjJcdWZmNWZcMDYzXHVmZjVmXDA2NFx1ZmY1ZlwwNjUiICsKLSAgICAiXHVmZjVmXDA2Nlx1ZmY1ZlwwNjdcdWZmNWZcMDcxXHVmZjVmXDA3M1x1ZmY1ZlwwNzRcdWZmNWZcMDc1XHVmZjVmIiArCi0gICAgIlwxMDBcdWZmNWZcMTAxXHVmZjVmXDEwMlx1ZmY1ZlwxMDdcdWZmNWZcMTEwXHVmZjVmXDExMVx1ZmY1ZlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MSIgKwotICAgICJcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxIiArCi0gICAgIlwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTciICsKLSAgICAiXDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NiIgKwotICAgICJcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzIiArCi0gICAgIlwwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDMiICsKLSAgICAiXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NSIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwIiArCi0gICAgIlwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDA3XHUwMTU4XDAwMVwwMDJcMDAwXDAwNFwwMDdcdWZmNTZcMDAxXDAwMlwwMDAiICsKLSAgICAiXDAwNlwwMDdcdWZmNTRcMDMyXHVmZjU0XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNTdcMDA0XHVmZjU3IiArCi0gICAgIlwwMDVcdWZmNTdcMDA3XHVmZjU3XDAxMFx1ZmY1N1wwMTFcdWZmNTdcMDEyXHVmZjU3XDAxM1x1ZmY1N1wwMTQiICsKLSAgICAiXHVmZjU3XDAxNVx1ZmY1N1wwMTZcdWZmNTdcMDE3XHVmZjU3XDAyMFx1ZmY1N1wwMjFcdWZmNTdcMDIyXHVmZjU3IiArCi0gICAgIlwwMjNcdWZmNTdcMDI0XHVmZjU3XDAyNVx1ZmY1N1wwMzJcdWZmNTdcMDM1XHVmZjU3XDA1M1x1ZmY1N1wwNTQiICsKLSAgICAiXHVmZjU3XDA1NVx1ZmY1N1wwNTZcdWZmNTdcMDU3XHVmZjU3XDA2MFx1ZmY1N1wwNjFcdWZmNTdcMDYyXHVmZjU3IiArCi0gICAgIlwwNjNcdWZmNTdcMDY0XHVmZjU3XDA2NVx1ZmY1N1wwNjZcdWZmNTdcMDY3XHVmZjU3XDA3MVx1ZmY1N1wwNzMiICsKLSAgICAiXHVmZjU3XDA3NFx1ZmY1N1wwNzVcdWZmNTdcMTAwXHVmZjU3XDEwMVx1ZmY1N1wxMDJcdWZmNTdcMTA3XHVmZjU3IiArCi0gICAgIlwxMTBcdWZmNTdcMTExXHVmZjU3XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYjRcMDA0XDIyMlwwMDUiICsKLSAgICAiXHVmZmI0XDAwN1x1ZmZiNFwwMTBcdWZmYjRcMDExXHVmZmI0XDAxMlx1ZmZiNFwwMTNcdWZmYjRcMDE0XHVmZmI0IiArCi0gICAgIlwwMTVcdWZmYjRcMDE2XHVmZmI0XDAxN1x1ZmZiNFwwMjBcdWZmYjRcMDIxXHVmZmI0XDAyMlx1ZmZiNFwwMjMiICsKLSAgICAiXHVmZmI0XDAyNFx1ZmZiNFwwMjVcdWZmYjRcMDMyXHVmZmI0XDA1M1x1ZmZiNFwwNTRcdWZmYjRcMDU1XHVmZmI0IiArCi0gICAgIlwwNTZcdWZmYjRcMDU3XHVmZmI0XDA2MFx1ZmZiNFwwNjFcdWZmYjRcMDYyXHVmZmI0XDA2M1x1ZmZiNFwwNjQiICsKLSAgICAiXHVmZmI0XDA2NVx1ZmZiNFwwNjZcdWZmYjRcMDY3XHVmZmI0XDA3MVx1ZmZiNFwwNzNcdWZmYjRcMDc0XHVmZmI0IiArCi0gICAgIlwwNzVcdWZmYjRcMTAwXHVmZmI0XDEwMVx1ZmZiNFwxMDJcdWZmYjRcMTA3XHVmZmI0XDExMFx1ZmZiNFwxMTEiICsKLSAgICAiXHVmZmI0XDAwMVwwMDJcMDAwXDE2NlwwMDdcdTAxNWNcMDEyXHUwMTViXDAzNlwyNDZcMDM3XDI2MyIgKwotICAgICJcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2IiArCi0gICAgIlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDciICsKLSAgICAiXDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2MyIgKwotICAgICJcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyIiArCi0gICAgIlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDAiICsKLSAgICAiXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNiIgKwotICAgICJcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1IiArCi0gICAgIlwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTMiICsKLSAgICAiXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjU4XDAzMlx1ZmY1OFwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTMwXDAwMlx1ZmY1ZFwwMDRcdWZmNWRcMDA1XHVmZjVkXDAwN1x1ZmY1ZFwwMTBcdWZmNWQiICsKLSAgICAiXDAxMVx1ZmY1ZFwwMTJcdWZmNWRcMDEzXHVmZjVkXDAxNFx1ZmY1ZFwwMTVcdWZmNWRcMDE2XHVmZjVkXDAxNyIgKwotICAgICJcdWZmNWRcMDIwXHVmZjVkXDAyMVx1ZmY1ZFwwMjJcdWZmNWRcMDIzXHVmZjVkXDAyNFx1ZmY1ZFwwMjVcdWZmNWQiICsKLSAgICAiXDAzMlx1ZmY1ZFwwMzVcdWZmNWRcMDUzXHVmZjVkXDA1NFx1ZmY1ZFwwNTVcdWZmNWRcMDU2XHVmZjVkXDA1NyIgKwotICAgICJcdWZmNWRcMDYwXHVmZjVkXDA2MVx1ZmY1ZFwwNjJcdWZmNWRcMDYzXHVmZjVkXDA2NFx1ZmY1ZFwwNjVcdWZmNWQiICsKLSAgICAiXDA2Nlx1ZmY1ZFwwNjdcdWZmNWRcMDcxXHVmZjVkXDA3M1x1ZmY1ZFwwNzRcdWZmNWRcMDc1XHVmZjVkXDEwMCIgKwotICAgICJcdWZmNWRcMTAxXHVmZjVkXDEwMlx1ZmY1ZFwxMDdcdWZmNWRcMTEwXHVmZjVkXDExMVx1ZmY1ZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAwN1x1MDE2MFwwMzJcdTAxNWZcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY1OVwwMzIiICsKLSAgICAiXHVmZjU5XDAwMVwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDFcMjY3IiArCi0gICAgIlwwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTAiICsKLSAgICAiXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MiIgKwotICAgICJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1IiArCi0gICAgIlwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDMiICsKLSAgICAiXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMiIgKwotICAgICJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwIiArCi0gICAgIlwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTJcMTE2XDMxM1wxMTciICsKLSAgICAiXDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxXDI3MCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1Y1wwMDRcdWZmNWNcMDA1XHVmZjVjXDAwN1x1ZmY1Y1wwMTAiICsKLSAgICAiXHVmZjVjXDAxMVx1ZmY1Y1wwMTJcdWZmNWNcMDEzXHVmZjVjXDAxNFx1ZmY1Y1wwMTVcdWZmNWNcMDE2XHVmZjVjIiArCi0gICAgIlwwMTdcdWZmNWNcMDIwXHVmZjVjXDAyMVx1ZmY1Y1wwMjJcdWZmNWNcMDIzXHVmZjVjXDAyNFx1ZmY1Y1wwMjUiICsKLSAgICAiXHVmZjVjXDAzMlx1ZmY1Y1wwMzVcdWZmNWNcMDUzXHVmZjVjXDA1NFx1ZmY1Y1wwNTVcdWZmNWNcMDU2XHVmZjVjIiArCi0gICAgIlwwNTdcdWZmNWNcMDYwXHVmZjVjXDA2MVx1ZmY1Y1wwNjJcdWZmNWNcMDYzXHVmZjVjXDA2NFx1ZmY1Y1wwNjUiICsKLSAgICAiXHVmZjVjXDA2Nlx1ZmY1Y1wwNjdcdWZmNWNcMDcxXHVmZjVjXDA3M1x1ZmY1Y1wwNzRcdWZmNWNcMDc1XHVmZjVjIiArCi0gICAgIlwxMDBcdWZmNWNcMTAxXHVmZjVjXDEwMlx1ZmY1Y1wxMDdcdWZmNWNcMTEwXHVmZjVjXDExMVx1ZmY1Y1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMDA2XDAwN1x1MDE2M1wwMzVcdTAxNjJcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE2NCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1YlwwMDRcdWZmNWJcMDA1XHVmZjViXDAwN1x1ZmY1YlwwMTAiICsKLSAgICAiXHVmZjViXDAxMVx1ZmY1YlwwMTJcdWZmNWJcMDEzXHVmZjViXDAxNFx1ZmY1YlwwMTVcdWZmNWJcMDE2XHVmZjViIiArCi0gICAgIlwwMTdcdWZmNWJcMDIwXHVmZjViXDAyMVx1ZmY1YlwwMjJcdWZmNWJcMDIzXHVmZjViXDAyNFx1ZmY1YlwwMjUiICsKLSAgICAiXHVmZjViXDAzMlx1ZmY1YlwwMzVcdWZmNWJcMDUzXHVmZjViXDA1NFx1ZmY1YlwwNTVcdWZmNWJcMDU2XHVmZjViIiArCi0gICAgIlwwNTdcdWZmNWJcMDYwXHVmZjViXDA2MVx1ZmY1YlwwNjJcdWZmNWJcMDYzXHVmZjViXDA2NFx1ZmY1YlwwNjUiICsKLSAgICAiXHVmZjViXDA2Nlx1ZmY1YlwwNjdcdWZmNWJcMDcxXHVmZjViXDA3M1x1ZmY1YlwwNzRcdWZmNWJcMDc1XHVmZjViIiArCi0gICAgIlwxMDBcdWZmNWJcMTAxXHVmZjViXDEwMlx1ZmY1YlwxMDdcdWZmNWJcMTEwXHVmZjViXDExMVx1ZmY1YlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTMwXDAwMlx1ZmY1YVwwMDRcdWZmNWFcMDA1XHVmZjVhXDAwN1x1ZmY1YVwwMTBcdWZmNWEiICsKLSAgICAiXDAxMVx1ZmY1YVwwMTJcdWZmNWFcMDEzXHVmZjVhXDAxNFx1ZmY1YVwwMTVcdWZmNWFcMDE2XHVmZjVhXDAxNyIgKwotICAgICJcdWZmNWFcMDIwXHVmZjVhXDAyMVx1ZmY1YVwwMjJcdWZmNWFcMDIzXHVmZjVhXDAyNFx1ZmY1YVwwMjVcdWZmNWEiICsKLSAgICAiXDAzMlx1ZmY1YVwwMzVcdWZmNWFcMDUzXHVmZjVhXDA1NFx1ZmY1YVwwNTVcdWZmNWFcMDU2XHVmZjVhXDA1NyIgKwotICAgICJcdWZmNWFcMDYwXHVmZjVhXDA2MVx1ZmY1YVwwNjJcdWZmNWFcMDYzXHVmZjVhXDA2NFx1ZmY1YVwwNjVcdWZmNWEiICsKLSAgICAiXDA2Nlx1ZmY1YVwwNjdcdWZmNWFcMDcxXHVmZjVhXDA3M1x1ZmY1YVwwNzRcdWZmNWFcMDc1XHVmZjVhXDEwMCIgKwotICAgICJcdWZmNWFcMTAxXHVmZjVhXDEwMlx1ZmY1YVwxMDdcdWZmNWFcMTEwXHVmZjVhXDExMVx1ZmY1YVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA0XDAwN1x1MDE2NlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjY5XDAwNFx1ZmY2OVwwMDUiICsKLSAgICAiXHVmZjY5XDAwN1x1ZmY2OVwwMTBcdWZmNjlcMDExXHVmZjY5XDAxMlx1ZmY2OVwwMTNcdWZmNjlcMDE0XHVmZjY5IiArCi0gICAgIlwwMTVcdWZmNjlcMDE2XHVmZjY5XDAxN1x1ZmY2OVwwMjBcdWZmNjlcMDIxXHVmZjY5XDAyMlx1ZmY2OVwwMjMiICsKLSAgICAiXHVmZjY5XDAyNFx1ZmY2OVwwMjVcdWZmNjlcMDMyXHVmZjY5XDAzNVx1ZmY2OVwwNTNcdWZmNjlcMDU0XHVmZjY5IiArCi0gICAgIlwwNTVcdWZmNjlcMDU2XHVmZjY5XDA1N1x1ZmY2OVwwNjBcdWZmNjlcMDYxXHVmZjY5XDA2Mlx1ZmY2OVwwNjMiICsKLSAgICAiXHVmZjY5XDA2NFx1ZmY2OVwwNjVcdWZmNjlcMDY2XHVmZjY5XDA2N1x1ZmY2OVwwNzFcdWZmNjlcMDczXHVmZjY5IiArCi0gICAgIlwwNzRcdWZmNjlcMDc1XHVmZjY5XDEwMFx1ZmY2OVwxMDFcdWZmNjlcMTAyXHVmZjY5XDEwN1x1ZmY2OVwxMTAiICsKLSAgICAiXHVmZjY5XDExMVx1ZmY2OVwwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmFlXDAzNlx1ZmZhZVwwMzdcdWZmYWUiICsKLSAgICAiXDA0MFx1ZmZhZVwwNDFcdWZmYWVcMDQyXHVmZmFlXDA0M1x1ZmZhZVwwNDRcdWZmYWVcMDQ1XHVmZmFlXDA0NiIgKwotICAgICJcdWZmYWVcMDQ3XHVmZmFlXDA1MFx1ZmZhZVwwNTFcdWZmYWVcMDUyXHVmZmFlXDA1M1x1ZmZhZVwwNTRcdWZmYWUiICsKLSAgICAiXDA1NVx1ZmZhZVwwNTZcdWZmYWVcMDU3XHVmZmFlXDA2MFx1ZmZhZVwwNjFcdWZmYWVcMDYyXHVmZmFlXDA2MyIgKwotICAgICJcdWZmYWVcMDY0XHVmZmFlXDA2NVx1ZmZhZVwwNjZcdWZmYWVcMDY3XHVmZmFlXDA3MFx1ZmZhZVwwNzFcdWZmYWUiICsKLSAgICAiXDA3Mlx1ZmZhZVwwNzNcdWZmYWVcMDc0XHVmZmFlXDA3NVx1ZmZhZVwwNzZcdWZmYWVcMDc3XHVmZmFlXDEwMCIgKwotICAgICJcdWZmYWVcMTAxXHVmZmFlXDEwMlx1ZmZhZVwxMDNcdWZmYWVcMTA0XHVmZmFlXDEwNVx1ZmZhZVwxMDZcdWZmYWUiICsKLSAgICAiXDEwN1x1ZmZhZVwxMTBcdWZmYWVcMTExXHVmZmFlXDExMlx1ZmZhZVwxMTNcdWZmYWVcMTE0XHVmZmFlXDExNSIgKwotICAgICJcdWZmYWVcMTE2XHVmZmFlXDExN1x1ZmZhZVwxMjBcdWZmYWVcMTIxXHVmZmFlXDEyMlx1ZmZhZVwxMjNcdWZmYWUiICsKLSAgICAiXDEyNFx1ZmZhZVwxMzFcdWZmYWVcMDAxXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDAiICsKLSAgICAiXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMCIgKwotICAgICJcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1IiArCi0gICAgIlwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzEiICsKLSAgICAiXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MiIgKwotICAgICJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2IiArCi0gICAgIlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDciICsKLSAgICAiXDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMiIgKwotICAgICJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0IiArCi0gICAgIlwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwwMDZcMDMyXDMzM1wxMDFcdTAxNmFcMDAxXDAwMiIgKwotICAgICJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1IiArCi0gICAgIlwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjMiICsKLSAgICAiXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NiIgKwotICAgICJcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1IiArCi0gICAgIlwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjMiICsKLSAgICAiXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNSIgKwotICAgICJcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwIiArCi0gICAgIlwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjAiICsKLSAgICAiXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNSIgKwotICAgICJcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzIiArCi0gICAgIlwxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMDIwXDAwMlx1ZmZmNVwwMDVcdWZmZjVcMDA3XHVmZmY1XDAzMlx1ZmZmNVwxMDBcdWZmZjUiICsKLSAgICAiXDEwMVx1ZmZmNVwxMDdcdWZmZjVcMDAxXDAwMlwwMDBcMTY0XDAxMlx1MDEyN1wwMzZcMjQ2XDAzNyIgKwotICAgICJcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxIiArCi0gICAgIlwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTQiICsKLSAgICAiXDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NiIgKwotICAgICJcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxIiArCi0gICAgIlwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTQiICsKLSAgICAiXDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNiIgKwotICAgICJcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwIiArCi0gICAgIlwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjMiICsKLSAgICAiXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY0Y1wwMDRcdWZmNGMiICsKLSAgICAiXDAwNVx1ZmY0Y1wwMDZcdWZmNDhcMDA3XHVmZjRjXDAxMFx1ZmY0Y1wwMTFcdWZmNGNcMDEyXHVmZjRjXDAxMyIgKwotICAgICJcdWZmNGNcMDE0XHVmZjRjXDAxNVx1ZmY0Y1wwMTZcdWZmNGNcMDE3XHVmZjRjXDAyMFx1ZmY0Y1wwMjFcdWZmNGMiICsKLSAgICAiXDAyMlx1ZmY0Y1wwMjNcdWZmNGNcMDI0XHVmZjRjXDAyNVx1ZmY0Y1wwMzJcdWZmNGNcMDUzXHVmZjRjXDA1NCIgKwotICAgICJcdWZmNGNcMDU1XHVmZjRjXDA1Nlx1ZmY0Y1wwNTdcdWZmNGNcMDYwXHVmZjRjXDA2MVx1ZmY0Y1wwNjJcdWZmNGMiICsKLSAgICAiXDA2M1x1ZmY0Y1wwNjRcdWZmNGNcMDY1XHVmZjRjXDA2Nlx1ZmY0Y1wwNjdcdWZmNGNcMDcxXHVmZjRjXDA3MyIgKwotICAgICJcdWZmNGNcMDc0XHVmZjRjXDA3NVx1ZmY0Y1wxMDBcdWZmNGNcMTAxXHVmZjRjXDEwMlx1ZmY0Y1wxMDdcdWZmNGMiICsKLSAgICAiXDExMFx1ZmY0Y1wxMTFcdWZmNGNcMDAxXDAwMlwwMDBcMTY0XDAxMlx1ZmZhY1wwMzZcdWZmYWNcMDM3IiArCi0gICAgIlx1ZmZhY1wwNDBcdWZmYWNcMDQxXHVmZmFjXDA0Mlx1ZmZhY1wwNDNcdWZmYWNcMDQ0XHVmZmFjXDA0NVx1ZmZhYyIgKwotICAgICJcMDQ2XHVmZmFjXDA0N1x1ZmZhY1wwNTBcdWZmYWNcMDUxXHVmZmFjXDA1Mlx1ZmZhY1wwNTNcdWZmYWNcMDU0IiArCi0gICAgIlx1ZmZhY1wwNTVcdWZmYWNcMDU2XHVmZmFjXDA1N1x1ZmZhY1wwNjBcdWZmYWNcMDYxXHVmZmFjXDA2Mlx1ZmZhYyIgKwotICAgICJcMDYzXHVmZmFjXDA2NFx1ZmZhY1wwNjVcdWZmYWNcMDY2XHVmZmFjXDA2N1x1ZmZhY1wwNzBcdWZmYWNcMDcxIiArCi0gICAgIlx1ZmZhY1wwNzJcdWZmYWNcMDczXHVmZmFjXDA3NFx1ZmZhY1wwNzVcdWZmYWNcMDc2XHVmZmFjXDA3N1x1ZmZhYyIgKwotICAgICJcMTAwXHVmZmFjXDEwMVx1ZmZhY1wxMDJcdWZmYWNcMTAzXHVmZmFjXDEwNFx1ZmZhY1wxMDVcdWZmYWNcMTA2IiArCi0gICAgIlx1ZmZhY1wxMDdcdWZmYWNcMTEwXHVmZmFjXDExMVx1ZmZhY1wxMTJcdWZmYWNcMTEzXHVmZmFjXDExNFx1ZmZhYyIgKwotICAgICJcMTE1XHVmZmFjXDExNlx1ZmZhY1wxMTdcdWZmYWNcMTIwXHVmZmFjXDEyMVx1ZmZhY1wxMjJcdWZmYWNcMTIzIiArCi0gICAgIlx1ZmZhY1wxMjRcdWZmYWNcMTMxXHVmZmFjXDAwMVwwMDJcMDAwXDE2NFwwMTJcdWZmYjFcMDM2XHVmZmIxIiArCi0gICAgIlwwMzdcdWZmYjFcMDQwXHVmZmIxXDA0MVx1ZmZiMVwwNDJcdWZmYjFcMDQzXHVmZmIxXDA0NFx1ZmZiMVwwNDUiICsKLSAgICAiXHVmZmIxXDA0Nlx1ZmZiMVwwNDdcdWZmYjFcMDUwXHVmZmIxXDA1MVx1ZmZiMVwwNTJcdWZmYjFcMDUzXHVmZmIxIiArCi0gICAgIlwwNTRcdWZmYjFcMDU1XHVmZmIxXDA1Nlx1ZmZiMVwwNTdcdWZmYjFcMDYwXHVmZmIxXDA2MVx1ZmZiMVwwNjIiICsKLSAgICAiXHVmZmIxXDA2M1x1ZmZiMVwwNjRcdWZmYjFcMDY1XHVmZmIxXDA2Nlx1ZmZiMVwwNjdcdWZmYjFcMDcwXHVmZmIxIiArCi0gICAgIlwwNzFcdWZmYjFcMDcyXHVmZmIxXDA3M1x1ZmZiMVwwNzRcdWZmYjFcMDc1XHVmZmIxXDA3Nlx1ZmZiMVwwNzciICsKLSAgICAiXHVmZmIxXDEwMFx1ZmZiMVwxMDFcdWZmYjFcMTAyXHVmZmIxXDEwM1x1ZmZiMVwxMDRcdWZmYjFcMTA1XHVmZmIxIiArCi0gICAgIlwxMDZcdWZmYjFcMTA3XHVmZmIxXDExMFx1ZmZiMVwxMTFcdWZmYjFcMTEyXHVmZmIxXDExM1x1ZmZiMVwxMTQiICsKLSAgICAiXHVmZmIxXDExNVx1ZmZiMVwxMTZcdWZmYjFcMTE3XHVmZmIxXDEyMFx1ZmZiMVwxMjFcdWZmYjFcMTIyXHVmZmIxIiArCi0gICAgIlwxMjNcdWZmYjFcMTI0XHVmZmIxXDEzMVx1ZmZiMVwwMDFcMDAyXDAwMFwwMDRcMDcyXHUwMTcxXDAwMSIgKwotICAgICJcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxIiArCi0gICAgIlwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTEiICsKLSAgICAiXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxNyIgKwotICAgICJcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2IiArCi0gICAgIlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzMiICsKLSAgICAiXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwMyIgKwotICAgICJcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1IiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjAiICsKLSAgICAiXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMiIgKwotICAgICJcMDAwXDExNFwwMDJcdWZmZDRcMDA1XHVmZmQ0XDAwN1x1ZmZkNFwwMTBcdWZmZDRcMDExXHVmZmQ0XDAxMiIgKwotICAgICJcdWZmZDRcMDEzXHVmZmQ0XDAxNFx1ZmZkNFwwMTVcdWZmZDRcMDE2XHVmZmQ0XDAxN1x1ZmZkNFwwMjBcdWZmZDQiICsKLSAgICAiXDAyMVx1ZmZkNFwwMjJcdWZmZDRcMDIzXHVmZmQ0XDAzMlx1ZmZkNFwwNTNcdWZmZDRcMDU0XHVmZmQ0XDA1NSIgKwotICAgICJcdWZmZDRcMDU2XHVmZmQ0XDA1N1x1ZmZkNFwwNjBcdWZmZDRcMDYxXHVmZmQ0XDA2Mlx1ZmZkNFwwNjNcdWZmZDQiICsKLSAgICAiXDA2NFx1ZmZkNFwwNjVcdWZmZDRcMDY2XHVmZmQ0XDA2N1x1ZmZkNFwwNzFcdWZmZDRcMDc1XHVmZmQ0XDEwMCIgKwotICAgICJcdWZmZDRcMTAxXHVmZmQ0XDEwMlx1ZmZkNFwxMDdcdWZmZDRcMTEwXHVmZmQ0XDExMVx1ZmZkNFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTIwXDAwMlx1ZmY4MlwwMDVcdWZmODJcMDA3XHVmZjgyXDAxMFx1ZmY4MlwwMTFcdWZmODJcMDEyIiArCi0gICAgIlx1ZmY4MlwwMTNcdWZmODJcMDE0XHVmZjgyXDAxNVx1ZmY4MlwwMTZcdWZmODJcMDE3XHVmZjgyXDAyMFx1ZmY4MiIgKwotICAgICJcMDIxXHVmZjgyXDAyMlx1ZmY4MlwwMjNcdWZmODJcMDMyXHVmZjgyXDAzNVx1MDE3NFwwNTNcdWZmODJcMDU0IiArCi0gICAgIlx1ZmY4MlwwNTVcdWZmODJcMDU2XHVmZjgyXDA1N1x1ZmY4MlwwNjBcdWZmODJcMDYxXHVmZjgyXDA2Mlx1ZmY4MiIgKwotICAgICJcMDYzXHVmZjgyXDA2NFx1ZmY4MlwwNjVcdWZmODJcMDY2XHVmZjgyXDA2N1x1ZmY4MlwwNzFcdWZmODJcMDczIiArCi0gICAgIlx1ZmY4MlwwNzVcdWZmODJcMTAwXHVmZjgyXDEwMVx1ZmY4MlwxMDJcdWZmODJcMTA3XHVmZjgyXDExMFx1ZmY4MiIgKwotICAgICJcMTExXHVmZjgyXDAwMVwwMDJcMDAwXDExNlwwMDJcdWZmODFcMDA1XHVmZjgxXDAwN1x1ZmY4MVwwMTAiICsKLSAgICAiXHVmZjgxXDAxMVx1ZmY4MVwwMTJcdWZmODFcMDEzXHVmZjgxXDAxNFx1ZmY4MVwwMTVcdWZmODFcMDE2XHVmZjgxIiArCi0gICAgIlwwMTdcdWZmODFcMDIwXHVmZjgxXDAyMVx1ZmY4MVwwMjJcdWZmODFcMDIzXHVmZjgxXDAzMlx1ZmY4MVwwNTMiICsKLSAgICAiXHVmZjgxXDA1NFx1ZmY4MVwwNTVcdWZmODFcMDU2XHVmZjgxXDA1N1x1ZmY4MVwwNjBcdWZmODFcMDYxXHVmZjgxIiArCi0gICAgIlwwNjJcdWZmODFcMDYzXHVmZjgxXDA2NFx1ZmY4MVwwNjVcdWZmODFcMDY2XHVmZjgxXDA2N1x1ZmY4MVwwNzEiICsKLSAgICAiXHVmZjgxXDA3M1x1ZmY4MVwwNzVcdWZmODFcMTAwXHVmZjgxXDEwMVx1ZmY4MVwxMDJcdWZmODFcMTA3XHVmZjgxIiArCi0gICAgIlwxMTBcdWZmODFcMTExXHVmZjgxXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYjNcMDA0XHVmZmIzXDAwNSIgKwotICAgICJcdWZmYjNcMDA3XHVmZmIzXDAxMFx1ZmZiM1wwMTFcdWZmYjNcMDEyXHVmZmIzXDAxM1x1ZmZiM1wwMTRcdWZmYjMiICsKLSAgICAiXDAxNVx1ZmZiM1wwMTZcdWZmYjNcMDE3XHVmZmIzXDAyMFx1ZmZiM1wwMjFcdWZmYjNcMDIyXHVmZmIzXDAyMyIgKwotICAgICJcdWZmYjNcMDI0XHVmZmIzXDAyNVx1ZmZiM1wwMzJcdWZmYjNcMDUzXHVmZmIzXDA1NFx1ZmZiM1wwNTVcdWZmYjMiICsKLSAgICAiXDA1Nlx1ZmZiM1wwNTdcdWZmYjNcMDYwXHVmZmIzXDA2MVx1ZmZiM1wwNjJcdWZmYjNcMDYzXHVmZmIzXDA2NCIgKwotICAgICJcdWZmYjNcMDY1XHVmZmIzXDA2Nlx1ZmZiM1wwNjdcdWZmYjNcMDcxXHVmZmIzXDA3M1x1ZmZiM1wwNzRcdWZmYjMiICsKLSAgICAiXDA3NVx1ZmZiM1wxMDBcdWZmYjNcMTAxXHVmZmIzXDEwMlx1ZmZiM1wxMDdcdWZmYjNcMTEwXHVmZmIzXDExMSIgKwotICAgICJcdWZmYjNcMDAxXDAwMlwwMDBcMTY0XDAxMlx1ZmZhNFwwMzZcdWZmYTRcMDM3XHVmZmE0XDA0MFx1ZmZhNCIgKwotICAgICJcMDQxXHVmZmE0XDA0Mlx1ZmZhNFwwNDNcdWZmYTRcMDQ0XHVmZmE0XDA0NVx1ZmZhNFwwNDZcdWZmYTRcMDQ3IiArCi0gICAgIlx1ZmZhNFwwNTBcdWZmYTRcMDUxXHVmZmE0XDA1Mlx1ZmZhNFwwNTNcdWZmYTRcMDU0XHVmZmE0XDA1NVx1ZmZhNCIgKwotICAgICJcMDU2XHVmZmE0XDA1N1x1ZmZhNFwwNjBcdWZmYTRcMDYxXHVmZmE0XDA2Mlx1ZmZhNFwwNjNcdWZmYTRcMDY0IiArCi0gICAgIlx1ZmZhNFwwNjVcdWZmYTRcMDY2XHVmZmE0XDA2N1x1ZmZhNFwwNzBcdWZmYTRcMDcxXHVmZmE0XDA3Mlx1ZmZhNCIgKwotICAgICJcMDczXHVmZmE0XDA3NFx1ZmZhNFwwNzVcdWZmYTRcMDc2XHVmZmE0XDA3N1x1ZmZhNFwxMDBcdWZmYTRcMTAxIiArCi0gICAgIlx1ZmZhNFwxMDJcdWZmYTRcMTAzXHVmZmE0XDEwNFx1ZmZhNFwxMDVcdWZmYTRcMTA2XHVmZmE0XDEwN1x1ZmZhNCIgKwotICAgICJcMTEwXHVmZmE0XDExMVx1ZmZhNFwxMTJcdWZmYTRcMTEzXHVmZmE0XDExNFx1ZmZhNFwxMTVcdWZmYTRcMTE2IiArCi0gICAgIlx1ZmZhNFwxMTdcdWZmYTRcMTIwXHVmZmE0XDEyMVx1ZmZhNFwxMjJcdWZmYTRcMTIzXHVmZmE0XDEyNFx1ZmZhNCIgKwotICAgICJcMTMxXHVmZmE0XDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTIiICsKLSAgICAiXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNiIgKwotICAgICJcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0IiArCi0gICAgIlwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjciICsKLSAgICAiXDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MSIgKwotICAgICJcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1IiArCi0gICAgIlwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzYiICsKLSAgICAiXDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwNyIgKwotICAgICJcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzIiArCi0gICAgIlwxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjQiICsKLSAgICAiXDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMCIgKwotICAgICJcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0IiArCi0gICAgIlwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzQiICsKLSAgICAiXDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NiIgKwotICAgICJcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyIiArCi0gICAgIlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTciICsKLSAgICAiXDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2NyIgKwotICAgICJcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzIiArCi0gICAgIlwwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDIxM1wxMDQiICsKLSAgICAiXDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MSIgKwotICAgICJcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxIiArCi0gICAgIlwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTMiICsKLSAgICAiXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMSIgKwotICAgICJcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwIiArCi0gICAgIlwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDMiICsKLSAgICAiXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NSIgKwotICAgICJcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwIiArCi0gICAgIlwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDEiICsKLSAgICAiXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NSIgKwotICAgICJcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzIiArCi0gICAgIlwxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTIiICsKLSAgICAiXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0NyIgKwotICAgICJcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3IiArCi0gICAgIlwxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEwMFwwMDJcdWZmZTVcMDA1XHVmZmU1IiArCi0gICAgIlwwMDdcdWZmZTVcMDEwXHVmZmU1XDAxMVx1ZmZlNVwwMTJcdTAxMDhcMDE0XHVmZmU1XDAxNVx1ZmZlNVwwMTYiICsKLSAgICAiXHVmZmU1XDAxN1x1ZmZlNVwwMjBcdWZmZTVcMDIxXHVmZmU1XDAyMlx1ZmZlNVwwMjNcdWZmZTVcMDMyXHVmZmU1IiArCi0gICAgIlwwNTNcdWZmZTVcMDU0XHVmZmU1XDA1NVx1ZmZlNVwwNTZcdWZmZTVcMDU3XHVmZmU1XDA2MFx1ZmZlNVwwNjEiICsKLSAgICAiXHUwMTBhXDA2Mlx1MDEwYlwwNjNcdTAxMDlcMDc1XHVmZmU1XDEwMFx1ZmZlNVwxMDFcdWZmZTVcMTAyXHVmZmU1IiArCi0gICAgIlwxMDdcdWZmZTVcMTEwXHVmZmU1XDExMVx1ZmZlNVwwMDFcMDAyXDAwMFwxMDBcMDAyXHVmZmU2XDAwNSIgKwotICAgICJcdWZmZTZcMDA3XHVmZmU2XDAxMFx1ZmZlNlwwMTFcdWZmZTZcMDEyXHUwMTA4XDAxNFx1ZmZlNlwwMTVcdWZmZTYiICsKLSAgICAiXDAxNlx1ZmZlNlwwMTdcdWZmZTZcMDIwXHVmZmU2XDAyMVx1ZmZlNlwwMjJcdWZmZTZcMDIzXHVmZmU2XDAzMiIgKwotICAgICJcdWZmZTZcMDUzXHVmZmU2XDA1NFx1ZmZlNlwwNTVcdWZmZTZcMDU2XHVmZmU2XDA1N1x1ZmZlNlwwNjBcdWZmZTYiICsKLSAgICAiXDA2MVx1MDEwYVwwNjJcdTAxMGJcMDYzXHUwMTA5XDA3NVx1ZmZlNlwxMDBcdWZmZTZcMTAxXHVmZmU2XDEwMiIgKwotICAgICJcdWZmZTZcMTA3XHVmZmU2XDExMFx1ZmZlNlwxMTFcdWZmZTZcMDAxXDAwMlwwMDBcMDY2XDAwMlx1ZmZlOCIgKwotICAgICJcMDA1XHVmZmU4XDAwN1x1ZmZlOFwwMTBcdTAxNzhcMDExXHUwMTc5XDAxNFx1ZmZlOFwwMTVcdWZmZThcMDE2IiArCi0gICAgIlx1ZmZlOFwwMTdcdWZmZThcMDIwXHVmZmU4XDAyMVx1ZmZlOFwwMjJcdWZmZThcMDIzXHVmZmU4XDAzMlx1ZmZlOCIgKwotICAgICJcMDUzXHVmZmU4XDA1NFx1ZmZlOFwwNTVcdWZmZThcMDU2XHVmZmU4XDA1N1x1ZmZlOFwwNjBcdWZmZThcMDc1IiArCi0gICAgIlx1ZmZlOFwxMDBcdWZmZThcMTAxXHVmZmU4XDEwN1x1ZmZlOFwxMTBcdWZmZThcMTExXHVmZmU4XDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDA3XHUwMTdlXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmRcMDA0XHVmZjZkXDAwNSIgKwotICAgICJcdWZmNmRcMDA3XHVmZjZkXDAxMFx1ZmY2ZFwwMTFcdWZmNmRcMDEyXHVmZjZkXDAxM1x1ZmY2ZFwwMTRcdWZmNmQiICsKLSAgICAiXDAxNVx1ZmY2ZFwwMTZcdWZmNmRcMDE3XHVmZjZkXDAyMFx1ZmY2ZFwwMjFcdWZmNmRcMDIyXHVmZjZkXDAyMyIgKwotICAgICJcdWZmNmRcMDI0XHVmZjZkXDAyNVx1ZmY2ZFwwMzJcdWZmNmRcMDM1XHVmZjZkXDA1M1x1ZmY2ZFwwNTRcdWZmNmQiICsKLSAgICAiXDA1NVx1ZmY2ZFwwNTZcdWZmNmRcMDU3XHVmZjZkXDA2MFx1ZmY2ZFwwNjFcdWZmNmRcMDYyXHVmZjZkXDA2MyIgKwotICAgICJcdWZmNmRcMDY0XHVmZjZkXDA2NVx1ZmY2ZFwwNjZcdWZmNmRcMDY3XHVmZjZkXDA3MVx1ZmY2ZFwwNzNcdWZmNmQiICsKLSAgICAiXDA3NFx1ZmY2ZFwwNzVcdWZmNmRcMTAwXHVmZjZkXDEwMVx1ZmY2ZFwxMDJcdWZmNmRcMTA3XHVmZjZkXDExMCIgKwotICAgICJcdWZmNmRcMTExXHVmZjZkXDAwMVwwMDJcMDAwXDEyNFwwMDJcdWZmYmRcMDA1XHVmZmJkXDAwN1x1ZmZiZCIgKwotICAgICJcMDEwXHVmZmJkXDAxMVx1ZmZiZFwwMTJcdWZmYmRcMDEzXHVmZmJkXDAxNFx1ZmZiZFwwMTVcdWZmYmRcMDE2IiArCi0gICAgIlx1ZmZiZFwwMTdcdWZmYmRcMDIwXHVmZmJkXDAyMVx1ZmZiZFwwMjJcdWZmYmRcMDIzXHVmZmJkXDAyNFx1MDEwNCIgKwotICAgICJcMDI1XHUwMTA1XDAzMlx1ZmZiZFwwNTNcdWZmYmRcMDU0XHVmZmJkXDA1NVx1ZmZiZFwwNTZcdWZmYmRcMDU3IiArCi0gICAgIlx1ZmZiZFwwNjBcdWZmYmRcMDYxXHVmZmJkXDA2Mlx1ZmZiZFwwNjNcdWZmYmRcMDY0XHVmZmJkXDA2NVx1ZmZiZCIgKwotICAgICJcMDY2XHVmZmJkXDA2N1x1ZmZiZFwwNzFcdWZmYmRcMDczXHVmZmJkXDA3NFx1ZmZiZFwwNzVcdWZmYmRcMTAwIiArCi0gICAgIlx1ZmZiZFwxMDFcdWZmYmRcMTAyXHVmZmJkXDEwN1x1ZmZiZFwxMTBcdWZmYmRcMTExXHVmZmJkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxNjRcMDEyXHVmZmFhXDAzNlx1ZmZhYVwwMzdcdWZmYWFcMDQwXHVmZmFhXDA0MVx1ZmZhYVwwNDIiICsKLSAgICAiXHVmZmFhXDA0M1x1ZmZhYVwwNDRcdWZmYWFcMDQ1XHVmZmFhXDA0Nlx1ZmZhYVwwNDdcdWZmYWFcMDUwXHVmZmFhIiArCi0gICAgIlwwNTFcdWZmYWFcMDUyXHVmZmFhXDA1M1x1ZmZhYVwwNTRcdWZmYWFcMDU1XHVmZmFhXDA1Nlx1ZmZhYVwwNTciICsKLSAgICAiXHVmZmFhXDA2MFx1ZmZhYVwwNjFcdWZmYWFcMDYyXHVmZmFhXDA2M1x1ZmZhYVwwNjRcdWZmYWFcMDY1XHVmZmFhIiArCi0gICAgIlwwNjZcdWZmYWFcMDY3XHVmZmFhXDA3MFx1ZmZhYVwwNzFcdWZmYWFcMDcyXHVmZmFhXDA3M1x1ZmZhYVwwNzQiICsKLSAgICAiXHVmZmFhXDA3NVx1ZmZhYVwwNzZcdWZmYWFcMDc3XHVmZmFhXDEwMFx1ZmZhYVwxMDFcdWZmYWFcMTAyXHVmZmFhIiArCi0gICAgIlwxMDNcdWZmYWFcMTA0XHVmZmFhXDEwNVx1ZmZhYVwxMDZcdWZmYWFcMTA3XHVmZmFhXDExMFx1ZmZhYVwxMTEiICsKLSAgICAiXHVmZmFhXDExMlx1ZmZhYVwxMTNcdWZmYWFcMTE0XHVmZmFhXDExNVx1ZmZhYVwxMTZcdWZmYWFcMTE3XHVmZmFhIiArCi0gICAgIlwxMjBcdWZmYWFcMTIxXHVmZmFhXDEyMlx1ZmZhYVwxMjNcdWZmYWFcMTI0XHVmZmFhXDEzMVx1ZmZhYVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMDEwXDAwN1x1MDE4NVwxMjJcdTAxODZcMTIzXHUwMTg0XDAwMVwwMDJcMDAwXDAwNCIgKwotICAgICJcMDA3XHUwMTg4XDAwMVwwMDJcMDAwXDAwNFwwMDdcdTAxODdcMDAxXDAwMlwwMDBcMDA0XDAwNiIgKwotICAgICJcdTAxNTRcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2Y1wwMDRcdWZmNmNcMDA1XHVmZjZjXDAwN1x1ZmY2YyIgKwotICAgICJcMDEwXHVmZjZjXDAxMVx1ZmY2Y1wwMTJcdWZmNmNcMDEzXHVmZjZjXDAxNFx1ZmY2Y1wwMTVcdWZmNmNcMDE2IiArCi0gICAgIlx1ZmY2Y1wwMTdcdWZmNmNcMDIwXHVmZjZjXDAyMVx1ZmY2Y1wwMjJcdWZmNmNcMDIzXHVmZjZjXDAyNFx1ZmY2YyIgKwotICAgICJcMDI1XHVmZjZjXDAzMlx1ZmY2Y1wwMzVcdWZmNmNcMDUzXHVmZjZjXDA1NFx1ZmY2Y1wwNTVcdWZmNmNcMDU2IiArCi0gICAgIlx1ZmY2Y1wwNTdcdWZmNmNcMDYwXHVmZjZjXDA2MVx1ZmY2Y1wwNjJcdWZmNmNcMDYzXHVmZjZjXDA2NFx1ZmY2YyIgKwotICAgICJcMDY1XHVmZjZjXDA2Nlx1ZmY2Y1wwNjdcdWZmNmNcMDcxXHVmZjZjXDA3M1x1ZmY2Y1wwNzRcdWZmNmNcMDc1IiArCi0gICAgIlx1ZmY2Y1wxMDBcdWZmNmNcMTAxXHVmZjZjXDEwMlx1ZmY2Y1wxMDdcdWZmNmNcMTEwXHVmZjZjXDExMVx1ZmY2YyIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAwNlx1MDE1YVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZhXDAwNCIgKwotICAgICJcdWZmNmFcMDA1XHVmZjZhXDAwN1x1ZmY2YVwwMTBcdWZmNmFcMDExXHVmZjZhXDAxMlx1ZmY2YVwwMTNcdWZmNmEiICsKLSAgICAiXDAxNFx1ZmY2YVwwMTVcdWZmNmFcMDE2XHVmZjZhXDAxN1x1ZmY2YVwwMjBcdWZmNmFcMDIxXHVmZjZhXDAyMiIgKwotICAgICJcdWZmNmFcMDIzXHVmZjZhXDAyNFx1ZmY2YVwwMjVcdWZmNmFcMDMyXHVmZjZhXDAzNVx1ZmY2YVwwNTNcdWZmNmEiICsKLSAgICAiXDA1NFx1ZmY2YVwwNTVcdWZmNmFcMDU2XHVmZjZhXDA1N1x1ZmY2YVwwNjBcdWZmNmFcMDYxXHVmZjZhXDA2MiIgKwotICAgICJcdWZmNmFcMDYzXHVmZjZhXDA2NFx1ZmY2YVwwNjVcdWZmNmFcMDY2XHVmZjZhXDA2N1x1ZmY2YVwwNzFcdWZmNmEiICsKLSAgICAiXDA3M1x1ZmY2YVwwNzRcdWZmNmFcMDc1XHVmZjZhXDEwMFx1ZmY2YVwxMDFcdWZmNmFcMTAyXHVmZjZhXDEwNyIgKwotICAgICJcdWZmNmFcMTEwXHVmZjZhXDExMVx1ZmY2YVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZiXDAwNFx1ZmY2YiIgKwotICAgICJcMDA1XHVmZjZiXDAwN1x1ZmY2YlwwMTBcdWZmNmJcMDExXHVmZjZiXDAxMlx1ZmY2YlwwMTNcdWZmNmJcMDE0IiArCi0gICAgIlx1ZmY2YlwwMTVcdWZmNmJcMDE2XHVmZjZiXDAxN1x1ZmY2YlwwMjBcdWZmNmJcMDIxXHVmZjZiXDAyMlx1ZmY2YiIgKwotICAgICJcMDIzXHVmZjZiXDAyNFx1ZmY2YlwwMjVcdWZmNmJcMDMyXHVmZjZiXDAzNVx1ZmY2YlwwNTNcdWZmNmJcMDU0IiArCi0gICAgIlx1ZmY2YlwwNTVcdWZmNmJcMDU2XHVmZjZiXDA1N1x1ZmY2YlwwNjBcdWZmNmJcMDYxXHVmZjZiXDA2Mlx1ZmY2YiIgKwotICAgICJcMDYzXHVmZjZiXDA2NFx1ZmY2YlwwNjVcdWZmNmJcMDY2XHVmZjZiXDA2N1x1ZmY2YlwwNzFcdWZmNmJcMDczIiArCi0gICAgIlx1ZmY2YlwwNzRcdWZmNmJcMDc1XHVmZjZiXDEwMFx1ZmY2YlwxMDFcdWZmNmJcMTAyXHVmZjZiXDEwN1x1ZmY2YiIgKwotICAgICJcMTEwXHVmZjZiXDExMVx1ZmY2YlwwMDFcMDAyXDAwMFwwMDRcMDcwXHUwMThhXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFx1MDEyNFwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1NyIgKwotICAgICJcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyIiArCi0gICAgIlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDAiICsKLSAgICAiXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2NyIgKwotICAgICJcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxIiArCi0gICAgIlwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDQiICsKLSAgICAiXDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXHUwMTQ2IiArCi0gICAgIlwxMTNcdTAxNDVcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMSIgKwotICAgICJcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTEwIiArCi0gICAgIlwwMDJcdWZmZDhcMDA1XHVmZmQ4XDAwN1x1ZmZkOFwwMTBcdWZmZDhcMDExXHVmZmQ4XDAxMlx1ZmZkOFwwMTMiICsKLSAgICAiXHVmZmQ4XDAxNFx1ZmZkOFwwMTVcdWZmZDhcMDE2XHVmZmQ4XDAxN1x1ZmZkOFwwMjBcdWZmZDhcMDIxXHVmZmQ4IiArCi0gICAgIlwwMjJcdWZmZDhcMDIzXHVmZmQ4XDAzMlx1ZmZkOFwwNTNcdWZmZDhcMDU0XHVmZmQ4XDA1NVx1ZmZkOFwwNTYiICsKLSAgICAiXHVmZmQ4XDA1N1x1ZmZkOFwwNjBcdWZmZDhcMDYxXHVmZmQ4XDA2Mlx1ZmZkOFwwNjNcdWZmZDhcMDY0XHVmZmQ4IiArCi0gICAgIlwwNjVcdWZmZDhcMDY2XHVmZmQ4XDA3NVx1ZmZkOFwxMDBcdWZmZDhcMTAxXHVmZmQ4XDEwMlx1ZmZkOFwxMDciICsKLSAgICAiXHVmZmQ4XDExMFx1ZmZkOFwxMTFcdWZmZDhcMDAxXDAwMlwwMDBcMDA0XDA3Mlx1MDE4ZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MVwwNDMiICsKLSAgICAiXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3MyIgKwotICAgICJcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwIiArCi0gICAgIlwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzQiICsKLSAgICAiXDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NSIgKwotICAgICJcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2IiArCi0gICAgIlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTIiICsKLSAgICAiXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwXDI0NyIgKwotICAgICJcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTZcMDAyXHVmZmQyXDAwNVx1ZmZkMlwwMDdcdWZmZDJcMDEwXHVmZmQyXDAxMVx1ZmZkMlwwMTJcdWZmZDIiICsKLSAgICAiXDAxM1x1ZmZkMlwwMTRcdWZmZDJcMDE1XHVmZmQyXDAxNlx1ZmZkMlwwMTdcdWZmZDJcMDIwXHVmZmQyXDAyMSIgKwotICAgICJcdWZmZDJcMDIyXHVmZmQyXDAyM1x1ZmZkMlwwMzJcdWZmZDJcMDUzXHVmZmQyXDA1NFx1ZmZkMlwwNTVcdWZmZDIiICsKLSAgICAiXDA1Nlx1ZmZkMlwwNTdcdWZmZDJcMDYwXHVmZmQyXDA2MVx1ZmZkMlwwNjJcdWZmZDJcMDYzXHVmZmQyXDA2NCIgKwotICAgICJcdWZmZDJcMDY1XHVmZmQyXDA2Nlx1ZmZkMlwwNjdcdWZmZDJcMDcxXHVmZmQyXDA3M1x1ZmZkMlwwNzVcdWZmZDIiICsKLSAgICAiXDEwMFx1ZmZkMlwxMDFcdWZmZDJcMTAyXHVmZmQyXDEwN1x1ZmZkMlwxMTBcdWZmZDJcMTExXHVmZmQyXDAwMSIgKwotICAgICJcMDAyXDAwMFwwMDRcMDAyXDAwMFwwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmE1XDAzNlx1ZmZhNSIgKwotICAgICJcMDM3XHVmZmE1XDA0MFx1ZmZhNVwwNDFcdWZmYTVcMDQyXHVmZmE1XDA0M1x1ZmZhNVwwNDRcdWZmYTVcMDQ1IiArCi0gICAgIlx1ZmZhNVwwNDZcdWZmYTVcMDQ3XHVmZmE1XDA1MFx1ZmZhNVwwNTFcdWZmYTVcMDUyXHVmZmE1XDA1M1x1ZmZhNSIgKwotICAgICJcMDU0XHVmZmE1XDA1NVx1ZmZhNVwwNTZcdWZmYTVcMDU3XHVmZmE1XDA2MFx1ZmZhNVwwNjFcdWZmYTVcMDYyIiArCi0gICAgIlx1ZmZhNVwwNjNcdWZmYTVcMDY0XHVmZmE1XDA2NVx1ZmZhNVwwNjZcdWZmYTVcMDY3XHVmZmE1XDA3MFx1ZmZhNSIgKwotICAgICJcMDcxXHVmZmE1XDA3Mlx1ZmZhNVwwNzNcdWZmYTVcMDc0XHVmZmE1XDA3NVx1ZmZhNVwwNzZcdWZmYTVcMDc3IiArCi0gICAgIlx1ZmZhNVwxMDBcdWZmYTVcMTAxXHVmZmE1XDEwMlx1ZmZhNVwxMDNcdWZmYTVcMTA0XHVmZmE1XDEwNVx1ZmZhNSIgKwotICAgICJcMTA2XHVmZmE1XDEwN1x1ZmZhNVwxMTBcdWZmYTVcMTExXHVmZmE1XDExMlx1ZmZhNVwxMTNcdWZmYTVcMTE0IiArCi0gICAgIlx1ZmZhNVwxMTVcdWZmYTVcMTE2XHVmZmE1XDExN1x1ZmZhNVwxMjBcdWZmYTVcMTIxXHVmZmE1XDEyMlx1ZmZhNSIgKwotICAgICJcMTIzXHVmZmE1XDEyNFx1ZmZhNVwxMzFcdWZmYTVcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZhN1wwMDQiICsKLSAgICAiXHVmZmE3XDAwNVx1ZmZhN1wwMDdcdWZmYTdcMDEwXHVmZmE3XDAxMVx1ZmZhN1wwMTJcdWZmYTdcMDEzXHVmZmE3IiArCi0gICAgIlwwMTRcdWZmYTdcMDE1XHVmZmE3XDAxNlx1ZmZhN1wwMTdcdWZmYTdcMDIwXHVmZmE3XDAyMVx1ZmZhN1wwMjIiICsKLSAgICAiXHVmZmE3XDAyM1x1ZmZhN1wwMjRcdWZmYTdcMDI1XHVmZmE3XDAzMlx1ZmZhN1wwNTNcdWZmYTdcMDU0XHVmZmE3IiArCi0gICAgIlwwNTVcdWZmYTdcMDU2XHVmZmE3XDA1N1x1ZmZhN1wwNjBcdWZmYTdcMDYxXHVmZmE3XDA2Mlx1ZmZhN1wwNjMiICsKLSAgICAiXHVmZmE3XDA2NFx1ZmZhN1wwNjVcdWZmYTdcMDY2XHVmZmE3XDA2N1x1ZmZhN1wwNzFcdWZmYTdcMDczXHVmZmE3IiArCi0gICAgIlwwNzRcdWZmYTdcMDc1XHVmZmE3XDEwMFx1ZmZhN1wxMDFcdWZmYTdcMTAyXHVmZmE3XDEwN1x1ZmZhN1wxMTAiICsKLSAgICAiXHVmZmE3XDExMVx1ZmZhN1wwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmFiXDAzNlx1ZmZhYlwwMzdcdWZmYWIiICsKLSAgICAiXDA0MFx1ZmZhYlwwNDFcdWZmYWJcMDQyXHVmZmFiXDA0M1x1ZmZhYlwwNDRcdWZmYWJcMDQ1XHVmZmFiXDA0NiIgKwotICAgICJcdWZmYWJcMDQ3XHVmZmFiXDA1MFx1ZmZhYlwwNTFcdWZmYWJcMDUyXHVmZmFiXDA1M1x1ZmZhYlwwNTRcdWZmYWIiICsKLSAgICAiXDA1NVx1ZmZhYlwwNTZcdWZmYWJcMDU3XHVmZmFiXDA2MFx1ZmZhYlwwNjFcdWZmYWJcMDYyXHVmZmFiXDA2MyIgKwotICAgICJcdWZmYWJcMDY0XHVmZmFiXDA2NVx1ZmZhYlwwNjZcdWZmYWJcMDY3XHVmZmFiXDA3MFx1ZmZhYlwwNzFcdWZmYWIiICsKLSAgICAiXDA3Mlx1ZmZhYlwwNzNcdWZmYWJcMDc0XHVmZmFiXDA3NVx1ZmZhYlwwNzZcdWZmYWJcMDc3XHVmZmFiXDEwMCIgKwotICAgICJcdWZmYWJcMTAxXHVmZmFiXDEwMlx1ZmZhYlwxMDNcdWZmYWJcMTA0XHVmZmFiXDEwNVx1ZmZhYlwxMDZcdWZmYWIiICsKLSAgICAiXDEwN1x1ZmZhYlwxMTBcdWZmYWJcMTExXHVmZmFiXDExMlx1ZmZhYlwxMTNcdWZmYWJcMTE0XHVmZmFiXDExNSIgKwotICAgICJcdWZmYWJcMTE2XHVmZmFiXDExN1x1ZmZhYlwxMjBcdWZmYWJcMTIxXHVmZmFiXDEyMlx1ZmZhYlwxMjNcdWZmYWIiICsKLSAgICAiXDEyNFx1ZmZhYlwxMzFcdWZmYWJcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTEiICsKLSAgICAiXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMCIgKwotICAgICJcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzIiArCi0gICAgIlwwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzUiICsKLSAgICAiXDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MCIgKwotICAgICJcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxIiArCi0gICAgIlwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzUiICsKLSAgICAiXDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDIxMyIgKwotICAgICJcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyIiArCi0gICAgIlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDciICsKLSAgICAiXDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyNyIgKwotICAgICJcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMjRcMDAyXHVmZmYwXDAwNVx1ZmZmMCIgKwotICAgICJcMDA3XHVmZmYwXDAzMlx1ZmZmMFwxMDBcdWZmZjBcMTAxXHVmZmYwXDEwN1x1ZmZmMFwxMTBcMjA2XDExMSIgKwotICAgICJcdWZmZjBcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiY1wwMDVcdWZmYmNcMDA3XHVmZmJjXDAxMFx1ZmZiYyIgKwotICAgICJcMDExXHVmZmJjXDAxMlx1ZmZiY1wwMTNcdWZmYmNcMDE0XHVmZmJjXDAxNVx1ZmZiY1wwMTZcdWZmYmNcMDE3IiArCi0gICAgIlx1ZmZiY1wwMjBcdWZmYmNcMDIxXHVmZmJjXDAyMlx1ZmZiY1wwMjNcdWZmYmNcMDI0XHUwMTA0XDAyNVx1MDEwNSIgKwotICAgICJcMDMyXHVmZmJjXDA1M1x1ZmZiY1wwNTRcdWZmYmNcMDU1XHVmZmJjXDA1Nlx1ZmZiY1wwNTdcdWZmYmNcMDYwIiArCi0gICAgIlx1ZmZiY1wwNjFcdWZmYmNcMDYyXHVmZmJjXDA2M1x1ZmZiY1wwNjRcdWZmYmNcMDY1XHVmZmJjXDA2Nlx1ZmZiYyIgKwotICAgICJcMDY3XHVmZmJjXDA3MVx1ZmZiY1wwNzNcdWZmYmNcMDc0XHVmZmJjXDA3NVx1ZmZiY1wxMDBcdWZmYmNcMTAxIiArCi0gICAgIlx1ZmZiY1wxMDJcdWZmYmNcMTA3XHVmZmJjXDExMFx1ZmZiY1wxMTFcdWZmYmNcMDAxXDAwMlwwMDBcMTY0IiArCi0gICAgIlwwMTJcdWZmYWRcMDM2XHVmZmFkXDAzN1x1ZmZhZFwwNDBcdWZmYWRcMDQxXHVmZmFkXDA0Mlx1ZmZhZFwwNDMiICsKLSAgICAiXHVmZmFkXDA0NFx1ZmZhZFwwNDVcdWZmYWRcMDQ2XHVmZmFkXDA0N1x1ZmZhZFwwNTBcdWZmYWRcMDUxXHVmZmFkIiArCi0gICAgIlwwNTJcdWZmYWRcMDUzXHVmZmFkXDA1NFx1ZmZhZFwwNTVcdWZmYWRcMDU2XHVmZmFkXDA1N1x1ZmZhZFwwNjAiICsKLSAgICAiXHVmZmFkXDA2MVx1ZmZhZFwwNjJcdWZmYWRcMDYzXHVmZmFkXDA2NFx1ZmZhZFwwNjVcdWZmYWRcMDY2XHVmZmFkIiArCi0gICAgIlwwNjdcdWZmYWRcMDcwXHVmZmFkXDA3MVx1ZmZhZFwwNzJcdWZmYWRcMDczXHVmZmFkXDA3NFx1ZmZhZFwwNzUiICsKLSAgICAiXHVmZmFkXDA3Nlx1ZmZhZFwwNzdcdWZmYWRcMTAwXHVmZmFkXDEwMVx1ZmZhZFwxMDJcdWZmYWRcMTAzXHVmZmFkIiArCi0gICAgIlwxMDRcdWZmYWRcMTA1XHVmZmFkXDEwNlx1ZmZhZFwxMDdcdWZmYWRcMTEwXHVmZmFkXDExMVx1ZmZhZFwxMTIiICsKLSAgICAiXHVmZmFkXDExM1x1ZmZhZFwxMTRcdWZmYWRcMTE1XHVmZmFkXDExNlx1ZmZhZFwxMTdcdWZmYWRcMTIwXHVmZmFkIiArCi0gICAgIlwxMjFcdWZmYWRcMTIyXHVmZmFkXDEyM1x1ZmZhZFwxMjRcdWZmYWRcMTMxXHVmZmFkXDAwMVwwMDIiIH0pOwotCi0gIC8qKiBBY2Nlc3MgdG8gcGFyc2UtYWN0aW9uIHRhYmxlLiAqLwotICBwdWJsaWMgc2hvcnRbXVtdIGFjdGlvbl90YWJsZSgpIHtyZXR1cm4gX2FjdGlvbl90YWJsZTt9Ci0KLSAgLyoqIDxjb2RlPnJlZHVjZV9nb3RvPC9jb2RlPiB0YWJsZS4gKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydFtdW10gX3JlZHVjZV90YWJsZSA9IAotICAgIHVucGFja0Zyb21TdHJpbmdzKG5ldyBTdHJpbmdbXSB7Ci0gICAgIlwwMDBcdTAxOTRcMDAwXDE3MlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMSIgKwotICAgICJcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDMzXDA0M1wwMzZcMTY0IiArCi0gICAgIlwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDUiICsKLSAgICAiXDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MCIgKwotICAgICJcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxXDEwM1wwNjJcMDMxXDA2NVwyMDJcMDY2IiArCi0gICAgIlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjIiICsKLSAgICAiXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwMyIgKwotICAgICJcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzIiArCi0gICAgIlwxMTJcMTM3XDExM1wxMjZcMTE0XDAxNFwxMTVcMTIzXDExNlwwNDJcMTE3XDA3M1wxMjAiICsKLSAgICAiXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwxMTZcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzIiICsKLSAgICAiXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MiIgKwotICAgICJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0Nlx1MDE5NFwwNzFcMTY1XDA3MlwwNjUiICsKLSAgICAiXDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMSIgKwotICAgICJcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3IiArCi0gICAgIlwxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMlwwMzJcMTIzXDEwMVwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwNDBcMDAzXHUwMTIyIiArCi0gICAgIlwwMjBcMTExXDAyM1wwNzJcMDQwXHUwMTkwXDA3MVwxNjVcMDcyXDA2NVwxMDNcMDI3XDEwNCIgKwotICAgICJcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3IiArCi0gICAgIlwxMTNcMTI2XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxMTZcMDAzIiArCi0gICAgIlwwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTIiICsKLSAgICAiXDAyNlwwMzVcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0MyIgKwotICAgICJcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcdTAxN2VcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTAiICsKLSAgICAiXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMiIgKwotICAgICJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3IiArCi0gICAgIlwxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDQwXDAwM1x1MDEyMiIgKwotICAgICJcMDIwXDExMVwwMjNcMDcyXDA0MFx1MDE3NFwwNzFcMTY1XDA3MlwwNjVcMTAzXDAyN1wxMDQiICsKLSAgICAiXDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzNyIgKwotICAgICJcMTEzXDEyNlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDA0XDAzNFx1MDE1OFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTBcMDI3IiArCi0gICAgIlx1MDEzOFwwNjNcdTAxMzdcMDY0XHUwMTMzXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDQwXDAwMyIgKwotICAgICJcdTAxMjJcMDIwXDExMVwwMjNcMDcyXDA0MFx1MDEyNFwwNzFcMTY1XDA3MlwwNjVcMTAzXDAyNyIgKwotICAgICJcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyIiArCi0gICAgIlwxMzdcMTEzXDEyNlwwMDFcMDAxXDAwMFwwMTBcMDAzXDIzNlwwMjBcMzIwXDAyMlx1MDEyMSIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxMjRcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDAiICsKLSAgICAiXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzNyIgKwotICAgICJcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzIiArCi0gICAgIlwwNDZcMTM1XDA0N1x1MDEyMFwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NSIgKwotICAgICJcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3IiArCi0gICAgIlwxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTIiICsKLSAgICAiXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMDM0XHUwMTFmXDAwMVwwMDFcMDAwXDE3MFwwMDMiICsKLSAgICAiXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMiIgKwotICAgICJcMDI2XDAzNVwwMzJcMTQ0XDAzM1x1MDExY1wwMzZcMTY0XDAzN1wxNjZcMDQwXDE3NFwwNDEiICsKLSAgICAiXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNSIgKwotICAgICJcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwIiArCi0gICAgIlwxNzZcMDYxXDEwM1wwNjJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjdcMDcxXDA3MFwwNjciICsKLSAgICAiXDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3NyIgKwotICAgICJcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwIiArCi0gICAgIlwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMTUiICsKLSAgICAiXDEyM1wxMTZcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMSIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxMjRcMDAzXDA0NlwwMDRcMDM0XDAwNyIgKwotICAgICJcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0IiArCi0gICAgIlwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDUiICsKLSAgICAiXDIwM1wwNDZcMTM1XDA0N1wzNzNcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMiIgKwotICAgICJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzIiArCi0gICAgIlwwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTMiICsKLSAgICAiXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNFwwMzRcMjE3XDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNTBcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDAiICsKLSAgICAiXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzNyIgKwotICAgICJcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzIiArCi0gICAgIlwwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTYiICsKLSAgICAiXDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYyXDAzMVwwNjdcMDcxXDA3MFwyMDdcMDcxXDE2NSIgKwotICAgICJcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwIiArCi0gICAgIlwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDIiICsKLSAgICAiXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMSIgKwotICAgICJcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMTM0XDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNiIgKwotICAgICJcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxIiArCi0gICAgIlwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTUiICsKLSAgICAiXDA1MlwwMTdcMDUzXDA2NFwwNTRcMjE2XDA1NVwwNDBcMDcxXDE2NVwwNzJcMDY1XDA3MyIgKwotICAgICJcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwIiArCi0gICAgIlwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTAiICsKLSAgICAiXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMiIgKwotICAgICJcMTIzXDEwMVwwMDFcMDAxXDAwMFwxMzRcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwIiArCi0gICAgIlwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjYiICsKLSAgICAiXDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NiIgKwotICAgICJcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwyMTVcMDU1XDA0MFwwNzFcMTY1IiArCi0gICAgIlwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDAiICsKLSAgICAiXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMiIgKwotICAgICJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxIiArCi0gICAgIlwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwNFwxMjRcMjIwXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMTcwXDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyIiArCi0gICAgIlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzNcMjIyXDAzNlwxNjRcMDM3XDE2NlwwNDAiICsKLSAgICAiXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNSIgKwotICAgICJcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3IiArCi0gICAgIlwxMzRcMDYwXDE3NlwwNjFcMTAzXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzEiICsKLSAgICAiXDA3MFwwNjdcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NiIgKwotICAgICJcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1IiArCi0gICAgIlwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTMiICsKLSAgICAiXDEyNlwxMTVcMTIzXDExNlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMiIgKwotICAgICJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTY2XDAwM1wwNDZcMDA0IiArCi0gICAgIlwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzUiICsKLSAgICAiXDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0MyIgKwotICAgICJcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0IiArCi0gICAgIlwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxXDIyNVwwNjIiICsKLSAgICAiXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NSIgKwotICAgICJcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxIiArCi0gICAgIlwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjciICsKLSAgICAiXDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTZcMDQyXDExNyIgKwotICAgICJcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE2NlwwMDMiICsKLSAgICAiXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMiIgKwotICAgICJcMDI2XDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyIiArCi0gICAgIlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTciICsKLSAgICAiXDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MSIgKwotICAgICJcMjMwXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1IiArCi0gICAgIlwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDAiICsKLSAgICAiXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMiIgKwotICAgICJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2IiArCi0gICAgIlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEwXDAwM1wyMzZcMDIwXDMyMFwwMjJcMjQzXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwxNjZcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyMyIgKwotICAgICJcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0IiArCi0gICAgIlwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDciICsKLSAgICAiXDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNCIgKwotICAgICJcMDYwXDE3NlwwNjFcMzIyXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwIiArCi0gICAgIlwwNjdcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjUiICsKLSAgICAiXDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNSIgKwotICAgICJcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2IiArCi0gICAgIlwxMTVcMTIzXDExNlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjMiICsKLSAgICAiXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0XDAwM1wzMjRcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTJcMDAzXDIzNlwwMjBcMzIwXDAyMlwzMjdcMDM1IiArCi0gICAgIlwzMjZcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNjYiICsKLSAgICAiXDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNSIgKwotICAgICJcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzZcMTY0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxIiArCi0gICAgIlwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTIiICsKLSAgICAiXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NiIgKwotICAgICJcMDYxXDMzMVwwNjJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjdcMDcxXDA3MFwwNjdcMDcxIiArCi0gICAgIlwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzIiICsKLSAgICAiXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNiIgKwotICAgICJcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMTVcMTIzIiArCi0gICAgIlwxMTZcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNjZcMDAzXDA0NiIgKwotICAgICJcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2IiArCi0gICAgIlwwMzVcMDMyXDE0NFwwMzZcMTY0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDUiICsKLSAgICAiXDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1MyIgKwotICAgICJcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjFcMzM0IiArCi0gICAgIlwwNjJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjdcMDcxXDA3MFwwNjdcMDcxXDE2NVwwNzIiICsKLSAgICAiXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNiIgKwotICAgICJcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3IiArCi0gICAgIlwxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMTVcMTIzXDExNlwwNDIiICsKLSAgICAiXDExN1wwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAxMFwwMDNcMjM2XDAyMFwzMjBcMDIyXDMzNlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDE2NlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjAiICsKLSAgICAiXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM2XDE2NCIgKwotICAgICJcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1IiArCi0gICAgIlwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDAiICsKLSAgICAiXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MVwzNDBcMDYyXDAzMVwwNjVcMjAyXDA2NiIgKwotICAgICJcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyIiArCi0gICAgIlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDMiICsKLSAgICAiXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExMyIgKwotICAgICJcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2XDA0MlwxMTdcMDczXDEyMFwxNTZcMTIxIiArCi0gICAgIlwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDE3MFwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMSIgKwotICAgICJcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDMzXDM0M1wwMzZcMTY0IiArCi0gICAgIlwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDUiICsKLSAgICAiXDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MCIgKwotICAgICJcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxXDEwM1wwNjJcMDMxXDA2NVwyMDJcMDY2IiArCi0gICAgIlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjIiICsKLSAgICAiXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwMyIgKwotICAgICJcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzIiArCi0gICAgIlwxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTZcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjEiICsKLSAgICAiXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMTY2XDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxIiArCi0gICAgIlwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzZcMTY0XDAzN1wxNjYiICsKLSAgICAiXDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NiIgKwotICAgICJcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwIiArCi0gICAgIlwwNTdcMTM0XDA2MFwxNzZcMDYxXDM0NlwwNjJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjciICsKLSAgICAiXDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MCIgKwotICAgICJcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0IiArCi0gICAgIlwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzciICsKLSAgICAiXDExM1wxMjZcMTE1XDEyM1wxMTZcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMiIgKwotICAgICJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE2NlwwMDNcMDQ2IiArCi0gICAgIlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjYiICsKLSAgICAiXDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NSIgKwotICAgICJcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzIiArCi0gICAgIlwwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MVwzNTAiICsKLSAgICAiXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1XDA3MiIgKwotICAgICJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2IiArCi0gICAgIlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDciICsKLSAgICAiXDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2XDA0MiIgKwotICAgICJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxMlwwMDNcMjM2XDAxNVwzNTYiICsKLSAgICAiXDAxNlwzNTVcMDIwXDM1N1wwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDEwXDAwM1wyMzZcMDEyXDM2MlwwMjBcMzYzXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwNlwwMDNcMzY2XDAwN1wzNjdcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNzBcMDAzXDA0NlwwMDRcMDM0XDAwNyIgKwotICAgICJcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzFcMzc1IiArCi0gICAgIlwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDMiICsKLSAgICAiXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NCIgKwotICAgICJcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MVwzNzZcMDYyIiArCi0gICAgIlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1XDA3MlwwNjUiICsKLSAgICAiXDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMSIgKwotICAgICJcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3IiArCi0gICAgIlwxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2XDA0MlwxMTciICsKLSAgICAiXDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNjZcMDAzIiArCi0gICAgIlwwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTIiICsKLSAgICAiXDAyNlwwMzVcMDMyXDE0NFwwMzZcMTY0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MiIgKwotICAgICJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3IiArCi0gICAgIlwwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjEiICsKLSAgICAiXHUwMTAyXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1IiArCi0gICAgIlwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDAiICsKLSAgICAiXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMiIgKwotICAgICJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2IiArCi0gICAgIlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDExNFwwMDNcMDQ2XDAwNCIgKwotICAgICJcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1IiArCi0gICAgIlwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDQiICsKLSAgICAiXDE3MVwwNDVcdTAxMDZcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwIiArCi0gICAgIlwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDQiICsKLSAgICAiXDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzNyIgKwotICAgICJcMTEzXDEyNlwxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMTE0XDAwM1wwNDZcMDA0IiArCi0gICAgIlwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzUiICsKLSAgICAiXDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NCIgKwotICAgICJcMTcxXDA0NVx1MDEwNVwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjAiICsKLSAgICAiXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNCIgKwotICAgICJcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3IiArCi0gICAgIlwxMTNcMTI2XDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwxNDBcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMSIgKwotICAgICJcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwIiArCi0gICAgIlwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzUiICsKLSAgICAiXDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcdTAxMTJcMDYwIiArCi0gICAgIlwxNzZcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjUiICsKLSAgICAiXDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNSIgKwotICAgICJcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2IiArCi0gICAgIlwxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDE0MFwwMDMiICsKLSAgICAiXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMiIgKwotICAgICJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzIiArCi0gICAgIlwxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjQiICsKLSAgICAiXDA1NFwwNDdcMDU1XDA0MFwwNTZcdTAxMTFcMDYwXDE3NlwwNzFcMTY1XDA3MlwwNjVcMDczIiArCi0gICAgIlwxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzAiICsKLSAgICAiXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMCIgKwotICAgICJcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyIiArCi0gICAgIlwxMjNcMTAxXDAwMVwwMDFcMDAwXDE0MFwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjAiICsKLSAgICAiXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NiIgKwotICAgICJcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2IiArCi0gICAgIlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1Nlx1MDExMCIgKwotICAgICJcMDYwXDE3NlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2IiArCi0gICAgIlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTUiICsKLSAgICAiXDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExMyIgKwotICAgICJcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMTQwIiArCi0gICAgIlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjUiICsKLSAgICAiXDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NSIgKwotICAgICJcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzIiArCi0gICAgIlwwNjRcMDU0XDA0N1wwNTVcMDQwXDA1Nlx1MDEwYlwwNjBcMTc2XDA3MVwxNjVcMDcyXDA2NSIgKwotICAgICJcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxIiArCi0gICAgIlwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjciICsKLSAgICAiXDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIwXDE1NlwxMjFcMTUzXDEyMiIgKwotICAgICJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDEzNlwwMDNcMDQ2IiArCi0gICAgIlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjYiICsKLSAgICAiXDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNiIgKwotICAgICJcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0IiArCi0gICAgIlwwNDdcMDU1XDA0MFwwNjBcdTAxMGZcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMiIgKwotICAgICJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzIiArCi0gICAgIlwwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTMiICsKLSAgICAiXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMSIgKwotICAgICJcMDAxXDAwMFwxMzZcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2IiArCi0gICAgIlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDEiICsKLSAgICAiXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNSIgKwotICAgICJcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNjBcdTAxMGVcMDcxXDE2NVwwNzIiICsKLSAgICAiXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNiIgKwotICAgICJcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3IiArCi0gICAgIlwxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTMiICsKLSAgICAiXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwNFwwMDNcdTAxMTdcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxMFwwMDNcMjM2IiArCi0gICAgIlwwMjBcMzIwXDAyMlx1MDExOVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTY2XDAwMyIgKwotICAgICJcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyIiArCi0gICAgIlwwMjZcMDM1XDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDIiICsKLSAgICAiXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxNyIgKwotICAgICJcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxIiArCi0gICAgIlx1MDExYlwwNjJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjdcMDcxXDA3MFwwNjdcMDcxXDE2NSIgKwotICAgICJcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwIiArCi0gICAgIlwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDIiICsKLSAgICAiXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMTVcMTIzXDExNiIgKwotICAgICJcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDRcMTI0XDIyMFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDA0XDAwM1wzMjRcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNDZcMDAzXDA0NiIgKwotICAgICJcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2IiArCi0gICAgIlwwMzVcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDYiICsKLSAgICAiXDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NCIgKwotICAgICJcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYyXDAzMVwwNjdcdTAxM2MiICsKLSAgICAiXDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3NyIgKwotICAgICJcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwIiArCi0gICAgIlwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjAiICsKLSAgICAiXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTQ2XDAwM1wwNDZcMDA0IiArCi0gICAgIlwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzUiICsKLSAgICAiXDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NCIgKwotICAgICJcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3IiArCi0gICAgIlwwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MlwwMzFcMDY3XHUwMTNiXDA3MSIgKwotICAgICJcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyIiArCi0gICAgIlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDYiICsKLSAgICAiXDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIwXDE1NiIgKwotICAgICJcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMTQ2XDAwM1wwNDZcMDA0IiArCi0gICAgIlwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzUiICsKLSAgICAiXDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NCIgKwotICAgICJcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3IiArCi0gICAgIlwwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MlwwMzFcMDY3XHUwMTNhXDA3MSIgKwotICAgICJcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyIiArCi0gICAgIlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDYiICsKLSAgICAiXDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIwXDE1NiIgKwotICAgICJcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwNDBcMDAzXDIzNlwwMTdcdTAxNDNcMDIwIiArCi0gICAgIlx1MDE0NlwwMzBcdTAxNDBcMDUxXHUwMTQyXDA3Mlx1MDE0MVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMCIgKwotICAgICJcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwNFwwMjRcdTAxNGNcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEyIiArCi0gICAgIlwwMDNcMjM2XDAxNFx1MDE1MFwwMTZcdTAxNTFcMDIwXDM1N1wwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEyXDAwM1wyMzYiICsKLSAgICAiXDAxMFx1MDE1NFwwMTNcdTAxNTVcMDIwXHUwMTU2XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0IiArCi0gICAgIlwxMjRcMjIwXDAwMVwwMDFcMDAwXDAxMlwwMDNcMjM2XDAxMVx1MDE1Y1wwMTNcdTAxNWRcMDIwIiArCi0gICAgIlx1MDE1NlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxMFwwMDNcMjM2XDAxMlx1MDE2MFwwMjAiICsKLSAgICAiXDM2M1wwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEyXDAwM1wyMzYiICsKLSAgICAiXDAyMFwzMjBcMDIyXDMyN1wwMzVcdTAxNjhcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwxNjZcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzIiICsKLSAgICAiXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MSIgKwotICAgICJcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1IiArCi0gICAgIlwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjAiICsKLSAgICAiXDE3NlwwNjFcdTAxNmFcMDYyXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzBcMDY3IiArCi0gICAgIlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzciICsKLSAgICAiXDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMCIgKwotICAgICJcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTE1IiArCi0gICAgIlwxMjNcMTE2XDA0MlwxMTdcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDEiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMDAzXHUwMTZjXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAxMlwwMDNcMjM2XDAxN1x1MDE3MlwwMjBcdTAxNDZcMDUwXHUwMTcxXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNDRcMDAzXDA0NlwwMDQiICsKLSAgICAiXDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNSIgKwotICAgICJcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0IiArCi0gICAgIlwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDciICsKLSAgICAiXDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYyXHUwMTdiXDA3MVwxNjVcMDcyIiArCi0gICAgIlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDYiICsKLSAgICAiXDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwNyIgKwotICAgICJcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIwXDE1NlwxMjFcMTUzIiArCi0gICAgIlwxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMTQyXDAwM1wwNDZcMDA0XDAzNFwwMDciICsKLSAgICAiXDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NCIgKwotICAgICJcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1IiArCi0gICAgIlwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDAiICsKLSAgICAiXDA1NlwwNTBcMDU3XHUwMTdhXDA2MFwxNzZcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0IiArCi0gICAgIlwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjEiICsKLSAgICAiXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMSIgKwotICAgICJcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxIiArCi0gICAgIlwwMDFcMDAxXDAwMFwxNDJcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjEiICsKLSAgICAiXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NCIgKwotICAgICJcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3IiArCi0gICAgIlwwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1x1MDE3OSIgKwotICAgICJcMDYwXDE3NlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2IiArCi0gICAgIlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTUiICsKLSAgICAiXDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExMyIgKwotICAgICJcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwNlwxMTFcdTAxODFcMTEzXHUwMTgyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDQwXDAwM1wyMzZcMDE3XHUwMTQzXDAyMFx1MDE0NlwwMzBcdTAxNDBcMDUxXHUwMThhIiArCi0gICAgIlwwNzJcdTAxNDFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMCIgKwotICAgICJcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxMlwwMDNcMjM2XDAxN1x1MDE3MlwwMjBcdTAxNDZcMDUwIiArCi0gICAgIlx1MDE4ZFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNTJcMDAzIiArCi0gICAgIlwwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTIiICsKLSAgICAiXDAyNlwwMzVcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0MyIgKwotICAgICJcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0IiArCi0gICAgIlwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYyXDAzMVwwNjUiICsKLSAgICAiXHUwMTkzXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyIiArCi0gICAgIlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDMiICsKLSAgICAiXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExMyIgKwotICAgICJcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiIiB9KTsKLQotICAvKiogQWNjZXNzIHRvIDxjb2RlPnJlZHVjZV9nb3RvPC9jb2RlPiB0YWJsZS4gKi8KLSAgcHVibGljIHNob3J0W11bXSByZWR1Y2VfdGFibGUoKSB7cmV0dXJuIF9yZWR1Y2VfdGFibGU7fQotCi0gIC8qKiBJbnN0YW5jZSBvZiBhY3Rpb24gZW5jYXBzdWxhdGlvbiBjbGFzcy4gKi8KLSAgcHJvdGVjdGVkIENVUCRYUGF0aEN1cCRhY3Rpb25zIGFjdGlvbl9vYmo7Ci0KLSAgLyoqIEFjdGlvbiBlbmNhcHN1bGF0aW9uIG9iamVjdCBpbml0aWFsaXplci4gKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdF9hY3Rpb25zKCkKLSAgICB7Ci0gICAgICBhY3Rpb25fb2JqID0gbmV3IENVUCRYUGF0aEN1cCRhY3Rpb25zKHRoaXMpOwotICAgIH0KLQotICAvKiogSW52b2tlIGEgdXNlciBzdXBwbGllZCBwYXJzZSBhY3Rpb24uICovCi0gIHB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBkb19hY3Rpb24oCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYWN0X251bSwKLSAgICBqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciBwYXJzZXIsCi0gICAgamF2YS51dGlsLlN0YWNrICAgICAgICAgICAgc3RhY2ssCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdG9wKQotICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCi0gIHsKLSAgICAvKiBjYWxsIGNvZGUgaW4gZ2VuZXJhdGVkIGNsYXNzICovCi0gICAgcmV0dXJuIGFjdGlvbl9vYmouQ1VQJFhQYXRoQ3VwJGRvX2FjdGlvbihhY3RfbnVtLCBwYXJzZXIsIHN0YWNrLCB0b3ApOwotICB9Ci0KLSAgLyoqIEluZGljYXRlcyBzdGFydCBzdGF0ZS4gKi8KLSAgcHVibGljIGludCBzdGFydF9zdGF0ZSgpIHtyZXR1cm4gMDt9Ci0gIC8qKiBJbmRpY2F0ZXMgc3RhcnQgcHJvZHVjdGlvbi4gKi8KLSAgcHVibGljIGludCBzdGFydF9wcm9kdWN0aW9uKCkge3JldHVybiAxO30KLQotICAvKiogPGNvZGU+RU9GPC9jb2RlPiBTeW1ib2wgaW5kZXguICovCi0gIHB1YmxpYyBpbnQgRU9GX3N5bSgpIHtyZXR1cm4gMDt9Ci0KLSAgLyoqIDxjb2RlPmVycm9yPC9jb2RlPiBTeW1ib2wgaW5kZXguICovCi0gIHB1YmxpYyBpbnQgZXJyb3Jfc3ltKCkge3JldHVybiAxO30KLQotCi0KLQotcHVibGljIHZvaWQgcmVwb3J0X2Vycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgaW5mbykgewotCVN0cmluZyBlcnIgPSAiUGFyc2VyIGVycm9yOiAiOwotCi0JWFBhdGhGbGV4IGxleGVyID0gKFhQYXRoRmxleCkgZ2V0U2Nhbm5lcigpOwotCi0JZXJyICs9ICJsaW5lICIgKyBsZXhlci5saW5lbm8oKTsKLQllcnIgKz0gIiBjb2wgIiArIGxleGVyLmNvbG5vKCk7Ci0JZXJyICs9ICI6ICIgKyBsZXhlci55eXRleHQoKTsKLQotCQotCXRocm93IG5ldyBDdXBFcnJvcihlcnIpOwotfQotCi19Ci0KLS8qKiBDdXAgZ2VuZXJhdGVkIGNsYXNzIHRvIGVuY2Fwc3VsYXRlIHVzZXIgc3VwcGxpZWQgYWN0aW9uIGNvZGUuKi8KLWNsYXNzIENVUCRYUGF0aEN1cCRhY3Rpb25zIHsKLSAgcHJpdmF0ZSBmaW5hbCBYUGF0aEN1cCBwYXJzZXI7Ci0KLSAgLyoqIENvbnN0cnVjdG9yICovCi0gIENVUCRYUGF0aEN1cCRhY3Rpb25zKFhQYXRoQ3VwIHBhcnNlcikgewotICAgIHRoaXMucGFyc2VyID0gcGFyc2VyOwotICB9Ci0KLSAgLyoqIE1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgZ2VuZXJhdGVkIGFjdGlvbiBjb2RlLiAqLwotICBwdWJsaWMgZmluYWwgamF2YV9jdXAucnVudGltZS5TeW1ib2wgQ1VQJFhQYXRoQ3VwJGRvX2FjdGlvbigKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkYWN0X251bSwKLSAgICBqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciBDVVAkWFBhdGhDdXAkcGFyc2VyLAotICAgIGphdmEudXRpbC5TdGFjayAgICAgICAgICAgIENVUCRYUGF0aEN1cCRzdGFjaywKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkdG9wKQotICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCi0gICAgewotICAgICAgLyogU3ltYm9sIG9iamVjdCBmb3IgcmV0dXJuIGZyb20gYWN0aW9ucyAqLwotICAgICAgamF2YV9jdXAucnVudGltZS5TeW1ib2wgQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgLyogc2VsZWN0IHRoZSBhY3Rpb24gYmFzZWQgb24gdGhlIGFjdGlvbiBudW1iZXIgKi8KLSAgICAgIHN3aXRjaCAoQ1VQJFhQYXRoQ3VwJGFjdF9udW0pCi0gICAgICAgIHsKLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyODQ6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEdFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZ2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjgzOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBHVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImd0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI4MjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyODE6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IExUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibHQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjgwOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBORSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5lIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3OTogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gRVEgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlcSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzg6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IE1PRCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm1vZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzc6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IElESVYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpZGl2Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3NjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gRElWIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3NTogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvciIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzQ6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEFORCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzM6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEVMU0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbHNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3MjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gVEhFTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRoZW4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjcxOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBFVkVSWSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImV2ZXJ5Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3MDogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gU09NRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNvbWUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY5OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBTQVRJU0ZJRVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzYXRpc2ZpZXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY4OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBSRVRVUk4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJyZXR1cm4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY3OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBJTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImluIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2NjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gRk9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2NTogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gSVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjQ6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IENBU1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2MzogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gQ0FTVEFCTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0YWJsZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjI6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFRSRUFUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjYxOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBBUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2MDogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gT0YgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTk6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IElOU1RBTkNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW5zdGFuY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU4OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBFWENFUFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJleGNlcHQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU3OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBJTlRFUlNFQ1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnRlcnNlY3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU2OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBVTklPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInVuaW9uIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1NTogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gQU5DRVNUT1JfT1JfU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yLW9yLXNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU0OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBQUkVDRURJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUzOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBQUkVDRURJTkdfU0lCTElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCAgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmctc2libGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTI6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEFOQ0VTVE9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUxOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBQQVJFTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwYXJlbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjUwOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBOQU1FU1BBQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuYW1lc3BhY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ5OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBGT0xMT1dJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ4OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBGT0xMT1dJTkdfU0lCTElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZy1zaWJsaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NzogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gREVTQ0VOREFOVF9PUl9TRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudC1vZi1zZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ1OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBERVNDRU5EQU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDQ6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IENISUxEIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiY2hpbGQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQzOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBUTyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRvIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0MjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gTkNOQU1FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQxOiAvLyBOQ05hbWUgOjo9IEdFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZ2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDA6IC8vIE5DTmFtZSA6Oj0gR1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJndCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzOTogLy8gTkNOYW1lIDo6PSBMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImxlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM4OiAvLyBOQ05hbWUgOjo9IExUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibHQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzc6IC8vIE5DTmFtZSA6Oj0gTkUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzNjogLy8gTkNOYW1lIDo6PSBFUSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVxIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM1OiAvLyBOQ05hbWUgOjo9IE1PRCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm1vZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzNDogLy8gTkNOYW1lIDo6PSBUWVBFU1dJVENIIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidHlwZXN3aXRjaCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzMzogLy8gTkNOYW1lIDo6PSBURVhUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidGV4dCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzMjogLy8gTkNOYW1lIDo6PSBTQ0hFTUFfRUxFTUVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1lbGVtZW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjMxOiAvLyBOQ05hbWUgOjo9IFNDSEVNQV9BVFRSSUJVVEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzY2hlbWEtYXR0cmlidXRlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjMwOiAvLyBOQ05hbWUgOjo9IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcm9jZXNzaW5nLWluc3RydWN0aW9uIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI5OiAvLyBOQ05hbWUgOjo9IE5PREUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJub2RlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI4OiAvLyBOQ05hbWUgOjo9IElURU0gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpdGVtIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjI3OiAvLyBOQ05hbWUgOjo9IEVNUFRZX1NFUVVFTkNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZW1wdHktc2VxdWVuY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjY6IC8vIE5DTmFtZSA6Oj0gRUxFTUVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsZW1lbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjU6IC8vIE5DTmFtZSA6Oj0gRE9DVU1FTlRfTk9ERSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRvY3VtZW50LW5vZGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjQ6IC8vIE5DTmFtZSA6Oj0gQ09NTUVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNvbW1lbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjM6IC8vIE5DTmFtZSA6Oj0gSURJViAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjI6IC8vIE5DTmFtZSA6Oj0gRElWIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGl2Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjIxOiAvLyBOQ05hbWUgOjo9IE9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygib3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjA6IC8vIE5DTmFtZSA6Oj0gQU5EIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE5OiAvLyBOQ05hbWUgOjo9IEVMU0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbHNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE4OiAvLyBOQ05hbWUgOjo9IFRIRU4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0aGVuIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE3OiAvLyBOQ05hbWUgOjo9IElGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaWYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTY6IC8vIE5DTmFtZSA6Oj0gRVZFUlkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJldmVyeSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxNTogLy8gTkNOYW1lIDo6PSBTT01FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic29tZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxNDogLy8gTkNOYW1lIDo6PSBTQVRJU0ZJRVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzYXRpc2ZpZXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTM6IC8vIE5DTmFtZSA6Oj0gUkVUVVJOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygicmV0dXJuIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjEyOiAvLyBOQ05hbWUgOjo9IElOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTE6IC8vIE5DTmFtZSA6Oj0gRk9SIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjEwOiAvLyBOQ05hbWUgOjo9IElTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDk6IC8vIE5DTmFtZSA6Oj0gQ0FTVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDg6IC8vIE5DTmFtZSA6Oj0gQ0FTVEFCTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0YWJsZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwNzogLy8gTkNOYW1lIDo6PSBUUkVBVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA2OiAvLyBOQ05hbWUgOjo9IEFTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDU6IC8vIE5DTmFtZSA6Oj0gT0YgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwNDogLy8gTkNOYW1lIDo6PSBJTlNUQU5DRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImluc3RhbmNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjAzOiAvLyBOQ05hbWUgOjo9IEVYQ0VQVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImV4Y2VwdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwMjogLy8gTkNOYW1lIDo6PSBJTlRFUlNFQ1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnRlcnNlY3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDE6IC8vIE5DTmFtZSA6Oj0gVU5JT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ1bmlvbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwMDogLy8gTkNOYW1lIDo6PSBBTkNFU1RPUl9PUl9TRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3Itb3Itc2VsZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5OTogLy8gTkNOYW1lIDo6PSBQUkVDRURJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTg6IC8vIE5DTmFtZSA6Oj0gUFJFQ0VESU5HX1NJQkxJTkcgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgID0gbmV3IFN0cmluZygicHJlY2VkaW5nLXNpYmxpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTc6IC8vIE5DTmFtZSA6Oj0gQU5DRVNUT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3RvciIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5NjogLy8gTkNOYW1lIDo6PSBQQVJFTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwYXJlbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTU6IC8vIE5DTmFtZSA6Oj0gTkFNRVNQQUNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibmFtZXNwYWNlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk0OiAvLyBOQ05hbWUgOjo9IEZPTExPV0lORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5MzogLy8gTkNOYW1lIDo6PSBGT0xMT1dJTkdfU0lCTElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZy1zaWJsaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTkyOiAvLyBOQ05hbWUgOjo9IERFU0NFTkRBTlRfT1JfU0VMRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQtb2Ytc2VsZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5MTogLy8gTkNOYW1lIDo6PSBTRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic2VsZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5MDogLy8gTkNOYW1lIDo6PSBBVFRSSUJVVEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhdHRyaWJ1dGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODk6IC8vIE5DTmFtZSA6Oj0gREVTQ0VOREFOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODg6IC8vIE5DTmFtZSA6Oj0gQ0hJTEQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjaGlsZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4NzogLy8gTkNOYW1lIDo6PSBUTyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRvIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg2OiAvLyBOQ05hbWUgOjo9IE5DTkFNRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg1OiAvLyBVbnJlc2VydmVkUU5hbWUgOjo9IE5DTmFtZSBDT0xPTiBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlTdHJpbmcgcCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBsID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFFOYW1lKHAsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE1LypVbnJlc2VydmVkUU5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4NDogLy8gVW5yZXNlcnZlZFFOYW1lIDo6PSBVbnJlc2VydmVkTkNOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIGwgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUobCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE1LypVbnJlc2VydmVkUU5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MzogLy8gTG9jYWxQYXJ0IDo6PSBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0LypMb2NhbFBhcnQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MjogLy8gUHJlZml4IDo6PSBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzLypQcmVmaXgqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4MTogLy8gUU5hbWUgOjo9IE5DTmFtZSBDT0xPTiBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlTdHJpbmcgcCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBsID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFFOYW1lKHAsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE0LypRTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTgwOiAvLyBRTmFtZSA6Oj0gTkNOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIGwgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUobCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE0LypRTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc5OiAvLyBWYXJOYW1lIDo6PSBRTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE2LypWYXJOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzg6IC8vIFN0cmluZ0xpdGVyYWwgOjo9IFNUUklORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIHMgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nTGl0ZXJhbChzKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNS8qU3RyaW5nTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc3OiAvLyBEb3VibGVMaXRlcmFsIDo6PSBET1VCTEUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERvdWJsZUxpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IGRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBkcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCURvdWJsZSBkID0gKERvdWJsZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERvdWJsZUxpdGVyYWwoZC5kb3VibGVWYWx1ZSgpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjQvKkRvdWJsZUxpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3NjogLy8gRGVjaW1hbExpdGVyYWwgOjo9IERFQ0lNQUwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERlY2ltYWxMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBkbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlCaWdEZWNpbWFsIGQgPSAoQmlnRGVjaW1hbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERlY2ltYWxMaXRlcmFsKGQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2Mi8qRGVjaW1hbExpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3NTogLy8gSW50ZWdlckxpdGVyYWwgOjo9IElOVEVHRVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXJMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBpbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgaXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlCaWdJbnRlZ2VyIGkgPSAoQmlnSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXJMaXRlcmFsKGkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2My8qSW50ZWdlckxpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3NDogLy8gVHlwZU5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woOC8qVHlwZU5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MzogLy8gRWxlbWVudE5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woOS8qRWxlbWVudE5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MjogLy8gQXR0cmlidXRlTmFtZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMi8qQXR0cmlidXRlTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTcxOiAvLyBFbGVtZW50RGVjbGFyYXRpb24gOjo9IEVsZW1lbnROYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNi8qRWxlbWVudERlY2xhcmF0aW9uKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzA6IC8vIFNjaGVtYUVsZW1lbnRUZXN0IDo6PSBTQ0hFTUFfRUxFTUVOVCBMUEFSIEVsZW1lbnREZWNsYXJhdGlvbiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTY2hlbWFFbGVtVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNjaGVtYUVsZW1UZXN0KGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3My8qU2NoZW1hRWxlbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2OTogLy8gRWxlbWVudE5hbWVPcldpbGRjYXJkIDo6PSBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbnVsbDsgLyogWFhYICovIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcvKkVsZW1lbnROYW1lT3JXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY4OiAvLyBFbGVtZW50TmFtZU9yV2lsZGNhcmQgOjo9IEVsZW1lbnROYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gZTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNy8qRWxlbWVudE5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjc6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkIENPTU1BIFR5cGVOYW1lIFFVRVNUSU9OTUFSSyBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihlID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KGUsd2lsZCx0LHRydWUpOwotCQkJICAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3MS8qRWxlbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2NjogLy8gRWxlbWVudFRlc3QgOjo9IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQgQ09NTUEgVHlwZU5hbWUgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCVFOYW1lIGUgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQsdCk7Ci0JCQkgIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcxLypFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY1OiAvLyBFbGVtZW50VGVzdCA6Oj0gRUxFTUVOVCBMUEFSIEVsZW1lbnROYW1lT3JXaWxkY2FyZCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihlID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KGUsd2lsZCk7Ci0JCQkgIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcxLypFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY0OiAvLyBFbGVtZW50VGVzdCA6Oj0gRUxFTUVOVCBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzEvKkVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjM6IC8vIEF0dHJpYnV0ZURlY2xhcmF0aW9uIDo6PSBBdHRyaWJ1dGVOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTAvKkF0dHJpYnV0ZURlY2xhcmF0aW9uKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjI6IC8vIFNjaGVtYUF0dHJpYnV0ZVRlc3QgOjo9IFNDSEVNQV9BVFRSSUJVVEUgTFBBUiBBdHRyaWJ1dGVEZWNsYXJhdGlvbiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTY2hlbWFBdHRyVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgYSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNjaGVtYUF0dHJUZXN0KGEpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3Mi8qU2NoZW1hQXR0cmlidXRlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYxOiAvLyBBdHRyaWJOYW1lT3JXaWxkY2FyZCA6Oj0gU1RBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG51bGw7IC8qIFhYWCAqLyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMS8qQXR0cmliTmFtZU9yV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2MDogLy8gQXR0cmliTmFtZU9yV2lsZGNhcmQgOjo9IEF0dHJpYnV0ZU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBhID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBhOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMS8qQXR0cmliTmFtZU9yV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1OTogLy8gQXR0cmlidXRlVGVzdCA6Oj0gQVRUUklCVVRFIExQQVIgQXR0cmliTmFtZU9yV2lsZGNhcmQgQ09NTUEgVHlwZU5hbWUgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXR0cmlidXRlVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJUU5hbWUgYSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihhID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEF0dHJpYnV0ZVRlc3QoYSx3aWxkLHQpOwotCQkJICAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OS8qQXR0cmlidXRlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTU4OiAvLyBBdHRyaWJ1dGVUZXN0IDo6PSBBVFRSSUJVVEUgTFBBUiBBdHRyaWJOYW1lT3JXaWxkY2FyZCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBdHRyaWJ1dGVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSBhID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCQotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGEgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdChhLHdpbGQpOwotCQkJICAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OS8qQXR0cmlidXRlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTU3OiAvLyBBdHRyaWJ1dGVUZXN0IDo6PSBBVFRSSUJVVEUgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBdHRyaWJ1dGVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OS8qQXR0cmlidXRlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTU2OiAvLyBQSVRlc3QgOjo9IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBTdHJpbmdMaXRlcmFsIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFBJVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJU3RyaW5nTGl0ZXJhbCBzID0gKFN0cmluZ0xpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBQSVRlc3Qocy5zdHJpbmcoKSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY4LypQSVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NTogLy8gUElUZXN0IDo6PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIExQQVIgTkNOYW1lIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFBJVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUElUZXN0KG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OC8qUElUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTQ6IC8vIFBJVGVzdCA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFBJVGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IFBJVGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2OC8qUElUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTM6IC8vIENvbW1lbnRUZXN0IDo6PSBDT01NRU5UIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29tbWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBDb21tZW50VGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2Ny8qQ29tbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1MjogLy8gVGV4dFRlc3QgOjo9IFRFWFQgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBUZXh0VGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IFRleHRUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY2LypUZXh0VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTUxOiAvLyBEb2N1bWVudFRlc3QgOjo9IERPQ1VNRU5UX05PREUgTFBBUiBTY2hlbWFFbGVtZW50VGVzdCBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEb2N1bWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVNjaGVtYUVsZW1UZXN0IGUgPSAoU2NoZW1hRWxlbVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoRG9jdW1lbnRUZXN0LlNDSEVNQV9FTEVNRU5ULGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2NS8qRG9jdW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTA6IC8vIERvY3VtZW50VGVzdCA6Oj0gRE9DVU1FTlRfTk9ERSBMUEFSIEVsZW1lbnRUZXN0IFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERvY3VtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJRWxlbWVudFRlc3QgZSA9IChFbGVtZW50VGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERvY3VtZW50VGVzdChEb2N1bWVudFRlc3QuRUxFTUVOVCxlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjUvKkRvY3VtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ5OiAvLyBEb2N1bWVudFRlc3QgOjo9IERPQ1VNRU5UX05PREUgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBEb2N1bWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjUvKkRvY3VtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ4OiAvLyBBbnlLaW5kVGVzdCA6Oj0gTk9ERSBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEFueUtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQW55S2luZFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzAvKkFueUtpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDc6IC8vIEtpbmRUZXN0IDo6PSBBbnlLaW5kVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUFueUtpbmRUZXN0IG4gPSAoQW55S2luZFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ2OiAvLyBLaW5kVGVzdCA6Oj0gVGV4dFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlUZXh0VGVzdCBuID0gKFRleHRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0NTogLy8gS2luZFRlc3QgOjo9IENvbW1lbnRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29tbWVudFRlc3QgbiA9IChDb21tZW50VGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDQ6IC8vIEtpbmRUZXN0IDo6PSBQSVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlQSVRlc3QgbiA9IChQSVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQzOiAvLyBLaW5kVGVzdCA6Oj0gU2NoZW1hQXR0cmlidXRlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNjaGVtYUF0dHJUZXN0IG4gPSAoU2NoZW1hQXR0clRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQyOiAvLyBLaW5kVGVzdCA6Oj0gU2NoZW1hRWxlbWVudFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTY2hlbWFFbGVtVGVzdCBuID0gKFNjaGVtYUVsZW1UZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0MTogLy8gS2luZFRlc3QgOjo9IEF0dHJpYnV0ZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlBdHRyaWJ1dGVUZXN0IG4gPSAoQXR0cmlidXRlVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDA6IC8vIEtpbmRUZXN0IDo6PSBFbGVtZW50VGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUVsZW1lbnRUZXN0IG4gPSAoRWxlbWVudFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM5OiAvLyBLaW5kVGVzdCA6Oj0gRG9jdW1lbnRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRG9jdW1lbnRUZXN0IG4gPSAoRG9jdW1lbnRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzODogLy8gQXRvbWljVHlwZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMy8qQXRvbWljVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM3OiAvLyBJdGVtVHlwZSA6Oj0gSVRFTSBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZW1UeXBlIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuSVRFTSxudWxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjIvKkl0ZW1UeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzY6IC8vIEl0ZW1UeXBlIDo6PSBLaW5kVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSXRlbVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IGtsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBrcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUtpbmRUZXN0IGsgPSAoS2luZFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5LSU5EVEVTVCxrKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjIvKkl0ZW1UeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzU6IC8vIEl0ZW1UeXBlIDo6PSBBdG9taWNUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVtVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgcWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgcSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEl0ZW1UeXBlKEl0ZW1UeXBlLlFOQU1FLHEpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMi8qSXRlbVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzNDogLy8gT2NjdXJyZW5jZUluZGljYXRvciA6Oj0gUExVUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlBMVVMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOC8qT2NjdXJyZW5jZUluZGljYXRvciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTMzOiAvLyBPY2N1cnJlbmNlSW5kaWNhdG9yIDo6PSBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihTZXF1ZW5jZVR5cGUuU1RBUik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE4LypPY2N1cnJlbmNlSW5kaWNhdG9yKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzI6IC8vIE9jY3VycmVuY2VJbmRpY2F0b3IgOjo9IFFVRVNUSU9OTUFSSyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlFVRVNUSU9OKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTgvKk9jY3VycmVuY2VJbmRpY2F0b3IqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzMTogLy8gU2VxdWVuY2VUeXBlIDo6PSBFTVBUWV9TRVFVRU5DRSBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcXVlbmNlVHlwZSBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShTZXF1ZW5jZVR5cGUuRU1QVFksIG51bGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzOS8qU2VxdWVuY2VUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzA6IC8vIFNlcXVlbmNlVHlwZSA6Oj0gSXRlbVR5cGUgT2NjdXJyZW5jZUluZGljYXRvciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VxdWVuY2VUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlJdGVtVHlwZSB0ID0gKEl0ZW1UeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBpbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgaXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlJbnRlZ2VyIGkgPSAoSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShpLmludFZhbHVlKCksIHQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzOS8qU2VxdWVuY2VUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjk6IC8vIFNlcXVlbmNlVHlwZSA6Oj0gSXRlbVR5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcXVlbmNlVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJSXRlbVR5cGUgdCA9IChJdGVtVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShTZXF1ZW5jZVR5cGUuTk9ORSwgdCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM5LypTZXF1ZW5jZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyODogLy8gU2luZ2xlVHlwZSA6Oj0gQXRvbWljVHlwZSBRVUVTVElPTk1BUksgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNpbmdsZVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTaW5nbGVUeXBlKHQsdHJ1ZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM4LypTaW5nbGVUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjc6IC8vIFNpbmdsZVR5cGUgOjo9IEF0b21pY1R5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNpbmdsZVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIHQgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTaW5nbGVUeXBlKHQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzOC8qU2luZ2xlVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI2OiAvLyBGdW5jdGlvbkNhbGxNaWRkbGUgOjo9IEZ1bmN0aW9uQ2FsbE1pZGRsZSBDT01NQSBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBjbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgY3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkgICBjLmFkZChlKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMy8qRnVuY3Rpb25DYWxsTWlkZGxlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjU6IC8vIEZ1bmN0aW9uQ2FsbE1pZGRsZSA6Oj0gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkgICBDb2xsZWN0aW9uIGMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkgICBjLmFkZChlKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMy8qRnVuY3Rpb25DYWxsTWlkZGxlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjQ6IC8vIEZ1bmN0aW9uQ2FsbCA6Oj0gVW5yZXNlcnZlZFFOYW1lIExQQVIgRnVuY3Rpb25DYWxsTWlkZGxlIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBhID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICBSRVNVTFQgPSBuZXcgRnVuY3Rpb25DYWxsKG4sYSk7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MC8qRnVuY3Rpb25DYWxsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjM6IC8vIEZ1bmN0aW9uQ2FsbCA6Oj0gVW5yZXNlcnZlZFFOYW1lIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRnVuY3Rpb25DYWxsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCQotCQkJICAgUkVTVUxUID0gbmV3IEZ1bmN0aW9uQ2FsbChuLG5ldyBBcnJheUxpc3QoKSk7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MC8qRnVuY3Rpb25DYWxsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjI6IC8vIENvbnRleHRJdGVtRXhwciA6Oj0gRE9UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDbnR4SXRlbUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBDbnR4SXRlbUV4cHIoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTkvKkNvbnRleHRJdGVtRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTIxOiAvLyBQYXJlbnRoZXNpemVkRXhwciA6Oj0gTFBBUiBFeHByIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBlOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNC8qUGFyZW50aGVzaXplZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyMDogLy8gUGFyZW50aGVzaXplZEV4cHIgOjo9IExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNC8qUGFyZW50aGVzaXplZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExOTogLy8gVmFyUmVmIDo6PSBET0xMQVIgVmFyTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVmFyUmVmIFJFU1VMVCA9IG51bGw7Ci0JCWludCB2bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgdnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSB2ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgVmFyUmVmKHYpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1OC8qVmFyUmVmKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTg6IC8vIE51bWVyaWNMaXRlcmFsIDo6PSBEb3VibGVMaXRlcmFsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOdW1lcmljTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRG91YmxlTGl0ZXJhbCBuID0gKERvdWJsZUxpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYxLypOdW1lcmljTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE3OiAvLyBOdW1lcmljTGl0ZXJhbCA6Oj0gRGVjaW1hbExpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlEZWNpbWFsTGl0ZXJhbCBuID0gKERlY2ltYWxMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MS8qTnVtZXJpY0xpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExNjogLy8gTnVtZXJpY0xpdGVyYWwgOjo9IEludGVnZXJMaXRlcmFsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOdW1lcmljTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJSW50ZWdlckxpdGVyYWwgbiA9IChJbnRlZ2VyTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjEvKk51bWVyaWNMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTU6IC8vIExpdGVyYWwgOjo9IFN0cmluZ0xpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIExpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZ0xpdGVyYWwgbiA9IChTdHJpbmdMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ny8qTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE0OiAvLyBMaXRlcmFsIDo6PSBOdW1lcmljTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTnVtZXJpY0xpdGVyYWwgbiA9IChOdW1lcmljTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTcvKkxpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExMzogLy8gUHJpbWFyeUV4cHIgOjo9IEZ1bmN0aW9uQ2FsbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUZ1bmN0aW9uQ2FsbCBuID0gKEZ1bmN0aW9uQ2FsbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTI6IC8vIFByaW1hcnlFeHByIDo6PSBDb250ZXh0SXRlbUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDbnR4SXRlbUV4cHIgbiA9IChDbnR4SXRlbUV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI5LypQcmltYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTExOiAvLyBQcmltYXJ5RXhwciA6Oj0gUGFyZW50aGVzaXplZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGUgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBhckV4cHIoZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI5LypQcmltYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTEwOiAvLyBQcmltYXJ5RXhwciA6Oj0gVmFyUmVmIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQcmltYXJ5RXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJVmFyUmVmIG4gPSAoVmFyUmVmKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOS8qUHJpbWFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwOTogLy8gUHJpbWFyeUV4cHIgOjo9IExpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlMaXRlcmFsIG4gPSAoTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDg6IC8vIFByZWRpY2F0ZSA6Oj0gTEJSQUNLRVQgRXhwciBSQlJBQ0tFVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBlID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IGU7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgyLypQcmVkaWNhdGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwNzogLy8gUHJlZGljYXRlTGlzdCA6Oj0gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBBcnJheUxpc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjYvKlByZWRpY2F0ZUxpc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDY6IC8vIFByZWRpY2F0ZUxpc3QgOjo9IFByZWRpY2F0ZUxpc3QgUHJlZGljYXRlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBjbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgY3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkgICBjLmFkZChwKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNi8qUHJlZGljYXRlTGlzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA1OiAvLyBGaWx0ZXJFeHByIDo6PSBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGaWx0ZXJFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVByaW1hcnlFeHByIHBlID0gKFByaW1hcnlFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGUgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEZpbHRlckV4cHIocGUsIGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4MS8qRmlsdGVyRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA0OiAvLyBXaWxkY2FyZCA6Oj0gU1RBUiBDT0xPTiBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZSgiKiIsIG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxNy8qV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwMzogLy8gV2lsZGNhcmQgOjo9IE5DTmFtZSBDT0xPTiBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUobiwgIioiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTcvKldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDI6IC8vIFdpbGRjYXJkIDo6PSBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IFFOYW1lKCIqIiwiKiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxNy8qV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwMTogLy8gTmFtZVRlc3QgOjo9IFdpbGRjYXJkIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOYW1lVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE5hbWVUZXN0KG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NS8qTmFtZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwMDogLy8gTmFtZVRlc3QgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOYW1lVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE5hbWVUZXN0KG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NS8qTmFtZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk5OiAvLyBOb2RlVGVzdCA6Oj0gTmFtZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5vZGVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOYW1lVGVzdCBuID0gKE5hbWVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMC8qTm9kZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk4OiAvLyBOb2RlVGVzdCA6Oj0gS2luZFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5vZGVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlLaW5kVGVzdCBuID0gKEtpbmRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMC8qTm9kZVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk3OiAvLyBBYmJyZXZSZXZlcnNlU3RlcCA6Oj0gRE9URE9UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBSZXZlcnNlU3RlcCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKFJldmVyc2VTdGVwLkRPVERPVCxudWxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzIvKkFiYnJldlJldmVyc2VTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5NjogLy8gUmV2ZXJzZUF4aXMgOjo9IEFOQ0VTVE9SX09SX1NFTEYgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuQU5DRVNUT1JfT1JfU0VMRik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE5LypSZXZlcnNlQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTU6IC8vIFJldmVyc2VBeGlzIDo6PSBQUkVDRURJTkcgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUFJFQ0VESU5HKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTkvKlJldmVyc2VBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5NDogLy8gUmV2ZXJzZUF4aXMgOjo9IFBSRUNFRElOR19TSUJMSU5HIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBSRUNFRElOR19TSUJMSU5HKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTkvKlJldmVyc2VBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5MzogLy8gUmV2ZXJzZUF4aXMgOjo9IEFOQ0VTVE9SIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLkFOQ0VTVE9SKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTkvKlJldmVyc2VBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5MjogLy8gUmV2ZXJzZUF4aXMgOjo9IFBBUkVOVCBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QQVJFTlQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDkxOiAvLyBSZXZlcnNlU3RlcCA6Oj0gQWJicmV2UmV2ZXJzZVN0ZXAgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFJldmVyc2VTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlSZXZlcnNlU3RlcCBuID0gKFJldmVyc2VTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMS8qUmV2ZXJzZVN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDkwOiAvLyBSZXZlcnNlU3RlcCA6Oj0gUmV2ZXJzZUF4aXMgTm9kZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFJldmVyc2VTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlJbnRlZ2VyIGEgPSAoSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJTm9kZVRlc3QgbiA9IChOb2RlVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgIFJFU1VMVCA9IG5ldyBSZXZlcnNlU3RlcChhLmludFZhbHVlKCksIG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMS8qUmV2ZXJzZVN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg5OiAvLyBBYmJyZXZGb3J3YXJkU3RlcCA6Oj0gTm9kZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZvcndhcmRTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOb2RlVGVzdCBuID0gKE5vZGVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuTk9ORSwgbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM0LypBYmJyZXZGb3J3YXJkU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODg6IC8vIEFiYnJldkZvcndhcmRTdGVwIDo6PSBBVF9TWU0gTm9kZVRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZvcndhcmRTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOb2RlVGVzdCBuID0gKE5vZGVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuQVRfU1lNLCBuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzQvKkFiYnJldkZvcndhcmRTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4NzogLy8gRm9yd2FyZEF4aXMgOjo9IE5BTUVTUEFDRSBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5OQU1FU1BBQ0UpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg2OiAvLyBGb3J3YXJkQXhpcyA6Oj0gRk9MTE9XSU5HIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkZPTExPV0lORyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODU6IC8vIEZvcndhcmRBeGlzIDo6PSBGT0xMT1dJTkdfU0lCTElORyBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5GT0xMT1dJTkdfU0lCTElORyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODQ6IC8vIEZvcndhcmRBeGlzIDo6PSBERVNDRU5EQU5UX09SX1NFTEYgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuREVTQ0VOREFOVF9PUl9TRUxGKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4MzogLy8gRm9yd2FyZEF4aXMgOjo9IFNFTEYgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuU0VMRik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODI6IC8vIEZvcndhcmRBeGlzIDo6PSBBVFRSSUJVVEUgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuQVRUUklCVVRFKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4MTogLy8gRm9yd2FyZEF4aXMgOjo9IERFU0NFTkRBTlQgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuREVTQ0VOREFOVCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODA6IC8vIEZvcndhcmRBeGlzIDo6PSBDSElMRCBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5DSElMRCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzk6IC8vIEZvcndhcmRTdGVwIDo6PSBBYmJyZXZGb3J3YXJkU3RlcCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yd2FyZFN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUZvcndhcmRTdGVwIG4gPSAoRm9yd2FyZFN0ZXApKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMzLypGb3J3YXJkU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzg6IC8vIEZvcndhcmRTdGVwIDo6PSBGb3J3YXJkQXhpcyBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yd2FyZFN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgYSA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOb2RlVGVzdCBuID0gKE5vZGVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoYS5pbnRWYWx1ZSgpLG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMy8qRm9yd2FyZFN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc3OiAvLyBBeGlzU3RlcCA6Oj0gUmV2ZXJzZVN0ZXAgUHJlZGljYXRlTGlzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQXhpc1N0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVJldmVyc2VTdGVwIHMgPSAoUmV2ZXJzZVN0ZXApKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcCA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQXhpc1N0ZXAocywgcCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgwLypBeGlzU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzY6IC8vIEF4aXNTdGVwIDo6PSBGb3J3YXJkU3RlcCBQcmVkaWNhdGVMaXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBeGlzU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJRm9yd2FyZFN0ZXAgcyA9IChGb3J3YXJkU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBBeGlzU3RlcChzLCBwKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woODAvKkF4aXNTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3NTogLy8gU3RlcEV4cHIgOjo9IEZpbHRlckV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0ZXBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlGaWx0ZXJFeHByIG4gPSAoRmlsdGVyRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzUvKlN0ZXBFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3NDogLy8gU3RlcEV4cHIgOjo9IEF4aXNTdGVwIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdGVwRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQXhpc1N0ZXAgbiA9IChBeGlzU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzUvKlN0ZXBFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3MzogLy8gUmVsYXRpdmVQYXRoRXhwciA6Oj0gUmVsYXRpdmVQYXRoRXhwciBGT1JXQVJEX1NMQVNIU0xBU0ggU3RlcEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJWFBhdGhFeHByIHAgPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdGVwRXhwciBzID0gKFN0ZXBFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCXAuYWRkX3RhaWwoMixzKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzYvKlJlbGF0aXZlUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDcyOiAvLyBSZWxhdGl2ZVBhdGhFeHByIDo6PSBSZWxhdGl2ZVBhdGhFeHByIEZPUldBUkRfU0xBU0ggU3RlcEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJWFBhdGhFeHByIHAgPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdGVwRXhwciBzID0gKFN0ZXBFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCXAuYWRkX3RhaWwoMSxzKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzYvKlJlbGF0aXZlUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDcxOiAvLyBSZWxhdGl2ZVBhdGhFeHByIDo6PSBTdGVwRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdGVwRXhwciBzID0gKFN0ZXBFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgWFBhdGhFeHByKDAsKFN0ZXBFeHByKXMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNi8qUmVsYXRpdmVQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzA6IC8vIFBhdGhFeHByIDo6PSBSZWxhdGl2ZVBhdGhFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBuID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzgvKlBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2OTogLy8gUGF0aEV4cHIgOjo9IEZPUldBUkRfU0xBU0hTTEFTSCBSZWxhdGl2ZVBhdGhFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBwID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlwLnNldF9zbGFzaGVzKDIpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OC8qUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY4OiAvLyBQYXRoRXhwciA6Oj0gRk9SV0FSRF9TTEFTSCBSZWxhdGl2ZVBhdGhFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBwID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlwLnNldF9zbGFzaGVzKDEpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OC8qUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY3OiAvLyBQYXRoRXhwciA6Oj0gRk9SV0FSRF9TTEFTSCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgWFBhdGhFeHByKDEsbnVsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc4LypQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjY6IC8vIE5vZGVDb21wIDo6PSBHUkVBVEVSX0dSRUFURVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUl9HUkVBVEVSKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjEvKk5vZGVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2NTogLy8gTm9kZUNvbXAgOjo9IExFU1NfTEVTUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRVNTX0xFU1MpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMS8qTm9kZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY0OiAvLyBOb2RlQ29tcCA6Oj0gSVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuSVMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMS8qTm9kZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDYzOiAvLyBWYWx1ZUNvbXAgOjo9IEdFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdFKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjI6IC8vIFZhbHVlQ29tcCA6Oj0gR1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1QpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2MTogLy8gVmFsdWVDb21wIDo6PSBMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDYwOiAvLyBWYWx1ZUNvbXAgOjo9IExUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxUKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTk6IC8vIFZhbHVlQ29tcCA6Oj0gTkUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTkUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1ODogLy8gVmFsdWVDb21wIDo6PSBFUSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5FUSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU3OiAvLyBHZW5lcmFsQ29tcCA6Oj0gR1JFQVRFUkVRVUFMIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdSRUFURVJFUVVBTCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTY6IC8vIEdlbmVyYWxDb21wIDo6PSBHUkVBVEVSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdSRUFURVIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU1OiAvLyBHZW5lcmFsQ29tcCA6Oj0gTEVTU0VRVUFMIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NFUVVBTCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTQ6IC8vIEdlbmVyYWxDb21wIDo6PSBMRVNTVEhBTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRVNTVEhBTik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTM6IC8vIEdlbmVyYWxDb21wIDo6PSBOT1RFUVVBTFMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTk9URVFVQUxTKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1MjogLy8gR2VuZXJhbENvbXAgOjo9IEVRVUFMUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5FUVVBTFMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDUxOiAvLyBWYWx1ZUV4cHIgOjo9IFBhdGhFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVhQYXRoRXhwciBuID0gKFhQYXRoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzkvKlZhbHVlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTA6IC8vIFVuYXJ5RXhwciA6Oj0gUExVUyBVbmFyeUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgYSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUGx1c0V4cHIoYSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM3LypVbmFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ5OiAvLyBVbmFyeUV4cHIgOjo9IE1JTlVTIFVuYXJ5RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBhID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBNaW51c0V4cHIoYSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM3LypVbmFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ4OiAvLyBVbmFyeUV4cHIgOjo9IFZhbHVlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIG4gPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNy8qVW5hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0NzogLy8gQ2FzdEV4cHIgOjo9IFVuYXJ5RXhwciBDQVNUIEFTIFNpbmdsZVR5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTaW5nbGVUeXBlIHIgPSAoU2luZ2xlVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENhc3RFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0My8qQ2FzdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ2OiAvLyBDYXN0RXhwciA6Oj0gVW5hcnlFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDMvKkNhc3RFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0NTogLy8gQ2FzdGFibGVFeHByIDo6PSBDYXN0RXhwciBDQVNUQUJMRSBBUyBTaW5nbGVUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2luZ2xlVHlwZSByID0gKFNpbmdsZVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBDYXN0YWJsZUV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQxLypDYXN0YWJsZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ0OiAvLyBDYXN0YWJsZUV4cHIgOjo9IENhc3RFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDEvKkNhc3RhYmxlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDM6IC8vIFRyZWF0RXhwciA6Oj0gQ2FzdGFibGVFeHByIFRSRUFUIEFTIFNlcXVlbmNlVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNlcXVlbmNlVHlwZSByID0gKFNlcXVlbmNlVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFRyZWF0QXNFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0MC8qVHJlYXRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0MjogLy8gVHJlYXRFeHByIDo6PSBDYXN0YWJsZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0MC8qVHJlYXRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0MTogLy8gSW5zdGFuY2VvZkV4cHIgOjo9IFRyZWF0RXhwciBJTlNUQU5DRSBPRiBTZXF1ZW5jZVR5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTZXF1ZW5jZVR5cGUgciA9IChTZXF1ZW5jZVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBJbnN0T2ZFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Mi8qSW5zdGFuY2VvZkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQwOiAvLyBJbnN0YW5jZW9mRXhwciA6Oj0gVHJlYXRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDIvKkluc3RhbmNlb2ZFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzOTogLy8gSW50ZXJzZWN0RXhjZXB0RXhwciA6Oj0gSW50ZXJzZWN0RXhjZXB0RXhwciBFWENFUFQgSW5zdGFuY2VvZkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEV4Y2VwdEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ2LypJbnRlcnNlY3RFeGNlcHRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzODogLy8gSW50ZXJzZWN0RXhjZXB0RXhwciA6Oj0gSW50ZXJzZWN0RXhjZXB0RXhwciBJTlRFUlNFQ1QgSW5zdGFuY2VvZkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEludGVyc2VjdEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ2LypJbnRlcnNlY3RFeGNlcHRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzNzogLy8gSW50ZXJzZWN0RXhjZXB0RXhwciA6Oj0gSW5zdGFuY2VvZkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ni8qSW50ZXJzZWN0RXhjZXB0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzY6IC8vIFVuaW9uRXhwciA6Oj0gVW5pb25FeHByIFBJUEUgSW50ZXJzZWN0RXhjZXB0RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUGlwZUV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ0LypVbmlvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM1OiAvLyBVbmlvbkV4cHIgOjo9IFVuaW9uRXhwciBVTklPTiBJbnRlcnNlY3RFeGNlcHRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBVbmlvbkV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ0LypVbmlvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM0OiAvLyBVbmlvbkV4cHIgOjo9IEludGVyc2VjdEV4Y2VwdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NC8qVW5pb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzMzogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgTU9EIFVuaW9uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTW9kRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDUvKk11bHRpcGxpY2F0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzI6IC8vIE11bHRpcGxpY2F0aXZlRXhwciA6Oj0gTXVsdGlwbGljYXRpdmVFeHByIElESVYgVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBJRGl2RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDUvKk11bHRpcGxpY2F0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzE6IC8vIE11bHRpcGxpY2F0aXZlRXhwciA6Oj0gTXVsdGlwbGljYXRpdmVFeHByIERJViBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERpdkV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ1LypNdWx0aXBsaWNhdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDMwOiAvLyBNdWx0aXBsaWNhdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciBTVEFSIFVuaW9uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTXVsRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDUvKk11bHRpcGxpY2F0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjk6IC8vIE11bHRpcGxpY2F0aXZlRXhwciA6Oj0gVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDUvKk11bHRpcGxpY2F0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjg6IC8vIEFkZGl0aXZlRXhwciA6Oj0gQWRkaXRpdmVFeHByIE1JTlVTIE11bHRpcGxpY2F0aXZlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3ViRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDgvKkFkZGl0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjc6IC8vIEFkZGl0aXZlRXhwciA6Oj0gQWRkaXRpdmVFeHByIFBMVVMgTXVsdGlwbGljYXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBBZGRFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OC8qQWRkaXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjogLy8gQWRkaXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OC8qQWRkaXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTogLy8gUmFuZ2VFeHByIDo6PSBBZGRpdGl2ZUV4cHIgVE8gQWRkaXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBSYW5nZUV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUzLypSYW5nZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0OiAvLyBSYW5nZUV4cHIgOjo9IEFkZGl0aXZlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUzLypSYW5nZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzOiAvLyBDb21wYXJpc29uRXhwciA6Oj0gUmFuZ2VFeHByIE5vZGVDb21wIFJhbmdlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgdCA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTQvKkNvbXBhcmlzb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjogLy8gQ29tcGFyaXNvbkV4cHIgOjo9IFJhbmdlRXhwciBHZW5lcmFsQ29tcCBSYW5nZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlJbnRlZ2VyIHQgPSAoSW50ZWdlcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBDbXBFeHByKGwsIHIsIHQuaW50VmFsdWUoKSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU0LypDb21wYXJpc29uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE6IC8vIENvbXBhcmlzb25FeHByIDo6PSBSYW5nZUV4cHIgVmFsdWVDb21wIFJhbmdlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgdCA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTQvKkNvbXBhcmlzb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDogLy8gQ29tcGFyaXNvbkV4cHIgOjo9IFJhbmdlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU0LypDb21wYXJpc29uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk6IC8vIEFuZEV4cHIgOjo9IEFuZEV4cHIgQU5EIENvbXBhcmlzb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBBbmRFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MS8qQW5kRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg6IC8vIEFuZEV4cHIgOjo9IENvbXBhcmlzb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTEvKkFuZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3OiAvLyBPckV4cHIgOjo9IE9yRXhwciBPUiBBbmRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBPckV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUyLypPckV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2OiAvLyBPckV4cHIgOjo9IEFuZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Mi8qT3JFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTogLy8gSWZFeHByIDo6PSBJRiBMUEFSIEV4cHIgUlBBUiBUSEVOIEV4cHJTaW5nbGUgRUxTRSBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJZkV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGV4cHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQ7Ci0JCWludCBleHBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZXhwcyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIHQgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBJZkV4cHIoZXhwcywgdCwgZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc3LypJZkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0OiAvLyBRdWFudGlmaWVkRXhwck1pZGRsZSA6Oj0gUXVhbnRpZmllZEV4cHJNaWRkbGUgQ09NTUEgRE9MTEFSIFZhck5hbWUgSU4gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgcHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQ7Ci0JCWludCBwc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS52YWx1ZTsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwcy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcHM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNy8qUXVhbnRpZmllZEV4cHJNaWRkbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzOiAvLyBRdWFudGlmaWVkRXhwck1pZGRsZSA6Oj0gVmFyTmFtZSBJTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCB2bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgdnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSB2ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlDb2xsZWN0aW9uIHBhaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwYWlycy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcGFpcnM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNy8qUXVhbnRpZmllZEV4cHJNaWRkbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyOiAvLyBRdWFudGlmaWVkRXhwciA6Oj0gRVZFUlkgRE9MTEFSIFF1YW50aWZpZWRFeHByTWlkZGxlIFNBVElTRklFUyBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRdWFudGlmaWVkRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGFpcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwYWlyc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBhaXJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLkFMTCwKLQkJCQkJCQkJICAgICAgIHBhaXJzLCBlKTsKLQkJCQlSRVNVTFQgPSBxZTsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc2LypRdWFudGlmaWVkRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE6IC8vIFF1YW50aWZpZWRFeHByIDo6PSBTT01FIERPTExBUiBRdWFudGlmaWVkRXhwck1pZGRsZSBTQVRJU0ZJRVMgRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUXVhbnRpZmllZEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBhaXJzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcGFpcnNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwYWlycyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlRdWFudGlmaWVkRXhwciBxZSA9IG5ldyBRdWFudGlmaWVkRXhwcihRdWFudGlmaWVkRXhwci5TT01FLAotCQkJCQkJCQkgICAgICAgcGFpcnMsIGUpOwotCQkJCVJFU1VMVCA9IHFlOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzYvKlF1YW50aWZpZWRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDogLy8gU2ltcGxlRm9yQ2xhdXNlIDo6PSBTaW1wbGVGb3JDbGF1c2UgQ09NTUEgRE9MTEFSIFZhck5hbWUgSU4gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgcHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQ7Ci0JCWludCBwc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS52YWx1ZTsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwcy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcHM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOC8qU2ltcGxlRm9yQ2xhdXNlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5OiAvLyBTaW1wbGVGb3JDbGF1c2UgOjo9IEZPUiBET0xMQVIgVmFyTmFtZSBJTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCB2bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgdnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSB2ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlDb2xsZWN0aW9uIHBhaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwYWlycy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcGFpcnM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOC8qU2ltcGxlRm9yQ2xhdXNlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4OiAvLyBGb3JFeHByIDo6PSBTaW1wbGVGb3JDbGF1c2UgUkVUVVJOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZvckV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBhaXJzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcGFpcnNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwYWlycyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCQlGb3JFeHByIGZleHAgPSBuZXcgRm9yRXhwcihwYWlycyxlKTsKLQkJCQlSRVNVTFQgPSBmZXhwOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzUvKkZvckV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc6IC8vIEV4cHJTaW5nbGUgOjo9IE9yRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ3LypFeHByU2luZ2xlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2OiAvLyBFeHByU2luZ2xlIDo6PSBJZkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUlmRXhwciBuID0gKElmRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDcvKkV4cHJTaW5nbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU6IC8vIEV4cHJTaW5nbGUgOjo9IFF1YW50aWZpZWRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRdWFudGlmaWVkRXhwciBuID0gKFF1YW50aWZpZWRFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ny8qRXhwclNpbmdsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDogLy8gRXhwclNpbmdsZSA6Oj0gRm9yRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRm9yRXhwciBuID0gKEZvckV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ3LypFeHByU2luZ2xlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzOiAvLyBFeHByIDo6PSBFeHByIENPTU1BIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGV4cHJzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgZXhwcnNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBleHBycyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBleGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGV4cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZXggPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgCi0JCQkJZXhwcnMuYWRkKGV4KTsKLQkJCQlSRVNVTFQgPSBleHByczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI1LypFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyOiAvLyBFeHByIDo6PSBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBleGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGV4cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZXggPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgCi0JCQkJQ29sbGVjdGlvbiBleHBzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCWV4cHMuYWRkKGV4KTsKLQkJCQlSRVNVTFQgPSBleHBzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjUvKkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE6IC8vICRTVEFSVCA6Oj0gWFBhdGggRU9GIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBPYmplY3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IHN0YXJ0X3ZhbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHN0YXJ0X3ZhbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlYUGF0aCBzdGFydF92YWwgPSAoWFBhdGgpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJUkVTVUxUID0gc3RhcnRfdmFsOwotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDAvKiRTVEFSVCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIC8qIEFDQ0VQVCAqLwotICAgICAgICAgIENVUCRYUGF0aEN1cCRwYXJzZXIuZG9uZV9wYXJzaW5nKCk7Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAwOiAvLyBYUGF0aCA6Oj0gRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGggUkVTVUxUID0gbnVsbDsKLQkJaW50IGV4cHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBleHBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZXhwcyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgWFBhdGgoZXhwcyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc0LypYUGF0aCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyogLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgIkludmFsaWQgYWN0aW9uIG51bWJlciBmb3VuZCBpbiBpbnRlcm5hbCBwYXJzZSB0YWJsZSIpOwotCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NzcwZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBhbiBYUGF0aCBleGNlcHRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aEVycm9yIGV4dGVuZHMgRXJyb3IgewotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDY2MjQ2MzE3OTIwODczMDMyMDlMOwotCXByaXZhdGUgU3RyaW5nIF9yZWFzb247Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgWFBhdGhFcnJvcgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIElzIHRoZSByZWFzb24gd2h5IHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvd24uCi0JICovCi0JcHVibGljIFhQYXRoRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlfcmVhc29uID0gcmVhc29uOwotCX0KLQotCS8qKgotCSAqIFRoZSByZWFzb24gd2h5IHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvd24uCi0JICogCi0JICogQHJldHVybiB0aGUgcmVhc29uIHdoeSB0aGUgZXJyb3IgaGFzIGJlZW4gdGhyb3cuCi0JICovCi0JcHVibGljIFN0cmluZyByZWFzb24oKSB7Ci0JCXJldHVybiBfcmVhc29uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhGbGV4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRmxleC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDBlNzA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhGbGV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE5ICswLDAgQEAKLS8qIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IEpGbGV4IDEuNC4zIG9uIDEyLzE0LzA5IDI6MDIgQU0gKi8KLQotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotLy8gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gKgotLy8gKiBDb250cmlidXRvcnM6Ci0vLyAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0vLyAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwOTg3IC0gZml4ZWQgbGl0ZXJhbCBpc3N1ZXMgZm9yIGludGVnZXIgYW5kIGRlY2ltYWwKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODMyMTQgLSBmaXggSUYgVEhFTiBFTFNFIHBhcnNpbmcgYW5kIHVwZGF0ZSBncmFtbWFycwotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NjA2MSAgIGNvcnJlY3QgaGFuZGxpbmcgb2YgcXVvdGVkIHN0cmluZyAKLS8vICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjk3NzA3IC0gTWlzc2luZyB0aGUgZW1wdHktc2VxdWVuY2UoKSB0eXBlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBqYXZhX2N1cC5ydW50aW1lLio7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIGEgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgCi0gKiA8YSBocmVmPSJodHRwOi8vd3d3LmpmbGV4LmRlLyI+SkZsZXg8L2E+IDEuNC4zCi0gKiBvbiAxMi8xNC8wOSAyOjAyIEFNIGZyb20gdGhlIHNwZWNpZmljYXRpb24gZmlsZQotICogPHR0Pi9Vc2Vycy9qZXNwZXIvRG9jdW1lbnRzL3dvcmtzcGFjZS0zLjVNNS9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGgubGV4PC90dD4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoRmxleCBpbXBsZW1lbnRzIGphdmFfY3VwLnJ1bnRpbWUuU2Nhbm5lciB7Ci0KLSAgLyoqIFRoaXMgY2hhcmFjdGVyIGRlbm90ZXMgdGhlIGVuZCBvZiBmaWxlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZRU9GID0gLTE7Ci0KLSAgLyoqIGluaXRpYWwgc2l6ZSBvZiB0aGUgbG9va2FoZWFkIGJ1ZmZlciAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfQlVGRkVSU0laRSA9IDE2Mzg0OwotCi0gIC8qKiBsZXhpY2FsIHN0YXRlcyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZWUlOSVRJQUwgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01NRU5UID0gMjsKLQotICAvKioKLSAgICogWlpfTEVYU1RBVEVbbF0gaXMgdGhlIHN0YXRlIGluIHRoZSBERkEgZm9yIHRoZSBsZXhpY2FsIHN0YXRlIGwKLSAgICogWlpfTEVYU1RBVEVbbCsxXSBpcyB0aGUgc3RhdGUgaW4gdGhlIERGQSBmb3IgdGhlIGxleGljYWwgc3RhdGUgbAotICAgKiAgICAgICAgICAgICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gICAqIGwgaXMgb2YgdGhlIGZvcm0gbCA9IDIqaywgayBhIG5vbiBuZWdhdGl2ZSBpbnRlZ2VyCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfTEVYU1RBVEVbXSA9IHsgCi0gICAgIDAsICAwLCAgMSwgMQotICB9OwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBjaGFyYWN0ZXJzIHRvIGNoYXJhY3RlciBjbGFzc2VzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQ01BUF9QQUNLRUQgPSAKLSAgICAiXDExXDBcMVwxXDFcMVwyXDBcMVwxXDIyXDBcMVwxXDFcMjJcMVwyXDFcMCIrCi0gICAgIlwxXDMwXDJcMFwxXDNcMVwxMlwxXDE2XDFcMTdcMVw3XDFcMjdcMVwxMVwxXDUiKwotICAgICJcMVwyNVwxMlw0XDFcMTNcMVwwXDFcMjNcMVwyMVwxXDI0XDFcMzFcMVwyNlw0XDEwIisKLSAgICAiXDFcNlwyNVwxMFwxXDE0XDFcMFwxXDE1XDFcMFwxXDEwXDFcMFwxXDQyXDFcNDUiKwotICAgICJcMVwzMlwxXDM2XDFcMzdcMVw0N1wxXDUyXDFcMzNcMVwzNFwyXDEwXDFcMzVcMVw1MyIrCi0gICAgIlwxXDQxXDFcNTBcMVw1NFwxXDU1XDFcNDRcMVw0MFwxXDQzXDFcNDZcMVw1NlwxXDUxIisKLSAgICAiXDFcNTdcMVw2MFwxXDEwXDFcMFwxXDIwXHVmZjgzXDAiOwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBjaGFyYWN0ZXJzIHRvIGNoYXJhY3RlciBjbGFzc2VzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFtdIFpaX0NNQVAgPSB6elVucGFja0NNYXAoWlpfQ01BUF9QQUNLRUQpOwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBERkEgc3RhdGVzIHRvIGFjdGlvbiBzd2l0Y2ggbGFiZWxzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX0FDVElPTiA9IHp6VW5wYWNrQWN0aW9uKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0FDVElPTl9QQUNLRURfMCA9Ci0gICAgIlwyXDBcMVwxXDFcMlwyXDFcMVwzXDFcNFwxXDVcMVw2IisKLSAgICAiXDFcN1wxXDEwXDFcMTFcMVwxMlwxXDEzXDFcMTRcMVwxNVwxXDE2IisKLSAgICAiXDFcMTdcMVwxXDFcMjBcMVwyMVwxXDIyXDFcMjNcMVwyNFwxXDI1IisKLSAgICAiXDFcMjZcMjBcNVwyXDJcMVwwXDFcMjdcMVwwXDFcMjdcMVwzMCIrCi0gICAgIlwxXDBcMVwzMVwxXDMyXDFcMzNcMVwzNFwxXDM1XDFcMzZcMVwzNyIrCi0gICAgIlwxXDQwXDFcNDFcNFw1XDFcNDJcMVw0M1wxXDVcMVw0NFwxXDQ1IisKLSAgICAiXDFcNDZcNVw1XDFcNDdcNlw1XDFcNTBcMlw1XDFcNTFcNVw1IisKLSAgICAiXDFcNTJcNFw1XDFcNTNcMVw1NFwxXDU1XDFcNTZcM1w1XDFcNTciKwotICAgICJcMVw2MFwxXDYxXDFcMFw3XDVcMVw2MlwxNlw1XDFcNjNcMTBcNSIrCi0gICAgIlwxXDY0XDFcNjVcNFw1XDFcNjZcMVw1XDFcNjdcMlw1XDFcNzAiKwotICAgICJcM1w1XDFcNzFcNFw1XDFcNzJcMVw1XDFcNzNcMVw1XDFcNzQiKwotICAgICJcMlw1XDFcNzVcMVw3NlwxMFw1XDFcNzdcMTBcNVwxXDEwMFw2XDUiKwotICAgICJcMVwxMDFcMlw1XDFcMTAyXDE0XDVcMVwxMDNcNlw1XDFcMTA0XDFcNSIrCi0gICAgIlwxXDEwNVwzXDVcMVwxMDZcNFw1XDFcMTA3XDEyXDVcMVwxMTBcMVwxMTEiKwotICAgICJcMTBcNVwxXDExMlw1XDVcMVwxMTNcNVw1XDFcMTE0XDFcMTE1XDFcNSIrCi0gICAgIlwxXDExNlwxXDVcMVwxMTdcMVwxMjBcMVw1XDFcMTIxXDVcNVwxXDEyMiIrCi0gICAgIlwyNlw1XDFcMTIzXDEwXDVcMVwxMjRcMVwxMjVcMTRcNVwxXDEyNlwxXDEyNyIrCi0gICAgIlw0XDVcMVwxMzBcMVwxMzFcMVw1XDFcMTMyXDRcNVwxXDEzMyI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrQWN0aW9uKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzMzM107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tBY3Rpb24oWlpfQUNUSU9OX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja0FjdGlvbihTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGRvIHJlc3VsdFtqKytdID0gdmFsdWU7IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLQotICAvKiogCi0gICAqIFRyYW5zbGF0ZXMgYSBzdGF0ZSB0byBhIHJvdyBpbmRleCBpbiB0aGUgdHJhbnNpdGlvbiB0YWJsZQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX1JPV01BUCA9IHp6VW5wYWNrUm93TWFwKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX1JPV01BUF9QQUNLRURfMCA9Ci0gICAgIlwwXDBcMFw2MVwwXDE0MlwwXDE0MlwwXDIyM1wwXDMwNFwwXDM2NVwwXHUwMTI2IisKLSAgICAiXDBcdTAxNTdcMFwxNDJcMFwxNDJcMFx1MDE4OFwwXHUwMWI5XDBcMTQyXDBcMTQyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcMTQyXDBcMTQyXDBcdTAxZWFcMFx1MDIxYlwwXHUwMjRjXDBcdTAyN2RcMFwxNDIiKwotICAgICJcMFwxNDJcMFwxNDJcMFwxNDJcMFx1MDJhZVwwXHUwMmRmXDBcdTAzMTBcMFx1MDM0MVwwXHUwMzcyIisKLSAgICAiXDBcdTAzYTNcMFx1MDNkNFwwXHUwNDA1XDBcdTA0MzZcMFx1MDQ2N1wwXHUwNDk4XDBcdTA0YzlcMFx1MDRmYSIrCi0gICAgIlwwXHUwNTJiXDBcdTA1NWNcMFx1MDU4ZFwwXHUwNWJlXDBcdTA1ZWZcMFwyMjNcMFx1MDYyMFwwXDMwNCIrCi0gICAgIlwwXHUwNjUxXDBcdTA2ODJcMFx1MDZiM1wwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MlwwXHUwNmU0XDBcdTA3MTVcMFx1MDc0NlwwXHUwNzc3IisKLSAgICAiXDBcdTAxNTdcMFx1MDdhOFwwXHUwN2Q5XDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTA4MGFcMFx1MDgzYiIrCi0gICAgIlwwXHUwODZjXDBcdTA4OWRcMFx1MDhjZVwwXHUwMTU3XDBcdTA4ZmZcMFx1MDkzMFwwXHUwOTYxXDBcdTA5OTIiKwotICAgICJcMFx1MDljM1wwXHUwOWY0XDBcdTAxNTdcMFx1MGEyNVwwXHUwYTU2XDBcdTAxNTdcMFx1MGE4N1wwXHUwYWI4IisKLSAgICAiXDBcdTBhZTlcMFx1MGIxYVwwXHUwYjRiXDBcdTAxNTdcMFx1MGI3Y1wwXHUwYmFkXDBcdTBiZGVcMFx1MGMwZiIrCi0gICAgIlwwXHUwMTU3XDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTBjNDBcMFx1MGM3MVwwXHUwY2EyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcdTBjZDNcMFx1MGNkM1wwXHUwZDA0XDBcdTBkMzVcMFx1MGQ2NlwwXHUwZDk3XDBcdTBkYzgiKwotICAgICJcMFx1MGRmOVwwXHUwZTJhXDBcdTAxNTdcMFx1MGU1YlwwXHUwZThjXDBcdTBlYmRcMFx1MGVlZVwwXHUwZjFmIisKLSAgICAiXDBcdTBmNTBcMFx1MGY4MVwwXHUwZmIyXDBcdTBmZTNcMFx1MTAxNFwwXHUxMDQ1XDBcdTEwNzZcMFx1MTBhNyIrCi0gICAgIlwwXHUxMGQ4XDBcdTAxNTdcMFx1MTEwOVwwXHUxMTNhXDBcdTExNmJcMFx1MTE5Y1wwXHUxMWNkXDBcdTExZmUiKwotICAgICJcMFx1MTIyZlwwXHUxMjYwXDBcdTAxNTdcMFx1MDE1N1wwXHUxMjkxXDBcdTEyYzJcMFx1MTJmM1wwXHUxMzI0IisKLSAgICAiXDBcdTEzNTVcMFx1MTM4NlwwXHUwMTU3XDBcdTEzYjdcMFx1MTNlOFwwXHUwMTU3XDBcdTE0MTlcMFx1MTQ0YSIrCi0gICAgIlwwXHUxNDdiXDBcdTAxNTdcMFx1MTRhY1wwXHUxNGRkXDBcdTE1MGVcMFx1MTUzZlwwXHUwMTU3XDBcdTE1NzAiKwotICAgICJcMFx1MDE1N1wwXHUxNWExXDBcdTAxNTdcMFx1MTVkMlwwXHUxNjAzXDBcdTAxNTdcMFx1MDE1N1wwXHUxNjM0IisKLSAgICAiXDBcdTE2NjVcMFx1MTY5NlwwXHUxNmM3XDBcdTE2ZjhcMFx1MTcyOVwwXHUxNzVhXDBcdTE3OGJcMFx1MDE1NyIrCi0gICAgIlwwXHUxN2JjXDBcdTE3ZWRcMFx1MTgxZVwwXHUxODRmXDBcdTE4ODBcMFx1MThiMVwwXHUxOGUyXDBcdTE5MTMiKwotICAgICJcMFx1MDE1N1wwXHUxOTQ0XDBcdTE5NzVcMFx1MTlhNlwwXHUxOWQ3XDBcdTFhMDhcMFx1MWEzOVwwXHUwMTU3IisKLSAgICAiXDBcdTFhNmFcMFx1MWE5YlwwXHUwMTU3XDBcdTFhY2NcMFx1MWFmZFwwXHUxYjJlXDBcdTFiNWZcMFx1MWI5MCIrCi0gICAgIlwwXHUxYmMxXDBcdTFiZjJcMFx1MWMyM1wwXHUxYzU0XDBcdTFjODVcMFx1MWNiNlwwXHUxY2U3XDBcdTAxNTciKwotICAgICJcMFx1MWQxOFwwXHUxZDQ5XDBcdTFkN2FcMFx1MWRhYlwwXHUxZGRjXDBcdTFlMGRcMFx1MDE1N1wwXHUxZTNlIisKLSAgICAiXDBcdTAxNTdcMFx1MWU2ZlwwXHUxZWEwXDBcdTFlZDFcMFx1MDE1N1wwXHUxZjAyXDBcdTFmMzNcMFx1MWY2NCIrCi0gICAgIlwwXHUxZjk1XDBcdTAxNTdcMFx1MWZjNlwwXHUxZmY3XDBcdTIwMjhcMFx1MjA1OVwwXHUyMDhhXDBcdTIwYmIiKwotICAgICJcMFx1MjBlY1wwXHUyMTFkXDBcdTIxNGVcMFx1MjE3ZlwwXHUwMTU3XDBcdTAxNTdcMFx1MjFiMFwwXHUyMWUxIisKLSAgICAiXDBcdTIyMTJcMFx1MjI0M1wwXHUyMjc0XDBcdTIyYTVcMFx1MjJkNlwwXHUyMzA3XDBcdTIzMzhcMFx1MjM2OSIrCi0gICAgIlwwXHUyMzlhXDBcdTIzY2JcMFx1MjNmY1wwXHUyNDJkXDBcdTAxNTdcMFx1MjQ1ZVwwXHUyNDhmXDBcdTI0YzAiKwotICAgICJcMFx1MjRmMVwwXHUyNTIyXDBcdTAxNTdcMFx1MDE1N1wwXHUyNTUzXDBcdTAxNTdcMFx1MjU4NFwwXHUyNWI1IisKLSAgICAiXDBcdTI1ZTZcMFx1MjYxN1wwXHUyNjQ4XDBcdTI2NzlcMFx1MjZhYVwwXHUyNmRiXDBcdTI3MGNcMFx1MjczZCIrCi0gICAgIlwwXHUwMTU3XDBcdTI3NmVcMFx1Mjc5ZlwwXHUyN2QwXDBcdTI4MDFcMFx1MjgzMlwwXHUyODYzXDBcdTI4OTQiKwotICAgICJcMFx1MjhjNVwwXHUyOGY2XDBcdTI5MjdcMFx1Mjk1OFwwXHUyOTg5XDBcdTI5YmFcMFx1MjllYlwwXHUyYTFjIisKLSAgICAiXDBcdTJhNGRcMFx1MmE3ZVwwXHUyYWFmXDBcdTJhZTBcMFx1MmIxMVwwXHUyYjQyXDBcdTJiNzNcMFx1MDE1NyIrCi0gICAgIlwwXHUyYmE0XDBcdTJiZDVcMFx1MmMwNlwwXHUyYzM3XDBcdTJjNjhcMFx1MmM5OVwwXHUyY2NhXDBcdTJjZmIiKwotICAgICJcMFx1MDE1N1wwXHUwMTU3XDBcdTJkMmNcMFx1MmQ1ZFwwXHUyZDhlXDBcdTJkYmZcMFx1MmRmMFwwXHUyZTIxIisKLSAgICAiXDBcdTJlNTJcMFx1MmU4M1wwXHUyZWI0XDBcdTJlZTVcMFx1MmYxNlwwXHUyZjQ3XDBcdTAxNTdcMFx1MDE1NyIrCi0gICAgIlwwXHUyZjc4XDBcdTJmYTlcMFx1MmZkYVwwXHUzMDBiXDBcdTAxNTdcMFx1MDE1N1wwXHUzMDNjXDBcdTAxNTciKwotICAgICJcMFx1MzA2ZFwwXHUzMDllXDBcdTMwY2ZcMFx1MzEwMFwwXHUwMTU3IjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tSb3dNYXAoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMzMzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja1Jvd01hcChaWl9ST1dNQVBfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrUm93TWFwKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBoaWdoID0gcGFja2VkLmNoYXJBdChpKyspIDw8IDE2OwotICAgICAgcmVzdWx0W2orK10gPSBoaWdoIHwgcGFja2VkLmNoYXJBdChpKyspOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0gIC8qKiAKLSAgICogVGhlIHRyYW5zaXRpb24gdGFibGUgb2YgdGhlIERGQQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX1RSQU5TID0genpVbnBhY2tUcmFucygpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9UUkFOU19QQUNLRURfMCA9Ci0gICAgIlwxXDNcMVw0XDFcNVwxXDZcMVw3XDFcMTBcMVwxMVwxXDEyIisKLSAgICAiXDFcMTFcMVwxM1wxXDE0XDFcMTVcMVwxNlwxXDE3XDFcMjBcMVwyMSIrCi0gICAgIlwxXDIyXDFcMjNcMVwyNFwxXDI1XDFcMjZcMVwyN1wxXDMwXDFcMzEiKwotICAgICJcMVwzMlwxXDMzXDFcMzRcMVwxMVwxXDM1XDFcMzZcMVwzN1wxXDQwIisKLSAgICAiXDFcNDFcMVw0MlwxXDQzXDFcNDRcMVw0NVwxXDExXDFcNDZcMVw0NyIrCi0gICAgIlwxXDUwXDFcMTFcMVw1MVwxXDUyXDFcNTNcNFwxMVwxMlw0XDFcNTQiKwotICAgICJcMVw1NVw0NVw0XDYxXDBcMlw1NlwxXDU3XDU2XDU2XDNcNjBcMVw2MSIrCi0gICAgIlw1NVw2MFw0XDBcMVw3XDFcNjJcMVw2M1wzMFwwXDFcNjNcMjVcMCIrCi0gICAgIlwxXDYyXDFcNjRcNTdcMFwzXDExXDFcMFwyXDExXDIwXDBcMjdcMTEiKwotICAgICJcMTNcMFwxXDY1XDYwXDBcMVw2Nlw2NlwwXDFcNjdcNjBcMFwxXDcwIisKLSAgICAiXDFcMFwxXDcxXDU2XDBcMVw3MlwyXDBcMVw3M1w2MVwwXDFcNzQiKwotICAgICJcMzdcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwxMVwxXDc1XDZcMTEiKwotICAgICJcMVw3Nlw1XDExXDFcNzdcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw0XDExXDFcMTAwXDFcMTFcMVwxMDFcMVwxMDJcMVwxMVwxXDEwMyIrCi0gICAgIlwzXDExXDFcMTA0XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDEwNVwzXDExXDFcMTA2XDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMlwxMVwxXDEwN1wyXDExXDFcMTEwXDEwXDExXDFcMTExIisKLSAgICAiXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMVwxXDExMiIrCi0gICAgIlwxNVwxMVwxXDExM1wxXDExXDFcMTE0XDFcMTE1XDFcMTE2XDFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExN1w0XDExXDFcMTIwXDJcMTEiKwotICAgICJcMVwxMjFcNVwxMVwxXDEyMlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwxMjNcMlwxMVwxXDEyNFw1XDExXDFcMTI1XDEwXDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDEyNlwxXDEyNyIrCi0gICAgIlwxXDExXDFcMTMwXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMVwxMVwxXDEzMVwzXDExXDFcMTMyXDRcMTFcMVwxMzNcM1wxMVwxXDEzNCIrCi0gICAgIlw3XDExXDFcMTM1XDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXDEzNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVwxMzdcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMSIrCi0gICAgIlwxXDE0MFwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExIisKLSAgICAiXDFcMTQxXDJcMTFcMVwxNDJcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMTQzXDNcMTFcMVwxNDRcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXDE0NVwxMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMTQ2XDFcMTFcMVwxNDdcMTRcMTEiKwotICAgICJcMTNcMFwxXDE1MFw2M1wwXDFcMTUxXDQ0XDBcMVw1Nlw2MVwwXDFcNjAiKwotICAgICJcNjFcMFwxXDYyXDFcMFwxXDYzXDMwXDBcMVw2M1wyNVwwXDFcMTUyIisKLSAgICAiXDJcMFwxXDE1M1wxXDBcMVwxNTNcNTNcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDE1NFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwxNTVcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyMVwxMVwxXDE1Nlw1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDE1N1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwxNjBcMlwxMVwxXDE2MVwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwxNjJcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyNFwxMVwxXDE2M1wyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXDE2NFwyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDFcMTY1XDI2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXDE2NlwxXDE2N1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMTcwXDRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMTcxXDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMVwxNzJcMjZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDExXDFcMTczXDI1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcM1wxMVwxXDE3NFwyM1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDExXDExXDFcMTc1XDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMjFcMTFcMVwxNzZcNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDIxXDExXDFcMTc3XDVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcMjAwXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwyMDFcM1wxMVwxXDIwMlwyMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMjAzXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDIwNFwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDI1XDExXDFcMjA1XDFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjA2XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwyMDdcNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMjEwXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMlwxMVwxXDIxMVwyNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDNcMTFcMVwyMTJcNlwxMVwxXDIxM1wxNFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDRcMTFcMVwyMTRcMjJcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDIxNVwxNFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyMTZcMTBcMTEiKwotICAgICJcMVwyMTdcMTBcMTFcNFwwXDFcMTUyXDYwXDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDNcMTFcMVwyMjBcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDIyMVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDIxXDExXDFcMjIyXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyNFwxMVwxXDIyM1wyXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwyMjRcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMjI1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjFcMTFcMVwyMjZcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcMjI3XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTRcMTFcMVwyMzBcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwyMVwxMVwxXDIzMVw1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzMlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMjMzXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTJcMTFcMVwyMzRcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjM1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE1XDExXDFcMjM3XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMlwxMVwxXDI0MFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQyXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0M1wyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDRcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMlwxMVwxXDI0NVwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVwyNDZcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDI0N1wxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEwXDExXDFcMjUwXDE2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI1MVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE0XDExXDFcMjUyXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTZcMTFcMVwyNTNcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwzXDExXDFcMjU0XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI1NVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDFcMjU2XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwyNTciKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw0XDExXDFcMjYwIisKLSAgICAiXDIyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwyNjEiKwotICAgICJcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjYyIisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwyNjMiKwotICAgICJcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDI2NCIrCi0gICAgIlwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyNjUiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXDI2NiIrCi0gICAgIlw1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDI2NyIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDI2XDExXDFcMjcwIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjZcMTFcMVwyNzFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDI3Mlw0XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMjFcMTFcMVwyNzNcNVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwyNzRcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMjc1XDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDI3NlwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTFcMVwyNzdcMjRcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMwMFwxNVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMDFcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDMwMlwxNFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMDNcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXDMwNFwxMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMDVcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMzA2XDIxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDMwN1wyMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDEzXDExXDFcMzEwXDEzXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxMVwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTJcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMzEzXDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxNFwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwzMTVcMjFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzE2XDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwxXDExXDFcMzE3XDIwXDBcMjdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMyMFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMzIxXDE2XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTVcMTFcMVwzMjJcMTFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDMyM1w0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMjRcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxM1wxMVwxXDMyNVwxM1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE3XDExXDFcMzI2XDdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzI3XDE3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTdcMTFcMVwzMzBcN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzMxXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNFwxMVwxXDMzMlwyMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMzNcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwzXDExXDFcMzM0XDIzXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMzVcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxXDMzNlwyNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVwzMzdcMjFcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcMzQwXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcN1wxMVwxXDM0MVwxN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDExXDExXDFcMzQyXDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNlwxMVwxXDM0M1wyMFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMVwxMVwxXDM0NFwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM0NVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEwXDExXDFcMzQ2XDE2XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTZcMTFcMVwzNDdcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxNFwxMVwxXDM1MFwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNTFcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzUyXDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM1M1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwzNTRcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMzU1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDM1NlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcMzU3XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTBcMTFcMVwzNjBcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDM2MVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwzNjJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMzYzXDJcMTFcMVwzNjRcMTZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcMzY1XDIxXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwzNjZcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMlwxMVwxXDM2N1wxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMzcwXDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwzNzFcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw3XDExXDFcMzcyXDE3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcN1wxMVwxXDM3M1wxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNzRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDM3NVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDdcMTFcMVwzNzZcMTdcMTFcNFwwXDNcMTFcMVwwXDFcMTEiKwotICAgICJcMVwzNzdcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDIzXDExXDFcdTAxMDBcM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDNcMTFcMVx1MDEwMVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcdTAxMDJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw2XDExXDFcdTAxMDNcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcdTAxMDRcMjFcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDEwNSIrCi0gICAgIlwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTA2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVx1MDEwNyIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMDgiKwotICAgICJcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMDkiKwotICAgICJcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDEwYSIrCi0gICAgIlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcdTAxMGIiKwotICAgICJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcdTAxMGMiKwotICAgICJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMVwxXHUwMTBkIisKLSAgICAiXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXHUwMTBlIisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVx1MDEwZiIrCi0gICAgIlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExXDFcdTAxMTAiKwotICAgICJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExXDFcdTAxMTEiKwotICAgICJcMjVcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDExMlwyMFwwXDI3XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMTNcMjBcMFwyN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMTRcNlwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMVwxMVwxXHUwMTE1XDIwXDBcMjdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTE2XDEwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXHUwMTE3XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjFcMTFcMVx1MDExOFw1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTJcMTFcMVx1MDExOVwxNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEyXDExXDFcdTAxMWFcMTRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcdTAxMWJcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcdTAxMWNcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDFcMTFcMVx1MDExZFwyMFwwXDI3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTZcMTFcMVx1MDExZVwxMFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVx1MDExZlwyMlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDdcMTFcMVx1MDEyMFwxN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVx1MDEyMVwyMVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDJcMTFcMVx1MDEyMlwyNFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMVwxMVwxXHUwMTIzXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjVcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjZcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMlwxMVwxXHUwMTI3XDE0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXHUwMTI4XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVx1MDEyOVwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVx1MDEyYVwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEzXDExXDFcdTAxMmJcMTNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw2XDExXDFcdTAxMmNcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxM1wxMVwxXHUwMTJkXDEzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTNcMTFcMVx1MDEyZVwxM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVx1MDEyZlwxN1wxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTMwIisKLSAgICAiXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxMzFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTMyXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTRcMTEiKwotICAgICJcMVx1MDEzM1wxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzNFwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzNVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzNlwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTEiKwotICAgICJcMVx1MDEzN1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTEiKwotICAgICJcMVx1MDEzOFwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxMzlcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxM2FcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExIisKLSAgICAiXDFcdTAxM2JcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExIisKLSAgICAiXDFcdTAxM2NcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTNkXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTNlXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTNmXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTVcMTEiKwotICAgICJcMVx1MDE0MFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVx1MDE0MVwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVx1MDE0MlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExIisKLSAgICAiXDFcdTAxNDNcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxNDRcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMSIrCi0gICAgIlwxXHUwMTQ1XDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMSIrCi0gICAgIlwxXHUwMTQ2XDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMSIrCi0gICAgIlwxXHUwMTQ3XDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTVcMTEiKwotICAgICJcMVx1MDE0OFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcdTAxNDkiKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXHUwMTRhIisKLSAgICAiXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMlwxMVwxXHUwMTRiIisKLSAgICAiXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTFcMVx1MDE0YyIrCi0gICAgIlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDE0ZCIrCi0gICAgIlwxN1wxMSI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrVHJhbnMoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMTI1OTNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrVHJhbnMoWlpfVFJBTlNfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrVHJhbnMoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICB2YWx1ZS0tOwotICAgICAgZG8gcmVzdWx0W2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotCi0gIC8qIGVycm9yIGNvZGVzICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9VTktOT1dOX0VSUk9SID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX05PX01BVENIID0gMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX1BVU0hCQUNLXzJCSUcgPSAyOwotCi0gIC8qIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgY29kZXMgYWJvdmUgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0VSUk9SX01TR1tdID0gewotICAgICJVbmtvd24gaW50ZXJuYWwgc2Nhbm5lciBlcnJvciIsCi0gICAgIkVycm9yOiBjb3VsZCBub3QgbWF0Y2ggaW5wdXQiLAotICAgICJFcnJvcjogcHVzaGJhY2sgdmFsdWUgd2FzIHRvbyBsYXJnZSIKLSAgfTsKLQotICAvKioKLSAgICogWlpfQVRUUklCVVRFW2FTdGF0ZV0gY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2Ygc3RhdGUgPGNvZGU+YVN0YXRlPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX0FUVFJJQlVURSA9IHp6VW5wYWNrQXR0cmlidXRlKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0FUVFJJQlVURV9QQUNLRURfMCA9Ci0gICAgIlwyXDBcMlwxMVw1XDFcMlwxMVwyXDFcNlwxMVw0XDFcNFwxMSIrCi0gICAgIlwyMlwxXDFcMFwxXDFcMVwwXDJcMVwxXDBcMTFcMTFcNTNcMSIrCi0gICAgIlwyXDExXDFcMVwxXDBcMzQyXDEiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja0F0dHJpYnV0ZSgpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFszMzNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrQXR0cmlidXRlKFpaX0FUVFJJQlVURV9QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tBdHRyaWJ1dGUoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyByZXN1bHRbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0gIC8qKiB0aGUgaW5wdXQgZGV2aWNlICovCi0gIHByaXZhdGUgamF2YS5pby5SZWFkZXIgenpSZWFkZXI7Ci0KLSAgLyoqIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBERkEgKi8KLSAgcHJpdmF0ZSBpbnQgenpTdGF0ZTsKLQotICAvKiogdGhlIGN1cnJlbnQgbGV4aWNhbCBzdGF0ZSAqLwotICBwcml2YXRlIGludCB6ekxleGljYWxTdGF0ZSA9IFlZSU5JVElBTDsKLQotICAvKiogdGhpcyBidWZmZXIgY29udGFpbnMgdGhlIGN1cnJlbnQgdGV4dCB0byBiZSBtYXRjaGVkIGFuZCBpcwotICAgICAgdGhlIHNvdXJjZSBvZiB0aGUgeXl0ZXh0KCkgc3RyaW5nICovCi0gIHByaXZhdGUgY2hhciB6ekJ1ZmZlcltdID0gbmV3IGNoYXJbWlpfQlVGRkVSU0laRV07Ci0KLSAgLyoqIHRoZSB0ZXh0cG9zaXRpb24gYXQgdGhlIGxhc3QgYWNjZXB0aW5nIHN0YXRlICovCi0gIHByaXZhdGUgaW50IHp6TWFya2VkUG9zOwotCi0gIC8qKiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KLSAgcHJpdmF0ZSBpbnQgenpDdXJyZW50UG9zOwotCi0gIC8qKiBzdGFydFJlYWQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgeXl0ZXh0KCkgc3RyaW5nIGluIHRoZSBidWZmZXIgKi8KLSAgcHJpdmF0ZSBpbnQgenpTdGFydFJlYWQ7Ci0KLSAgLyoqIGVuZFJlYWQgbWFya3MgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIsIHRoYXQgaGFzIGJlZW4gcmVhZAotICAgICAgZnJvbSBpbnB1dCAqLwotICBwcml2YXRlIGludCB6ekVuZFJlYWQ7Ci0KLSAgLyoqIG51bWJlciBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZCB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCAqLwotICBwcml2YXRlIGludCB5eWxpbmU7Ci0KLSAgLyoqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCAqLwotICBwcml2YXRlIGludCB5eWNoYXI7Ci0KLSAgLyoqCi0gICAqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsYXN0IG5ld2xpbmUgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0Ci0gICAqLwotICBwcml2YXRlIGludCB5eWNvbHVtbjsKLQotICAvKiogCi0gICAqIHp6QXRCT0wgPT0gdHJ1ZSA8PT4gdGhlIHNjYW5uZXIgaXMgY3VycmVudGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4genpBdEJPTCA9IHRydWU7Ci0KLSAgLyoqIHp6QXRFT0YgPT0gdHJ1ZSA8PT4gdGhlIHNjYW5uZXIgaXMgYXQgdGhlIEVPRiAqLwotICBwcml2YXRlIGJvb2xlYW4genpBdEVPRjsKLQotICAvKiogZGVub3RlcyBpZiB0aGUgdXNlci1FT0YtY29kZSBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekVPRkRvbmU7Ci0KLSAgLyogdXNlciBjb2RlOiAqLwotCXB1YmxpYyBpbnQgbGluZW5vKCkgeyByZXR1cm4geXlsaW5lICsgMTsgfQotCXB1YmxpYyBpbnQgY29sbm8oKSB7IHJldHVybiB5eWNvbHVtbiArIDE7IH0KLQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSkgewotCQlyZXR1cm4gbmV3IFN5bWJvbCh0eXBlLCBsaW5lbm8oKSwgY29sbm8oKSk7Ci0JfQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpLCB2YWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgY29tbWVudExldmVsID0gMDsKLQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIKLSAgICogVGhlcmUgaXMgYWxzbyBhIGphdmEuaW8uSW5wdXRTdHJlYW0gdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uUmVhZGVyIHRvIHJlYWQgaW5wdXQgZnJvbS4KLSAgICovCi0gIHB1YmxpYyBYUGF0aEZsZXgoamF2YS5pby5SZWFkZXIgaW4pIHsKLSAgICB0aGlzLnp6UmVhZGVyID0gaW47Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBzY2FubmVyLgotICAgKiBUaGVyZSBpcyBhbHNvIGphdmEuaW8uUmVhZGVyIHZlcnNpb24gb2YgdGhpcyBjb25zdHJ1Y3Rvci4KLSAgICoKLSAgICogQHBhcmFtICAgaW4gIHRoZSBqYXZhLmlvLklucHV0c3RyZWFtIHRvIHJlYWQgaW5wdXQgZnJvbS4KLSAgICovCi0gIFhQYXRoRmxleChqYXZhLmlvLklucHV0U3RyZWFtIGluKSB7Ci0gICAgdGhpcyhuZXcgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcihpbikpOwotICB9Ci0KLSAgLyoqIAotICAgKiBVbnBhY2tzIHRoZSBjb21wcmVzc2VkIGNoYXJhY3RlciB0cmFuc2xhdGlvbiB0YWJsZS4KLSAgICoKLSAgICogQHBhcmFtIHBhY2tlZCAgIHRoZSBwYWNrZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlCi0gICAqIEByZXR1cm4gICAgICAgICB0aGUgdW5wYWNrZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjaGFyIFtdIHp6VW5wYWNrQ01hcChTdHJpbmcgcGFja2VkKSB7Ci0gICAgY2hhciBbXSBtYXAgPSBuZXcgY2hhclsweDEwMDAwXTsKLSAgICBpbnQgaSA9IDA7ICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gMDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgd2hpbGUgKGkgPCAxMzIpIHsKLSAgICAgIGludCAgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBjaGFyIHZhbHVlID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgZG8gbWFwW2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJlZmlsbHMgdGhlIGlucHV0IGJ1ZmZlci4KLSAgICoKLSAgICogQHJldHVybiAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiwgaWZmIHRoZXJlIHdhcyBuZXcgaW5wdXQuCi0gICAqIAotICAgKiBAZXhjZXB0aW9uICAgamF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnMKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB6elJlZmlsbCgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLQotICAgIC8qIGZpcnN0OiBtYWtlIHJvb20gKGlmIHlvdSBjYW4pICovCi0gICAgaWYgKHp6U3RhcnRSZWFkID4gMCkgewotICAgICAgU3lzdGVtLmFycmF5Y29weSh6ekJ1ZmZlciwgenpTdGFydFJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHp6QnVmZmVyLCAwLAotICAgICAgICAgICAgICAgICAgICAgICB6ekVuZFJlYWQtenpTdGFydFJlYWQpOwotCi0gICAgICAvKiB0cmFuc2xhdGUgc3RvcmVkIHBvc2l0aW9ucyAqLwotICAgICAgenpFbmRSZWFkLT0genpTdGFydFJlYWQ7Ci0gICAgICB6ekN1cnJlbnRQb3MtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6TWFya2VkUG9zLT0genpTdGFydFJlYWQ7Ci0gICAgICB6elN0YXJ0UmVhZCA9IDA7Ci0gICAgfQotCi0gICAgLyogaXMgdGhlIGJ1ZmZlciBiaWcgZW5vdWdoPyAqLwotICAgIGlmICh6ekN1cnJlbnRQb3MgPj0genpCdWZmZXIubGVuZ3RoKSB7Ci0gICAgICAvKiBpZiBub3Q6IGJsb3cgaXQgdXAgKi8KLSAgICAgIGNoYXIgbmV3QnVmZmVyW10gPSBuZXcgY2hhclt6ekN1cnJlbnRQb3MqMl07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHp6QnVmZmVyLCAwLCBuZXdCdWZmZXIsIDAsIHp6QnVmZmVyLmxlbmd0aCk7Ci0gICAgICB6ekJ1ZmZlciA9IG5ld0J1ZmZlcjsKLSAgICB9Ci0KLSAgICAvKiBmaW5hbGx5OiBmaWxsIHRoZSBidWZmZXIgd2l0aCBuZXcgaW5wdXQgKi8KLSAgICBpbnQgbnVtUmVhZCA9IHp6UmVhZGVyLnJlYWQoenpCdWZmZXIsIHp6RW5kUmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpCdWZmZXIubGVuZ3RoLXp6RW5kUmVhZCk7Ci0KLSAgICBpZiAobnVtUmVhZCA+IDApIHsKLSAgICAgIHp6RW5kUmVhZCs9IG51bVJlYWQ7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIHVubGlrZWx5IGJ1dCBub3QgaW1wb3NzaWJsZTogcmVhZCAwIGNoYXJhY3RlcnMsIGJ1dCBub3QgYXQgZW5kIG9mIHN0cmVhbSAgICAKLSAgICBpZiAobnVtUmVhZCA9PSAwKSB7Ci0gICAgICBpbnQgYyA9IHp6UmVhZGVyLnJlYWQoKTsKLSAgICAgIGlmIChjID09IC0xKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgenpCdWZmZXJbenpFbmRSZWFkKytdID0gKGNoYXIpIGM7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgIAotICAgIH0KLQotCS8vIG51bVJlYWQgPCAwCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAgIAotICAvKioKLSAgICogQ2xvc2VzIHRoZSBpbnB1dCBzdHJlYW0uCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eWNsb3NlKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgIHp6QXRFT0YgPSB0cnVlOyAgICAgICAgICAgIC8qIGluZGljYXRlIGVuZCBvZiBmaWxlICovCi0gICAgenpFbmRSZWFkID0genpTdGFydFJlYWQ7ICAvKiBpbnZhbGlkYXRlIGJ1ZmZlciAgICAqLwotCi0gICAgaWYgKHp6UmVhZGVyICE9IG51bGwpCi0gICAgICB6elJlYWRlci5jbG9zZSgpOwotICB9Ci0KLQotICAvKioKLSAgICogUmVzZXRzIHRoZSBzY2FubmVyIHRvIHJlYWQgZnJvbSBhIG5ldyBpbnB1dCBzdHJlYW0uCi0gICAqIERvZXMgbm90IGNsb3NlIHRoZSBvbGQgcmVhZGVyLgotICAgKgotICAgKiBBbGwgaW50ZXJuYWwgdmFyaWFibGVzIGFyZSByZXNldCwgdGhlIG9sZCBpbnB1dCBzdHJlYW0gCi0gICAqIDxiPmNhbm5vdDwvYj4gYmUgcmV1c2VkIChpbnRlcm5hbCBidWZmZXIgaXMgZGlzY2FyZGVkIGFuZCBsb3N0KS4KLSAgICogTGV4aWNhbCBzdGF0ZSBpcyBzZXQgdG8gPHR0PlpaX0lOSVRJQUw8L3R0Pi4KLSAgICoKLSAgICogQHBhcmFtIHJlYWRlciAgIHRoZSBuZXcgaW5wdXQgc3RyZWFtIAotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgeXlyZXNldChqYXZhLmlvLlJlYWRlciByZWFkZXIpIHsKLSAgICB6elJlYWRlciA9IHJlYWRlcjsKLSAgICB6ekF0Qk9MICA9IHRydWU7Ci0gICAgenpBdEVPRiAgPSBmYWxzZTsKLSAgICB6ekVPRkRvbmUgPSBmYWxzZTsKLSAgICB6ekVuZFJlYWQgPSB6elN0YXJ0UmVhZCA9IDA7Ci0gICAgenpDdXJyZW50UG9zID0genpNYXJrZWRQb3MgPSAwOwotICAgIHl5bGluZSA9IHl5Y2hhciA9IHl5Y29sdW1uID0gMDsKLSAgICB6ekxleGljYWxTdGF0ZSA9IFlZSU5JVElBTDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGV4aWNhbCBzdGF0ZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBpbnQgeXlzdGF0ZSgpIHsKLSAgICByZXR1cm4genpMZXhpY2FsU3RhdGU7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBFbnRlcnMgYSBuZXcgbGV4aWNhbCBzdGF0ZQotICAgKgotICAgKiBAcGFyYW0gbmV3U3RhdGUgdGhlIG5ldyBsZXhpY2FsIHN0YXRlCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eWJlZ2luKGludCBuZXdTdGF0ZSkgewotICAgIHp6TGV4aWNhbFN0YXRlID0gbmV3U3RhdGU7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIGN1cnJlbnQgcmVndWxhciBleHByZXNzaW9uLgotICAgKi8KLSAgcHVibGljIGZpbmFsIFN0cmluZyB5eXRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmcoIHp6QnVmZmVyLCB6elN0YXJ0UmVhZCwgenpNYXJrZWRQb3MtenpTdGFydFJlYWQgKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYXJhY3RlciBhdCBwb3NpdGlvbiA8dHQ+cG9zPC90dD4gZnJvbSB0aGUgCi0gICAqIG1hdGNoZWQgdGV4dC4gCi0gICAqIAotICAgKiBJdCBpcyBlcXVpdmFsZW50IHRvIHl5dGV4dCgpLmNoYXJBdChwb3MpLCBidXQgZmFzdGVyCi0gICAqCi0gICAqIEBwYXJhbSBwb3MgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgdG8gZmV0Y2guIAotICAgKiAgICAgICAgICAgIEEgdmFsdWUgZnJvbSAwIHRvIHl5bGVuZ3RoKCktMS4KLSAgICoKLSAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIHBvcwotICAgKi8KLSAgcHVibGljIGZpbmFsIGNoYXIgeXljaGFyYXQoaW50IHBvcykgewotICAgIHJldHVybiB6ekJ1ZmZlclt6elN0YXJ0UmVhZCtwb3NdOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaGVkIHRleHQgcmVnaW9uLgotICAgKi8KLSAgcHVibGljIGZpbmFsIGludCB5eWxlbmd0aCgpIHsKLSAgICByZXR1cm4genpNYXJrZWRQb3MtenpTdGFydFJlYWQ7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXBvcnRzIGFuIGVycm9yIHRoYXQgb2NjdXJlZCB3aGlsZSBzY2FubmluZy4KLSAgICoKLSAgICogSW4gYSB3ZWxsZm9ybWVkIHNjYW5uZXIgKG5vIG9yIG9ubHkgY29ycmVjdCB1c2FnZSBvZiAKLSAgICogeXlwdXNoYmFjayhpbnQpIGFuZCBhIG1hdGNoLWFsbCBmYWxsYmFjayBydWxlKSB0aGlzIG1ldGhvZCAKLSAgICogd2lsbCBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoaW5ncyB0aGF0ICJDYW4ndCBQb3NzaWJseSBIYXBwZW4iLgotICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmcKLSAgICogKGUuZy4gYSBKRmxleCBidWcgcHJvZHVjaW5nIGEgZmF1bHR5IHNjYW5uZXIgZXRjLikuCi0gICAqCi0gICAqIFVzdWFsIHN5bnRheC9zY2FubmVyIGxldmVsIGVycm9yIGhhbmRsaW5nIHNob3VsZCBiZSBkb25lCi0gICAqIGluIGVycm9yIGZhbGxiYWNrIHJ1bGVzLgotICAgKgotICAgKiBAcGFyYW0gICBlcnJvckNvZGUgIHRoZSBjb2RlIG9mIHRoZSBlcnJvcm1lc3NhZ2UgdG8gZGlzcGxheQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHp6U2NhbkVycm9yKGludCBlcnJvckNvZGUpIHsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICB0cnkgewotICAgICAgbWVzc2FnZSA9IFpaX0VSUk9SX01TR1tlcnJvckNvZGVdOwotICAgIH0KLSAgICBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2UgPSBaWl9FUlJPUl9NU0dbWlpfVU5LTk9XTl9FUlJPUl07Ci0gICAgfQotCi0gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOwotICB9IAotCi0KLSAgLyoqCi0gICAqIFB1c2hlcyB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGJhY2sgaW50byB0aGUgaW5wdXQgc3RyZWFtLgotICAgKgotICAgKiBUaGV5IHdpbGwgYmUgcmVhZCBhZ2FpbiBieSB0aGVuIG5leHQgY2FsbCBvZiB0aGUgc2Nhbm5pbmcgbWV0aG9kCi0gICAqCi0gICAqIEBwYXJhbSBudW1iZXIgIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZWFkIGFnYWluLgotICAgKiAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4geXlsZW5ndGgoKSEKLSAgICovCi0gIHB1YmxpYyB2b2lkIHl5cHVzaGJhY2soaW50IG51bWJlcikgIHsKLSAgICBpZiAoIG51bWJlciA+IHl5bGVuZ3RoKCkgKQotICAgICAgenpTY2FuRXJyb3IoWlpfUFVTSEJBQ0tfMkJJRyk7Ci0KLSAgICB6ek1hcmtlZFBvcyAtPSBudW1iZXI7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBDb250YWlucyB1c2VyIEVPRi1jb2RlLCB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSwKLSAgICogd2hlbiB0aGUgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHp6RG9FT0YoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKCF6ekVPRkRvbmUpIHsKLSAgICAgIHp6RU9GRG9uZSA9IHRydWU7Ci0gICAgICB5eWNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLQotICAvKioKLSAgICogUmVzdW1lcyBzY2FubmluZyB1bnRpbCB0aGUgbmV4dCByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZCwKLSAgICogdGhlIGVuZCBvZiBpbnB1dCBpcyBlbmNvdW50ZXJlZCBvciBhbiBJL08tRXJyb3Igb2NjdXJzLgotICAgKgotICAgKiBAcmV0dXJuICAgICAgdGhlIG5leHQgdG9rZW4KLSAgICogQGV4Y2VwdGlvbiAgIGphdmEuaW8uSU9FeGNlcHRpb24gIGlmIGFueSBJL08tRXJyb3Igb2NjdXJzCi0gICAqLwotICBwdWJsaWMgamF2YV9jdXAucnVudGltZS5TeW1ib2wgbmV4dF90b2tlbigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICBpbnQgenpJbnB1dDsKLSAgICBpbnQgenpBY3Rpb247Ci0KLSAgICAvLyBjYWNoZWQgZmllbGRzOgotICAgIGludCB6ekN1cnJlbnRQb3NMOwotICAgIGludCB6ek1hcmtlZFBvc0w7Ci0gICAgaW50IHp6RW5kUmVhZEwgPSB6ekVuZFJlYWQ7Ci0gICAgY2hhciBbXSB6ekJ1ZmZlckwgPSB6ekJ1ZmZlcjsKLSAgICBjaGFyIFtdIHp6Q01hcEwgPSBaWl9DTUFQOwotCi0gICAgaW50IFtdIHp6VHJhbnNMID0gWlpfVFJBTlM7Ci0gICAgaW50IFtdIHp6Um93TWFwTCA9IFpaX1JPV01BUDsKLSAgICBpbnQgW10genpBdHRyTCA9IFpaX0FUVFJJQlVURTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICB6ek1hcmtlZFBvc0wgPSB6ek1hcmtlZFBvczsKLQotICAgICAgYm9vbGVhbiB6elIgPSBmYWxzZTsKLSAgICAgIGZvciAoenpDdXJyZW50UG9zTCA9IHp6U3RhcnRSZWFkOyB6ekN1cnJlbnRQb3NMIDwgenpNYXJrZWRQb3NMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp6Q3VycmVudFBvc0wrKykgewotICAgICAgICBzd2l0Y2ggKHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMXSkgewotICAgICAgICBjYXNlICdcdTAwMEInOgotICAgICAgICBjYXNlICdcdTAwMEMnOgotICAgICAgICBjYXNlICdcdTAwODUnOgotICAgICAgICBjYXNlICdcdTIwMjgnOgotICAgICAgICBjYXNlICdcdTIwMjknOgotICAgICAgICAgIHl5bGluZSsrOwotICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB6elIgPSBmYWxzZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgIHl5bGluZSsrOwotICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB6elIgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgaWYgKHp6UikKLSAgICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgICB5eWNvbHVtbiA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIHl5Y29sdW1uKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHp6UikgewotICAgICAgICAvLyBwZWVrIG9uZSBjaGFyYWN0ZXIgYWhlYWQgaWYgaXQgaXMgXG4gKGlmIHdlIGhhdmUgY291bnRlZCBvbmUgbGluZSB0b28gbXVjaCkKLSAgICAgICAgYm9vbGVhbiB6elBlZWs7Ci0gICAgICAgIGlmICh6ek1hcmtlZFBvc0wgPCB6ekVuZFJlYWRMKQotICAgICAgICAgIHp6UGVlayA9IHp6QnVmZmVyTFt6ek1hcmtlZFBvc0xdID09ICdcbic7Ci0gICAgICAgIGVsc2UgaWYgKHp6QXRFT0YpCi0gICAgICAgICAgenpQZWVrID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGJvb2xlYW4gZW9mID0genpSZWZpbGwoKTsKLSAgICAgICAgICB6ekVuZFJlYWRMID0genpFbmRSZWFkOwotICAgICAgICAgIHp6TWFya2VkUG9zTCA9IHp6TWFya2VkUG9zOwotICAgICAgICAgIHp6QnVmZmVyTCA9IHp6QnVmZmVyOwotICAgICAgICAgIGlmIChlb2YpIAotICAgICAgICAgICAgenpQZWVrID0gZmFsc2U7Ci0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHp6UGVlayA9IHp6QnVmZmVyTFt6ek1hcmtlZFBvc0xdID09ICdcbic7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHp6UGVlaykgeXlsaW5lLS07Ci0gICAgICB9Ci0gICAgICB6ekFjdGlvbiA9IC0xOwotCi0gICAgICB6ekN1cnJlbnRQb3NMID0genpDdXJyZW50UG9zID0genpTdGFydFJlYWQgPSB6ek1hcmtlZFBvc0w7Ci0gIAotICAgICAgenpTdGF0ZSA9IFpaX0xFWFNUQVRFW3p6TGV4aWNhbFN0YXRlXTsKLQotCi0gICAgICB6ekZvckFjdGlvbjogewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgIAotICAgICAgICAgIGlmICh6ekN1cnJlbnRQb3NMIDwgenpFbmRSZWFkTCkKLSAgICAgICAgICAgIHp6SW5wdXQgPSB6ekJ1ZmZlckxbenpDdXJyZW50UG9zTCsrXTsKLSAgICAgICAgICBlbHNlIGlmICh6ekF0RU9GKSB7Ci0gICAgICAgICAgICB6eklucHV0ID0gWVlFT0Y7Ci0gICAgICAgICAgICBicmVhayB6ekZvckFjdGlvbjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBzdG9yZSBiYWNrIGNhY2hlZCBwb3NpdGlvbnMKLSAgICAgICAgICAgIHp6Q3VycmVudFBvcyAgPSB6ekN1cnJlbnRQb3NMOwotICAgICAgICAgICAgenpNYXJrZWRQb3MgICA9IHp6TWFya2VkUG9zTDsKLSAgICAgICAgICAgIGJvb2xlYW4gZW9mID0genpSZWZpbGwoKTsKLSAgICAgICAgICAgIC8vIGdldCB0cmFuc2xhdGVkIHBvc2l0aW9ucyBhbmQgcG9zc2libHkgbmV3IGJ1ZmZlcgotICAgICAgICAgICAgenpDdXJyZW50UG9zTCAgPSB6ekN1cnJlbnRQb3M7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvc0wgICA9IHp6TWFya2VkUG9zOwotICAgICAgICAgICAgenpCdWZmZXJMICAgICAgPSB6ekJ1ZmZlcjsKLSAgICAgICAgICAgIHp6RW5kUmVhZEwgICAgID0genpFbmRSZWFkOwotICAgICAgICAgICAgaWYgKGVvZikgewotICAgICAgICAgICAgICB6eklucHV0ID0gWVlFT0Y7Ci0gICAgICAgICAgICAgIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIHp6SW5wdXQgPSB6ekJ1ZmZlckxbenpDdXJyZW50UG9zTCsrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaW50IHp6TmV4dCA9IHp6VHJhbnNMWyB6elJvd01hcExbenpTdGF0ZV0gKyB6ekNNYXBMW3p6SW5wdXRdIF07Ci0gICAgICAgICAgaWYgKHp6TmV4dCA9PSAtMSkgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgenpTdGF0ZSA9IHp6TmV4dDsKLQotICAgICAgICAgIGludCB6ekF0dHJpYnV0ZXMgPSB6ekF0dHJMW3p6U3RhdGVdOwotICAgICAgICAgIGlmICggKHp6QXR0cmlidXRlcyAmIDEpID09IDEgKSB7Ci0gICAgICAgICAgICB6ekFjdGlvbiA9IHp6U3RhdGU7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvc0wgPSB6ekN1cnJlbnRQb3NMOwotICAgICAgICAgICAgaWYgKCAoenpBdHRyaWJ1dGVzICYgOCkgPT0gOCApIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIHN0b3JlIGJhY2sgY2FjaGVkIHBvc2l0aW9uCi0gICAgICB6ek1hcmtlZFBvcyA9IHp6TWFya2VkUG9zTDsKLQotICAgICAgc3dpdGNoICh6ekFjdGlvbiA8IDAgPyB6ekFjdGlvbiA6IFpaX0FDVElPTlt6ekFjdGlvbl0pIHsKLSAgICAgICAgY2FzZSA3NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFOQ0VTVE9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTI6IGJyZWFrOwotICAgICAgICBjYXNlIDU2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVRFTSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDkzOiBicmVhazsKLSAgICAgICAgY2FzZSA0NjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTQ6IGJyZWFrOwotICAgICAgICBjYXNlIDgxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVTQ0VOREFOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk1OiBicmVhazsKLSAgICAgICAgY2FzZSAxNTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVRVUFMUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk2OiBicmVhazsKLSAgICAgICAgY2FzZSAzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5URUdFUiwgbmV3IEJpZ0ludGVnZXIoeXl0ZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTc6IGJyZWFrOwotICAgICAgICBjYXNlIDM5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVEpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTEVNRU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTk6IGJyZWFrOwotICAgICAgICBjYXNlIDc3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkFNRVNQQUNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAwOiBicmVhazsKLSAgICAgICAgY2FzZSAzNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAxOiBicmVhazsKLSAgICAgICAgY2FzZSAyMzogCi0gICAgICAgICAgeyAvLyBnZXQgcmlkIG9mIHF1b3RlcwotCQkJCVN0cmluZyBzdHIgPSB5eXRleHQoKTsKLQkJCQlhc3NlcnQgc3RyLmxlbmd0aCgpID49IDI7Ci0JCQkJcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TVFJJTkcsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5MaXRlcmFsVXRpbHMudW5xdW90ZShzdHIpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAyOiBicmVhazsKLSAgICAgICAgY2FzZSAxOiAKLSAgICAgICAgICB7IFN0cmluZyBlcnIgPSAiVW5rbm93biBjaGFyYWN0ZXIgYXQgbGluZSAiICsgbGluZW5vKCk7IAotCQllcnIgKz0gIiBjb2wgIiArIGNvbG5vKCk7Ci0JCWVyciArPSAiOiAiICsgeXl0ZXh0KCk7IAotCQkJICAgICAKLQkJdGhyb3cgbmV3IEpGbGV4RXJyb3IoZXJyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTAzOiBicmVhazsKLSAgICAgICAgY2FzZSAyMDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTU1BKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTA0OiBicmVhazsKLSAgICAgICAgY2FzZSA3MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDU6IGJyZWFrOwotICAgICAgICBjYXNlIDM4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDY6IGJyZWFrOwotICAgICAgICBjYXNlIDMwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU19MRVNTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTA3OiBicmVhazsKLSAgICAgICAgY2FzZSA2NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRSRUFUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTA4OiBicmVhazsKLSAgICAgICAgY2FzZSAxMzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDk6IGJyZWFrOwotICAgICAgICBjYXNlIDY2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVU5JT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTA6IGJyZWFrOwotICAgICAgICBjYXNlIDIxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9MTEFSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTExOiBicmVhazsKLSAgICAgICAgY2FzZSA4NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNDSEVNQV9FTEVNRU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTEyOiBicmVhazsKLSAgICAgICAgY2FzZSAzNTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTEzOiBicmVhazsKLSAgICAgICAgY2FzZSA0MzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE0OiBicmVhazsKLSAgICAgICAgY2FzZSAyNTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVERPVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UWVBFU1dJVENIKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE2OiBicmVhazsKLSAgICAgICAgY2FzZSA1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkNOQU1FLCB5eXRleHQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExNzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERUNJTUFMLCBuZXcgQmlnRGVjaW1hbCh5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTg6IGJyZWFrOwotICAgICAgICBjYXNlIDE5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVRfU1lNKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE5OiBicmVhazsKLSAgICAgICAgY2FzZSAyOTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NFUVVBTCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjY6IAotICAgICAgICAgIHsgY29tbWVudExldmVsKys7IC8vIGludCBvdmVyZmxvdyA9UAotCQkJICB5eWJlZ2luKENPTU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjE6IGJyZWFrOwotICAgICAgICBjYXNlIDgzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9DVU1FTlRfTk9ERSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIU0xBU0gpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjM6IGJyZWFrOwotICAgICAgICBjYXNlIDE4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SV0FSRF9TTEFTSCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FWENFUFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjU6IGJyZWFrOwotICAgICAgICBjYXNlIDg5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUFJFQ0VESU5HX1NJQkxJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjY6IGJyZWFrOwotICAgICAgICBjYXNlIDczOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU5TVEFOQ0UpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMjc6IGJyZWFrOwotICAgICAgICBjYXNlIDU3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRUxTRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyOTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDc6IAotICAgICAgICAgIHsgY29tbWVudExldmVsKys7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UTyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMjogYnJlYWs7Ci0gICAgICAgIGNhc2UgODQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTVBUWV9TRVFVRU5DRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzMzogYnJlYWs7Ci0gICAgICAgIGNhc2UgODA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzQ6IGJyZWFrOwotICAgICAgICBjYXNlIDMxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1JFQVRFUkVRVUFMKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTM1OiBicmVhazsKLSAgICAgICAgY2FzZSA4NzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFOQ0VTVE9SX09SX1NFTEYpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzY6IGJyZWFrOwotICAgICAgICBjYXNlIDc4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQVRUUklCVVRFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTM3OiBicmVhazsKLSAgICAgICAgY2FzZSA4NjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNDSEVNQV9BVFRSSUJVVEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzg6IGJyZWFrOwotICAgICAgICBjYXNlIDc5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9MTE9XSU5HKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTM5OiBicmVhazsKLSAgICAgICAgY2FzZSA1MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QSVBFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQxOiBicmVhazsKLSAgICAgICAgY2FzZSAyMjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlFVRVNUSU9OTUFSSyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0MzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFUlNFQ1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDQ6IGJyZWFrOwotICAgICAgICBjYXNlIDQ4OiAKLSAgICAgICAgICB7IGNvbW1lbnRMZXZlbC0tOyAKLQkJCSAgaWYoY29tbWVudExldmVsID09IDApCi0JCSAgICAgICAgICAJeXliZWdpbihZWUlOSVRJQUwpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDU6IGJyZWFrOwotICAgICAgICBjYXNlIDQ0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT0YpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDY6IGJyZWFrOwotICAgICAgICBjYXNlIDYzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0hJTEQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDc6IGJyZWFrOwotICAgICAgICBjYXNlIDQwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTkUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDg6IGJyZWFrOwotICAgICAgICBjYXNlIDU4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0VMRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT0xPTkNPTE9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUwOiBicmVhazsKLSAgICAgICAgY2FzZSA1MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRJVik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1MTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkdfU0lCTElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5URVhUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUzOiBicmVhazsKLSAgICAgICAgY2FzZSA2ODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJFVFVSTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5NT0QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTU6IGJyZWFrOwotICAgICAgICBjYXNlIDY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QTFVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU2OiBicmVhazsKLSAgICAgICAgY2FzZSAyODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5PVEVRVUFMUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSX0dSRUFURVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTg6IGJyZWFrOwotICAgICAgICBjYXNlIDY0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVZFUlkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTk6IGJyZWFrOwotICAgICAgICBjYXNlIDcyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVEFCTEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjA6IGJyZWFrOwotICAgICAgICBjYXNlIDkwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVTQ0VOREFOVF9PUl9TRUxGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYxOiBicmVhazsKLSAgICAgICAgY2FzZSA3NjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNBVElTRklFUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYzOiBicmVhazsKLSAgICAgICAgY2FzZSAxNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NUSEFOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY0OiBicmVhazsKLSAgICAgICAgY2FzZSA1NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNBU1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjU6IGJyZWFrOwotICAgICAgICBjYXNlIDEyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUlBBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjogCi0gICAgICAgICAgeyAvKiBpZ25vcmUgKi8KLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY3OiBicmVhazsKLSAgICAgICAgY2FzZSAxMDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxCUkFDS0VUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY4OiBicmVhazsKLSAgICAgICAgY2FzZSA2MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5PREUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjk6IGJyZWFrOwotICAgICAgICBjYXNlIDU1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSURJVik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET1VCTEUsIG5ldyBEb3VibGUoeXl0ZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTcxOiBicmVhazsKLSAgICAgICAgY2FzZSA2MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRIRU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzI6IGJyZWFrOwotICAgICAgICBjYXNlIDU5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU09NRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QQVJFTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzQ6IGJyZWFrOwotICAgICAgICBjYXNlIDc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5NSU5VUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BUyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SQlJBQ0tFVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc5OiBicmVhazsKLSAgICAgICAgY2FzZSA1MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFORCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxQQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxODE6IGJyZWFrOwotICAgICAgICBjYXNlIDk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT0xPTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MjogYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgIGlmICh6eklucHV0ID09IFlZRU9GICYmIHp6U3RhcnRSZWFkID09IHp6Q3VycmVudFBvcykgewotICAgICAgICAgICAgenpBdEVPRiA9IHRydWU7Ci0gICAgICAgICAgICB6ekRvRU9GKCk7Ci0gICAgICAgICAgICAgIHsgcmV0dXJuIG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbChYcGF0aFN5bS5FT0YpOyB9Ci0gICAgICAgICAgfSAKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHp6U2NhbkVycm9yKFpaX05PX01BVENIKTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YcGF0aFN5bS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YcGF0aFN5bS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjQ2YTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWHBhdGhTeW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBnZW5lcmF0ZWQgYnkgQ1VQIHYwLjEwawotLy8gRnJpIEp1biAyNSAwMToxMTowNiBDRVNUIDIwMTAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqIENVUCBnZW5lcmF0ZWQgY2xhc3MgY29udGFpbmluZyBzeW1ib2wgY29uc3RhbnRzLiAqLwotcHVibGljIGNsYXNzIFhwYXRoU3ltIHsKLSAgLyogdGVybWluYWxzICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NFTkRBTlRfT1JfU0VMRiA9IDMyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUyA9IDU2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVCA9IDQ1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0xMT1dJTkcgPSAzNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9SV0FSRF9TTEFTSFNMQVNIID0gMTk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUkVOVCA9IDM2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRSA9IDQ2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET0NVTUVOVF9OT0RFID0gNzU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUVTUEFDRSA9IDM1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JXQVJEX1NMQVNIID0gMTg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSRUFUID0gNTU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PREUgPSA3NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NTUEgPSAyNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1IgPSAzNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTFQgPSA0MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUiA9IDgzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET1VCTEUgPSA4NDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0hJTEQgPSAyODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9MTE9XSU5HX1NJQkxJTkcgPSAzMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFUlkgPSA2NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VMRiA9IDMxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRSA9IDQ0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gODA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFQgPSA3NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFOQ0UgPSA1MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9URVFVQUxTID0gMTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRIRU4gPSA2ODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NIRU1BX0VMRU1FTlQgPSA4MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NIRU1BX0FUVFJJQlVURSA9IDc5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTkNFU1RPUl9PUl9TRUxGID0gNDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVRID0gNDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSRUNFRElORyA9IDM5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT0QgPSA0OTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRfU1lNID0gMjE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPTExBUiA9IDI1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWENFUFQgPSA1MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU1RIQU4gPSAxMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUElQRSA9IDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NFUVVBTCA9IDEzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVTVElPTk1BUksgPSAyNzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExVUyA9IDY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElESVYgPSA0ODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTFBBUiA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSU9OID0gNTA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVJFUVVBTCA9IDE1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNJTUFMID0gODU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUiA9IDYwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFSID0gODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUiA9IDE0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVDRURJTkdfU0lCTElORyA9IDM4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVYgPSA0NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVUVVJOID0gNjI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVMU0UgPSA2OTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9URE9UID0gMjI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPVCA9IDI2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFT0YgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQ05BTUUgPSA4NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09NTUVOVCA9IDc3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFUlNFQ1QgPSA1MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUlBBUiA9IDU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElURU0gPSA3MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU1QVFlfU0VRVUVOQ0UgPSA3MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FTVEFCTEUgPSA1NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVMgPSA1OTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOVVMgPSA3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OID0gNzg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOID0gNjE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9SID0gNzE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGVycm9yID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFID0gMzA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElGID0gNjc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVTV0lUQ0ggPSA4MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FTVCA9IDU4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPRiA9IDU0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPTiA9IDIzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDRU5EQU5UID0gMjk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPTUUgPSA2NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkJSQUNLRVQgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPTkNPTE9OID0gMjA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVJfR1JFQVRFUiA9IDE3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFJJTkcgPSA4NjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0FUSVNGSUVTID0gNjM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFORCA9IDcwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUTyA9IDY0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQlJBQ0tFVCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FID0gNDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NfTEVTUyA9IDE2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUVVBTFMgPSAxMDsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQWRkRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQWRkRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTUwODQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FkZEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGJpbmFyeSBvcGVyYXRpb24gQWRkLCB0YWtlcyAyIGlucHV0cyBhbmQgcmV0dXJucyB0aGUgY29tYmluZWQKLSAqIHZhbHVlLgotICovCi1wdWJsaWMgY2xhc3MgQWRkRXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFkZEV4cHIKLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBBZGRFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FuZEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FuZEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhiODM3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbmRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBiaW5hcnkgb3BlcmF0aW9uIEFuZC4gVGhlIHZhbHVlIG9mIGFuIGFuZC1leHByZXNzaW9uIGlzIGRldGVybWluZWQKLSAqIGJ5IHRoZSBlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZXMgKEVCVidzKSBvZiBpdHMgb3BlcmFuZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbmRFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQW5kRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24uCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBBbmRFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FueUtpbmRUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbnlLaW5kVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzRiZjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FueUtpbmRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyB0byB0ZXN0IGEgdHlwZSBvZiBhbnkga2luZC4gVGhpcyBtYXRjaGVzIGFueSBub2RlIGluIHRoZSBleHByZXNzaW9uLgotICovCi1wdWJsaWMgY2xhc3MgQW55S2luZFRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIE5vZGVUeXBlLmNsYXNzOwotCX0KLQkKLQkKLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BdHRyRWxlbVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJFbGVtVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGQ2NzhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJFbGVtVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENvbW1vbiBiYXNlIGNsYXNzIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBdHRyRWxlbVRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0JcHJpdmF0ZSBRTmFtZSBfbmFtZTsKLQlwcml2YXRlIFFOYW1lIF90eXBlOyAvLyBtYXkgYmUgbnVsbAotCXByaXZhdGUgYm9vbGVhbiBfd2lsZDsgLy8gdXNlIHdpbGQgcW5hbWUgPwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZSBhbmQgRWxlbWVudCB0ZXN0cy4gVGhpcyB0YWtlcyBpbiAzIGlucHV0cywKLQkgKiBOYW1lLCB3aWxkY2FyZCB0ZXN0KHRydWUvZmFsc2UpIGFuZCB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gd2lsZAotCSAqICAgICAgICAgICAgV2lsZGNhcmQgdGVzdD8gVHJ1ZS9GYWxzZS4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgUU5hbWUgdHlwZS4KLQkgKi8KLQlwdWJsaWMgQXR0ckVsZW1UZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCwgUU5hbWUgdHlwZSkgewotCQlfbmFtZSA9IG5hbWU7Ci0JCV93aWxkID0gd2lsZDsKLQkJX3R5cGUgPSB0eXBlOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuIFRoaXMgdGFrZXMgaW4gMiBpbnB1dHMsIE5hbWUKLQkgKiBhbmQgd2lsZGNhcmQgdGVzdCh0cnVlL2ZhbHNlKS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/IFRydWUvRmFsc2UuCi0JICovCi0JcHVibGljIEF0dHJFbGVtVGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQpIHsKLQkJdGhpcyhuYW1lLCB3aWxkLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuIFRoaXMgdGFrZXMgaW4gbm8KLQkgKiBpbnB1dHMuCi0JICovCi0JcHVibGljIEF0dHJFbGVtVGVzdCgpIHsKLQkJdGhpcyhudWxsLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3Igd2lsZGNhcmQgdGVzdC4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB3aWxkY2FyZCB0ZXN0LgotCSAqLwotCXB1YmxpYyBib29sZWFuIHdpbGQoKSB7Ci0JCXJldHVybiBfd2lsZDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBuYW1lIHRlc3QuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgbmFtZSB0ZXN0LgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgdHlwZSB0ZXN0LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHR5cGUgdGVzdC4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLQotCXByb3RlY3RlZCBzaG9ydCBnZXREZXJ2aWF0aW9uVHlwZXMoKSB7Ci0JCXJldHVybiBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX0xJU1QgfCBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX0VYVEVOU0lPTgotCQkJCXwgWFNDb25zdGFudHMuREVSSVZBVElPTl9SRVNUUklDVElPTgotCQkJCXwgWFNDb25zdGFudHMuREVSSVZBVElPTl9TVUJTVElUVVRJT047Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXR0cmlidXRlVGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXR0cmlidXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTg3MDE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJpYnV0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuQXR0cmlidXRlUFNWSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5JdGVtUFNWSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQ2xhc3MgdXNlZCB0byBtYXRjaCBhbiBhdHRyaWJ1dGUgbm9kZSBieSBpdHMgbmFtZSBhbmQvb3IgdHlwZS4KLSAqLwotcHVibGljIGNsYXNzIEF0dHJpYnV0ZVRlc3QgZXh0ZW5kcyBBdHRyRWxlbVRlc3QgewotCi0JcHJpdmF0ZSBBbnlUeXBlIGFueVR5cGUgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZVRlc3QuIFRoaXMgb25lIHRha2VzIGluIDMgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotCSAqIHRlc3QodHJ1ZS9mYWxzZSkgYW5kIHR5cGUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0LCBUcnVlL0ZhbHNlLgotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBRTmFtZSB0eXBlLgotCSAqLwotCXB1YmxpYyBBdHRyaWJ1dGVUZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCwgUU5hbWUgdHlwZSkgewotCQlzdXBlcihuYW1lLCB3aWxkLCB0eXBlKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlVGVzdC4gVGhpcyBvbmUgdGFrZXMgaW4gMiBpbnB1dHMsIE5hbWUgYW5kCi0JICogd2lsZGNhcmQgdGVzdCh0cnVlL2ZhbHNlKS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3QsIFRydWUvRmFsc2UuCi0JICovCi0JcHVibGljIEF0dHJpYnV0ZVRlc3QoUU5hbWUgbmFtZSwgYm9vbGVhbiB3aWxkKSB7Ci0JCXN1cGVyKG5hbWUsIHdpbGQpOwotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZVRlc3QuCi0JICovCi0JcHVibGljIEF0dHJpYnV0ZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJaWYgKG5hbWUoKSA9PSBudWxsICYmICF3aWxkKCkpIHsKLQkJCXJldHVybiBuZXcgQXR0clR5cGUoKTsKLQkJfQotCi0JCUFueVR5cGUgYXQgPSBycy5maXJzdCgpOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpKSB7Ci0JCQlyZXR1cm4gbmV3IEF0dHJUeXBlKCk7Ci0JCX0KLQotCQlyZXR1cm4gY3JlYXRlQXR0clR5cGUoYXQpOwotCX0KLQotCXByaXZhdGUgQW55VHlwZSBjcmVhdGVBdHRyVHlwZShBbnlUeXBlIGF0KSB7Ci0JCWFueVR5cGUgPSBuZXcgQXR0clR5cGUoKTsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGF0OwotCQlOb2RlIG5vZGUgPSBub2RlVHlwZS5ub2RlX3ZhbHVlKCk7Ci0JCWlmIChub2RlID09IG51bGwpIHsKLQkJCXJldHVybiBhbnlUeXBlOwotCQl9Ci0KLQkJU3RyaW5nIG5vZGVOYW1lID0gbm9kZS5nZXRMb2NhbE5hbWUoKTsKLQotCQlpZiAod2lsZCgpKSB7Ci0JCQlpZiAodHlwZSgpICE9IG51bGwpIHsKLQkJCQlhbnlUeXBlID0gY3JlYXRlQXR0ckZvclhTRFR5cGUobm9kZSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobm9kZU5hbWUuZXF1YWxzKG5hbWUoKS5sb2NhbCgpKSkgewotCQkJaWYgKHR5cGUoKSAhPSBudWxsKSB7Ci0JCQkJYW55VHlwZSA9IGNyZWF0ZUF0dHJGb3JYU0RUeXBlKG5vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQlhbnlUeXBlID0gbmV3IEF0dHJUeXBlKChBdHRyKSBub2RlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYW55VHlwZTsKLQl9Ci0KLQlwcml2YXRlIEFueVR5cGUgY3JlYXRlQXR0ckZvclhTRFR5cGUoTm9kZSBub2RlKSB7Ci0JCUF0dHIgYXR0ciA9IChBdHRyKSBub2RlOwotCQlpZiAoIShhdHRyIGluc3RhbmNlb2YgSXRlbVBTVkkpKSB7Ci0JCQlhbnlUeXBlID0gbmV3IEF0dHJUeXBlKGF0dHIpOwotCQl9IGVsc2UgewotCQkJQXR0cmlidXRlUFNWSSBlbGVtcHN2aSA9IChBdHRyaWJ1dGVQU1ZJKSBhdHRyOwotCQkJWFNUeXBlRGVmaW5pdGlvbiB0eXBlZGVmID0gZWxlbXBzdmkuZ2V0VHlwZURlZmluaXRpb24oKTsKLQkJCWlmICh0eXBlZGVmICE9IG51bGwpIHsKLQkJCQlpZiAodHlwZWRlZi5kZXJpdmVkRnJvbSh0eXBlKCkubmFtZXNwYWNlKCksIHR5cGUoKS5sb2NhbCgpLAotCQkJCQkJZ2V0RGVydmlhdGlvblR5cGVzKCkpKSB7Ci0JCQkJCWFueVR5cGUgPSBuZXcgQXR0clR5cGUoYXR0cik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBhbnlUeXBlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIHdpbGQoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQlyZXR1cm4gQXR0clR5cGUuY2xhc3M7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BeGlzU3RlcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXhpc1N0ZXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkYTdiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BeGlzU3RlcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBBeGlzU3RlcCwgdGhpcyBnZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgbm9kZXMuIFRoZXNlCi0gKiBub2RlcyBhcmUgYWx3YXlzIHJldHVybmVkIGluIERvY3VtZW50IE9yZGVyLiBUaGlzIGNhbiBiZSBGb3J3YXJkIFN0ZXAgb3IKLSAqIFJldmVyc2UgU3RlcC4KLSAqLwotcHVibGljIGNsYXNzIEF4aXNTdGVwIGV4dGVuZHMgU3RlcEV4cHIgewotCXByaXZhdGUgU3RlcCBfc3RlcDsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2V4cHJzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF4aXNTdGVwLgotCSAqIAotCSAqIEBwYXJhbSBzdGVwCi0JICogICAgICAgICAgICBEZWZpbmVzIGZvcndhcmQvcmV2ZXJzZSBzdGVwLgotCSAqIEBwYXJhbSBleHBycwotCSAqICAgICAgICAgICAgQ29sbGVjdGlvbiBvZiB4cGF0aCBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgQXhpc1N0ZXAoU3RlcCBzdGVwLCBDb2xsZWN0aW9uIGV4cHJzKSB7Ci0JCV9zdGVwID0gc3RlcDsKLQkJX2V4cHJzID0gZXhwcnM7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQWR2YW5jZXMgdG8gbmV4dCBzdGVwLgotCSAqIAotCSAqIEByZXR1cm4gUHJldmlvdXMgc3RlcC4KLQkgKi8KLQlwdWJsaWMgU3RlcCBzdGVwKCkgewotCQlyZXR1cm4gX3N0ZXA7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBzdGVwIGRpcmVjdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfc3RlcChTdGVwIHMpIHsKLQkJX3N0ZXAgPSBzOwotCX0KLQotCS8qKgotCSAqIEludGVyYXRvci4KLQkgKiAKLQkgKiBAcmV0dXJuIEl0ZXJhdGVkIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF9leHBycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgc2l6ZSBvZiBleHByZXNzaW9ucy4KLQkgKiAKLQkgKiBAcmV0dXJuIFNpemUgb2YgZXhwcmVzc2lvbnMuCi0JICovCi0JcHVibGljIGludCBwcmVkaWNhdGVfY291bnQoKSB7Ci0JCXJldHVybiBfZXhwcnMuc2l6ZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0JpbkV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0JpbkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwN2M3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9CaW5FeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIEFic3RyYWN0IGNsYXNzIGZvciBhIEJpbmFyeSBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCaW5FeHByIGV4dGVuZHMgRXhwciB7Ci0JLy8gWFhYOiByZXZpZXcgaGllcmFyY2h5IC0gc3RyaWN0bHkgc2hvdWxkIGJlIEV4cHIKLQkvLyBvciByZW5hbWUgdG8gYmlub3AKLQlwcml2YXRlIFhQYXRoTm9kZSBfbGVmdDsKLQlwcml2YXRlIFhQYXRoTm9kZSBfcmlnaHQ7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQmluRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgbGVmdCB4cGF0aCBub2RlIGZvciB0aGUgb3BlcmF0aW9uLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICByaWdodCB4cGF0aCBub2RlIGZvciB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBCaW5FeHByKFhQYXRoTm9kZSBsLCBYUGF0aE5vZGUgcikgewotCQlfbGVmdCA9IGw7Ci0JCV9yaWdodCA9IHI7Ci0JfQotCi0JLyoqCi0JICogTGVmdCB4cGF0aCBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gTGVmdCBub2RlLgotCSAqLwotCXB1YmxpYyBYUGF0aE5vZGUgbGVmdCgpIHsKLQkJcmV0dXJuIF9sZWZ0OwotCX0KLQotCS8qKgotCSAqIFJpZ2h0IHhwYXRoIG5vZGUuCi0JICogCi0JICogQHJldHVybiBSaWdodCBub2RlLgotCSAqLwotCXB1YmxpYyBYUGF0aE5vZGUgcmlnaHQoKSB7Ci0JCXJldHVybiBfcmlnaHQ7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBsZWZ0IHhwYXRoIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG4KLQkgKiAgICAgICAgICAgIExlZnQgbm9kZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfbGVmdChYUGF0aE5vZGUgbikgewotCQlfbGVmdCA9IG47Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSByaWdodCB4cGF0aCBub2RlLgotCSAqIAotCSAqIEBwYXJhbSBuCi0JICogICAgICAgICAgICBSaWdodCBub2RlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9yaWdodChYUGF0aE5vZGUgbikgewotCQlfcmlnaHQgPSBuOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Nhc3RFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DYXN0RXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDg0OTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Nhc3RFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIEEgY2xhc3MgdGhhdCBjcmVhdGVzIGEgbmV3IHZhbHVlIG9mIGEgc3BlY2lmaWMgdHlwZSBiYXNlZCBvbiBhbiBleGlzdGluZwotICogdmFsdWUuIEEgY2FzdCBleHByZXNzaW9uIHRha2VzIHR3byBvcGVyYW5kczogYW4gaW5wdXQgZXhwcmVzc2lvbiBhbmQgYSB0YXJnZXQKLSAqIHR5cGUuIFRoZSB0eXBlIG9mIHRoZSBpbnB1dCBleHByZXNzaW9uIGlzIGNhbGxlZCB0aGUgaW5wdXQgdHlwZS4gVGhlIHRhcmdldAotICogdHlwZSBtdXN0IGJlIGEgbmFtZWQgYXRvbWljIHR5cGUsIHJlcHJlc2VudGVkIGJ5IGEgUU5hbWUsIG9wdGlvbmFsbHkgZm9sbG93ZWQKLSAqIGJ5IHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciA/IGlmIGFuIGVtcHR5IHNlcXVlbmNlIGlzIHBlcm1pdHRlZC4gSWYgdGhlCi0gKiB0YXJnZXQgdHlwZSBoYXMgbm8gbmFtZXNwYWNlIHByZWZpeCwgaXQgaXMgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgZGVmYXVsdAotICogZWxlbWVudC90eXBlIG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIENhc3RFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ2FzdEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0IHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIFNpbmdsZVR5cGUgdG8gY2FzdCBsIHRvLgotCSAqLwotCXB1YmxpYyBDYXN0RXhwcihFeHByIGwsIFNpbmdsZVR5cGUgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DYXN0YWJsZUV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Nhc3RhYmxlRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjYwMjgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Nhc3RhYmxlRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBBIGNsYXNzIHRoYXQgdGVzdHMgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIGNhc3RhYmxlIGludG8gYSBnaXZlbiB0eXBlLiBUaGlzCi0gKiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgdHlwZSBmb3IgcHJvY2Vzc2luZyBhIGdpdmVuIHZhbHVlLgotICovCi1wdWJsaWMgY2xhc3MgQ2FzdGFibGVFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBDYXN0YWJsZUV4cHIKLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgU2luZ2xlVHlwZSB0byBjaGVjayBsIGFnYWluc3QuCi0JICovCi0JcHVibGljIENhc3RhYmxlRXhwcihFeHByIGwsIFNpbmdsZVR5cGUgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DbXBFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DbXBFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Nzg1YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ21wRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogVGhlIGNvbXBhcmlzb24gb2YgZXhwcmVzc2lvbiBvcGVyYXRvciB0YWtlcyB0aGUgdmFsdWUgb2YgaXRzIGxlZnQgb3BlcmFuZCBhbmQKLSAqIGNvbXBhcmVzIChkZXBlbmRhbnQgb24gdHlwZSkgYWdhaW5zdCBpdHMgcmlnaHQgb3BlcmFuZCwgYWNjb3JkaW5nIHRvIHRoZQotICogcnVsZXMgb2YgdGhlIHBhcnRpY3VsYXIgY29tcGFyaXNvbiBydWxlCi0gKi8KLXB1YmxpYyBjbGFzcyBDbXBFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBFUVVBTFMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVRVUFMUyA9IDA7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOT1RFUVVBTFMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVEVRVUFMUyA9IDE7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTVEhBTiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU1RIQU4gPSAyOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEVTU0VRVUFMIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTRVFVQUwgPSAzOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1JFQVRFUiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUiA9IDQ7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBHUkVBVEVSRVFVQUwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVJFUVVBTCA9IDU7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBFUSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVEgPSA2OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTkUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FID0gNzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExUIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMVCA9IDg7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBMRSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEUgPSA5OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1Qgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdUID0gMTA7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBHRSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0UgPSAxMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIElTIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJUyA9IDEyOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEVTU19MRVNTIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTX0xFU1MgPSAxMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVJfR1JFQVRFUiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUl9HUkVBVEVSID0gMTQ7Ci0KLQlwcml2YXRlIGludCBfdHlwZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDbXBFeHByCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0IHhwYXRoIGxlZnQgZXhwcmVzc2lvbi92YXJpYWJsZQotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dCB4cGF0aCByaWdodCBleHByZXNzaW9uL3ZhcmlhYmxlCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIHdoYXQgY29tcGFyaXNvbiB0byB1c2UgbCBhZ2FpbnN0IHIuCi0JICovCi0JcHVibGljIENtcEV4cHIoRXhwciBsLCBFeHByIHIsIGludCB0eXBlKSB7Ci0JCXN1cGVyKGwsIHIpOwotCi0JCV90eXBlID0gdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGNvbXBhcmlzb24gdHlwZQotCSAqLwotCXB1YmxpYyBpbnQgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NudHhJdGVtRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ250eEl0ZW1FeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZWVhODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ250eEl0ZW1FeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBDb250ZXh0IEl0ZW0gRXhwcmVzaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIENudHhJdGVtRXhwciBleHRlbmRzIFByaW1hcnlFeHByIHsKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Db21tZW50VGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ29tbWVudFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmN2Q3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Db21tZW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ29tbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBDb21tZW50IHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50VGVzdCBleHRlbmRzIEtpbmRUZXN0IHsKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIENvbW1lbnRUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGVjaW1hbExpdGVyYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RlY2ltYWxMaXRlcmFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiN2JhN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGVjaW1hbExpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqVGhlIHZhbHVlIG9mIGEgbnVtZXJpYyBsaXRlcmFsIGNvbnRhaW5pbmcgIi4iIGJ1dCBubyBlIG9yIEUgY2hhcmFjdGVyIGlzIGFuCi0gKiBhdG9taWMgdmFsdWUgb2YgdHlwZSB4czpkZWNpbWFsCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIERlY2ltYWxMaXRlcmFsIGV4dGVuZHMgTnVtZXJpY0xpdGVyYWwgewotCXByaXZhdGUgWFNEZWNpbWFsIF92YWx1ZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEZWNpbWFsTGl0ZXJhbAotCSAqIAotCSAqIEBwYXJhbSB2YWx1ZQotCSAqICAgICAgICAgICAgZG91YmxlIHZhbHVlCi0JICovCi0JcHVibGljIERlY2ltYWxMaXRlcmFsKEJpZ0RlY2ltYWwgdmFsdWUpIHsKLQkJX3ZhbHVlID0gbmV3IFhTRGVjaW1hbCh2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB4czpkZWNpbWFsIHZhbHVlCi0JICovCi0JcHVibGljIFhTRGVjaW1hbCB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9EaXZFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9EaXZFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZGYzZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGl2RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgRGl2aXNpb24gZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXZFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIERpdkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgRGl2RXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Eb2N1bWVudFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvY3VtZW50VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjUyMjY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvY3VtZW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRG9jVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIERvY3VtZW50IHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRUxFTUVOVC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNDSEVNQV9FTEVNRU5ULgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9FTEVNRU5UID0gMjsKLQotCS8vIFhYWDogcG9seW1vcnBoaXNtCi0JcHJpdmF0ZSBpbnQgX3R5cGU7Ci0KLQlwcml2YXRlIEF0dHJFbGVtVGVzdCBfZXRlc3Q7Ci0JcHJpdmF0ZSBTY2hlbWFFbGVtVGVzdCBfc2NoZW1hX2V0ZXN0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIERvY3VtZW50VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgeHBhdGggb2JqZWN0IHRvIHRlc3QuCi0JICovCi0JcHVibGljIERvY3VtZW50VGVzdChpbnQgdHlwZSwgT2JqZWN0IGFyZykgewotCQlfZXRlc3QgPSBudWxsOwotCQlfc2NoZW1hX2V0ZXN0ID0gbnVsbDsKLQotCQlfdHlwZSA9IHR5cGU7Ci0JCXN3aXRjaCAoX3R5cGUpIHsKLQkJY2FzZSBFTEVNRU5UOgotCQkJX2V0ZXN0ID0gKEF0dHJFbGVtVGVzdCkgYXJnOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NIRU1BX0VMRU1FTlQ6Ci0JCQlfc2NoZW1hX2V0ZXN0ID0gKFNjaGVtYUVsZW1UZXN0KSBhcmc7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIERvY3VtZW50VGVzdC4KLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRUZXN0KCkgewotCQl0aGlzKE5PTkUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEdldCB0ZXN0IHR5cGUuCi0JICogCi0JICogQHJldHVybiBUeXBlIG9mIHRlc3QuCi0JICovCi0JcHVibGljIGludCB0eXBlKCkgewotCQlyZXR1cm4gX3R5cGU7Ci0JfQotCi0JLyoqCi0JICogRWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEByZXR1cm4gRWxlbWVudCB0ZXN0LgotCSAqLwotCXB1YmxpYyBBdHRyRWxlbVRlc3QgZWxlbV90ZXN0KCkgewotCQlyZXR1cm4gX2V0ZXN0OwotCX0KLQotCS8qKgotCSAqIFNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHJldHVybiBTY2hlbWEgZWxlbWVudCB0ZXN0LgotCSAqLwotCXB1YmxpYyBTY2hlbWFFbGVtVGVzdCBzY2hlbWFfZWxlbV90ZXN0KCkgewotCQlyZXR1cm4gX3NjaGVtYV9ldGVzdDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCXJldHVybiBEb2NUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG91YmxlTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG91YmxlTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTcwZTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvdWJsZUxpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKlRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nIGFuIGUgb3IgRSBjaGFyYWN0ZXIgaXMgYW4gYXRvbWljCi0gKiB2YWx1ZSBvZiB0eXBlIHhzOmRvdWJsZQotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBEb3VibGVMaXRlcmFsIGV4dGVuZHMgTnVtZXJpY0xpdGVyYWwgewotCXByaXZhdGUgWFNEb3VibGUgX3ZhbHVlOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIERvdWJsZWl0ZXJhbAotCSAqIAotCSAqIEBwYXJhbSB2YWx1ZQotCSAqICAgICAgICAgICAgZG91YmxlIHZhbHVlCi0JICovCi0JcHVibGljIERvdWJsZUxpdGVyYWwoZG91YmxlIHZhbHVlKSB7Ci0JCV92YWx1ZSA9IG5ldyBYU0RvdWJsZSh2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB4czpkb3VibGUgdmFsdWUKLQkgKi8KLQlwdWJsaWMgWFNEb3VibGUgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FbGVtZW50VGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRWxlbWVudFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2MjMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FbGVtZW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk4NTM1IC0gQXR0cmlidXRlIGluc3RhbmNlIG9mIGltcHJvdmVtZW50cyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5FbGVtZW50UFNWSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5JdGVtUFNWSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIEVsZW1lbnQgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEVsZW1lbnRUZXN0IGV4dGVuZHMgQXR0ckVsZW1UZXN0IHsKLQlwcml2YXRlIGJvb2xlYW4gX3FtYXJrID0gZmFsc2U7Ci0KLQlwcml2YXRlIEFueVR5cGUgYW55VHlwZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRWxlbWVudFRlc3QuIFRoaXMgdGFrZXMgaW4gNCBpbnB1dHMsIE5hbWUsIHdpbGRjYXJkCi0JICogdGVzdCh0cnVlL2ZhbHNlKSwgdHlwZSBhbmQgcXVlc3Rpb24gbWFyayB0ZXN0KHRydWUvZmFsc2UpLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBOYW1lIG9mIGVsZW1lbnQgdG8gdGVzdC4KLQkgKiBAcGFyYW0gd2lsZAotCSAqICAgICAgICAgICAgV2lsZGNhcmQgdGVzdD8gKHRydWUvZmFsc2UpLgotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBUeXBlIG9mIGVsZW1lbnQgdG8gdGVzdC4KLQkgKiBAcGFyYW0gcW1hcmsKLQkgKiAgICAgICAgICAgIE5pbGxlZCBwcm9wZXJ0eSAodHJ1ZS9mYWxzZSkuCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCwgUU5hbWUgdHlwZSwgYm9vbGVhbiBxbWFyaykgewotCQlzdXBlcihuYW1lLCB3aWxkLCB0eXBlKTsKLQkJX3FtYXJrID0gcW1hcms7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDMgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotCSAqIHRlc3QodHJ1ZS9mYWxzZSlhbmQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/ICh0cnVlL2ZhbHNlKS4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCwgUU5hbWUgdHlwZSkgewotCQlzdXBlcihuYW1lLCB3aWxkLCB0eXBlKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRWxlbWVudFRlc3QuIFRoaXMgdGFrZXMgaW4gMiBpbnB1dHMsIE5hbWUsIHdpbGRjYXJkCi0JICogdGVzdCh0cnVlL2ZhbHNlKS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/ICh0cnVlL2ZhbHNlKS4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QoUU5hbWUgbmFtZSwgYm9vbGVhbiB3aWxkKSB7Ci0JCXN1cGVyKG5hbWUsIHdpbGQpOwotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LgotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgbmlsbGVkIHByb3BlcnR5LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBxbWFyaygpIHsKLQkJcmV0dXJuIF9xbWFyazsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycykgewotCi0JCWlmIChuYW1lKCkgPT0gbnVsbCAmJiAhd2lsZCgpKSB7Ci0JCQlyZXR1cm4gbmV3IEVsZW1lbnRUeXBlKCk7Ci0JCX0KLQotCQlBbnlUeXBlIGF0ID0gcnMuZmlyc3QoKTsKLQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSkgewotCQkJcmV0dXJuIG5ldyBFbGVtZW50VHlwZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGNyZWF0ZUVsZW1lbnRUeXBlKGF0KTsKLQl9Ci0KLQlwcml2YXRlIEFueVR5cGUgY3JlYXRlRWxlbWVudFR5cGUoQW55VHlwZSBhdCkgewotCQlhbnlUeXBlID0gbmV3IEVsZW1lbnRUeXBlKCk7Ci0JCU5vZGVUeXBlIG5vZGVUeXBlID0gKE5vZGVUeXBlKSBhdDsKLQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRE9DVU1FTlRfTk9ERSkgewotCQkJZG9jID0gKERvY3VtZW50KSBub2RlOwotCQl9IGVsc2UgewotCQkJZG9jID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpLmdldE93bmVyRG9jdW1lbnQoKTsKLQkJfQotCQkKLQkJTm9kZUxpc3Qgbm9kZUxpc3QgPSBudWxsOwkJCi0JCWlmICghd2lsZCgpKSB7Ci0JCQlub2RlTGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKG5hbWUoKS5uYW1lc3BhY2UoKSwKLQkJCQkJbmFtZSgpLmxvY2FsKCkpOwotCQl9IGVsc2UgewotCQkJbm9kZUxpc3QgPSBuZXcgU2luZ2xlSXRlbU5vZGVMaXN0SW1wbChub2RlKTsKLQkJfQotCi0JCWlmIChub2RlTGlzdC5nZXRMZW5ndGgoKSA+IDApIHsKLQkJCWFueVR5cGUgPSBjcmVhdGVFbGVtZW50Rm9yWFNEVHlwZShub2RlTGlzdCk7Ci0JCX0KLQkJcmV0dXJuIGFueVR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBBbnlUeXBlIGNyZWF0ZUVsZW1lbnRGb3JYU0RUeXBlKE5vZGVMaXN0IG5vZGVMaXN0KSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIG5vZGVMaXN0Lml0ZW0oaSk7Ci0JCQlpZiAodHlwZSgpID09IG51bGwgfHwgIShlbGVtZW50IGluc3RhbmNlb2YgSXRlbVBTVkkpKSB7Ci0JCQkJYW55VHlwZSA9IG5ldyBFbGVtZW50VHlwZShlbGVtZW50KTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJRWxlbWVudFBTVkkgZWxlbXBzdmkgPSAoRWxlbWVudFBTVkkpIGVsZW1lbnQ7Ci0JCQkJWFNUeXBlRGVmaW5pdGlvbiB0eXBlZGVmID0gZWxlbXBzdmkuZ2V0VHlwZURlZmluaXRpb24oKTsKLQkJCQlpZiAodHlwZWRlZi5kZXJpdmVkRnJvbSh0eXBlKCkubmFtZXNwYWNlKCksIHR5cGUoKS5sb2NhbCgpLAotCQkJCQkJZ2V0RGVydmlhdGlvblR5cGVzKCkpKSB7Ci0JCQkJCWFueVR5cGUgPSBuZXcgRWxlbWVudFR5cGUoZWxlbWVudCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYW55VHlwZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiB3aWxkKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIEVsZW1lbnRUeXBlLmNsYXNzOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBTaW5nbGVJdGVtTm9kZUxpc3RJbXBsIGltcGxlbWVudHMgTm9kZUxpc3QgewotCQlwcml2YXRlIE5vZGUgbm9kZTsKLQkJcHVibGljIFNpbmdsZUl0ZW1Ob2RlTGlzdEltcGwoTm9kZSBub2RlKSB7Ci0JCQl0aGlzLm5vZGUgPSBub2RlOwotCQl9Ci0KLQkJcHVibGljIE5vZGUgaXRlbShpbnQgaW5kZXgpIHsKLQkJCXJldHVybiBub2RlOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRMZW5ndGgoKSB7Ci0JCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRXhjZXB0RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRXhjZXB0RXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI2YWRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4Y2VwdEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogVGhlIGV4Y2VwdCBvcGVyYXRvciB0YWtlcyB0d28gbm9kZSBzZXF1ZW5jZXMgYXMgb3BlcmFuZHMgYW5kIHJldHVybnMgYQotICogc2VxdWVuY2UgY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gdGhlIGZpcnN0IG9wZXJhbmQgYnV0IG5vdCBpbgotICogdGhlIHNlY29uZCBvcGVyYW5kLgotICovCi1wdWJsaWMgY2xhc3MgRXhjZXB0RXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEV4Y2VwdEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgRXhjZXB0RXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3N2JhOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3Igbm9ybWFsIGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXhwciBleHRlbmRzIFhQYXRoTm9kZSB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9GaWx0ZXJFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9GaWx0ZXJFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzBjYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRmlsdGVyRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgZmlsdGVyIGV4cHJlc3Npb24gY29uc2lzdHMgc2ltcGx5IG9mIGEgcHJpbWFyeSBleHByZXNzaW9uIGZvbGxvd2VkIGJ5IHplcm8KLSAqIG9yIG1vcmUgcHJlZGljYXRlcy4gVGhlIHJlc3VsdCBvZiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gY29uc2lzdHMgb2YgYWxsIHRoZQotICogaXRlbXMgcmV0dXJuZWQgYnkgdGhlIHByaW1hcnkgZXhwcmVzc2lvbiBmb3Igd2hpY2ggYWxsIHRoZSBwcmVkaWNhdGVzIGFyZQotICogdHJ1ZS4gSWYgbm8gcHJlZGljYXRlcyBhcmUgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IGlzIHNpbXBseSB0aGUgcmVzdWx0IG9mIHRoZQotICogcHJpbWFyeSBleHByZXNzaW9uLiBUaGlzIHJlc3VsdCBtYXkgY29udGFpbiBub2RlcywgYXRvbWljIHZhbHVlcywgb3IgYW55Ci0gKiBjb21iaW5hdGlvbiBvZiB0aGVzZS4gVGhlIG9yZGVyaW5nIG9mIHRoZSBpdGVtcyByZXR1cm5lZCBieSBhIGZpbHRlcgotICogZXhwcmVzc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGVpciBvcmRlciBpbiB0aGUgcmVzdWx0IG9mIHRoZSBwcmltYXJ5Ci0gKiBleHByZXNzaW9uLiBDb250ZXh0IHBvc2l0aW9ucyBhcmUgYXNzaWduZWQgdG8gaXRlbXMgYmFzZWQgb24gdGhlaXIgb3JkaW5hbAotICogcG9zaXRpb24gaW4gdGhlIHJlc3VsdCBzZXF1ZW5jZS4gVGhlIGZpcnN0IGNvbnRleHQgcG9zaXRpb24gaXMgMS4KLSAqLwotcHVibGljIGNsYXNzIEZpbHRlckV4cHIgZXh0ZW5kcyBTdGVwRXhwciB7Ci0JcHJpdmF0ZSBQcmltYXJ5RXhwciBfcGV4cHI7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uIF9leHByczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIG9mIEZpbHRlckV4cHIuCi0JICogCi0JICogQHBhcmFtIHBleHByCi0JICogICAgICAgICAgICBpcyBjb3BpZWQgdG8gX3BleHByLgotCSAqIEBwYXJhbSBleHBycwotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9leHBycy4gCi0JICovCi0JcHVibGljIEZpbHRlckV4cHIoUHJpbWFyeUV4cHIgcGV4cHIsIENvbGxlY3Rpb24gZXhwcnMpIHsKLQkJX3BleHByID0gcGV4cHI7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgcHJpbWFyeSBleHByZXNzaW9uLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHByaW1hcnkgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgUHJpbWFyeUV4cHIgcHJpbWFyeSgpIHsKLQkJcmV0dXJuIF9wZXhwcjsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5leHQgcHJlZGljYXRlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5leHQgcHJlZGljYXRlLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF9leHBycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFNldCBhIG5ldyBwcmltYXJ5IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHNldCBhcyB0aGUgbmV3IHByaW1hcnkgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfcHJpbWFyeShQcmltYXJ5RXhwciBlKSB7Ci0JCV9wZXhwciA9IGU7Ci0JfQotCi0JLyoqCi0JICogQ291bnQgdGhlIG51bWJlciBvZiBwcmVkaWNhdGVzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHNpemUgb2YgdGhlIGNvbGxlY3Rpb24gb2YgcHJlZGljYXRlcy4KLQkgKi8KLQlwdWJsaWMgaW50IHByZWRpY2F0ZV9jb3VudCgpIHsKLQkJcmV0dXJuIF9leHBycy5zaXplKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRm9yRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRm9yRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODg2NWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZvckV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgdGhlIEZvciBleHByZXNzaW9uLgotICovCi1wdWJsaWMgY2xhc3MgRm9yRXhwciBleHRlbmRzIEV4cHIgewotCXByaXZhdGUgQ29sbGVjdGlvbiBfdmFyX2V4cHJfcGFpcnM7Ci0JcHJpdmF0ZSBFeHByIF9yZXR1cm47Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm9yRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gdmFyZXhwCi0JICogICAgICAgICAgICBFeHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gcmV0Ci0JICogICAgICAgICAgICBSZXR1cm4gZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgRm9yRXhwcihDb2xsZWN0aW9uIHZhcmV4cCwgRXhwciByZXQpIHsKLQkJX3Zhcl9leHByX3BhaXJzID0gdmFyZXhwOwotCQlfcmV0dXJuID0gcmV0OwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX3Zhcl9leHByX3BhaXJzLml0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRXhwciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEV4cHIgZXhwcigpIHsKLQkJcmV0dXJuIF9yZXR1cm47Ci0JfQotCi0JLyoqCi0JICogU2V0IEV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIEV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2V4cHIoRXhwciBlKSB7Ci0JCV9yZXR1cm4gPSBlOwotCX0KLQotCS8vIHVzZWQgZm9yIG5vcm1hbGl6YXRpb24uLi4gYmFzaWNhbGx5IGp1c3Qga2VlcCBhICJzaW1wbGUgZm9yIi4uLiBubwotCS8vIHBhaXJzLi4uIGNvbGxlY3Rpb24gd2lsbCBhbHdheXMgaGF2ZSAxIGVsZW1lbnQKLQkvKioKLQkgKiBOb3JtYWxpemF0aW9uIG9mIGV4cHJlc3Npb24gcGFpcnMuCi0JICovCi0JcHVibGljIHZvaWQgdHJ1bmNhdGVfcGFpcnMoKSB7Ci0JCWJvb2xlYW4gZmlyc3QgPSB0cnVlOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWkubmV4dCgpOwotCQkJaWYgKCFmaXJzdCkKLQkJCQlpLnJlbW92ZSgpOwotCi0JCQlmaXJzdCA9IGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBFeHByZXNzaW9uIHBhaXJzLgotCSAqLwotCXB1YmxpYyBDb2xsZWN0aW9uIHZlX3BhaXJzKCkgewotCQlyZXR1cm4gX3Zhcl9leHByX3BhaXJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZvcndhcmRTdGVwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Gb3J3YXJkU3RlcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGExM2JjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZvcndhcmRTdGVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBGb3J3YXJkIHN0ZXBwaW5nIHN1cHBvcnQgZm9yIFN0ZXAgb3BlcmF0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIEZvcndhcmRTdGVwIGV4dGVuZHMgU3RlcCB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQ0hJTEQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0hJTEQgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgREVTQ0VOREFOVC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDRU5EQU5UID0gMjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFUVFJJQlVURS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEUgPSAzOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU0VMRi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRUxGID0gNDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIERFU0NFTkRBTlRfT1JfU0VMRi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDRU5EQU5UX09SX1NFTEYgPSA1OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRk9MTE9XSU5HX1NJQkxJTkcuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9MTE9XSU5HX1NJQkxJTkcgPSA2OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRk9MTE9XSU5HLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lORyA9IDc7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOQU1FU1BBQ0UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFNRVNQQUNFID0gODsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFUX1NZTS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVF9TWU0gPSA5OwotCi0JcHJpdmF0ZSBpbnQgX2F4aXM7Ci0KLQkvLyBYWFg6IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoZSBpbnQgYXhpcy4uLiBhbmQgbWFrZSBvbmx5IHRoaXMgdGhlIGF4aXMKLQlwcml2YXRlIEZvcndhcmRBeGlzIF9pdGVyYXRvcjsKLQotCS8vIFhYWDogbmVlZHMgdG8gYmUgZml4ZWQKLQlwcml2YXRlIHZvaWQgdXBkYXRlX2l0ZXJhdG9yKCkgewotCQlzd2l0Y2ggKF9heGlzKSB7Ci0JCWNhc2UgTk9ORToKLQkJCWlmIChub2RlX3Rlc3QoKSBpbnN0YW5jZW9mIEF0dHJpYnV0ZVRlc3QpCi0JCQkJX2l0ZXJhdG9yID0gbmV3IEF0dHJpYnV0ZUF4aXMoKTsKLQkJCWVsc2UKLQkJCQlfaXRlcmF0b3IgPSBuZXcgQ2hpbGRBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIENISUxEOgotCQkJX2l0ZXJhdG9yID0gbmV3IENoaWxkQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBERVNDRU5EQU5UOgotCQkJX2l0ZXJhdG9yID0gbmV3IERlc2NlbmRhbnRBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZPTExPV0lOR19TSUJMSU5HOgotCQkJX2l0ZXJhdG9yID0gbmV3IEZvbGxvd2luZ1NpYmxpbmdBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZPTExPV0lORzoKLQkJCV9pdGVyYXRvciA9IG5ldyBGb2xsb3dpbmdBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEFUX1NZTToKLQkJY2FzZSBBVFRSSUJVVEU6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgQXR0cmlidXRlQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTRUxGOgotCQkJX2l0ZXJhdG9yID0gbmV3IFNlbGZBeGlzKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIERFU0NFTkRBTlRfT1JfU0VMRjoKLQkJCV9pdGVyYXRvciA9IG5ldyBEZXNjZW5kYW50T3JTZWxmQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFzc2VydCBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZvcndhcmRTdGVwLgotCSAqIAotCSAqIEBwYXJhbSBheGlzCi0JICogICAgICAgICAgICBBeGlzIG51bWJlci4KLQkgKiBAcGFyYW0gbm9kZV90ZXN0Ci0JICogICAgICAgICAgICBOb2RlIHRlc3QuCi0JICovCi0JcHVibGljIEZvcndhcmRTdGVwKGludCBheGlzLCBOb2RlVGVzdCBub2RlX3Rlc3QpIHsKLQkJc3VwZXIobm9kZV90ZXN0KTsKLQotCQlfYXhpcyA9IGF4aXM7Ci0KLQkJdXBkYXRlX2l0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQXhpcyBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCBheGlzKCkgewotCQlyZXR1cm4gX2F4aXM7Ci0JfQotCi0JLyoqCi0JICogU2V0IEF4aXMgdG8gY3VycmVudC4KLQkgKiAKLQkgKiBAcGFyYW0gYXhpcwotCSAqICAgICAgICAgICAgQXhpcyB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2F4aXMoaW50IGF4aXMpIHsKLQkJX2F4aXMgPSBheGlzOwotCQl1cGRhdGVfaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBGb3J3YXJkQXhpcyBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF9pdGVyYXRvcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9GdW5jdGlvbkNhbGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Z1bmN0aW9uQ2FsbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI1NzI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Z1bmN0aW9uQ2FsbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIEZ1bmN0aW9uIENhbGwgc3VwcG9ydC4KLSAqLwotcHVibGljIGNsYXNzIEZ1bmN0aW9uQ2FsbCBleHRlbmRzIFByaW1hcnlFeHByIHsKLQlwcml2YXRlIFFOYW1lIF9uYW1lOwotCXByaXZhdGUgQ29sbGVjdGlvbiBfYXJnczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGdW5jdGlvbkNhbGwuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBDb2xsZWN0aW9uIG9mIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgRnVuY3Rpb25DYWxsKFFOYW1lIG5hbWUsIENvbGxlY3Rpb24gYXJncykgewotCQlfbmFtZSA9IG5hbWU7Ci0JCV9hcmdzID0gYXJnczsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfYXJncy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEFyaXR5IGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBBcml0eSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCBhcml0eSgpIHsKLQkJcmV0dXJuIF9hcmdzLnNpemUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JRGl2RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSURpdkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwZmRhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JRGl2RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBJbnRlZ2VyIGRpdmlzaW9uLgotICovCi1wdWJsaWMgY2xhc3MgSURpdkV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSURpdkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGxlZnQgdmFsdWUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIHJpZ2h0IHZhbHVlLgotCSAqLwotCXB1YmxpYyBJRGl2RXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JZkV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0lmRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmY2Yzc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0lmRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIElGIGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgY2xhc3MgSWZFeHByIGV4dGVuZHMgRXhwciB7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uIF9leHByczsKLQlwcml2YXRlIEV4cHIgX3RoZW47Ci0JcHJpdmF0ZSBFeHByIF9lbHNlOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIElmRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwcwotCSAqICAgICAgICAgICAgQ29uZGl0aW9uIGV4cHJlc3Npb25zLgotCSAqIEBwYXJhbSB0Ci0JICogICAgICAgICAgICBJZiB0cnVlIGV4cHJlc3Npb25zLgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBJZiBmYWxzZS9lbHNlIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBJZkV4cHIoQ29sbGVjdGlvbiBleHBzLCBFeHByIHQsIEV4cHIgZSkgewotCQlfZXhwcnMgPSBleHBzOwotCQlfdGhlbiA9IHQ7Ci0JCV9lbHNlID0gZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF9leHBycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIHRoZW5fY2xhdXNlKCkgewotCQlyZXR1cm4gX3RoZW47Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEV4cHIgZWxzZV9jbGF1c2UoKSB7Ci0JCXJldHVybiBfZWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnN0T2ZFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnN0T2ZFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1N2NhYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW5zdE9mRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBUaGUgYm9vbGVhbiBvcGVyYXRvciAnaW5zdGFuY2Ugb2YnIHRha2VzIHRoZSB2YWx1ZSBvZiBpdHMgZmlyc3Qgb3BlcmFuZCBhbmQKLSAqIG1hdGNoZXMgaXRzIHR5cGUgdG8gdGhlIFNlcXVlbmNlVHlwZSBpbiBpdHMgc2Vjb25kIG9wZXJhbmQsIGFjY29yZGluZyB0byB0aGUKLSAqIHJ1bGVzIGZvciBTZXF1ZW5jZVR5cGUgbWF0Y2hpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnN0T2ZFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEluc3RPZkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0IHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIFNlcXVlbmNlVHlwZSB0byBjaGVjayBsIGFnYWluc3QuCi0JICovCi0JcHVibGljIEluc3RPZkV4cHIoRXhwciBsLCBTZXF1ZW5jZVR5cGUgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlZ2VyTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW50ZWdlckxpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRjYzFjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlZ2VyTGl0ZXJhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci0KLS8qKgotICogVGhlIHZhbHVlIG9mIGEgbnVtZXJpYyBsaXRlcmFsIGNvbnRhaW5pbmcgbm8gIi4iIGFuYWQgbm8gZSBvciBFIGNoYXJhY3RlciBpcwotICogYW4gYXRvbWljIHZhbHVlIG9mIHR5cGUgeHM6aW50ZWdlcgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnRlZ2VyTGl0ZXJhbCBleHRlbmRzIE51bWVyaWNMaXRlcmFsIHsKLQlwcml2YXRlIFhTSW50ZWdlciBfdmFsdWU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSW50ZWdlckxpdGVyYWwKLQkgKiAKLQkgKiBAcGFyYW0gaQotCSAqICAgICAgICAgICAgaW50ZWdlciB2YWx1ZQotCSAqLwotCXB1YmxpYyBJbnRlZ2VyTGl0ZXJhbChCaWdJbnRlZ2VyIGkpIHsKLQkJX3ZhbHVlID0gbmV3IFhTSW50ZWdlcihpKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHhzOmludGVnZXIgdmFsdWUKLQkgKi8KLQlwdWJsaWMgWFNJbnRlZ2VyIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ludGVyc2VjdEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ludGVyc2VjdEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxZWY2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlcnNlY3RFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFRoZSBpbnRlcnNlY3Qgb3BlcmF0b3IgdGFrZXMgdHdvIG5vZGUgc2VxdWVuY2VzIGFzIG9wZXJhbmRzIGFuZCByZXR1cm5zIGEKLSAqIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIHRoZSBub2RlcyB0aGF0IG9jY3VyIGluIGJvdGggb3BlcmFuZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnRlcnNlY3RFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSW50ZXJzZWN0RXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBJbnRlcnNlY3RFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0l0ZW1UeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JdGVtVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzMwNGUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0l0ZW1UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgSXRlbSBub2RlIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBJdGVtVHlwZSBleHRlbmRzIFhQYXRoTm9kZSB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBJVEVNLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElURU0gPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUU5BTUUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUU5BTUUgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgS0lORFRFU1QuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORFRFU1QgPSAyOwotCXByaXZhdGUgaW50IF90eXBlOwotCi0JcHJpdmF0ZSBRTmFtZSBfcW5hbWU7Ci0JcHJpdmF0ZSBLaW5kVGVzdCBfa3Rlc3Q7Ci0KLQkvLyBYWFg6IHBvbHltb3JwaGlzbQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBJdGVtVHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZS4KLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIE9iamVjdCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgSXRlbVR5cGUoaW50IHR5cGUsIE9iamVjdCB2YWx1ZSkgewotCQlfcW5hbWUgPSBudWxsOwotCQlfa3Rlc3QgPSBudWxsOwotCi0JCV90eXBlID0gdHlwZTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBRTkFNRToKLQkJCV9xbmFtZSA9IChRTmFtZSkgdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBLSU5EVEVTVDoKLQkJCV9rdGVzdCA9IChLaW5kVGVzdCkgdmFsdWU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFR5cGUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFR5cGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIHFuYW1lKCkgewotCQlyZXR1cm4gX3FuYW1lOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgS2luZFRlc3QgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEtpbmRUZXN0IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgS2luZFRlc3Qga2luZF90ZXN0KCkgewotCQlyZXR1cm4gX2t0ZXN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0tpbmRUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9LaW5kVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDBjNjIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0tpbmRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgS2luZFRlc3Qgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgS2luZFRlc3QgZXh0ZW5kcyBOb2RlVGVzdCB7Ci0JCi0JYWJzdHJhY3QgcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpOwotCQotCWFic3RyYWN0IHB1YmxpYyBRTmFtZSBuYW1lKCk7Ci0JCi0JYWJzdHJhY3QgcHVibGljIGJvb2xlYW4gaXNXaWxkKCk7Ci0JCi0JYWJzdHJhY3QgcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpOwotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjNhYjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0xpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogTGl0ZXJhbCBpcyBlaXRoZXIgYSBOdW1lcmljTGl0ZXJhbCBvciBhIFN0cmluZ0xpdGVyYWwKLSAqIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGl0ZXJhbCBleHRlbmRzIFByaW1hcnlFeHByIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L01pbnVzRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTWludXNFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYzU2ZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTWludXNFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBNaW51cyBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIE1pbnVzRXhwciBleHRlbmRzIFVuRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE1pbnVzRXhwcgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBNaW51c0V4cHIoRXhwciBhcmcpIHsKLQkJc3VwZXIoYXJnKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Nb2RFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Nb2RFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwN2ZkZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTW9kRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTW9kdWxhciBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBNb2RFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE1vZEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgTW9kRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9NdWxFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9NdWxFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMjA0ZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTXVsRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTXVsdGlwbHkgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgTXVsRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNdWxFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIE11bEV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTmFtZVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L05hbWVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNWFjNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTmFtZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTmFtZSB0ZXN0IG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE5hbWVUZXN0IGV4dGVuZHMgTm9kZVRlc3QgewotCXByaXZhdGUgUU5hbWUgX25hbWU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgTmFtZVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lIHRvIHRlc3QuCi0JICovCi0JcHVibGljIE5hbWVUZXN0KFFOYW1lIG5hbWUpIHsKLQkJX25hbWUgPSBuYW1lOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsZiBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCXJldHVybiBfbmFtZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Ob2RlVGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTm9kZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4NjhhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Ob2RlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTm9kZSB0ZXN0IG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE5vZGVUZXN0IGV4dGVuZHMgWFBhdGhOb2RlIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L051bWVyaWNMaXRlcmFsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9OdW1lcmljTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTc2NTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L051bWVyaWNMaXRlcmFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIE51bWVyaWNMaXRlcmFsIGlzIGEgdmFsdWUgb2YgdHlwcGUgeHM6aW50ZWdlciwgeHM6ZGVjaW1hbCBvciB4czpkb3VibGUKLSAqIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTnVtZXJpY0xpdGVyYWwgZXh0ZW5kcyBMaXRlcmFsIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L09yRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvT3JFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZTljMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvT3JFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBPciBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBPckV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3JFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBsZWZ0IGV4cHJlc3Npb24uCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIHJpZ2h0IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIE9yRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsZiBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QSVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmFmMWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbiBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgUElUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgU3RyaW5nIF9hcmc7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUElUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGluc3RydWN0aW9uIGFyZ3VtZW50LgotCSAqLwotCXB1YmxpYyBQSVRlc3QoU3RyaW5nIGFyZykgewotCQlfYXJnID0gYXJnOwotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIFBJVGVzdC4KLQkgKi8KLQlwdWJsaWMgUElUZXN0KCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFN0cmluZyBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgU3RyaW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGFyZygpIHsKLQkJcmV0dXJuIF9hcmc7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQlyZXR1cm4gUElUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGFyRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGFyRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODgwYWMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BhckV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgcGFyZXRoZXNpemVkIGV4cHJlc3Npb25zIHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJFeHByIGV4dGVuZHMgUHJpbWFyeUV4cHIgewotCXByaXZhdGUgQ29sbGVjdGlvbiBfZXhwcnM7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwcnMKLQkgKiAgICAgICAgICAgIEV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBQYXJFeHByKENvbGxlY3Rpb24gZXhwcnMpIHsKLQkJX2V4cHJzID0gZXhwcnM7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfZXhwcnMuaXRlcmF0b3IoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QaXBlRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGlwZUV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2YzFjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QaXBlRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUGlwZWQgZXhwcmVzc2lvbnMgc3VwcG9ydC4KLSAqLwotcHVibGljIGNsYXNzIFBpcGVFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBpcGVFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBMZWZ0IGV4cHJlc3Npb24uCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIFJpZ2h0IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFBpcGVFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BsdXNFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QbHVzRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTdlYWU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BsdXNFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBQbHVzIGV4cHJlc3Npb24gc3VwcG9ydC4KLSAqLwotcHVibGljIGNsYXNzIFBsdXNFeHByIGV4dGVuZHMgVW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGx1c0V4cHIuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgQXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBQbHVzRXhwcihFeHByIGFyZykgewotCQlzdXBlcihhcmcpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ByaW1hcnlFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QcmltYXJ5RXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTFiZGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ByaW1hcnlFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIEJhc2ljIHByaW1pdGl2ZSBsYW5ndWFnZS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFByaW1hcnlFeHByIGV4dGVuZHMgWFBhdGhOb2RlIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1F1YW50aWZpZWRFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9RdWFudGlmaWVkRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTgyNTVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1F1YW50aWZpZWRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vLyBtaXRlIHdhbm5hIGRvIHR3byBzZXBhcmF0ZSBjbGFzc2VzIGF0IHRoZSBlbmQKLS8qKgotICogU3VwcG9ydCBmb3IgUXVhbnRpZmllZCBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIFF1YW50aWZpZWRFeHByIGV4dGVuZHMgRXhwciB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBTT01FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPTUUgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQUxMLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFMTCA9IDE7Ci0KLQlwcml2YXRlIENvbGxlY3Rpb24gX3Zhcl9leHByX3BhaXJzOwotCXByaXZhdGUgRXhwciBfcmV0dXJuOwotCXByaXZhdGUgaW50IF90eXBlOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFF1YW50aWZpZWRFeHByLgotCSAqIAotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBUeXBlICgwIGZvciBTT01FLCAxIGZvciBBTEwpLgotCSAqIEBwYXJhbSB2YXJleHAKLQkgKiAgICAgICAgICAgIEV4cHJlc3Npb25zLgotCSAqIEBwYXJhbSByZXQKLQkgKiAgICAgICAgICAgIFJldHVybmVkIGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFF1YW50aWZpZWRFeHByKGludCB0eXBlLCBDb2xsZWN0aW9uIHZhcmV4cCwgRXhwciByZXQpIHsKLQkJX3R5cGUgPSB0eXBlOwotCQlfdmFyX2V4cHJfcGFpcnMgPSB2YXJleHA7Ci0JCV9yZXR1cm4gPSByZXQ7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSW50ZWdlciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSW50IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgaW50IHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX3Zhcl9leHByX3BhaXJzLml0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEV4cHIgZXhwcigpIHsKLQkJcmV0dXJuIF9yZXR1cm47Ci0JfQotCi0JLyoqCi0JICogU2V0IG5leHQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgRXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfZXhwcihFeHByIGUpIHsKLQkJX3JldHVybiA9IGU7Ci0JfQotCi0JLy8gdXNlZCBmb3Igbm9ybWFsaXphdGlvbi4uLiBiYXNpY2FsbHkganVzdCBrZWVwIGEgInNpbXBsZSBmb3IiLi4uIG5vCi0JLy8gcGFpcnMuLi4gY29sbGVjdGlvbiB3aWxsIGFsd2F5cyBoYXZlIDEgZWxlbWVudAotCS8qKgotCSAqIE5vcm1hbGl6YXRpb24gb2YgZXhwcmVzc2lvbiBwYWlycy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0cnVuY2F0ZV9wYWlycygpIHsKLQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gX3Zhcl9leHByX3BhaXJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaS5uZXh0KCk7Ci0JCQlpZiAoIWZpcnN0KQotCQkJCWkucmVtb3ZlKCk7Ci0KLQkJCWZpcnN0ID0gZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBDb2xsZWN0aW9uIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIEV4cHJlc3Npb24gcGFpcnMuCi0JICovCi0JcHVibGljIENvbGxlY3Rpb24gdmVfcGFpcnMoKSB7Ci0JCXJldHVybiBfdmFyX2V4cHJfcGFpcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmFuZ2VFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9SYW5nZUV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg5NmJjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9SYW5nZUV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgUmFuZ2UgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSYW5nZUV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUmFuZ2VFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBsZWZ0IGV4cHJlc3Npb24uCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIHJpZ2h0IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFJhbmdlRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9SZXZlcnNlU3RlcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmV2ZXJzZVN0ZXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNjNjhlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9SZXZlcnNlU3RlcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUmV2ZXJzZSBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXZlcnNlU3RlcCBleHRlbmRzIFN0ZXAgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUEFSRU5ULgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUkVOVCA9IDA7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBTkNFU1RPUi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTkNFU1RPUiA9IDE7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkdfU0lCTElORy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVDRURJTkdfU0lCTElORyA9IDI7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkcuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFOQ0VTVE9SX09SX1NFTEYuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1JfT1JfU0VMRiA9IDQ7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBET1RET1QuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9URE9UID0gNTsKLQotCXByaXZhdGUgaW50IF9heGlzOwotCXByaXZhdGUgUmV2ZXJzZUF4aXMgX2l0ZXJhdG9yOwotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZV9pdGVyYXRvcigpIHsKLQkJc3dpdGNoIChfYXhpcykgewotCQljYXNlIFBBUkVOVDoKLQkJCV9pdGVyYXRvciA9IG5ldyBQYXJlbnRBeGlzKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBTkNFU1RPUjoKLQkJCV9pdGVyYXRvciA9IG5ldyBBbmNlc3RvckF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFJFQ0VESU5HX1NJQkxJTkc6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgUHJlY2VkaW5nU2libGluZ0F4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFJFQ0VESU5HOgotCQkJX2l0ZXJhdG9yID0gbmV3IFByZWNlZGluZ0F4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQU5DRVNUT1JfT1JfU0VMRjoKLQkJCV9pdGVyYXRvciA9IG5ldyBBbmNlc3Rvck9yU2VsZkF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRE9URE9UOgotCQkJX2l0ZXJhdG9yID0gbnVsbDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUmV2ZXJzZVN0ZXAuCi0JICogCi0JICogQHBhcmFtIGF4aXMKLQkgKiAgICAgICAgICAgIEF4aXMgbnVtYmVyLgotCSAqIEBwYXJhbSBub2RlX3Rlc3QKLQkgKiAgICAgICAgICAgIE5vZGUgdGVzdC4KLQkgKi8KLQlwdWJsaWMgUmV2ZXJzZVN0ZXAoaW50IGF4aXMsIE5vZGVUZXN0IG5vZGVfdGVzdCkgewotCQlzdXBlcihub2RlX3Rlc3QpOwotCi0JCV9heGlzID0gYXhpczsKLQkJdXBkYXRlX2l0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQXhpcyBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCBheGlzKCkgewotCQlyZXR1cm4gX2F4aXM7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmV2ZXJzZUF4aXMgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfaXRlcmF0b3I7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2NoZW1hQXR0clRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUF0dHJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ODQ3NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2NoZW1hQXR0clRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgU2NoZW1hIEF0dHJpYnV0ZSB0ZXN0LgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hQXR0clRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0JcHJpdmF0ZSBRTmFtZSBfYXJnOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNjaGVtYUF0dHJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFFOYW1lIGFyZ3VtZW50LgotCSAqLwotCXB1YmxpYyBTY2hlbWFBdHRyVGVzdChRTmFtZSBhcmcpIHsKLQkJX2FyZyA9IGFyZzsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBhcmcoKSB7Ci0JCXJldHVybiBfYXJnOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5hbWUoKSB7Ci0JCXJldHVybiBfYXJnOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2NoZW1hRWxlbVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUVsZW1UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOWE5ZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2NoZW1hRWxlbVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgU2NoZW1hIEVsZW1lbnQgVGVzdC4KLSAqLwotcHVibGljIGNsYXNzIFNjaGVtYUVsZW1UZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgUU5hbWUgX2FyZzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTY2hlbWFFbGVtVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBRTmFtZSBhcmd1bWVudC4KLQkgKi8KLQlwdWJsaWMgU2NoZW1hRWxlbVRlc3QoUU5hbWUgYXJnKSB7Ci0JCV9hcmcgPSBhcmc7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIF9hcmc7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2VxdWVuY2VUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TZXF1ZW5jZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODczNWJiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TZXF1ZW5jZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDMxMjE5MSAtIGluc3RhbmNlIG9mIHRlc3QgZmFpbHMgd2l0aCBwYXJ0aWFsIG1hdGNoZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgU2VxdWVuY2UgdHlwZS4KLSAqLwotcHVibGljIGNsYXNzIFNlcXVlbmNlVHlwZSBleHRlbmRzIFhQYXRoTm9kZSB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBFTVBUWS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTVBUWSA9IDA7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUVVFU1RJT04uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFU1RJT04gPSAyOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU1RBUi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFSID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFBMVVMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExVUyA9IDQ7Ci0KLQlwcml2YXRlIGludCBfb2NjOwotCXByaXZhdGUgSXRlbVR5cGUgX2l0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNlcXVlbmNlVHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gb2NjCi0JICogICAgICAgICAgICBPY2N1cmVuY2UuCi0JICogQHBhcmFtIGl0Ci0JICogICAgICAgICAgICBJdGVtIHR5cGUuCi0JICovCi0JcHVibGljIFNlcXVlbmNlVHlwZShpbnQgb2NjLCBJdGVtVHlwZSBpdCkgewotCQlfb2NjID0gb2NjOwotCQlfaXQgPSBpdDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgb2NjdXJlbmNlIG9mIGl0ZW0uCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgZnJvbSBJbnQgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgb2NjdXJyZW5jZSgpIHsKLQkJcmV0dXJuIF9vY2M7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlbVR5cGUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZW1UeXBlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlbVR5cGUgaXRlbV90eXBlKCkgewotCQlyZXR1cm4gX2l0OwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGVuZ3RoVmFsaWQoaW50IGxlbmd0aCkgewotCQlzd2l0Y2ggKG9jY3VycmVuY2UoKSkgewotCQljYXNlIEVNUFRZOiByZXR1cm4gbGVuZ3RoID09IDA7Ci0JCWNhc2UgTk9ORTogcmV0dXJuIGxlbmd0aCA9PSAxOwotCQljYXNlIFFVRVNUSU9OOiByZXR1cm4gbGVuZ3RoIDw9IDE7Ci0JCWNhc2UgU1RBUjogcmV0dXJuIHRydWU7Ci0JCWNhc2UgUExVUzogcmV0dXJuIGxlbmd0aCA+PSAxOwotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2luZ2xlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2luZ2xlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjFkNWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NpbmdsZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBTaW5nbGUgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTaW5nbGVUeXBlIGV4dGVuZHMgWFBhdGhOb2RlIHsKLQotCXByaXZhdGUgUU5hbWUgX3R5cGU7Ci0JcHJpdmF0ZSBib29sZWFuIF9xbWFyazsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTaW5nbGVUeXBlLgotCSAqIAotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBRTmFtZSB0eXBlLgotCSAqIEBwYXJhbSBxbWFyawotCSAqICAgICAgICAgICAgb3B0aW9uYWwgdHlwZT8gKHRydWUvZmFsc2UpLgotCSAqLwotCXB1YmxpYyBTaW5nbGVUeXBlKFFOYW1lIHR5cGUsIGJvb2xlYW4gcW1hcmspIHsKLQkJX3R5cGUgPSB0eXBlOwotCQlfcW1hcmsgPSBxbWFyazsKLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBTaW5nbGVUeXBlLgotCSAqLwotCXB1YmxpYyBTaW5nbGVUeXBlKFFOYW1lIHR5cGUpIHsKLQkJdGhpcyh0eXBlLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IG9wdGlvbmFsIHR5cGUuCi0JICogCi0JICogQHJldHVybiBvcHRpb25hbCB0eXBlIHZhbHVlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHFtYXJrKCkgewotCQlyZXR1cm4gX3FtYXJrOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTYzZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3RlcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGVwIGV4dGVuZHMgWFBhdGhOb2RlIHsKLQotCXByaXZhdGUgTm9kZVRlc3QgX25vZGVfdGVzdDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdGVwLgotCSAqIAotCSAqIEBwYXJhbSBub2RlX3Rlc3QKLQkgKiAgICAgICAgICAgIE5vZGVzIGZvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFN0ZXAoTm9kZVRlc3Qgbm9kZV90ZXN0KSB7Ci0JCV9ub2RlX3Rlc3QgPSBub2RlX3Rlc3Q7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgTm9kZVRlc3QgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIE5vZGVUZXN0IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgTm9kZVRlc3Qgbm9kZV90ZXN0KCkgewotCQlyZXR1cm4gX25vZGVfdGVzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3RlcEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkYjA1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBTdGVwIGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RlcEV4cHIgZXh0ZW5kcyBFeHByIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0cmluZ0xpdGVyYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0cmluZ0xpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA2MzczYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdHJpbmdMaXRlcmFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogVGhlIHZhbHVlIG9mIGEgc3RyaW5nIGxpdGVyYWwgaXMgYW4gYXRvbWljIHZhbHVlIHdob3NlIHR5cGUgaXMgeHM6c3RyaW5nIGFuZAotICogd2hvc2UgdmFsdWUgaXMgdGhlIHN0cmluZyBkZW5vdGVkIGJ5IHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGRlbGltaXRpbmcKLSAqIGFwb3N0cm9waGVzIG9yIHF1b3RhdGlvbiBtYXJrcy4gSWYgdGhlIGxpdGVyYWwgaXMgZGVsaW1pdGVkIGJ5IGFwb3N0cm9waGVzLAotICogdHdvIGFkamFjZW50IGFwb3N0cm9waGVzIHdpdGhpbiB0aGUgbGl0ZXJhbCBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUKLSAqIGFwb3N0cm9waGUuIFNpbWlsYXJseSwgaWYgdGhlIGxpdGVyYWwgaXMgZGVsaW1pdGVkIGJ5IHF1b3RhdGlvbiBtYXJrcywgdHdvCi0gKiBhZGphY2VudCBxdW90YXRpb24gbWFya3Mgd2l0aGluIHRoZSBsaXRlcmFsIGFyZSBpbnRlcnByZXRlZCBhcyBvbmUgcXVvdGF0aW9uCi0gKiBtYXJrCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFN0cmluZ0xpdGVyYWwgZXh0ZW5kcyBMaXRlcmFsIHsKLQlwcml2YXRlIFhTU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdHJpbmdMaXRlcmFsCi0JICogCi0JICogQHBhcmFtIHZhbHVlCi0JICogICAgICAgICAgICBzdHJpbmcgdmFsdWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nTGl0ZXJhbChTdHJpbmcgdmFsdWUpIHsKLQkJX3ZhbHVlID0gbmV3IFhTU3RyaW5nKHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHN0cmluZyB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nKCkgewotCQlyZXR1cm4gX3ZhbHVlLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB4czpzdHJpbmcgdmFsdWUKLQkgKi8KLQlwdWJsaWMgWFNTdHJpbmcgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3ViRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3ViRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDVhNTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N1YkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgU3VidHJhY3Rpb24gb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgU3ViRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdWJFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBsZWZ0IGlucHV0LgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICByaWdodCBpbnB1dC4KLQkgKi8KLQlwdWJsaWMgU3ViRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UZXh0VGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FlMWY4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlRleHRUeXBlOwotCi0vKioKLSAqIENsYXNzIHRvIG1hdGNoIGFueSB0ZXh0IG5vZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdCBleHRlbmRzIEtpbmRUZXN0IHsKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIFRleHRUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVHJlYXRBc0V4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1RyZWF0QXNFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MDgzYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVHJlYXRBc0V4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgVHJlYXQgb3BlcmF0aW9uLiBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQsCi0gKiByYXRoZXIgaXQgZW5zdWVzIHRoZSBvcGVyYW5kIGhhcyBhIGNvcnJlY3QgdHlwZSBhdCBldmFsdWF0aW9uIHRpbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmVhdEFzRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUcmVhdEFzRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgU2VxdWVuY2VUeXBlIHRvIHRyZWF0IGFzLgotCSAqLwotCXB1YmxpYyBUcmVhdEFzRXhwcihFeHByIGwsIFNlcXVlbmNlVHlwZSByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1VuRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5FeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2Q4ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5FeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFVuYXJ5IGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVW5FeHByIGV4dGVuZHMgRXhwciB7Ci0JcHJpdmF0ZSBFeHByIF9hcmc7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVW5FeHByLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFVuRXhwcihFeHByIGFyZykgewotCQlfYXJnID0gYXJnOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGFyZygpIHsKLQkJcmV0dXJuIF9hcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5pb25FeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbmlvbkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFkYzg5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbmlvbkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogVGhlIHVuaW9uIGNsYXNzIHRha2VzIHR3byBub2RlIHNlcXVlbmNlcyBhcyBvcGVyYW5kcyBhbmQgcmV0dXJuIGEgc2VxdWVuY2UKLSAqIGNvbnRhaW5pbmcgYWxsIHRoZSBub2RlcyB0aGF0IG9jY3VyIGluIGVpdGhlciBvZiB0aGUgb3BlcmFuZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmlvbkV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVbmlvbkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICB1bnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgVW5pb25FeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ZhckV4cHJQYWlyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9WYXJFeHByUGFpci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWViMzMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ZhckV4cHJQYWlyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIFZhcmlhYmxlIEV4cHJlc3Npb24gUGFpcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYXJFeHByUGFpciB7Ci0JcHJpdmF0ZSBRTmFtZSBfdmFyOwotCXByaXZhdGUgRXhwciBfZXhwcjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBWYXJFeHByUGFpci4KLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICBRTmFtZSB2YXJpYWJsZS4KLQkgKiBAcGFyYW0gZXhwcgotCSAqICAgICAgICAgICAgRXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgVmFyRXhwclBhaXIoUU5hbWUgdmFyLCBFeHByIGV4cHIpIHsKLQkJX3ZhciA9IHZhcjsKLQkJX2V4cHIgPSBleHByOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIHZhcm5hbWUoKSB7Ci0JCXJldHVybiBfdmFyOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfZXhwcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9WYXJSZWYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ZhclJlZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQyMmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ZhclJlZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFZhcmlhYmxlIFJlZmVyZW5jZS4gQSBRTmFtZSBwcmVjZWRlZCBieSBhICQtc2lnbiBpcyBhIHZhcmlhYmxlCi0gKiByZWZlcmVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYXJSZWYgZXh0ZW5kcyBQcmltYXJ5RXhwciB7Ci0JcHJpdmF0ZSBRTmFtZSBfdmFybmFtZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBWYXJSZWYuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqLwotCXB1YmxpYyBWYXJSZWYoUU5hbWUgbmFtZSkgewotCQlfdmFybmFtZSA9IG5hbWU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIF92YXJuYW1lOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1hQYXRoRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMjlkMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBQYXRoIGV4cHJlc3Npb24gd2Fsa3MgdHJpZXMgdG8gd2FsayB0aGUgcGF0aCBzcGVjaWZpZWQgaW4gaXRzIGFyZ3VtZW50Ci0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aEV4cHIgZXh0ZW5kcyBFeHByIHsKLQlwcml2YXRlIGludCBfc2xhc2hlczsKLQlwcml2YXRlIFN0ZXBFeHByIF9leHByOwotCi0JLy8gc2luZ2xlIGxpbmtlZCBsaXN0Ci0JcHJpdmF0ZSBYUGF0aEV4cHIgX25leHQ7Ci0KLQkvKioKLQkgKiBAcGFyYW0gc2xhc2hlcwotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9zbGFzaGVzCi0JICogQHBhcmFtIGV4cHIKLQkgKiAgICAgICAgICAgIGlzIGNvcGllZCB0byBfZXhwciBfbmV4dCBpcyBtYWRlIG51bGwgYXMgYSByZXN1bHQuCi0JICovCi0JcHVibGljIFhQYXRoRXhwcihpbnQgc2xhc2hlcywgU3RlcEV4cHIgZXhwcikgewotCQlfc2xhc2hlcyA9IHNsYXNoZXM7Ci0JCV9leHByID0gZXhwcjsKLQkJX25leHQgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEFkZCB0byB0YWlsIG9mIHBhdGgKLQkgKi8KLQkvLyBYWFg6IGtlZXAgcmVmIHRvIGxhc3QKLQlwdWJsaWMgdm9pZCBhZGRfdGFpbChpbnQgc2xhc2hlcywgU3RlcEV4cHIgZXhwcikgewotCQlYUGF0aEV4cHIgbGFzdCA9IHRoaXM7Ci0JCVhQYXRoRXhwciBuZXh0ID0gX25leHQ7Ci0KLQkJd2hpbGUgKG5leHQgIT0gbnVsbCkgewotCQkJbGFzdCA9IG5leHQ7Ci0JCQluZXh0ID0gbGFzdC5uZXh0KCk7Ci0JCX0KLQotCQlYUGF0aEV4cHIgaXRlbSA9IG5ldyBYUGF0aEV4cHIoc2xhc2hlcywgZXhwcik7Ci0JCWxhc3Quc2V0X25leHQoaXRlbSk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY291bnQKLQkgKiAgICAgICAgICAgIGlzIGNvcGllZCB0byBfc2xhc2hlcwotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9zbGFzaGVzKGludCBjb3VudCkgewotCQlfc2xhc2hlcyA9IGNvdW50OwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gWFBhdGggZXhwcmVzc2lvbiBfbmV4dAotCSAqLwotCXB1YmxpYyBYUGF0aEV4cHIgbmV4dCgpIHsKLQkJcmV0dXJuIF9uZXh0OwotCX0KLQotCS8qKgotCSAqIGFuIFhQYXRoIGV4cHJlc3Npb24sIG4gaXMgY29waWVkIHRvIF9uZXh0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0X25leHQoWFBhdGhFeHByIG4pIHsKLQkJX25leHQgPSBuOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gU3RlcCBleHByZXNzaW9uIF9leHByCi0JICovCi0JcHVibGljIFN0ZXBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfZXhwcjsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGludCBfc2xhc2hlcwotCSAqLwotCXB1YmxpYyBpbnQgc2xhc2hlcygpIHsKLQkJcmV0dXJuIF9zbGFzaGVzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aE5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMWFmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGEgWFBhdGhOb2RlIG9iamVjdC4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhQYXRoTm9kZSB7Ci0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICovCi0JcHVibGljIGFic3RyYWN0IE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxM2M2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDsKLQotLyoqCi0gKiBWaXNpdG9yIGNsYXNzIGZvciBYUGF0aCBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGludGVyZmFjZSBYUGF0aFZpc2l0b3IgewotCS8qKgotCSAqIFZpc2l0IFhQYXRoLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGggeHApOwotCi0JLyoqCi0JICogVmlzaXQgRm9yRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvckV4cHIgZmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IFF1YW50aWZpZWRFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUXVhbnRpZmllZEV4cHIgcWV4KTsKLQotCS8qKgotCSAqIFZpc2l0IElmRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElmRXhwciBpZmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IE9yRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE9yRXhwciBvcmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IEFuZEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbmRFeHByIGFuZGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IENtcEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbXBFeHByIGNtcGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IFJhbmdlRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJhbmdlRXhwciByZXgpOwotCi0JLyoqCi0JICogVmlzaXQgQWRkRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFkZEV4cHIgYWRkZXgpOwotCi0JLyoqCi0JICogVmlzaXQgU3ViRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFN1YkV4cHIgc3ViZXgpOwotCi0JLyoqCi0JICogVmlzaXQgTXVsRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE11bEV4cHIgbXVsZXgpOwotCi0JLyoqCi0JICogVmlzaXQgRGl2RXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERpdkV4cHIgbXVsZXgpOwotCi0JLyoqCi0JICogVmlzaXQgSURpdkV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJRGl2RXhwciBtdWxleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBNb2RFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTW9kRXhwciBtdWxleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBVbmlvbkV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChVbmlvbkV4cHIgdW5leCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBQaXBlRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBpcGVFeHByIHBpcGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IEludGVyc2VjdEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlcnNlY3RFeHByIGlleHByKTsKLQotCS8qKgotCSAqIFZpc2l0IEV4Y2VwdEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChFeGNlcHRFeHByIGVleHByKTsKLQotCS8qKgotCSAqIFZpc2l0IEluc3RPZkV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnN0T2ZFeHByIGlvZXhwKTsKLQotCS8qKgotCSAqIFZpc2l0IFRyZWF0QXNFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVHJlYXRBc0V4cHIgdGFleHApOwotCi0JLyoqCi0JICogVmlzaXQgQ2FzdGFibGVFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdGFibGVFeHByIGNleHApOwotCi0JLyoqCi0JICogVmlzaXQgQ2FzdEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0RXhwciBjZXhwKTsKLQotCS8qKgotCSAqIFZpc2l0IE1pbnVzRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1pbnVzRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFBsdXNFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGx1c0V4cHIgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBYUGF0aEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBGb3J3YXJkU3RlcC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvcndhcmRTdGVwIGUpOwotCi0JLyoqCi0JICogVmlzaXQgUmV2ZXJzZVN0ZXAuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSZXZlcnNlU3RlcCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IE5hbWVUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTmFtZVRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBWYXJSZWYuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChWYXJSZWYgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTdHJpbmdMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3RyaW5nTGl0ZXJhbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEludGVnZXJMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZWdlckxpdGVyYWwgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBEb3VibGVMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG91YmxlTGl0ZXJhbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IERlY2ltYWxMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGVjaW1hbExpdGVyYWwgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBQYXJFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGFyRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IENudHhJdGVtRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENudHhJdGVtRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEZ1bmN0aW9uQ2FsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZ1bmN0aW9uQ2FsbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFNpbmdsZVR5cGUuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTaW5nbGVUeXBlIGUpOwotCi0JLyoqCi0JICogVmlzaXQgU2VxdWVuY2VUeXBlLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpOwotCi0JLyoqCi0JICogVmlzaXQgSXRlbVR5cGUuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJdGVtVHlwZSBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEFueUtpbmRUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW55S2luZFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBEb2N1bWVudFRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb2N1bWVudFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBUZXh0VGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRleHRUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgQ29tbWVudFRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDb21tZW50VGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFBJVGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBJVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEF0dHJpYnV0ZVRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBdHRyaWJ1dGVUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgU2NoZW1hQXR0clRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFBdHRyVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEVsZW1lbnRUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRWxlbWVudFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTY2hlbUVsZW1UZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hRWxlbVRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBBeGlzU3RlcC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF4aXNTdGVwIGUpOwotCi0JLyoqCi0JICogVmlzaXQgRmlsdGVyRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZpbHRlckV4cHIgZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9BYnN0cmFjdENvbGxhdGlvbkVxdWFsRnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwNmJmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyOTY4ODIgLSBmaXhlZCBmdW5jdGlvbiB0aGF0IHdvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbGxhdGlvbkVxdWFsRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwdWJsaWMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlzdXBlcihuYW1lLCBhcml0eSk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBBYnN0cmFjdENvbGxhdGlvbkVxdWFsRnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IG1pbl9hcml0eSwKLQkJCWludCBtYXhfYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgbWluX2FyaXR5LCBtYXhfYXJpdHkpOwotCX0KLQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGhhc1ZhbHVlKEFueVR5cGUgaXRlbWEsIEFueVR5cGUgaXRlbWIsIER5bmFtaWNDb250ZXh0IGNvbnRleHQsIFN0cmluZyBjb2xsYXRpb25VUkkpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1N0cmluZyBpdGVtU3RyID0gbmV3IFhTU3RyaW5nKGl0ZW1hLnN0cmluZ192YWx1ZSgpKTsKLQkJaWYgKGlzQm9vbGVhbihpdGVtYSwgaXRlbWIpKSB7Ci0JCQlYU0Jvb2xlYW4gYm9vbGF0ID0gKFhTQm9vbGVhbikgaXRlbWE7Ci0JCQlpZiAoYm9vbGF0LmVxKGl0ZW1iLCBjb250ZXh0KSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJaWYgKGlzTnVtZXJpYyhpdGVtYSwgaXRlbWIpKSB7Ci0JCQlOdW1lcmljVHlwZSBudW1lcmljYXQgPSAoTnVtZXJpY1R5cGUpIGl0ZW1hOwotCQkJaWYgKG51bWVyaWNhdC5lcShpdGVtYiwgY29udGV4dCkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCWlmIChpc0R1cmF0aW9uKGl0ZW1hLCBpdGVtYikpIHsKLQkJCVhTRHVyYXRpb24gZHVyYXQgPSAoWFNEdXJhdGlvbikgaXRlbWE7Ci0JCQlpZiAoZHVyYXQuZXEoaXRlbWIsIGNvbnRleHQpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobmVlZHNTdHJpbmdDb21wYXJpc29uKGl0ZW1hLCBpdGVtYikpIHsKLQkJCVhTU3RyaW5nIHhzdHIxID0gbmV3IFhTU3RyaW5nKGl0ZW1hLnN0cmluZ192YWx1ZSgpKTsKLQkJCWlmIChGbkNvbXBhcmUuY29tcGFyZV9zdHJpbmcoY29sbGF0aW9uVVJJLCB4c3RyMSwgaXRlbVN0ciwKLQkJCQkJY29udGV4dCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBoYXNWYWx1ZShSZXN1bHRTZXF1ZW5jZSBycywgQW55QXRvbWljVHlwZSBpdGVtLAotCQkJRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTU3RyaW5nIGl0ZW1TdHIgPSBuZXcgWFNTdHJpbmcoaXRlbS5zdHJpbmdfdmFsdWUoKSk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBbnlUeXBlIGF0ID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQlpZiAoIShhdCBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGlzQm9vbGVhbihpdGVtLCBhdCkpIHsKLQkJCQlYU0Jvb2xlYW4gYm9vbGF0ID0gKFhTQm9vbGVhbikgYXQ7Ci0JCQkJaWYgKGJvb2xhdC5lcShpdGVtLCBjb250ZXh0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChpc051bWVyaWMoaXRlbSwgYXQpKSB7Ci0JCQkJTnVtZXJpY1R5cGUgbnVtZXJpY2F0ID0gKE51bWVyaWNUeXBlKSBhdDsKLQkJCQlpZiAobnVtZXJpY2F0LmVxKGl0ZW0sIGNvbnRleHQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGlzRHVyYXRpb24oaXRlbSwgYXQpKSB7Ci0JCQkJWFNEdXJhdGlvbiBkdXJhdCA9IChYU0R1cmF0aW9uKSBhdDsKLQkJCQlpZiAoZHVyYXQuZXEoaXRlbSwgY29udGV4dCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAobmVlZHNTdHJpbmdDb21wYXJpc29uKGl0ZW0sIGF0KSkgewotCQkJCVhTU3RyaW5nIHhzdHIxID0gbmV3IFhTU3RyaW5nKGF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQlpZiAoRm5Db21wYXJlLmNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVSSSwgeHN0cjEsIGl0ZW1TdHIsCi0JCQkJCQljb250ZXh0KS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0R1cmF0aW9uKEFueUF0b21pY1R5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uICYmIGl0ZW0gaW5zdGFuY2VvZiBYU0R1cmF0aW9uOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0Jvb2xlYW4oQW55QXRvbWljVHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiAmJiBpdGVtIGluc3RhbmNlb2YgWFNCb29sZWFuOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc051bWVyaWMoQW55QXRvbWljVHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlICYmIGl0ZW0gaW5zdGFuY2VvZiBOdW1lcmljVHlwZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbmVlZHNTdHJpbmdDb21wYXJpc29uKEFueUF0b21pY1R5cGUgaXRlbSwKLQkJCUFueVR5cGUgYXQpIHsKLQkJQW55VHlwZSBhbnlJdGVtID0gKEFueVR5cGUpIGl0ZW07Ci0JCXJldHVybiBuZWVkc1N0cmluZ0NvbXBhcmlzb24oYW55SXRlbSwgYXQpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0R1cmF0aW9uKEFueVR5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uICYmIGl0ZW0gaW5zdGFuY2VvZiBYU0R1cmF0aW9uOwotCX0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNEYXRlKEFueVR5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lICYmIGl0ZW0gaW5zdGFuY2VvZiBYU0RhdGVUaW1lOwotCX0KLQkKLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0Jvb2xlYW4oQW55VHlwZSBjbXB0eXBlLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiAmJiBjbXB0eXBlIGluc3RhbmNlb2YgWFNCb29sZWFuOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc051bWVyaWMoQW55VHlwZSBpdGVtLCBBbnlUeXBlIGF0KSB7Ci0JCXJldHVybiBhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlICYmIGl0ZW0gaW5zdGFuY2VvZiBOdW1lcmljVHlwZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbmVlZHNTdHJpbmdDb21wYXJpc29uKEFueVR5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSB7Ci0JCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSB7Ci0JCQkJWFNGbG9hdCBmID0gKFhTRmxvYXQpIGF0OwotCQkJCWlmIChmLm5hbigpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCQlYU0RvdWJsZSBkID0gKFhTRG91YmxlKSBhdDsKLQkJCQlpZiAoZC5uYW4oKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9BYnN0cmFjdFJlZ0V4RnVuY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RSZWdFeEZ1bmN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYjNiYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9BYnN0cmFjdFJlZ0V4RnVuY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlZ0V4RnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgdmFsaWRmbGFncyA9ICJzbWl4IjsKLQotCXB1YmxpYyBBYnN0cmFjdFJlZ0V4RnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCXN1cGVyKG5hbWUsIGFyaXR5KTsKLQl9Ci0JCi0JcHVibGljIEFic3RyYWN0UmVnRXhGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgbWluX2FyaXR5LCBpbnQgbWF4X2FyaXR5KSB7Ci0JCXN1cGVyKG5hbWUsIG1pbl9hcml0eSwgbWF4X2FyaXR5KTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIG1hdGNoZXMoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBmbGFncywgU3RyaW5nIHNyYykgewotCQlib29sZWFuIGZuZCA9IGZhbHNlOwotCQlpZiAocGF0dGVybi5jb250YWlucygiLVsiKSkgewotCQkJcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgiLVsiLCAiJiZbXiIpOwotCQl9Ci0JCU1hdGNoZXIgbSA9IGNvbXBpbGVBbmRFeGVjdXRlKHBhdHRlcm4sIGZsYWdzLCBzcmMpOwotCQl3aGlsZSAobS5maW5kKCkpIHsKLQkJCWZuZCA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZuZDsKLQl9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBNYXRjaGVyIHJlZ2V4KFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgZmxhZ3MsIFN0cmluZyBzcmMpIHsKLQkJTWF0Y2hlciBtYXRjaGVyID0gY29tcGlsZUFuZEV4ZWN1dGUocGF0dGVybiwgZmxhZ3MsIHNyYyk7Ci0JCXJldHVybiBtYXRjaGVyOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBNYXRjaGVyIGNvbXBpbGVBbmRFeGVjdXRlKFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgZmxhZ3MsIFN0cmluZyBzcmMpIHsKLQkJaW50IGZsYWcgPSBQYXR0ZXJuLlVOSVhfTElORVM7Ci0JCWlmIChmbGFncyAhPSBudWxsKSB7Ci0JCQlpZiAoZmxhZ3MuaW5kZXhPZigibSIpID49IDApIHsKLQkJCQlmbGFnID0gZmxhZyB8IFBhdHRlcm4uTVVMVElMSU5FOwotCQkJfQotCQkJaWYgKGZsYWdzLmluZGV4T2YoInMiKSA+PSAwKSB7Ci0JCQkJZmxhZyA9IGZsYWcgfCBQYXR0ZXJuLkRPVEFMTDsKLQkJCX0KLQkJCWlmIChmbGFncy5pbmRleE9mKCJpIikgPj0gMCkgewotCQkJCWZsYWcgPSBmbGFnIHwgUGF0dGVybi5DQVNFX0lOU0VOU0lUSVZFOwotCQkJfQotCQkJCi0JCQlpZiAoZmxhZ3MuaW5kZXhPZigieCIpID49IDApIHsKLQkJCQlmbGFnID0gZmxhZyB8IFBhdHRlcm4uQ09NTUVOVFM7Ci0JCQl9Ci0JCX0KLQkJCi0JCVBhdHRlcm4gcCA9IFBhdHRlcm4uY29tcGlsZShwYXR0ZXJuLCBmbGFnKTsKLQkJcmV0dXJuIHAubWF0Y2hlcihzcmMpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9BYnN0cmFjdFVSSUZ1bmN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0VVJJRnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2OTkwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0VVJJRnVuY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIHJlbmFtZWQgdG8gY29ycmVjdCBmdW5jdGlvbiBuYW1lLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTMxOSAtIGZpeCBVVEYtOCBlc2NhcGluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVSSUZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2hhcnNldCBVVEZfOCA9IENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKTsKLQkKLQlzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbmVlZHNfZXNjYXBlKGJ5dGUgeCwgYm9vbGVhbiBlc2NhcGVfZGVsaW1pdGVycywgYm9vbGVhbiBlc2NhcGVfc3BhY2UpIHsKLQkJCi0JCS8vIFRoZXNlIGFyZSBpZGVudGlmaWVkIGFzICJ1bnJlc2VydmVkIiBieSBbUkZDIDM5ODZdOiAKLQkJaWYgKCdBJyA8PSB4ICYmIHggPD0gJ1onKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoJ2EnIDw9IHggJiYgeCA8PSAneicpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmICgnMCcgPD0geCAmJiB4IDw9ICc5JykKLQkJCXJldHVybiBmYWxzZTsKLQkJCi0JCXN3aXRjaCAoeCkgewotCQkvLyBUaGVzZSBhcmUgaWRlbnRpZmllZCBhcyAidW5yZXNlcnZlZCIgYnkgW1JGQyAzOTg2XTogCi0JCWNhc2UgJy0nOgotCQljYXNlICdfJzoKLQkJY2FzZSAnLic6Ci0JCWNhc2UgJ34nOgotCQkJcmV0dXJuIGZhbHNlOwotCQotCQkvLyBUaGVzZSBhcmUgVVJJL0lSSSBkZWxpbWl0ZXJzIAkKLQkJY2FzZSAnKCc6Ci0JCWNhc2UgJyknOgotCQljYXNlICdcJyc6Ci0JCWNhc2UgJyonOgotCQljYXNlICchJzoKLQkJY2FzZSAnIyc6Ci0JCWNhc2UgJyUnOgotCQljYXNlICc7JzoKLQkJY2FzZSAnLyc6Ci0JCWNhc2UgJz8nOgotCQljYXNlICc6JzoKLQkJY2FzZSAnQCc6Ci0JCWNhc2UgJyYnOgotCQljYXNlICc9JzoKLQkJY2FzZSAnKyc6Ci0JCWNhc2UgJyQnOgotCQljYXNlICcsJzoKLQkJY2FzZSAnWyc6Ci0JCWNhc2UgJ10nOgotCQkJcmV0dXJuIGVzY2FwZV9kZWxpbWl0ZXJzOwotCi0JCWNhc2UgJyAnOgotCQkJcmV0dXJuIGVzY2FwZV9zcGFjZTsKLQotCQkJLy8gVGhlIHJlc3Qgc2hvdWxkIGFsd2F5cyBiZSBlc2NhcGVkOiA8ID4gIiBzcGFjZSB8IF4gLSBhbmQgYWxsIHRoZSBVVEYtOCBieXRlcwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBcHBseSB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzIHRvIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGhhdmUgdGhlIFVSSSBlc2NhcGluZyBydWxlcyBhcHBsaWVkIHRvIHRoZW0uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzIHRvIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBlc2NhcGVfdXJpKENvbGxlY3Rpb24gYXJncywgYm9vbGVhbiBlc2NhcGUpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZXNjYXBlX3VyaShhcmdzLCBlc2NhcGUsIHRydWUpOwotCX0KLQotCS8qKgotCSAqIEFwcGx5IHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgdG8gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaGF2ZSB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzIGFwcGxpZWQgdG8gdGhlbS4KLQkgKiBAcGFyYW0gZXNjYXBlX3NwYWNlIFRPRE8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgdG8gdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVzY2FwZV91cmkoQ29sbGVjdGlvbiBhcmdzLCBib29sZWFuIGVzY2FwZV9kZWxpbWl0ZXJzLCBib29sZWFuIGVzY2FwZV9zcGFjZSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQkJCi0JCUFueVR5cGUgYWF0ID0gYXJnMS5maXJzdCgpOwotCQlTdHJpbmcgc3RyID0gYWF0LnN0cmluZ192YWx1ZSgpOwotCi0JCUJ5dGVCdWZmZXIgYnVmZmVyID0gVVRGXzguZW5jb2RlKHN0cik7Ci0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXIubGltaXQoKTsgaSsrKSB7Ci0JCQlieXRlIHggPSBidWZmZXIuZ2V0KGkpOwotCQotCQkJaWYgKG5lZWRzX2VzY2FwZSh4LCBlc2NhcGVfZGVsaW1pdGVycywgZXNjYXBlX3NwYWNlKSkgewotCQkJCXNiLmFwcGVuZCgiJSIpOwotCQkJCXNiLmFwcGVuZChJbnRlZ2VyLnRvSGV4U3RyaW5nKHggJiAweEZGKS50b1VwcGVyQ2FzZSgpKTsKLQkJCX0gZWxzZQotCQkJCXNiLmFwcGVuZCgoY2hhcil4KTsKLQkJfQotCQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHNiLnRvU3RyaW5nKCkpKTsKLQkKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCi0JcHVibGljIEFic3RyYWN0VVJJRnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCXN1cGVyKG5hbWUsIGFyaXR5KTsKLQl9Ci0KLQlwdWJsaWMgQWJzdHJhY3RVUklGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgbWluX2FyaXR5LCBpbnQgbWF4X2FyaXR5KSB7Ci0JCXN1cGVyKG5hbWUsIG1pbl9hcml0eSwgbWF4X2FyaXR5KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wRXEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wRXEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjMDJlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEVxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgY29tcGFyZSBmb3IgZXF1YWwgZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ21wRXEgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDbXBFcS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBhcmd1bWVudCBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gY29udGV4dCBUT0RPCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbiwgdHJ1ZS9mYWxzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wR3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wR3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJmMDc4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEd0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgY29tcGFyZSBmb3IgZ3JlYXRlciB0aGFuIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBDbXBHdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENtcEd0Ci0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgYXJndW1lbnQgb2YgYW55IHR5cGUuCi0JICogQHBhcmFtIGNvbnRleHQgVE9ETwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24sIHRydWUvZmFsc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYzJjOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBMdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGNvbXBhcmUgZm9yIGxlc3MgdGhhbiBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ21wTHQgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDbXBMdC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBhcmd1bWVudCBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gY29udGV4dCBUT0RPCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbiwgdHJ1ZS9mYWxzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ29uc3RydWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ29uc3RydWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyZmZmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NvbnN0cnVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcyNzQ3ODQgLSBpbXByb3ZlbWVudHMgdG8geHM6Ym9vbGVhbiBkYXRhIHR5cGUgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ29uc3RydWN0b3IgY2xhc3MgZm9yIGZ1bmN0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgQ3RyVHlwZSBfYXRvbWljX3R5cGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ29uc3RydWN0b3IgY2xhc3MuCi0JICogCi0JICogQHBhcmFtIGFhdAotCSAqICAgICAgICAgICAgaW5wdXQgb2YgYW55IGF0b21pYyB0eXBlLgotCSAqLwotCXB1YmxpYyBDb25zdHJ1Y3RvcihDdHJUeXBlIGFhdCkgewotCQlzdXBlcihuZXcgUU5hbWUoYWF0LnR5cGVfbmFtZSgpKSwgMSk7Ci0KLQkJX2F0b21pY190eXBlID0gYWF0OwotCX0KLQotCS8vIFhYWCBJTiBHRU5SQUwsIEkgVEhJVU5LIFdFIE5FRUQgVE8gUFVMTCBTQU5JVFkgQ0hFQ0tJTkcgT1VUU0lERSEKLQkvLyBQTFVTIEkgQU0gTk9UIEFUT01JWklORy9FVEMgRVRDIEhFUkUhISEgQkFEIENPREUKLQkvLyBCVUcgWFhYIEhBQ0sgREVBVEgKLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJLy8gc2FuaXR5IGNoZWNrcwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5zaXplKCkgPiAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkvLyBkbyBpdAotCQlyZXR1cm4gX2F0b21pY190eXBlLmNvbnN0cnVjdG9yKGFyZyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NvbnN0cnVjdG9yRkwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ29uc3RydWN0b3JGTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmEyNDk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ29uc3RydWN0b3JGTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDb25zdHJ1Y3RvciBjbGFzcyBmb3IgdGhlIGZ1bmN0aW9ucyBsaWJyYXJ5LgotICovCi1wdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JGTCBleHRlbmRzIEZ1bmN0aW9uTGlicmFyeSB7Ci0KLQlwcml2YXRlIEhhc2h0YWJsZSBfdHlwZXM7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ29uc3RydWN0b3JGTC4KLQkgKiAKLQkgKiBAcGFyYW0gbnMKLQkgKiAgICAgICAgICAgIGlucHV0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgQ29uc3RydWN0b3JGTChTdHJpbmcgbnMpIHsKLQkJc3VwZXIobnMpOwotCi0JCV90eXBlcyA9IG5ldyBIYXNodGFibGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGRzIGEgdHlwZSBpbnRvIHRoZSBmdW5jdGlvbnMgbGlicmFyeS4KLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIGlucHV0IG9mIGFueSBhdG9taWMgdHlwZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfdHlwZShDdHJUeXBlIGF0KSB7Ci0JCVFOYW1lIG5hbWUgPSBuZXcgUU5hbWUoYXQudHlwZV9uYW1lKCkpOwotCQluYW1lLnNldF9uYW1lc3BhY2UobmFtZXNwYWNlKCkpOwotCi0JCV90eXBlcy5wdXQobmFtZSwgYXQpOwotCi0JCWFkZF9mdW5jdGlvbihuZXcgQ29uc3RydWN0b3IoYXQpKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGRzIGEgdHlwZSBpbnRvIHRoZSBmdW5jdGlvbnMgbGlicmFyeSBhcyBhbiBhYnN0cmFjdCB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgaW5wdXQgb2YgYW55IGF0b21pYyB0eXBlLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF9hYnN0cmFjdF90eXBlKFN0cmluZyBsb2NhbE5hbWUsIEFueUF0b21pY1R5cGUgYXQpIHsKLQkJUU5hbWUgbmFtZSA9IG5ldyBRTmFtZShsb2NhbE5hbWUpOwotCQluYW1lLnNldF9uYW1lc3BhY2UobmFtZXNwYWNlKCkpOwotCi0JCV90eXBlcy5wdXQobmFtZSwgYXQpOwotCX0KLQkKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUuCi0JICogQHJldHVybiB0eXBlIG9mIGlucHV0IHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBBbnlBdG9taWNUeXBlIGF0b21pY190eXBlKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIChBbnlBdG9taWNUeXBlKSBfdHlwZXMuZ2V0KG5hbWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BYnMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BYnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0MTE0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyBuZWdhdGl2ZSByZXR1cm5zIC0kYXJnCi0gKiBvdGhlcndpc2UgcmV0dXJucyAkYXJnLiBJZiB0eXBlIG9mICRhcmcgaXMgb25lIG9mIHRoZSBmb3VyIG51bWVyaWMgdHlwZXMKLSAqIHhzOmZsb2F0LCB4czpkb3VibGUsIHhzOmRlY2ltYWwgb3IgeHM6aW50ZWdlciB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZQotICogc2FtZSBhcyB0aGUgdHlwZSBvZiAkYXJnLiBJZiB0aGUgdHlwZSBvZiAkYXJnIGlzIGEgdHlwZSBkZXJpdmVkIGZyb20gb25lIG9mCi0gKiB0aGUgbnVtZXJpYyB0eXBlcywgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUgYmFzZSBudW1lcmljIHR5cGUuIEZvcgotICogeHM6ZmxvYXQgYW5kIHhzOmRvdWJsZSBhcmd1bWVudHMsIGlmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSB6ZXJvICgrMCkgb3IKLSAqIG5lZ2F0aXZlIHplcm8gKC0wKSwgdGhlbiBwb3NpdGl2ZSB6ZXJvICgrMCkgaXMgcmV0dXJuZWQuIElmIHRoZSBhcmd1bWVudCBpcwotICogcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLgotICovCi1wdWJsaWMgY2xhc3MgRm5BYnMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQWJzLgotCSAqLwotCXB1YmxpYyBGbkFicygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJhYnMiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gMSBhcmd1bWVudCBvbmx5IQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJcmV0dXJuIGZuX2Ficyhhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogQWJzb2x1dGUgdmFsdWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjphYnMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fYWJzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBzYW5pdHkgY2hleAotCQlOdW1lcmljVHlwZSBudCA9IGdldF9zaW5nbGVfbnVtZXJpY19hcmcoYXJnKTsKLQotCQkvLyBlbXB0eSBhcmcKLQkJaWYgKG50ID09IG51bGwpCi0JCQlyZXR1cm4gcnM7Ci0JCQotCQlpZiAobnQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgewotCQkJWFNEb3VibGUgZGF0ID0gKFhTRG91YmxlKSBudDsKLQkJCWlmIChkYXQuemVybygpIHx8IGRhdC5uZWdhdGl2ZVplcm8oKSkgewotCQkJCXJzLmFkZChuZXcgWFNEb3VibGUoIjAiKSk7Ci0JCQkJcmV0dXJuIHJzOwotCQkJfQotCQkJaWYgKGRhdC5pbmZpbml0ZSgpKSB7Ci0JCQkJcnMuYWRkKG5ldyBYU0RvdWJsZShEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobnQgaW5zdGFuY2VvZiBYU0Zsb2F0KSB7Ci0JCQlYU0Zsb2F0IGRhdCA9IChYU0Zsb2F0KSBudDsKLQkJCWlmIChkYXQuemVybygpIHx8IGRhdC5uZWdhdGl2ZVplcm8oKSkgewotCQkJCXJzLmFkZChuZXcgWFNGbG9hdChGbG9hdC52YWx1ZU9mKDApKSk7Ci0JCQkJcmV0dXJuIHJzOwotCQkJfQotCQkJaWYgKGRhdC5pbmZpbml0ZSgpKSB7Ci0JCQkJcnMuYWRkKG5ldyBYU0Zsb2F0KEZsb2F0LlBPU0lUSVZFX0lORklOSVRZKSk7Ci0JCQkJcmV0dXJuIHJzOwotCQkJfQotCQl9Ci0KLQotCQlycy5hZGQobnQuYWJzKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIG51bWVyaWMgdmFsdWUgZnJvbSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGV4cHJlc3Npb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0aW5nIG51bWVyaWMgdHlwZSBmcm9tIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBOdW1lcmljVHlwZSBnZXRfc2luZ2xlX251bWVyaWNfYXJnKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgc2l6ZSA9IGFyZy5zaXplKCk7Ci0JCWlmIChzaXplID4gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJaWYgKHNpemUgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQkJCQotCQlyZXR1cm4gKE51bWVyaWNUeXBlKSBhdDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4YzBjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRpbWVUb1RpbWVab25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLlhNTEdyZWdvcmlhbkNhbGVuZGFyOwotCi0vKioKLSAqIEFkanVzdHMgYW4geHM6ZGF0ZVRpbWUgdmFsdWUgdG8gYSBzcGVjaWZpYyB0aW1lem9uZSwgb3IgdG8gbm8gdGltZXpvbmUgYXQKLSAqIGFsbC4gSWYgPGNvZGU+JHRpbWV6b25lPC9jb2RlPiBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGVUaW1lPC9jb2RlPiB3aXRob3V0IHRpbWV6b25lLiBPdGhlcndpc2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGVUaW1lPC9jb2RlPiB3aXRoIGEgdGltZXpvbmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkFkanVzdERhdGVUaW1lVG9UaW1lWm9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtaW5EdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCB0cnVlKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtYXhEdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCBmYWxzZSk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYWRqdXN0LWRhdGVUaW1lLXRvLXRpbWV6b25lIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBhZGp1c3RkYXRlVGltZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGZ1bmN0aW9uIHVzaW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBmbjpkYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBhZGp1c3RkYXRlVGltZShDb2xsZWN0aW9uIGFyZ3MsCi0JCQlEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkQXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IG51bGw7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCX0KLQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0JCVhTRGF5VGltZUR1cmF0aW9uIHRpbWV6b25lID0gbnVsbDsKLQkJCi0JCWlmIChhcmcyICE9IG51bGwgJiYgYXJnMi5lbXB0eSgpKSB7Ci0JCQlpZiAoZGF0ZVRpbWUudGltZXpvbmVkKCkpIHsKLQkJCQlDYWxlbmRhclR5cGUgbG9jYWxpemVkID0gbmV3IFhTRGF0ZVRpbWUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgbnVsbCk7Ci0JCQkJcnMuYWRkKGxvY2FsaXplZCk7Ci0JCQkJcmV0dXJuIHJzOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gYXJnMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChhcmcyID09IG51bGwpIHsKLQkJCUNhbGVuZGFyVHlwZSBsb2NhbGl6ZWQgPSBuZXcgWFNEYXRlVGltZShkYXRlVGltZS5ub3JtYWxpemVDYWxlbmRhcihkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKSwgbnVsbCk7Ci0JCQlycy5hZGQobG9jYWxpemVkKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCXRpbWV6b25lID0gKFhTRGF5VGltZUR1cmF0aW9uKSBhcmcyLmZpcnN0KCk7Ci0JCWlmICh0aW1lem9uZS5sdChtaW5EdXJhdGlvbiwgZGMpIHx8IHRpbWV6b25lLmd0KG1heER1cmF0aW9uLCBkYykpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVGltZXpvbmUoKTsKLQkJfQotCQkKLQkJaWYgKGRhdGVUaW1lLnR6KCkgPT0gbnVsbCkgewotCQkJcnMuYWRkKG5ldyBYU0RhdGVUaW1lKGRhdGVUaW1lLmNhbGVuZGFyKCksIHRpbWV6b25lKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCi0JCXRyeSB7CQkJCi0JCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWxlbmRhciA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKChHcmVnb3JpYW5DYWxlbmRhcilkYXRlVGltZS5ub3JtYWxpemVDYWxlbmRhcihkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKSk7Ci0JCQkKLQkJCUR1cmF0aW9uIGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24odGltZXpvbmUuc3RyaW5nX3ZhbHVlKCkpOwotCQkJeG1sQ2FsZW5kYXIuYWRkKGR1cmF0aW9uKTsKLQotCQkJcnMuYWRkKG5ldyBYU0RhdGVUaW1lKHhtbENhbGVuZGFyLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgdGltZXpvbmUpKTsKLQkJCQotCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0JCQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRBcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdERhdGVUb1RpbWVab25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRvVGltZVpvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjNGVmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRvVGltZVpvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbi4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogQWRqdXN0cyBhbiB4czpkYXRlIHZhbHVlIHRvIGEgc3BlY2lmaWMgdGltZXpvbmUsIG9yIHRvIG5vIHRpbWV6b25lIGF0Ci0gKiBhbGwuIElmIDxjb2RlPiR0aW1lem9uZTwvY29kZT4gaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIGFuCi0gKiA8Y29kZT54czpkYXRlPC9jb2RlPiB3aXRob3V0IHRpbWV6b25lLiBPdGhlcndpc2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGU8L2NvZGU+IHdpdGggYSB0aW1lem9uZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQWRqdXN0RGF0ZVRvVGltZVpvbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNEYXlUaW1lRHVyYXRpb24gbWluRHVyYXRpb24gPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oCi0JCQkwLCAxNCwgMCwgMCwgdHJ1ZSk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNEYXlUaW1lRHVyYXRpb24gbWF4RHVyYXRpb24gPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oCi0JCQkwLCAxNCwgMCwgMCwgZmFsc2UpOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuQWRqdXN0RGF0ZVRvVGltZVpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYWRqdXN0LWRhdGUtdG8tdGltZXpvbmUiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGFkanVzdERhdGUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiB1c2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgZm46ZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYWRqdXN0RGF0ZShDb2xsZWN0aW9uIGFyZ3MsCi0JCQlEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkQXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCX0KLQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhcmcxLmZpcnN0KCk7Ci0JCVhTRGF5VGltZUR1cmF0aW9uIHRpbWV6b25lID0gbnVsbDsKLQotCQlpZiAoYXJnMi5lbXB0eSgpKSB7Ci0JCQlpZiAoZGF0ZS50aW1lem9uZWQoKSkgewotCQkJCVhTRGF0ZSBsb2NhbGl6ZWQgPSBuZXcgWFNEYXRlKGRhdGUuY2FsZW5kYXIoKSwgbnVsbCk7Ci0JCQkJcnMuYWRkKGxvY2FsaXplZCk7Ci0JCQkJcmV0dXJuIHJzOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gYXJnMTsKLQkJCX0KLQkJfQotCQkKLQkJdGltZXpvbmUgPSAoWFNEYXlUaW1lRHVyYXRpb24pIGFyZzIuZmlyc3QoKTsKLQkJaWYgKHRpbWV6b25lLmx0KG1pbkR1cmF0aW9uLCBkYykgfHwgdGltZXpvbmUuZ3QobWF4RHVyYXRpb24sIGRjKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0JCQotCQlpZiAoZGF0ZS50eigpID09IG51bGwpIHsKLQkJCXJzLmFkZChuZXcgWFNEYXRlKGRhdGUuY2FsZW5kYXIoKSwgdGltZXpvbmUpKTsKLQkJCXJldHVybiByczsKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCVhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbENhbGVuZGFyID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWRhdGUubm9ybWFsaXplQ2FsZW5kYXIoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpKTsKLQkJCQotCQkJRHVyYXRpb24gZHVyYXRpb24gPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEdXJhdGlvbih0aW1lem9uZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQl4bWxDYWxlbmRhci5hZGQoZHVyYXRpb24pOwotCQkJCi0JCQlycy5hZGQobmV3IFhTRGF0ZSh4bWxDYWxlbmRhci50b0dyZWdvcmlhbkNhbGVuZGFyKCksIHRpbWV6b25lKSk7Ci0JCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkQXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdFRpbWVUb1RpbWVab25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0VGltZVRvVGltZVpvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYWRjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0VGltZVRvVGltZVpvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbi4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogQWRqdXN0cyBhbiB4czpkYXRlVGltZSB2YWx1ZSB0byBhIHNwZWNpZmljIHRpbWV6b25lLCBvciB0byBubyB0aW1lem9uZSBhdAotICogYWxsLiBJZiA8Y29kZT4kdGltZXpvbmU8L2NvZGU+IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZVRpbWU8L2NvZGU+IHdpdGhvdXQgdGltZXpvbmUuIE90aGVyd2lzZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZVRpbWU8L2NvZGU+IHdpdGggYSB0aW1lem9uZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQWRqdXN0VGltZVRvVGltZVpvbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNEYXlUaW1lRHVyYXRpb24gbWluRHVyYXRpb24gPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oCi0JCQkwLCAxNCwgMCwgMCwgdHJ1ZSk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNEYXlUaW1lRHVyYXRpb24gbWF4RHVyYXRpb24gPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oCi0JCQkwLCAxNCwgMCwgMCwgZmFsc2UpOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuQWRqdXN0VGltZVRvVGltZVpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYWRqdXN0LXRpbWUtdG8tdGltZXpvbmUiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGFkanVzdFRpbWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiB1c2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgZm46ZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYWRqdXN0VGltZShDb2xsZWN0aW9uIGFyZ3MsCi0JCQlEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkQXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCX0KLQkJWFNUaW1lIHRpbWUgPSAoWFNUaW1lKSBhcmcxLmZpcnN0KCk7Ci0JCVhTRGF5VGltZUR1cmF0aW9uIHRpbWV6b25lID0gbnVsbDsKLQkJCi0JCWlmIChhcmcyLmVtcHR5KCkpIHsKLQkJCWlmICh0aW1lLnRpbWV6b25lZCgpKSB7Ci0JCQkJWFNUaW1lIGxvY2FsaXplZCA9IG5ldyBYU1RpbWUodGltZS5jYWxlbmRhcigpLCBudWxsKTsKLQkJCQlycy5hZGQobG9jYWxpemVkKTsKLQkJCQlyZXR1cm4gcnM7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBhcmcxOwotCQkJfQotCQl9Ci0KLQotCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWxlbmRhciA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJaWYgKHRpbWUudHooKSAhPSBudWxsKSB7Ci0JCQkJeG1sQ2FsZW5kYXIgPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcigoR3JlZ29yaWFuQ2FsZW5kYXIpdGltZS5ub3JtYWxpemVDYWxlbmRhcih0aW1lLmNhbGVuZGFyKCksIHRpbWUudHooKSkpOwotCQkJfSBlbHNlIHsKLQkJCQl4bWxDYWxlbmRhciA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyVGltZSh0aW1lLmhvdXIoKSwgdGltZS5taW51dGUoKSwgKGludCl0aW1lLnNlY29uZCgpLCAwKTsKLQkJCX0KLQkKLQkJCXRpbWV6b25lID0gKFhTRGF5VGltZUR1cmF0aW9uKSBhcmcyLmZpcnN0KCk7Ci0JCQlpZiAodGltZXpvbmUubHQobWluRHVyYXRpb24sIGRjKSB8fCB0aW1lem9uZS5ndChtYXhEdXJhdGlvbiwgZGMpKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQkJfQotCQkJCi0JCQlpZiAodGltZS50eigpID09IG51bGwpIHsKLQkJCQlycy5hZGQobmV3IFhTVGltZSh0aW1lLmNhbGVuZGFyKCksIHRpbWV6b25lKSk7Ci0JCQkJcmV0dXJuIHJzOwotCQkJfQotCQkJCi0JCQlEdXJhdGlvbiBkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0R1cmF0aW9uKHRpbWV6b25lLnN0cmluZ192YWx1ZSgpKTsKLQkJCXhtbENhbGVuZGFyLmFkZChkdXJhdGlvbik7Ci0JCi0JCQlycy5hZGQobmV3IFhTVGltZSh4bWxDYWxlbmRhci50b0dyZWdvcmlhbkNhbGVuZGFyKCksIHRpbWV6b25lKSk7Ci0JCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkQXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkF2Zy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkF2Zy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTE5NDJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BdmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI2Mjc2NSAtIGZpeCBpc3N1ZSB3aXRoIGNhc3RpbmcgaXRlbXMgdG8gWFNEb3VibGUgY2FzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgdG8gY2FzdCB0byBOdW1lcmljIHNvIHRoYXQgZXZhbHVhdGlvbnMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZvcm1hdHRpbmcgb2NjdXIgY29ycmVjdGx5LgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBmaXggZm46YXZnIGNhc3RpbmcgaXNzdWVzIGFuZCBkaXZpZGUgYnkgemVybyBpc3N1ZXMuCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBmaXggcHJvbW90aW9uIHJ1bGVzIGZvciBmbjphdmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW50eXBlZEF0b21pYzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU2NhbGFyVHlwZVByb21vdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXI7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgYXZlcmFnZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBpbnB1dCBzZXF1ZW5jZSAkYXJnLCB0aGF0IGlzLCB0aGUKLSAqIHN1bSBvZiB0aGUgdmFsdWVzIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiB2YWx1ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkF2ZyBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5BdmcuCi0JICovCi0JcHVibGljIEZuQXZnKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImF2ZyIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gYXZnKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEF2ZXJhZ2UgdmFsdWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46YXZnIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGF2ZyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSlhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWludCBlbGVtcyA9IDA7Ci0KLQkJTWF0aFBsdXMgdG90YWwgPSBudWxsOwotCi0JCVR5cGVQcm9tb3RlciB0cCA9IG5ldyBTY2FsYXJUeXBlUHJvbW90ZXIoKTsKLQkJdHAuY29uc2lkZXJTZXF1ZW5jZShhcmcpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCSsrZWxlbXM7Ci0JCQlBbnlBdG9taWNUeXBlIGNvbnYgPSB0cC5wcm9tb3RlKChBbnlUeXBlKSBpLm5leHQoKSk7Ci0JCQkKLQkJCWlmIChjb252IGluc3RhbmNlb2YgWFNEb3VibGUgJiYgKChYU0RvdWJsZSljb252KS5uYW4oKSB8fCBjb252IGluc3RhbmNlb2YgWFNGbG9hdCAmJiAoKFhTRmxvYXQpY29udikubmFuKCkpIHsKLQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcodHAucHJvbW90ZShuZXcgWFNGbG9hdChGbG9hdC5OYU4pKSk7Ci0JCQl9Ci0JCQlpZiAodG90YWwgPT0gbnVsbCkgewotCQkJCXRvdGFsID0gKE1hdGhQbHVzKWNvbnY7IAotCQkJfSBlbHNlIHsKLQkJCQl0b3RhbCA9IChNYXRoUGx1cyl0b3RhbC5wbHVzKFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGNvbnYpKS5maXJzdCgpOwotCQkJfQotCQl9Ci0KLQkJaWYgKCEodG90YWwgaW5zdGFuY2VvZiBNYXRoRGl2KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJcmV0dXJuICgoTWF0aERpdil0b3RhbCkuZGl2KFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGVsZW1zKSkpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQmFzZVVyaS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkJhc2VVcmkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ5MDQ1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQmFzZVVyaS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcyNzQ3MjUgLSBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlLXVyaSBmdW5jdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGJhc2UtdXJpIHByb3BlcnR5IGZvciAkYXJnIGFzIGRlZmluZWQgYnkgdGhlCi0gKiBhY2Nlc3NvciBmdW5jdGlvbiBkbTpiYXNlLXVyaSgpIGZvciB0aGF0IGtpbmQgb2Ygbm9kZSBpbiBTZWN0aW9uIDUuMSBiYXNlLXVyaQotICogQWNjZXNzb3Igb2YgdGhlIHNwZWNpZmljYXRpb24uIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlIGlzIHJldHVybmVkLiBEb2N1bWVudCwgZWxlbWVudCBhbmQgcHJvY2Vzc2luZy1pbnN0cnVjdGlvbiBub2RlcyBoYXZlCi0gKiBhIGJhc2UtdXJpIHByb3BlcnR5IHdoaWNoIG1heSBiZSBlbXB0eS4gVGhlIGJhc2UtdXJpIHByb3BlcnR5IG9mIGFsbCBvdGhlcgotICogbm9kZSB0eXBlcyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuIFRoZSB2YWx1ZSBvZiB0aGUgYmFzZS11cmkgcHJvcGVydHkgaXMKLSAqIHJldHVybmVkIGlmIGl0IGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5LiBPdGhlcndpc2UsIGlmIHRoZSBub2RlIGhhcyBhIHBhcmVudCwKLSAqIHRoZSB2YWx1ZSBvZiBkbTpiYXNlLXVyaSgpIGFwcGxpZWQgdG8gaXRzIHBhcmVudCBpcyByZXR1cm5lZCwgcmVjdXJzaXZlbHkuIElmCi0gKiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGEgcGFyZW50LCBvciBpZiB0aGUgcmVjdXJzaXZlIGFzY2VudCB1cCB0aGUgYW5jZXN0b3IKLSAqIGNoYWluIGVuY291bnRlcnMgYSBub2RlIHdob3NlIGJhc2UtdXJpIHByb3BlcnR5IGlzIGVtcHR5IGFuZCBpdCBkb2VzIG5vdCBoYXZlCi0gKiBhIHBhcmVudCwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLgotICovCi1wdWJsaWMgY2xhc3MgRm5CYXNlVXJpIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQmFzZVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5CYXNlVXJpKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImJhc2UtdXJpIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBiYXNlX3VyaShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQmFzZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZF9jb250ZXh0Ci0JICogCQkJICBEeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46YmFzZS11cmkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYmFzZV91cmkoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkX2NvbnRleHQpIAotCSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBudWxsOwotCQkKLQkJaWYgKGNhcmdzLnNpemUoKSA9PSAwKSB7Ci0JCSAgLy8gc3VwcG9ydCBmb3IgYXJpdHkgMAotCQkgIC8vIGdldCBiYXNlLXVyaSBmcm9tIHRoZSBjb250ZXh0IGl0ZW0uCi0JCSAgQW55VHlwZSBjb250ZXh0SXRlbSA9IGRfY29udGV4dC5jb250ZXh0X2l0ZW0oKTsKLQkJICBpZiAoY29udGV4dEl0ZW0gIT0gbnVsbCkgewotCQkJcnMgPSBnZXRCYXNlVXJpKGNvbnRleHRJdGVtKTsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0JCSAgICB0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkgIH0KLQkJfQotCQllbHNlIGlmIChjYXJncy5zaXplKCkgPT0gMSkgewotCSAgICAgIC8vIHN1cHBvcnQgZm9yIGFyaXR5IDEKLQkJICBSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJICBBbnlUeXBlIGF0dCA9IGFyZzEuZmlyc3QoKTsKLQotCQkgIHJzID0gZ2V0QmFzZVVyaShhdHQpOwotCQl9Ci0JCWVsc2UgewotCQkgIC8vIGFyaXR5IG90aGVyIHRoYW4gMCBvciAxIGlzIG5vdCBhbGxvd2VkCi0JCSAgdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJCi0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoKLQkgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGJhc2UtdXJpIHN1cHBvcnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGdldEJhc2VVcmkoQW55VHlwZSBhdHQpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlYU0FueVVSSSBiYXNlVXJpID0gbnVsbDsKLQkJICAvLyBkZXBlbmRpbmcgb24gdGhlIG5vZGUgdHlwZSwgd2UgZ2V0IHRoZSBiYXNlLXVyaSBmb3IgdGhlIG5vZGUuCi0JCSAgLy8gaWYgYmFzZS11cmkgcHJvcGVydHkgaW4gRE9NIGlzIG51bGwsIHdlIHNldCB0aGUgYmFzZS11cmkgYXMgc3RyaW5nICJudWxsIi4gVGhpcwotCQkgIC8vIGF2b2lkcyBudWxsIHBvaW50ZXIgZXhjZXB0aW9uIHdoaWxlIGNvbXBhcmluZyB4czphbnlVUkkgdmFsdWVzLgotCQkKLQkJICBpZiAoYXR0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCSAgTm9kZVR5cGUgbm9kZSA9IChOb2RlVHlwZSkgYXR0OwotCQkJICBOb2RlIGRvbU5vZGUgPSBub2RlLm5vZGVfdmFsdWUoKTsKLQkJCSAgU3RyaW5nIGJ1cmkgPSBkb21Ob2RlLmdldEJhc2VVUkkoKTsKLQkJCSAgaWYgKGJ1cmkgIT0gbnVsbCkgewotCQkJCSAgYmFzZVVyaSA9IG5ldyBYU0FueVVSSShidXJpKTsKLQkJCSAgfSBlbHNlIHsKLQkJCQkgIGJhc2VVcmkgPSBuZXcgWFNBbnlVUkkoIm51bGwiKTsKLQkJCSAgfQotCQkgIH0KLQkJICAJICAgICAgICAKLQkgICAgICBpZiAoYmFzZVVyaSAhPSBudWxsKSB7Ci0JICAgICAgICBycy5hZGQoYmFzZVVyaSk7CQotCSAgICAgIH0KLQkgICAgICAKLQkgICAgICByZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkJvb2xlYW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Cb29sZWFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjNlN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkJvb2xlYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyNjI3NjUgLSB1c2UgY29ycmVjdCAnZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUnCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXggY2hlY2tpbmcgb2YgZGF0YSB0eXBlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDb21wdXRlcyB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIHNlcXVlbmNlICRhcmcuIElmICRhcmcgaXMgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyBmYWxzZS4gSWYgJGFyZyBjb250YWlucyBhIHNpbmdsZSBhdG9taWMgdmFsdWUsIHRoZW4KLSAqIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmICRhcmcgaXM6IC0gVGhlIHNpbmdsZXRvbiB4czpib29sZWFuIHZhbHVlCi0gKiBmYWxzZS4gLSBUaGUgc2luZ2xldG9uIHZhbHVlICIiICh6ZXJvLWxlbmd0aCBzdHJpbmcpIG9mIHR5cGUgeHM6c3RyaW5nIG9yCi0gKiB4ZHQ6dW50eXBlZEF0b21pYy4gLSBBIHNpbmdsZXRvbiBudW1lcmljIHZhbHVlIHRoYXQgaXMgbnVtZXJpY2FsbHkgZXF1YWwgdG8KLSAqIHplcm8uIC0gVGhlIHNpbmdsZXRvbiB4czpmbG9hdCBvciB4czpkb3VibGUgdmFsdWUgTmFOLiBJbiBhbGwgb3RoZXIgY2FzZXMsCi0gKiByZXR1cm5zIHRydWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkJvb2xlYW4gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQm9vbGVhbi4KLQkgKi8KLQlwdWJsaWMgRm5Cb29sZWFuKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImJvb2xlYW4iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyAxIGFyZ3VtZW50IG9ubHkhCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoZm5fYm9vbGVhbihhcmd1bWVudCkpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFhTQm9vbGVhbiBUUlVFID0gbmV3IFhTQm9vbGVhbih0cnVlKTsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0Jvb2xlYW4gRkFMU0UgPSBuZXcgWFNCb29sZWFuKGZhbHNlKTsKLQkKLQkvKioKLQkgKiBCb29sZWFuIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpib29sZWFuIG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvciAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTQm9vbGVhbiBmbl9ib29sZWFuKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBGQUxTRTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQkKLQkJaWYgKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpCi0JCQlyZXR1cm4gVFJVRTsKLQkJCi0JCWlmIChhcmcuc2l6ZSgpID4gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJLy8gWFhYID8/Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQlyZXR1cm4gVFJVRTsKLQotCQkvLyBvayB3ZSBnb3QgMSBzaW5nbGUgYXRvbWljIHR5cGUgZWxlbWVudAotCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbikgewotCQkJaWYgKCEoKFhTQm9vbGVhbikgYXQpLnZhbHVlKCkpCi0JCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0KLQkJaWYgKChhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSB8fCAoYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpKSB7Ci0JCQlpZiAoYXQuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKCIiKSkKLQkJCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJaWYgKCgoTnVtZXJpY1R5cGUpIGF0KS56ZXJvKCkpCi0JCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0KLQkJaWYgKChhdCBpbnN0YW5jZW9mIFhTRmxvYXQpICYmICgoKFhTRmxvYXQpIGF0KS5uYW4oKSkpCi0JCQlyZXR1cm4gRkFMU0U7Ci0KLQkJaWYgKChhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSAmJiAoKChYU0RvdWJsZSkgYXQpLm5hbigpKSkKLQkJCXJldHVybiBGQUxTRTsKLQkJCi0KLQkJcmV0dXJuIFRSVUU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ2VpbGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNlaWxpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5ZTg1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ2VpbGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc21hbGxlc3QgKGNsb3Nlc3QgdG8gbmVnYXRpdmUgaW5maW5pdHkpIG51bWJlciB3aXRoIG5vIGZyYWN0aW9uYWwKLSAqIHBhcnQgdGhhdCBpcyBub3QgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiAkYXJnLiBJZiB0eXBlIG9mICRhcmcgaXMgb25lIG9mIHRoZQotICogZm91ciBudW1lcmljIHR5cGVzIHhzOmZsb2F0LCB4czpkb3VibGUsIHhzOmRlY2ltYWwgb3IgeHM6aW50ZWdlciB0aGUgdHlwZSBvZgotICogdGhlIHJldHVybiBpcyB0aGUgc2FtZSBhcyB0aGUgdHlwZSBvZiAkYXJnLiBJZiB0aGUgdHlwZSBvZiAkYXJnIGlzIGEgdHlwZQotICogZGVyaXZlZCBmcm9tIG9uZSBvZiB0aGUgbnVtZXJpYyB0eXBlcywgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUgYmFzZQotICogbnVtZXJpYyB0eXBlLiBGb3IgeHM6ZmxvYXQgYW5kIHhzOmRvdWJsZSBhcmd1bWVudHMsIGlmIHRoZSBhcmd1bWVudCBpcwotICogcG9zaXRpdmUgemVybyAoKzApLCB0aGVuIHBvc2l0aXZlIHplcm8gKCswKSBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzCi0gKiBuZWdhdGl2ZSB6ZXJvICgtMCksIHRoZW4gbmVnYXRpdmUgemVybyAoLTApIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMKLSAqIGxlc3MgdGhhbiB6ZXJvICgwKSwgbmVnYXRpdmUgemVybyAoLTApIGlzIHJldHVybmVkLgotICovCi1wdWJsaWMgY2xhc3MgRm5DZWlsaW5nIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNlaWxpbmcuCi0JICovCi0JcHVibGljIEZuQ2VpbGluZygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjZWlsaW5nIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9jZWlsaW5nKGFyZ3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBDZWlsaW5nIHZhbHVlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y2VpbGluZyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9jZWlsaW5nKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJTnVtZXJpY1R5cGUgbnQgPSBGbkFicy5nZXRfc2luZ2xlX251bWVyaWNfYXJnKGFyZyk7Ci0KLQkJLy8gZW1wdHkgYXJnCi0JCWlmIChudCA9PSBudWxsKQotCQkJcmV0dXJuIHJzOwotCi0JCXJzLmFkZChudC5jZWlsaW5nKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvZGVwb2ludEVxdWFsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29kZXBvaW50RXF1YWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZmYmMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29kZXBvaW50RXF1YWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIAotICogPHA+Ci0gKiBTdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46Y29kZXBvaW50LWVxdWFsKCRjb21wYXJhbmQxIGFzIHhzOnN0cmluZz8sCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wYXJhbmQyIGFzIHhzOnN0cmluZz8pIGFzIHhzOmJvb2xlYW4/Ci0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogUmV0dXJucyB0cnVlIG9yIGZhbHNlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBvZiAkY29tcGFyYW5kMSBpcyBlcXVhbAotICogdG8gdGhlIHZhbHVlIG9mICRjb21wYXJhbmQyLCBhY2NvcmRpbmcgdG8gdGhlIFVuaWNvZGUgY29kZSBwb2ludCBjb2xsYXRpb24KLSAqIChodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucy9jb2xsYXRpb24vY29kZXBvaW50KS4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgcmVzdWx0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqIDwvcD4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRm5Db2RlcG9pbnRFcXVhbCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIG9mIEZuQ29kZXBvaW50RXF1YWwuCi0JICovCi0JcHVibGljIEZuQ29kZXBvaW50RXF1YWwoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29kZXBvaW50LWVxdWFsIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlzIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgY29tcGFyaXNvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29kZXBvaW50X2VxdWFscyhhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyZSB0aGUgYXJndW1lbnRzIGFzIGNvZGVwb2ludHMKLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGNvbXBhcmVkLgotCSAqIEBwYXJhbSBkeW5hbWljQ29udGV4dAotCSAqICAgICAgICAgICAgVGhlIGN1cnJlbnQgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29kZXBvaW50X2VxdWFscyhDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJWFNTdHJpbmcgeHN0cjEgPSBhcmcxLmVtcHR5KCkgPyBudWxsIDogKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVhTU3RyaW5nIHhzdHIyID0gYXJnMi5lbXB0eSgpID8gbnVsbCA6IChYU1N0cmluZykgYXJnMi5maXJzdCgpOwotCi0JCS8vIFRoaXMgZGVsZWdhdGVzIHRvIEZuQ29tcGFyZQotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IEZuQ29tcGFyZS5jb21wYXJlX3N0cmluZyhEeW5hbWljQ29udGV4dC5DT0RFUE9JTlRfQ09MTEFUSU9OLCB4c3RyMSwgeHN0cjIsIGR5bmFtaWNDb250ZXh0KTsKLQkJaWYgKHJlc3VsdCAhPSBudWxsKSBycy5hZGQobmV3IFhTQm9vbGVhbihCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKHJlc3VsdCkpKTsKLQkJCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRzVG9TdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRzVG9TdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljNDk1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29kZXBvaW50c1RvU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MDU1MyAtIGZ1cnRoZXIgY2hlY2tzIG9mIGxlZ2FsIFVuaWNvZGUgY29kZXBvaW50cy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDcmVhdGVzIGFuIHhzOnN0cmluZyBmcm9tIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMuIFJldHVybnMgdGhlIHplcm8tbGVuZ3RoCi0gKiBzdHJpbmcgaWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuIElmIGFueSBvZiB0aGUgY29kZSBwb2ludHMgaW4gJGFyZyBpcwotICogbm90IGEgbGVnYWwgWE1MIGNoYXJhY3RlciwgYW4gZXJyb3IgaXMgcmFpc2VkIFtlcnI6Rk9DSDAwMDFdLgotICovCi1wdWJsaWMgY2xhc3MgRm5Db2RlcG9pbnRzVG9TdHJpbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0gICAgLyoqCi0gICAgICogVGhlIG1heGltdW0gdmFsdWUgb2YgYSBVbmljb2RlIGNvZGUgcG9pbnQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0xFR0FMX0NPREVQT0lOVCA9IDB4MTsKLQotCi0gICAgLyoqCi0gICAgICogVGhlIG1heGltdW0gdmFsdWUgb2YgYSBVbmljb2RlIGNvZGUgcG9pbnQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xFR0FMX0NPREVQT0lOVCA9IDB4MTBmZmZmOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQ29kZXBvaW50c1RvU3RyaW5nLgotCSAqLwotCXB1YmxpYyBGbkNvZGVwb2ludHNUb1N0cmluZygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb2RlcG9pbnRzLXRvLXN0cmluZyIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29kZXBvaW50c190b19zdHJpbmcoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29kZXBvaW50cyB0byBzdHJpbmcgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y29kZXBvaW50cy10by1zdHJpbmcgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29kZXBvaW50c190b19zdHJpbmcoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJaW50W10gY29kZVBvaW50QXJyYXkgPSBuZXcgaW50W2FyZzEuc2l6ZSgpXTsKLQkJaW50IGNvZGVQb2ludEluZGV4ID0gMDsKLQkJZm9yIChJdGVyYXRvciBpID0gYXJnMS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVhTSW50ZWdlciBjb2RlID0gKFhTSW50ZWdlcikgaS5uZXh0KCk7Ci0JCQkKLQkJCWludCBjb2RlcG9pbnQgPSBjb2RlLmludF92YWx1ZSgpLmludFZhbHVlKCk7Ci0JCQlpZiAoY29kZXBvaW50IDwgTUlOX0xFR0FMX0NPREVQT0lOVCB8fCBjb2RlcG9pbnQgPiBNQVhfTEVHQUxfQ09ERVBPSU5UKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnVuc3VwcG9ydGVkX2NvZGVwb2ludCgiVSsiICsgSW50ZWdlci50b1N0cmluZyhjb2RlcG9pbnQsIDE2KS50b1VwcGVyQ2FzZSgpKTsKLQkJCX0KLQotCQkJY29kZVBvaW50QXJyYXlbY29kZVBvaW50SW5kZXhdID0gY29kZXBvaW50OwkJCQotCQkJY29kZVBvaW50SW5kZXgrKzsKLQkJfQotCi0JCS8vICJuZXcgU3RyaW5nKGludFtdIGNvZGVQb2ludHMsIGludCBvZmZzZXQsIGludCBjb3VudCkiIGlzIGEgZmFjaWxpdHkKLQkJLy8gaW50cm9kdWNlZCBpbiBKYXZhIDEuNQotCQl0cnkgewotCQkJU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcoY29kZVBvaW50QXJyYXksIDAsIGNvZGVQb2ludEFycmF5Lmxlbmd0aCk7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKHN0cikpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0JCQkvLyBUaGlzIHNob3VsZCBiZSBkdW9ibGUgY2hlY2tlZCBhYm92ZSwgYnV0IHJhdGhlciBzYWZlIHRoYW4gc29ycnkKLQkJCXRocm93IER5bmFtaWNFcnJvci51bnN1cHBvcnRlZF9jb2RlcG9pbnQoaWFlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTSW50ZWdlcigpLCBTZXFUeXBlLk9DQ19TVEFSKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbGxlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2xsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZGY4MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbGxlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODExNTkgLSBmaXggZG9jdW1lbnQgbG9hZGluZyBhbmQgcmVzb2x2aW5nIFVSSXMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogU3VtbWFyeTogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiB4czpzdHJpbmcgYXMgYXJndW1lbnQgYW5kIHJldHVybnMgYSBzZXF1ZW5jZQotICogb2Ygbm9kZXMgb2J0YWluZWQgYnkgaW50ZXJwcmV0aW5nICRhcmcgYXMgYW4geHM6YW55VVJJIGFuZCByZXNvbHZpbmcgaXQKLSAqIGFjY29yZGluZyB0byB0aGUgbWFwcGluZyBzcGVjaWZpZWQgaW4gQXZhaWxhYmxlIGNvbGxlY3Rpb25zIGRlc2NyaWJlZCBpbgotICogU2VjdGlvbiBDLjIgRHluYW1pYyBDb250ZXh0IENvbXBvbmVudHMuIElmIEF2YWlsYWJsZSBjb2xsZWN0aW9ucyBwcm92aWRlcyBhCi0gKiBtYXBwaW5nIGZyb20gdGhpcyBzdHJpbmcgdG8gYSBzZXF1ZW5jZSBvZiBub2RlcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhhdAotICogc2VxdWVuY2UuIElmIEF2YWlsYWJsZSBjb2xsZWN0aW9ucyBtYXBzIHRoZSBzdHJpbmcgdG8gYW4gZW1wdHkgc2VxdWVuY2UsIAotICogdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzZXF1ZW5jZS4gSWYgQXZhaWxhYmxlIGNvbGxlY3Rpb25zCi0gKiBwcm92aWRlcyBubyBtYXBwaW5nIGZvciB0aGUgc3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0RDMDAwNF0uIElmCi0gKiAkYXJnIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzZXF1ZW5jZSBvZiB0aGUgbm9kZXMgaW4gdGhlCi0gKiBkZWZhdWx0IGNvbGxlY3Rpb24gaW4gdGhlIGR5bmFtaWMgY29udGV4dC4gU2VlIFNlY3Rpb24gQy4yIER5bmFtaWMgQ29udGV4dAotICogQ29tcG9uZW50c1hQLiBJZiB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiBpcyB1bmRlZmluZWQgYW4gZXJyb3IKLSAqIGlzIHJhaXNlZCBbZXJyOkZPREMwMDAyXS4KLSAqCi0gKiBJZiB0aGUgJGFyZyBpcyBhIHJlbGF0aXZlIHhzOmFueVVSSSwgaXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmFsdWUgb2YgdGhlCi0gKiBiYXNlLVVSSSBwcm9wZXJ0eSBmcm9tIHRoZSBzdGF0aWMgY29udGV4dC4gSWYgJGFyZyBpcyBub3QgYSB2YWxpZCB4czphbnlVUkksCi0gKiBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0RDMDAwNF0uCi0gKgotICogSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBmdW5jdGlvbiBiZWhhdmVzIGFzIGlmIGl0IGhhZCBiZWVuIGNhbGxlZAotICogd2l0aG91dCBhbiBhcmd1bWVudC4gU2VlIGFib3ZlLgotICoKLSAqIEJ5IGRlZmF1bHQsIHRoaXMgZnVuY3Rpb24gaXMgwrdzdGFibGXCty4gVGhpcyBtZWFucyB0aGF0IHJlcGVhdGVkIGNhbGxzIG9uIHRoZQotICogZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBhcmd1bWVudCB3aWxsIHJldHVybiB0aGUgc2FtZSByZXN1bHQuIEhvd2V2ZXIsIGZvcgotICogcGVyZm9ybWFuY2UgcmVhc29ucywgaW1wbGVtZW50YXRpb25zIG1heSBwcm92aWRlIGEgdXNlciBvcHRpb24gdG8gZXZhbHVhdGUKLSAqIHRoZSBmdW5jdGlvbiB3aXRob3V0IGEgZ3VhcmFudGVlIG9mIHN0YWJpbGl0eS4gVGhlIG1hbm5lciBpbiB3aGljaCBhbnkgc3VjaAotICogb3B0aW9uIGlzIHByb3ZpZGVkIGlzIMK3aW1wbGVtZW50YXRpb24tZGVmaW5lZMK3LiBJZiB0aGUgdXNlciBoYXMgbm90IHNlbGVjdGVkCi0gKiBzdWNoIGFuIG9wdGlvbiwgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXIgcmV0dXJuIGEgc3RhYmxlIHJlc3VsdCBvcgotICogbXVzdCByYWlzZSBhbiBlcnJvcjogW2VycjpGT0RDMDAwM10uCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvbGxlY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT0xMRUNUSU9OX1VSSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucy9jb2xsZWN0aW9uL2RlZmF1bHQiOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRG9jLgotCSAqLwotCXB1YmxpYyBGbkNvbGxlY3Rpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29sbGVjdGlvbiIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29sbGVjdGlvbihhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRG9jIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZG9jIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvbGxlY3Rpb24oQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IG51bGw7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBnZXRDb2xsZWN0aW9uKERFRkFVTFRfQ09MTEVDVElPTl9VUkksIGRjKTsKLQkJfQotCQkJCi0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVN0cmluZyB1cmkgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCQotCQkKLQkJdHJ5IHsKLQkJCW5ldyBVUkkodXJpKTsKLQkJfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGV4KSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZG9jX25vdF9mb3VuZChudWxsKTsKLQkJfQotCQkKLQkJaWYgKHVyaS5pbmRleE9mKCI6IikgPCAwKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZENvbGxlY3Rpb25Bcmd1bWVudCgpOwotCQl9Ci0JCQotCi0JCVVSSSByZXNvbHZlZCA9IGRjLnJlc29sdmVfdXJpKHVyaSk7Ci0JCWlmIChyZXNvbHZlZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRfZG9jKG51bGwpOwotCi0JCXJzID0gZ2V0Q29sbGVjdGlvbih1cmksIGRjKTsKLQkJaWYgKHJzLmVtcHR5KCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZG9jX25vdF9mb3VuZChudWxsKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGdldENvbGxlY3Rpb24oU3RyaW5nIHVyaSwgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gY29sbGVjdGlvbk1hcCA9IGRjLmdldF9jb2xsZWN0aW9ucygpOwotCQlMaXN0PERvY3VtZW50PiBkb2NMaXN0ID0gY29sbGVjdGlvbk1hcC5nZXQodXJpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkb2NMaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQlEb2N1bWVudCBkb2MgPSBkb2NMaXN0LmdldChpKTsKLQkJCXJzLmFkZChuZXcgRG9jVHlwZShkb2MpKTsKLQkJfQotCQlyZXR1cm4gcnM7Ci0JCQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db21wYXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29tcGFyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDEyNzliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db21wYXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiAKLSAqIDxwPgotICogU3RyaW5nIGNvbXBhcmlzb24gZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOmNvbXBhcmUoJGNvbXBhcmFuZDEgYXMgeHM6c3RyaW5nPywgJGNvbXBhcmFuZDIgYXMgeHM6c3RyaW5nPykgYXMKLSAqIHhzOmludGVnZXI/Ci0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIC0xLCAwLCBvciAxLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdmFsdWUgb2YgJGNvbXBhcmFuZDEKLSAqIGlzIHJlc3BlY3RpdmVseSBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mCi0gKiAkY29tcGFyYW5kMi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJGNvbXBhcmFuZDIgYmVnaW5zIHdpdGggYSBzdHJpbmcgdGhhdCBpcyBlcXVhbCB0byB0aGUgdmFsdWUKLSAqIG9mICRjb21wYXJhbmQxIChhY2NvcmRpbmcgdG8gdGhlIGNvbGxhdGlvbiB0aGF0IGlzIHVzZWQpIGFuZCBoYXMgYWRkaXRpb25hbAotICogY29kZSBwb2ludHMgZm9sbG93aW5nIHRoYXQgYmVnaW5uaW5nIHN0cmluZywgdGhlbiB0aGUgcmVzdWx0IGlzIC0xLiBJZiB0aGUKLSAqIHZhbHVlIG9mICRjb21wYXJhbmQxIGJlZ2lucyB3aXRoIGEgc3RyaW5nIHRoYXQgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mCi0gKiAkY29tcGFyYW5kMiBhbmQgaGFzIGFkZGl0aW9uYWwgY29kZSBwb2ludHMgZm9sbG93aW5nIHRoYXQgYmVnaW5uaW5nIHN0cmluZywKLSAqIHRoZW4gdGhlIHJlc3VsdCBpcyAxLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIGVpdGhlciBhcmd1bWVudCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSByZXN1bHQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5Db21wYXJlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3Igb2YgRm5Db21wYXJlLgotCSAqLwotCXB1YmxpYyBGbkNvbXBhcmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29tcGFyZSIpLCAyLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGNvbXBhcmUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGNvbXBhcmVkIChvcHRpb25hbCAzcmQgYXJndW1lbnQgaXMgdGhlIGNvbGxhdGlvbikKLQkgKiBAcGFyYW0gZHluYW1pY0NvbnRleHQKLQkgKiAJICAgICAgIEN1cnJlbnQgZHluYW1pYyBjb250ZXh0IAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvbXBhcmUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJU3RyaW5nIGNvbGxhdGlvblVyaSA9IGR5bmFtaWNDb250ZXh0LmRlZmF1bHRfY29sbGF0aW9uX25hbWUoKTsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBjb2xsQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJCWNvbGxhdGlvblVyaSA9IGNvbGxBcmcuZmlyc3QoKS5zdHJpbmdfdmFsdWUoKTsKLQkJfQotCi0JCVhTU3RyaW5nIHhzdHIxID0gYXJnMS5lbXB0eSgpID8gbnVsbCA6IChYU1N0cmluZykgYXJnMS5maXJzdCgpOwotCQlYU1N0cmluZyB4c3RyMiA9IGFyZzIuZW1wdHkoKSA/IG51bGwgOiAoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKTsKLQotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IGNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVyaSwgeHN0cjEsIHhzdHIyLCBkeW5hbWljQ29udGV4dCk7Ci0JCWlmIChyZXN1bHQgIT0gbnVsbCkgewotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIocmVzdWx0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsJCQkKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgQmlnSW50ZWdlciBjb21wYXJlX3N0cmluZyhTdHJpbmcgY29sbGF0aW9uVXJpLCBYU1N0cmluZyB4c3RyMSwKLQkJCVhTU3RyaW5nIHhzdHIyLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbXBhcmF0b3IgY29sbGF0b3IgPSBkeW5hbWljQ29udGV4dC5nZXRfY29sbGF0aW9uKGNvbGxhdGlvblVyaSk7Ci0JCWlmIChjb2xsYXRvciA9PSBudWxsKSB0aHJvdyBEeW5hbWljRXJyb3IudW5zdXBwb3J0ZWRfY29sbGF0aW9uKGNvbGxhdGlvblVyaSk7Ci0KLQkJaWYgKHhzdHIxID09IG51bGwgfHwgeHN0cjIgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JCQotCQlpbnQgcmV0ID0gY29sbGF0b3IuY29tcGFyZSh4c3RyMS52YWx1ZSgpLCB4c3RyMi52YWx1ZSgpKTsKLQotCQlpZiAocmV0ID09IDApCi0JCQlyZXR1cm4gQmlnSW50ZWdlci5aRVJPOwotCQllbHNlIGlmIChyZXQgPCAwKQotCQkJcmV0dXJuIEJpZ0ludGVnZXIudmFsdWVPZigtMSk7Ci0JCWVsc2UKLQkJCXJldHVybiBCaWdJbnRlZ2VyLk9ORTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbmNhdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbmNhdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjUzZmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db25jYXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIFNlcXVlbmNlIGNvbmNhdGVuYXRpb24gZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOmNvbmNhdCgkYXJnMSBhcyB4ZHQ6YW55QXRvbWljVHlwZT8sICRhcmcyIGFzIHhkdDphbnlBdG9taWNUeXBlPywKLSAqIC4uLiApIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgYWNjZXB0cyB0d28gb3IgbW9yZSB4ZHQ6YW55QXRvbWljVHlwZSBhcmd1bWVudHMgYW5kIGNvbnZlcnRzIHRoZW0KLSAqIHRvIHhzOnN0cmluZy4gSXQgdGhlbiByZXR1cm5zIHRoZSB4czpzdHJpbmcgdGhhdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKLSAqIHZhbHVlcyBvZiBpdHMgYXJndW1lbnRzIGFmdGVyIGNvbnZlcnNpb24uIElmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhlIGNvbmNhdCgpIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCB0byBhbGxvdyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGFyZ3VtZW50cwotICogdGhhdCBhcmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5Db25jYXQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Db25jYXQuCi0JICovCi0JcHVibGljIEZuQ29uY2F0KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvbmNhdCIpLCAyLCBJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaXMgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb25jYXQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29uY2F0ZW5hdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGNvbmNhdGVuYXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb25jYXQoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBzYW5pdHkgY2hlY2sKLQkJaWYgKGFyZ3Muc2l6ZSgpIDwgMikKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVN0cmluZyByZXN1bHQgPSAiIjsKLQotCQkvLyBnbyB0aHJvdWdoIGFyZ3MKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChJdGVyYXRvciBhcmdpID0gYXJncy5pdGVyYXRvcigpOyBhcmdpLmhhc05leHQoKTspIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0KLQkJCWludCBzaXplID0gYXJnLnNpemUoKTsKLQotCQkJLy8gc2FuaXR5IGNoZWNrCi0JCQlpZiAoc2l6ZSA+IDEpCi0JCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkJaWYgKHNpemUgPT0gMCkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0JCQkKLQkJCWJ1Zi5hcHBlbmQoYXQuc3RyaW5nX3ZhbHVlKCkpOwotCi0JCX0KLQkJcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0JCQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHJlc3VsdCkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29udGFpbnMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db250YWlucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzJhOTY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db250YWlucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gY2hlY2sgZm9yIGVtcHR5IHN0cmluZyBpbiBzZWNvbmQgYXJnIGJlZm9yZSBmaXJzdC4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIG9mICRhcmcxIGNvbnRhaW5zCi0gKiAoYXQgdGhlIGJlZ2lubmluZywgYXQgdGhlIGVuZCwgb3IgYW55d2hlcmUgd2l0aGluKSBhdCBsZWFzdCBvbmUgc2VxdWVuY2Ugb2YKLSAqIGNvbGxhdGlvbiB1bml0cyB0aGF0IHByb3ZpZGVzIGEgbWluaW1hbCBtYXRjaCB0byB0aGUgY29sbGF0aW9uIHVuaXRzIGluIHRoZQotICogdmFsdWUgb2YgJGFyZzIsIGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQgaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuQ29udGFpbnMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Db250YWlucy4KLQkgKi8KLQlwdWJsaWMgRm5Db250YWlucygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb250YWlucyIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29udGFpbnMoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29udGFpbnMgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y29udGFpbnMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29udGFpbnMoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoIWFyZzIuZW1wdHkoKSkKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJaW50IHN0cjFsZW4gPSBzdHIxLmxlbmd0aCgpOwotCQlpbnQgc3RyMmxlbiA9IHN0cjIubGVuZ3RoKCk7Ci0KLQkJaWYgKHN0cjJsZW4gPT0gMCkgewotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlpZiAoc3RyMWxlbiA9PSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJaWYgKHN0cjEuaW5kZXhPZihzdHIyKSA9PSAtMSkKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JCWVsc2UKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHRydWUpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ291bnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db3VudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI4YmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db3VudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdmFsdWUgb2YgJGFyZy4gUmV0dXJucyAwIGlmICRhcmcgaXMgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQ291bnQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQ291bnQuCi0JICovCi0JcHVibGljIEZuQ291bnQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY291bnQiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGNvdW50KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvdW50IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmNvdW50IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvdW50KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihhcmcuc2l6ZSgpKSkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50RGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnREYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MDI1MzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnREYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB4czpkYXRlKGZuOmN1cnJlbnQtZGF0ZVRpbWUoKSkuIFRoaXMgaXMgYSB4czpkYXRlICh3aXRoIHRpbWV6b25lKQotICogdGhhdCBpcyBjdXJyZW50IGF0IHNvbWUgdGltZSBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgYSBxdWVyeSBvcgotICogdHJhbnNmb3JtYXRpb24gaW4gd2hpY2ggZm46Y3VycmVudC1kYXRlKCkgaXMgZXhlY3V0ZWQuIFRoaXMgZnVuY3Rpb24gaXMKLSAqIHN0YWJsZS4gVGhlIHByZWNpc2UgaSBpbnN0YW50IGR1cmluZyB0aGUgcXVlcnkgb3IgdHJhbnNmb3JtYXRpb24gcmVwcmVzZW50ZWQKLSAqIGJ5IHRoZSB2YWx1ZSBvZiBmbjpjdXJyZW50LWRhdGUoKSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkN1cnJlbnREYXRlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkN1cnJlbnREYXRlLgotCSAqLwotCXB1YmxpYyBGbkN1cnJlbnREYXRlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImN1cnJlbnQtZGF0ZSIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY3VycmVudF9kYXRlKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDdXJyZW50LURhdGUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjdXJyZW50LWRhdGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY3VycmVudF9kYXRlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJQW55VHlwZSByZXMgPSBuZXcgWFNEYXRlKGRjLmN1cnJlbnRfZGF0ZV90aW1lKCksIGRjLnR6KCkpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50RGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50RGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmOTRmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudERhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgeHM6ZGF0ZVRpbWUgKHdpdGggdGltZXpvbmUpIGZyb20gdGhlIGR5bmFtaWMgY29udGV4dC4gKFNlZQotICogU2VjdGlvbiBDLjIgRHluYW1pYyBDb250ZXh0IENvbXBvbmVudHNYUC4pIFRoaXMgaXMgYSB4czpkYXRlVGltZSB0aGF0IGlzCi0gKiBjdXJyZW50IGF0IHNvbWUgdGltZSBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgYSBxdWVyeSBvciB0cmFuc2Zvcm1hdGlvbiBpbgotICogd2hpY2ggZm46Y3VycmVudC1kYXRlVGltZSgpIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uIGlzIHN0YWJsZS4gVGhlIHByZWNpc2UKLSAqIGluc3RhbnQgZHVyaW5nIHRoZSBxdWVyeSBvciB0cmFuc2Zvcm1hdGlvbiByZXByZXNlbnRlZCBieSB0aGUgdmFsdWUgb2YKLSAqIGZuOmN1cnJlbnQtZGF0ZVRpbWUoKSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkN1cnJlbnREYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5DdXJyZW50RGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuQ3VycmVudERhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImN1cnJlbnQtZGF0ZVRpbWUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGN1cnJlbnRfZGF0ZVRpbWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEN1cnJlbnQtRGF0ZS1UaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y3VycmVudC1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjdXJyZW50X2RhdGVUaW1lKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJQW55VHlwZSByZXMgPSBuZXcgWFNEYXRlVGltZShkYy5jdXJyZW50X2RhdGVfdGltZSgpLCBkYy50eigpKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudFRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50VGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWE5ZGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50VGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODY0NTIgLSBhbHdheXMgcmV0dXJuIHRoZSBzdGFibGUgZGF0ZS90aW1lIGZyb20gZHluYW1pYyBjb250ZXh0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgeHM6dGltZShmbjpjdXJyZW50LWRhdGVUaW1lKCkpLiBUaGlzIGlzIGEgeHM6dGltZSAod2l0aCB0aW1lem9uZSkgdGhhdAotICogaXMgY3VycmVudCBhdCBzb21lIHRpbWUgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIGEgcXVlcnkgb3IgdHJhbnNmb3JtYXRpb24gaW4KLSAqIHdoaWNoIGZuOmN1cnJlbnQtdGltZSgpIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uIGlzIHN0YWJsZS4gVGhlIHByZWNpc2UKLSAqIGluc3RhbnQgZHVyaW5nIHRoZSBxdWVyeSBvciB0cmFuc2Zvcm1hdGlvbiByZXByZXNlbnRlZCBieSB0aGUgdmFsdWUgb2YKLSAqIGZuOmN1cnJlbnQtdGltZSgpIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuQ3VycmVudFRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQ3VycmVudFRpbWUuCi0JICovCi0JcHVibGljIEZuQ3VycmVudFRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY3VycmVudC10aW1lIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjdXJyZW50X3RpbWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEN1cnJlbnQtVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmN1cnJlbnQtdGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjdXJyZW50X3RpbWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlBbnlUeXBlIHJlcyA9IG5ldyBYU1RpbWUoZGMuY3VycmVudF9kYXRlX3RpbWUoKSwgZGMudHooKSk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YTZkZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUvZWxlbWVudCBub2RlcyAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIGZuOmRhdGEgdGFrZXMgYSBzZXF1ZW5jZSBvZiBpdGVtcyBhbmQgcmV0dXJucyBhIHNlcXVlbmNlIG9mIGF0b21pYyB2YWx1ZXMuCi0gKiBUaGUgcmVzdWx0IG9mIGZuOmRhdGEgaXMgdGhlIHNlcXVlbmNlIG9mIGF0b21pYyB2YWx1ZXMgcHJvZHVjZWQgYnkgYXBwbHlpbmcKLSAqIHRoZSBmb2xsb3dpbmcgcnVsZXMgdG8gZWFjaCBpdGVtIGluICRhcmc6IC0gSWYgdGhlIGl0ZW0gaXMgYW4gYXRvbWljIHZhbHVlLAotICogaXQgaXMgcmV0dXJuZWQuIC0gSWYgdGhlIGl0ZW0gaXMgYSBub2RlLCBmbjpkYXRhKCkgcmV0dXJucyB0aGUgdHlwZWQgdmFsdWUgb2YKLSAqIHRoZSBub2RlIGFzIGRlZmluZWQgYnkgdGhlIGFjY2Vzc29yIGZ1bmN0aW9uIGRtOnR5cGVkLXZhbHVlIGluIFNlY3Rpb24gNS42Ci0gKiB0eXBlZC12YWx1ZSBBY2Nlc3NvciBpbiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZuRGF0YSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRhLgotCSAqLwotCXB1YmxpYyBGbkRhdGEoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGF0YSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgewotCQkvLyAxIGFyZ3VtZW50IG9ubHkhCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gYXRvbWl6ZShhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogQXRvbWl6ZSBhIFJlc3VsdFNlcXVuY2UgYXJndW1lbnQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGF0b21pemUoUmVzdWx0U2VxdWVuY2UgYXJnKSB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpIHsKLQkJCQlycy5hZGQoYXQpOwotCQkJfQotCQkJZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBhdDsKLQkJCQlycy5jb25jYXQobnQudHlwZWRfdmFsdWUoKSk7Ci0JCQl9IGVsc2UgewotCQkJCWFzc2VydCBmYWxzZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBBdG9taXplIGEgUmVzdWx0U2VxdW5jZSBhcmd1bWVudCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGZhc3RfYXRvbWl6ZShSZXN1bHRTZXF1ZW5jZSBhcmcpIHsKLQkJZm9yIChMaXN0SXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLy8gWFhYIHByb2xseSB3cm9uZyEKLQkJCWVsc2UgaWYgKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCQlOb2RlVHlwZSBudCA9IChOb2RlVHlwZSkgYXQ7Ci0KLQkJCQlpLnNldChudC50eXBlZF92YWx1ZSgpLmZpcnN0KCkpOwotCQkJfSBlbHNlCi0JCQkJYXNzZXJ0IGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXRvbWl6ZSBhcmd1bWVudCBleHByZXNzaW9uIG9mIGFueSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQW55VHlwZSBhdG9taXplKEFueVR5cGUgYXJnKSB7Ci0JCWlmIChhcmcgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKQotCQkJcmV0dXJuIGFyZzsKLQkJZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBhcmc7Ci0KLQkJCXJldHVybiBudC50eXBlZF92YWx1ZSgpLmZpcnN0KCk7Ci0JCX0gZWxzZSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjVlOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODE4MjIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICAqIEEgc3BlY2lhbCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgY29uc3RydWN0aW5nIGEgeHM6ZGF0ZVRpbWUgdmFsdWUgZnJvbSBhIHhzOmRhdGUKLSAgKiB2YWx1ZSBhbmQgYSB4czp0aW1lIHZhbHVlLgotICAqIHJlZjogU2VjdGlvbiA1LjIgb2YgdGhlIEYmTyBzcGVjLCBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC1mdW5jdGlvbnMvLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGbkRhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRhdGVUaW1lIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkYXRlVGltZShhcmdzLCBzdGF0aWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgZnVuY3Rpb24gdXNpbmcgdGhlIGFyZ3VtZW50cyBwYXNzZWQuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIGZuOmRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRhdGVUaW1lKENvbGxlY3Rpb24gYXJncywgU3RhdGljQ29udGV4dCBzYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlYU0RhdGUgcGFyYW0xID0gKFhTRGF0ZSlhcmcxLmZpcnN0KCk7Ci0JCVhTVGltZSBwYXJhbTIgPSAoWFNUaW1lKWFyZzIuZmlyc3QoKTsKLQkJCi0JCS8vIGlmIGVpdGhlciBvZiB0aGUgcGFyYW1ldGVyIGlzIGFuIGVtcHR5IHNlcXVlbmNlLCB0aGUgcmVzdWx0Ci0JCS8vIGlzIGFuIGVtcHR5IHNlcXVlbmNlCi0JCWlmIChwYXJhbTEgPT0gbnVsbCB8fCBwYXJhbTIgPT0gbnVsbCkgewotCQkgIHJldHVybiByczsJCi0JCX0KLQkJCi0JCUNhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCWNhbC5zZXQocGFyYW0xLnllYXIoKSwgcGFyYW0xLm1vbnRoKCkgLSAxLCBwYXJhbTEuZGF5KCkpOwotCQljYWwuc2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZLCBwYXJhbTIuaG91cigpKTsKLQkJY2FsLnNldChDYWxlbmRhci5NSU5VVEUsIHBhcmFtMi5taW51dGUoKSk7Ci0JCWNhbC5zZXQoQ2FsZW5kYXIuU0VDT05ELCAoRG91YmxlLnZhbHVlT2YoTWF0aC5mbG9vcihwYXJhbTIuc2Vjb25kKCkpKS5pbnRWYWx1ZSgpKSk7Ci0JCWNhbC5zZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQsIDApOwotCQkKLQkJWFNEdXJhdGlvbiBkYXRlVGltZVpvbmUgPSBwYXJhbTEudHooKTsKLQkJWFNEdXJhdGlvbiB0aW1lVGltZVpvbmUgPSBwYXJhbTIudHooKTsKLQkJaWYgKChkYXRlVGltZVpvbmUgIT0gbnVsbCAmJiB0aW1lVGltZVpvbmUgIT0gbnVsbCkgJiYKLQkJICAgICAhZGF0ZVRpbWVab25lLnN0cmluZ192YWx1ZSgpLmVxdWFscyh0aW1lVGltZVpvbmUuc3RyaW5nX3ZhbHVlKCkpKSB7Ci0JCSAgLy8gaXQncyBhbiBlcnJvciwgaWYgdGhlIGFyZ3VtZW50cyBoYXZlIGRpZmZlcmVudCB0aW1lem9uZXMKLQkJICB0aHJvdyBEeW5hbWljRXJyb3IuaW5jb25zaXN0ZW50VGltZVpvbmUoKTsKLQkJfSBlbHNlIGlmIChkYXRlVGltZVpvbmUgPT0gbnVsbCAmJiB0aW1lVGltZVpvbmUgIT0gbnVsbCkgewotICAgICAgICAgICBycy5hZGQobmV3IFhTRGF0ZVRpbWUoY2FsLCB0aW1lVGltZVpvbmUpKTsKLQkJfSBlbHNlIGlmIChkYXRlVGltZVpvbmUgIT0gbnVsbCAmJiB0aW1lVGltZVpvbmUgPT0gbnVsbCkgewotCQkgICBycy5hZGQobmV3IFhTRGF0ZVRpbWUoY2FsLCBkYXRlVGltZVpvbmUpKTsKLQkJfQotCQllbHNlIGlmICgoZGF0ZVRpbWVab25lICE9IG51bGwgJiYgdGltZVRpbWVab25lICE9IG51bGwpICYmCi0JCQkgICAgIGRhdGVUaW1lWm9uZS5zdHJpbmdfdmFsdWUoKS5lcXVhbHModGltZVRpbWVab25lLnN0cmluZ192YWx1ZSgpKSkgewotCQkgICBycy5hZGQobmV3IFhTRGF0ZVRpbWUoY2FsLCBkYXRlVGltZVpvbmUpKTsKLQkJfQotCQllbHNlIHsKLQkJICAgcnMuYWRkKG5ldyBYU0RhdGVUaW1lKGNhbCwgbnVsbCkpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5RnJvbURhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBiMzFjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5RnJvbURhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAxIGFuZCAzMSwgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUgZGF5Ci0gKiBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwKLSAqIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXlGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRheUZyb21EYXRlLgotCSAqLwotCXB1YmxpYyBGbkRheUZyb21EYXRlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRheS1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRheV9mcm9tX2RhdGUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRGF5LUZyb20tRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkYXktZnJvbS1kYXRlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRheV9mcm9tX2RhdGUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGUgZHQgPSAoWFNEYXRlKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0LmRheSgpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2UzZDY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAxIGFuZCAzMSwgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUgZGF5Ci0gKiBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwKLSAqIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXlGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXlGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuRGF5RnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRheS1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkYXlfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRGF5LUZyb20tRGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZGF5LWZyb20tZGF0ZXRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGF5X2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0LmRheSgpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5c0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheXNGcm9tRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM4MzQ1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5c0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGV4cGVjdGVkIHhzOmR1cmF0aW9uIGFyZ3VtZW50LiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBkYXlzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuRGF5c0Zyb21EdXJhdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRheXNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuRGF5c0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkYXlzLWZyb20tZHVyYXRpb24iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRheXNfZnJvbV9kdXJhdGlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBEYXlzLUZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZGF5cy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRheXNfZnJvbV9kdXJhdGlvbihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRHVyYXRpb24gZHRkID0gKFhTRHVyYXRpb24pIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHRkLmRheXMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRlZXBFcXVhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRlZXBFcXVhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjNiMDg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EZWVwRXF1YWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci0KLS8qKgotICogVGhlIGZ1bmN0aW9uIGFzc2Vzc2VzIHdoZXRoZXIgdHdvIHNlcXVlbmNlcyBhcmUgZGVlcC1lcXVhbCB0byBlYWNoIG90aGVyLiBUbwotICogYmUgZGVlcC1lcXVhbCwgdGhleSBtdXN0IGNvbnRhaW4gaXRlbXMgdGhhdCBhcmUgcGFpcndpc2UgZGVlcC1lcXVhbDsgYW5kIGZvcgotICogdHdvIGl0ZW1zIHRvIGJlIGRlZXAtZXF1YWwsIHRoZXkgbXVzdCBlaXRoZXIgYnkgYXRvbWljIHZhbHVlcyB0aGF0IGNvbXBhcmUKLSAqIGVxdWFsLCBvciBub2RlcyBvZiB0aGUgc2FtZSBraW5kLCB3aXRoIHRoZSBzYW1lIG5hbWUsIHdob3NlIGNoaWxkcmVuIGFyZQotICogZGVlcC1lcXVhbC4gVGhpcyBpcyBkZWZpbmVkIGluIG1vcmUgZGV0YWlsIGJlbG93LiBUaGUgJGNvbGxhdGlvbiBhcmd1bWVudAotICogaWRlbnRpZmllcyBhIGNvbGxhdGlvbiB3aGljaCBpcyB1c2VkIGF0IGFsbCBsZXZlbHMgb2YgcmVjdXJzaW9uIHdoZW4gc3RyaW5ncwotICogYXJlIGNvbXBhcmVkIChidXQgbm90IHdoZW4gbmFtZXMgYXJlIGNvbXBhcmVkKSwgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBpbgotICogNy4zLjEgQ29sbGF0aW9ucyBpbiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZuRGVlcEVxdWFsIGV4dGVuZHMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EZWVwRXF1YWwuCi0JICovCi0JcHVibGljIEZuRGVlcEVxdWFsKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRlZXAtZXF1YWwiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRlZXBfZXF1YWwoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIERlZXAtRXF1YWwgZXhwcmVzc2lvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBjb250ZXh0Ci0JICogICAgICAgICAgICBEeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZGVlcC1lcXVhbCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkZWVwX2VxdWFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMyA9IG51bGw7Ci0JCVN0cmluZyBjb2xsYXRpb25VUkkgPSBjb250ZXh0LmRlZmF1bHRfY29sbGF0aW9uX25hbWUoKTsKLQkJaWYgKGNpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQkJaWYgKCFhcmczLmVtcHR5KCkpIHsKLQkJCQljb2xsYXRpb25VUkkgPSBhcmczLmZpcnN0KCkuc3RyaW5nX3ZhbHVlKCk7Ci0JCQl9Ci0JCX0KLQotCQlib29sZWFuIHJlc3VsdCA9IGRlZXBfZXF1YWwoYXJnMSwgYXJnMiwgY29udGV4dCwgY29sbGF0aW9uVVJJKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWVwLUVxdWFsIGJvb2xlYW4gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSB0d28KLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSBjb250ZXh0Ci0JICogICAgICAgICAgICBDdXJyZW50IGR5bmFtaWMgY29udGV4dCAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkZWVwLWVxdWFsIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVlcF9lcXVhbChSZXN1bHRTZXF1ZW5jZSBvbmUsIFJlc3VsdFNlcXVlbmNlIHR3bywgRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgewotCQlpZiAob25lLmVtcHR5KCkgJiYgdHdvLmVtcHR5KCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlpZiAob25lLnNpemUoKSAhPSB0d28uc2l6ZSgpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCUl0ZXJhdG9yIG9uZWkgPSBvbmUuaXRlcmF0b3IoKTsKLQkJSXRlcmF0b3IgdHdvaSA9IHR3by5pdGVyYXRvcigpOwotCi0JCXdoaWxlIChvbmVpLmhhc05leHQoKSkgewotCQkJQW55VHlwZSBhID0gKEFueVR5cGUpIG9uZWkubmV4dCgpOwotCQkJQW55VHlwZSBiID0gKEFueVR5cGUpIHR3b2kubmV4dCgpOwotCi0JCQlpZiAoIWRlZXBfZXF1YWwoYSwgYiwgY29udGV4dCwgY29sbGF0aW9uVVJJKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogRGVlcC1FcXVhbCBib29sZWFuIG9wZXJhdGlvbiBmb3IgaW5wdXRzIG9mIGFueSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSB0d28KLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSBjb250ZXh0IAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRlZXAtZXF1YWwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWVwX2VxdWFsKEFueVR5cGUgb25lLCBBbnlUeXBlIHR3bywgRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgewotCQlpZiAoKG9uZSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpICYmICh0d28gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCXJldHVybiBkZWVwX2VxdWFsKChBbnlBdG9taWNUeXBlKSBvbmUsIChBbnlBdG9taWNUeXBlKSB0d28sIGNvbnRleHQsIGNvbGxhdGlvblVSSSk7Ci0KLQkJZWxzZSBpZiAoKChvbmUgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSAmJiAodHdvIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJCXx8ICgob25lIGluc3RhbmNlb2YgTm9kZVR5cGUpICYmICh0d28gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWVsc2UgaWYgKChvbmUgaW5zdGFuY2VvZiBOb2RlVHlwZSkgJiYgKHR3byBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXJldHVybiBkZWVwX2VxdWFsKChOb2RlVHlwZSkgb25lLCAoTm9kZVR5cGUpIHR3bywgY29udGV4dCk7Ci0JCWVsc2UgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogRGVlcC1FcXVhbCBib29sZWFuIG9wZXJhdGlvbiBmb3IgaW5wdXRzIG9mIGFueSBhdG9taWMgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gb25lCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gdHdvCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkZWVwLWVxdWFsIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVlcF9lcXVhbChBbnlBdG9taWNUeXBlIG9uZSwgQW55QXRvbWljVHlwZSB0d28sIER5bmFtaWNDb250ZXh0IGNvbnRleHQsIFN0cmluZyBjb2xsYXRpb25VUkkpIHsKLQkJaWYgKCEob25lIGluc3RhbmNlb2YgQ21wRXEpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoISh0d28gaW5zdGFuY2VvZiBDbXBFcSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJQ21wRXEgYSA9IChDbXBFcSkgb25lOwotCi0JCXRyeSB7Ci0JCQlpZiAoaXNOdW1lcmljKG9uZSwgdHdvKSkgewotCQkJCU51bWVyaWNUeXBlIG51bWVyaWMgPSAoTnVtZXJpY1R5cGUpIG9uZTsKLQkJCQlpZiAobnVtZXJpYy5lcSh0d28sIGNvbnRleHQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVhTU3RyaW5nIHZhbHVlMSA9IG5ldyBYU1N0cmluZyhvbmUuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCQlpZiAodmFsdWUxLmVxKHR3bywgY29udGV4dCkpIHsKLQkJCQkJCXJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoYS5lcSh0d28sIGNvbnRleHQpKQotCQkJCXJldHVybiB0cnVlOwotCQkJCi0JCQlpZiAobmVlZHNTdHJpbmdDb21wYXJpc29uKG9uZSwgdHdvKSkgewotCQkJCVhTU3RyaW5nIHhzdHIxID0gbmV3IFhTU3RyaW5nKG9uZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJWFNTdHJpbmcgeHN0cjIgPSBuZXcgWFNTdHJpbmcodHdvLnN0cmluZ192YWx1ZSgpKTsKLQkJCQlpZiAoRm5Db21wYXJlLmNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVSSSwgeHN0cjEsIHhzdHIyLAotCQkJCQkJY29udGV4dCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGZhbHNlOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXR1cm4gZmFsc2U7IC8vIFhYWCA/Pz8KLQkJfQotCX0KLQotCS8qKgotCSAqIERlZXAtRXF1YWwgYm9vbGVhbiBvcGVyYXRpb24gZm9yIGlucHV0cyBvZiBub2RlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIG9uZQotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHR3bwotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZGVlcC1lcXVhbCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGRlZXBfZXF1YWwoTm9kZVR5cGUgb25lLCBOb2RlVHlwZSB0d28sIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHsKLQkJTm9kZSBhID0gb25lLm5vZGVfdmFsdWUoKTsKLQkJTm9kZSBiID0gdHdvLm5vZGVfdmFsdWUoKTsKLQkJCi0JCWlmIChhLmlzRXF1YWxOb2RlKGIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGVmYXVsdENvbGxhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRlZmF1bHRDb2xsYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk0NzA5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGVmYXVsdENvbGxhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiA8cD4KLSAqIFN1bW1hcnk6IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkZWZhdWx0IGNvbGxhdGlvbiBwcm9wZXJ0eSBmcm9tIHRoZSBzdGF0aWMKLSAqIGNvbnRleHQuIENvbXBvbmVudHMgb2YgdGhlIHN0YXRpYyBjb250ZXh0IGFyZSBkaXNjdXNzZWQgaW4gU2VjdGlvbiBDLjEgU3RhdGljCi0gKiBDb250ZXh0IENvbXBvbmVudHMuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogTm90ZToKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGUgZGVmYXVsdCBjb2xsYXRpb24gcHJvcGVydHkgY2FuIG5ldmVyIGJlIHVuZGVmaW5lZC4gSWYgaXQgaXMgbm90Ci0gKiBleHBsaWNpdGx5IGRlZmluZWQsIGEgc3lzdGVtIGRlZmluZWQgZGVmYXVsdCBjYW4gYmUgaW52b2tlZC4gSWYgdGhpcyBpcyBub3QKLSAqIHByb3ZpZGVkLCB0aGUgVW5pY29kZSBjb2RlIHBvaW50IGNvbGxhdGlvbgotICogKGh0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zL2NvbGxhdGlvbi9jb2RlcG9pbnQpIGlzIHVzZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgRm5EZWZhdWx0Q29sbGF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCi0JcHVibGljIEZuRGVmYXVsdENvbGxhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkZWZhdWx0LWNvbGxhdGlvbiIpLCAwKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCXJzLmFkZChuZXcgWFNTdHJpbmcoZHluYW1pY19jb250ZXh0KCkuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpKSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EaXN0aW5jdFZhbHVlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRpc3RpbmN0VmFsdWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYzkwNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRpc3RpbmN0VmFsdWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZGlzdGluY3QtdmFsdWVzIGNvbXBhcmlzb24gbG9naWMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlIGlzIHByb2JhYmx5IGFuIGVhc2llciB3YXkgdG8gZG8gdGhlIGNvbXBhcmlzb24uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHNlcXVlbmNlIHRoYXQgcmVzdWx0cyBmcm9tIHJlbW92aW5nIGZyb20gJGFyZyBhbGwgYnV0IG9uZSBvZiBhCi0gKiBzZXQgb2YgdmFsdWVzIHRoYXQgYXJlIGVxIHRvIG9uZSBvdGhlci4gVmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkLCBpLmUuCi0gKiB0aGUgZXEgb3BlcmF0b3IgaXMgbm90IGRlZmluZWQgZm9yIHRoZWlyIHR5cGVzLCBhcmUgY29uc2lkZXJlZCB0byBiZQotICogZGlzdGluY3QuIFZhbHVlcyBvZiB0eXBlIHhkdDp1bnR5cGVkQXRvbWljIGFyZSBjb21wYXJlZCBhcyBpZiB0aGV5IHdlcmUgb2YKLSAqIHR5cGUgeHM6c3RyaW5nLiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyBpcyByZXR1cm5lZCBpcwotICogaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5EaXN0aW5jdFZhbHVlcyBleHRlbmRzIEFic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGlzdGluY3RWYWx1ZXMuCi0JICovCi0JcHVibGljIEZuRGlzdGluY3RWYWx1ZXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGlzdGluY3QtdmFsdWVzIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkaXN0aW5jdF92YWx1ZXMoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIERpc3RpbmN0LXZhbHVlcyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkaXN0aW5jdC12YWx1ZXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGlzdGluY3RfdmFsdWVzKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlpZiAoY2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCX0KLQkJCi0JCVN0cmluZyBjb2xsYXRpb25VUkkgPSBjb250ZXh0LmRlZmF1bHRfY29sbGF0aW9uX25hbWUoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpIHsKLQkJCVhTU3RyaW5nIGNvbGxhdGlvbiA9IChYU1N0cmluZykgYXJnMi5maXJzdCgpOwotCQkJY29sbGF0aW9uVVJJID0gY29sbGF0aW9uLnN0cmluZ192YWx1ZSgpOwotCQl9Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnMS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkJaWYgKCFjb250YWlucyhycywgKEFueUF0b21pY1R5cGUpIGF0LCBjb250ZXh0LCBjb2xsYXRpb25VUkkpKQotCQkJCXJzLmFkZChhdCk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIENvbnRhaW5zIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gcnMKLQkgKiAgICAgICAgICAgIGlucHV0MSBleHByZXNzaW9uIHNlcXVlbmNlLgotCSAqIEBwYXJhbSBpdGVtCi0JICogICAgICAgICAgICBpbnB1dDIgZXhwcmVzc2lvbiBvZiBhbnkgYXRvbWljIHR5cGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gY29udGFpbnMoUmVzdWx0U2VxdWVuY2UgcnMsIEFueUF0b21pY1R5cGUgaXRlbSwKLQkJCUR5bmFtaWNDb250ZXh0IGNvbnRleHQsIFN0cmluZyBjb2xsYXRpb25VUkkpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoIShpdGVtIGluc3RhbmNlb2YgQ21wRXEpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiBoYXNWYWx1ZShycywgaXRlbSwgY29udGV4dCwgY29sbGF0aW9uVVJJKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZGNhOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRvYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTE1OSAtIGZpeCBkb2N1bWVudCBsb2FkaW5nIGFuZCByZXNvbHZpbmcgVVJJcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHJpZXZlcyBhIGRvY3VtZW50IHVzaW5nIGFuIHhzOmFueVVSSSBzdXBwbGllZCBhcyBhbiB4czpzdHJpbmcuIElmICR1cmkgaXMKLSAqIG5vdCBhIHZhbGlkIHhzOmFueVVSSSwgYW4gZXJyb3IgaXMgcmFpc2VkIFtlcnI6Rk9EQzAwMDVdLiBJZiBpdCBpcyBhIHJlbGF0aXZlCi0gKiBVUkkgUmVmZXJlbmNlLCBpdCBpcyByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgdmFsdWUgb2YgdGhlIGJhc2UgVVJJIHByb3BlcnR5Ci0gKiBmcm9tIHRoZSBzdGF0aWMgY29udGV4dC4gVGhlIHJlc3VsdGluZyBhYnNvbHV0ZSBVUkkgUmVmZXJlbmNlIGlzIGNhc3QgdG8gYW4KLSAqIHhzOnN0cmluZy4gSWYgdGhlIEF2YWlsYWJsZSBkb2N1bWVudHMgZGlzY3Vzc2VkIGluIFNlY3Rpb24gMi4xLjIgRHluYW1pYwotICogQ29udGV4dFhQIHByb3ZpZGVzIGEgbWFwcGluZyBmcm9tIHRoaXMgc3RyaW5nIHRvIGEgZG9jdW1lbnQgbm9kZSwgdGhlCi0gKiBmdW5jdGlvbiByZXR1cm5zIHRoYXQgZG9jdW1lbnQgbm9kZS4gSWYgdGhlIEF2YWlsYWJsZSBkb2N1bWVudHMgbWFwcyB0aGUKLSAqIHN0cmluZyB0byBhbiBlbXB0eSBzZXF1ZW5jZSwgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzZXF1ZW5jZS4gSWYKLSAqIHRoZSBBdmFpbGFibGUgZG9jdW1lbnRzIHByb3ZpZGVzIG5vIG1hcHBpbmcgZm9yIHRoZSBzdHJpbmcsIGFuIGVycm9yIGlzCi0gKiByYWlzZWQgW2VycjpGT0RDMDAwNV0uCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRvYyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRvYy4KLQkgKi8KLQlwdWJsaWMgRm5Eb2MoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZG9jIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkb2MoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIERvYyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRvYyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkb2MoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVN0cmluZyB1cmkgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJVVJJIHJlc29sdmVkID0gZGMucmVzb2x2ZV91cmkodXJpKTsKLQkJaWYgKHJlc29sdmVkID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZF9kb2MobnVsbCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBkYy5nZXRfZG9jKHJlc29sdmVkKTsKLQkJaWYgKHJzID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZG9jX25vdF9mb3VuZChudWxsKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRvY3VtZW50VXJpLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jdW1lbnRVcmkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmYzg3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jdW1lbnRVcmkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnMjc0NzMxIC0gaW1wbGVtZW50YXRpb24gb2YgZm46ZG9jdW1lbnQtdXJpIGZ1bmN0aW9uCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MTE1OSAtIGZpeCBkb2N1bWVudCBsb2FkaW5nIGFuZCByZXNvbHZpbmcgVVJJcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZG9jdW1lbnQtdXJpIHByb3BlcnR5IGZvciAkYXJnIGFzIGRlZmluZWQgYnkgdGhlCi0gKiBkbTpkb2N1bWVudC11cmkgYWNjZXNzb3IgZnVuY3Rpb24gZGVmaW5lZCBpbiBTZWN0aW9uIDYuMS4yIEFjY2Vzc29yc0RNLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4gUmV0dXJucyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlIGlmIHRoZSBub2RlIGlzIG5vdCBhIGRvY3VtZW50IG5vZGUgb3IgaWYgaXRzIGRvY3VtZW50LXVyaSBwcm9wZXJ0eQotICogaXMgYSByZWxhdGl2ZSBVUkkuIE90aGVyd2lzZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBVUkkgZXhwcmVzc2VkIGFzIGFuCi0gKiB4czpzdHJpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRvY3VtZW50VXJpIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRG9jdW1lbnRVcmkuCi0JICovCi0JcHVibGljIEZuRG9jdW1lbnRVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZG9jdW1lbnQtdXJpIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkb2N1bWVudF91cmkoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRG9jdW1lbnQtVXJpIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRvY3VtZW50LXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkb2N1bWVudF91cmkoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJICByZXR1cm4gcnM7Ci0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpZiAoIShudCBpbnN0YW5jZW9mIERvY1R5cGUpKQotCQkgIHJldHVybiByczsKLQotCQlEb2NUeXBlIGR0ID0gKERvY1R5cGUpIG50OwotCQlTdHJpbmcgZG9jdW1lbnRVUkkgPSBkdC52YWx1ZSgpLmdldERvY3VtZW50VVJJKCk7Ci0JCQotCQlpZiAoZG9jdW1lbnRVUkkgIT0gbnVsbCkgewotCQkJWFNBbnlVUkkgZG9jVXJpID0gbmV3IFhTQW55VVJJKGRvY3VtZW50VVJJKTsKLQkJCXJzLmFkZChkb2NVcmkpOwotCQl9Ci0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW1wdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FbXB0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmMxODlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FbXB0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlOwotICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KLSAqLwotcHVibGljIGNsYXNzIEZuRW1wdHkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRW1wdHkuCi0JICovCi0JcHVibGljIEZuRW1wdHkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZW1wdHkiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVtcHR5KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEVtcHR5IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmVtcHR5IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVtcHR5KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHRydWUpKTsKLQkJZWxzZQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVuY29kZUZvclVSSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVuY29kZUZvclVSSS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzY0NWNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FbmNvZGVGb3JVUkkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGF2aWQgQ2FydmVyLCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI4NTMyMSAtIGluaXRpYWwgYXBpIGFuZCBpbXBsZW1lbnRhdGlvbiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUzMTkgLSBmaXggVVRGLTggZXNjYXBpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogPHA+Ci0gKiBGdW5jdGlvbiB0byBhcHBseSBVUkkgZXNjYXBpbmcgcnVsZXMuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOmVuY29kZS1mb3ItdXJpKCR1cmktcGFydCBhcyB4czpzdHJpbmc/KQotICogYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyBhcHBsaWVzIHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgKHdpdGggb25lIGV4Y2VwdGlvbiksIHRvIHRoZSBzdHJpbmcKLSAqIHN1cHBsaWVkIGFzICR1cmktcGFydCwgd2hpY2ggdHlwaWNhbGx5IHJlcHJlc2VudHMgYWxsIG9yIHBhcnQgb2YgYSBVUkkuIFRoZQotICogZWZmZWN0IG9mIHRoZSBmdW5jdGlvbiBpcyB0byBlc2NhcGUgYSBzZXQgb2YgaWRlbnRpZmllZCBjaGFyYWN0ZXJzIGluIHRoZQotICogc3RyaW5nLiBFYWNoIHN1Y2ggY2hhcmFjdGVyIGlzIHJlcGxhY2VkIGluIHRoZSBzdHJpbmcgYnkgYW4gZXNjYXBlIHNlcXVlbmNlLAotICogd2hpY2ggaXMgZm9ybWVkIGJ5IGVuY29kaW5nIHRoZSBjaGFyYWN0ZXIgYXMgYSBzZXF1ZW5jZSBvZiBvY3RldHMgaW4gVVRGLTgsCi0gKiBhbmQgdGhlbiByZXByZXNlbnRpbmcgZWFjaCBvZiB0aGVzZSBvY3RldHMgaW4gdGhlIGZvcm0gJUhILCB3aGVyZSBISCBpcyB0aGUKLSAqIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvY3RldC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiAkdXJpLXBhcnQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcuCi0gKiA8L3A+Ci0gKiAKLSAqIAotICogPHA+Ci0gKiBUbyBlbnN1cmUgdGhhdCBlc2NhcGVkIFVSSXMgY2FuIGJlIGNvbXBhcmVkIHVzaW5nIHN0cmluZyBjb21wYXJpc29uCi0gKiBmdW5jdGlvbnMsIHRoaXMgZnVuY3Rpb24gbXVzdCBhbHdheXMgZ2VuZXJhdGUgaGV4YWRlY2ltYWwgdmFsdWVzIHVzaW5nIHRoZQotICogdXBwZXItY2FzZSBsZXR0ZXJzIEEtRi4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuRW5jb2RlRm9yVVJJIGV4dGVuZHMgQWJzdHJhY3RVUklGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRXNjYXBlLWZvci1VcmkuCi0JICovCi0JcHVibGljIEZuRW5jb2RlRm9yVVJJKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImVuY29kZS1mb3ItdXJpIiksIDEsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBhZnRlciBhcHBsaWNhdGlvbiBvZiB0aGUgVVJJCi0JICogICAgICAgICBlc2NhcGluZyBydWxlcy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVzY2FwZV91cmkoYXJncywgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVuZHNXaXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5kc1dpdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI1MTcyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5kc1dpdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIG9mICRhcmcxIGVuZHMgd2l0aAotICogYSBzZXF1ZW5jZSBvZiBjb2xsYXRpb24gdW5pdHMgdGhhdCBwcm92aWRlcyBhIG1pbmltYWwgbWF0Y2ggdG8gdGhlIGNvbGxhdGlvbgotICogdW5pdHMgb2YgTSRhcmcyIGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQgaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuRW5kc1dpdGggZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5FbmRzV2l0aC4KLQkgKi8KLQlwdWJsaWMgRm5FbmRzV2l0aCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJlbmRzLXdpdGgiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVuZHNfd2l0aChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBFbmRzLXdpdGggb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZW5kcy13aXRoIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVuZHNfd2l0aChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgc3RyMSA9ICIiOwotCQlTdHJpbmcgc3RyMiA9ICIiOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmICghYXJnMi5lbXB0eSgpKQotCQkJc3RyMiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlpbnQgc3RyMWxlbiA9IHN0cjEubGVuZ3RoKCk7Ci0JCWludCBzdHIybGVuID0gc3RyMi5sZW5ndGgoKTsKLQotCQlpZiAoc3RyMWxlbiA9PSAwICYmIHN0cjJsZW4gIT0gMCkgewotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQkJCXJldHVybiByczsKLQkJfQotCQlpZiAoc3RyMmxlbiA9PSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlpZiAoc3RyMS5lbmRzV2l0aChzdHIyKSkKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHRydWUpKTsKLQkJZWxzZQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWI4M2VlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODE0OSAtIGFkZCByZW1haW5pbmcgZm46ZXJyb3IgZnVuY3Rpb25hbGl0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgZm46ZXJyb3IgZnVuY3Rpb24gY2F1c2VzIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBvdXRlcm1vc3QgWFF1ZXJ5IG9yCi0gKiB0cmFuc2Zvcm1hdGlvbiB0byBzdG9wLiBXaGlsZSB0aGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybnMgYSB2YWx1ZSwgYW4gZXJyb3IsCi0gKiBpZiBpdCBvY2N1cnMsIGlzIHJldHVybmVkIHRvIHRoZSBleHRlcm5hbCBwcm9jZXNzaW5nIGVudmlyb25tZW50IGFzIGFuCi0gKiB4czphbnlVUkkgb3IgYW4geHM6UU5hbWUuIFRoZSBlcnJvciB4czphbnlVUkkgaXMgZGVyaXZlZCBmcm9tIHRoZSBlcnJvcgotICogeHM6UU5hbWUuIEFuIGVycm9yIHhzOlFOYW1lIHdpdGggbmFtZXNwYWNlIFVSSSBOUyBhbmQgbG9jYWwgcGFydCBMUCB3aWxsIGJlCi0gKiByZXR1cm5lZCBhcyB0aGUgeHM6YW55VVJJIE5TI0xQLiBUaGUgbWV0aG9kIGJ5IHdoaWNoIHRoZSB4czphbnlVUkkgb3IKLSAqIHhzOlFOYW1lIGlzIHJldHVybmVkIHRvIHRoZSBleHRlcm5hbCBwcm9jZXNzaW5nIGVudmlyb25tZW50IGlzIGltcGxlbWVudGF0aW9uCi0gKiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkVycm9yIGV4dGVuZHMgRnVuY3Rpb24gewotCi0JcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0IF9leHBlY3RlZF9hcmdzOwotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdCBfZXhwZWN0ZWRfYXJnczE7Ci0KLQkvLyBYWFggb3ZlcmxvYWRlZC4uLgotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkVycm9yLgotCSAqLwotCXB1YmxpYyBGbkVycm9yKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImVycm9yIiksIDAsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIERpZmZlcmVudGlhdGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUgaXMgb25lIChyZXF1aXJlZCkgYXJndW1lbnQgb3Igd2hhdGV2ZXIuCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBhcmdzLnNpemUoKSA9PSAxID8gZXhwZWN0ZWRfYXJnczEoKSA6IGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUU5hbWUgY29kZSA9IG51bGw7Ci0JCVJlc3VsdFNlcXVlbmNlIGl0ZW1zID0gbnVsbDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKLQkJCi0JCS8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJncwotCQlJdGVyYXRvciBpdCA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCWlmIChpdC5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIHJzUU5hbWUgPSAoUmVzdWx0U2VxdWVuY2UpaXQubmV4dCgpOwotCQkJLy8gZm9yIGFyaXR5IDIgYW5kIDMsIHRoZSBjb2RlIGlzIG5vdCBtYW5kYXRvcnksIGFzIGluIGZuOmNvZGUoKCksICJkZXNjcmlwdGlvbikuIEhhbmRsZSB0aGlzOgotCQkJaWYgKCEgcnNRTmFtZS5lbXB0eSgpKSBjb2RlID0gKFFOYW1lKXJzUU5hbWUuZmlyc3QoKTsKLQkJfQotCQkvLyBOZXh0IGFyZyAoaWYgcHJlc2VudCkgaXMgdGhlIGRlc2NyaXB0aW9uCi0JCWlmIChpdC5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIHJzRGVzY3JpcHRpb24gPSAoUmVzdWx0U2VxdWVuY2UpaXQubmV4dCgpOwotCQkJZGVzY3JpcHRpb24gPSAoKFhTU3RyaW5nKXJzRGVzY3JpcHRpb24uZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCQkvLyBGaW5hbCBhcmcgKGlmIHByZXNlbnQpIGlzIHRoZSBsaXN0IG9mIGl0ZW1zCi0JCWlmIChpdC5oYXNOZXh0KCkpIHsKLQkJCWl0ZW1zID0gKFJlc3VsdFNlcXVlbmNlKWl0Lm5leHQoKTsKLQkJfQotCQotCQkvLyBIYW5kbGUgdGhlIGNvZGUgaWYgbWlzc2luZwotCQlpZiAoY29kZSA9PSBudWxsKSBjb2RlID0gbmV3IFFOYW1lKCJlcnIiLCAiRk9FUjAwMDAiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNS94cXQtZXJyb3JzIik7Ci0JCQotCQlyZXR1cm4gZXJyb3IoY29kZSwgZGVzY3JpcHRpb24sIGl0ZW1zKTsKLQl9Ci0KLQkvKioKLQkgKiBFcnJvciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjplcnJvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBlcnJvcihRTmFtZSBlcnJvciwgU3RyaW5nIGRlc2NyaXB0aW9uLCBSZXN1bHRTZXF1ZW5jZSBpdGVtcykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJdGhyb3cgRHluYW1pY0Vycm9yLnVzZXJfZXJyb3IoZXJyb3IubmFtZXNwYWNlKCksIGVycm9yLmxvY2FsKCksIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShBbnlUeXBlLmNsYXNzLCBTZXFUeXBlLk9DQ19TVEFSKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJnczEoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJnczEgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MxID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MxLmFkZChuZXcgU2VxVHlwZShuZXcgUU5hbWUoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzMTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXNjYXBlSFRNTFVyaS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVzY2FwZUhUTUxVcmkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEyNTI2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXNjYXBlSFRNTFVyaS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gcmVuYW1lZCB0byBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MzE5IC0gZml4IFVURi04IGVzY2FwaW5nLCBhbmQgZml4IGFyaXR5IGJ1ZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIGFwcGx5IFVSSSBlc2NhcGluZyBydWxlcy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46ZXNjYXBlLWh0bWwtdXJpKCR1cmktcGFydCBhcyB4czpzdHJpbmc/LCAkZXNjYXBlLXJlc2VydmVkIGFzIHhzOmJvb2xlYW4pCi0gKiBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGFwcGxpZXMgdGhlIFVSSSBlc2NhcGluZyBydWxlcyAod2l0aCBvbmUgZXhjZXB0aW9uKSwgdG8gdGhlIHN0cmluZwotICogc3VwcGxpZWQgYXMgJHVyaS1wYXJ0LCB3aGljaCB0eXBpY2FsbHkgcmVwcmVzZW50cyBhbGwgb3IgcGFydCBvZiBhIFVSSS4gVGhlCi0gKiBlZmZlY3Qgb2YgdGhlIGZ1bmN0aW9uIGlzIHRvIGVzY2FwZSBhIHNldCBvZiBpZGVudGlmaWVkIGNoYXJhY3RlcnMgaW4gdGhlCi0gKiBzdHJpbmcuIEVhY2ggc3VjaCBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgaW4gdGhlIHN0cmluZyBieSBhbiBlc2NhcGUgc2VxdWVuY2UsCi0gKiB3aGljaCBpcyBmb3JtZWQgYnkgZW5jb2RpbmcgdGhlIGNoYXJhY3RlciBhcyBhIHNlcXVlbmNlIG9mIG9jdGV0cyBpbiBVVEYtOCwKLSAqIGFuZCB0aGVuIHJlcHJlc2VudGluZyBlYWNoIG9mIHRoZXNlIG9jdGV0cyBpbiB0aGUgZm9ybSAlSEgsIHdoZXJlIEhIIGlzIHRoZQotICogaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0LgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgdGhlIGJvb2xlYW4KLSAqIGFyZ3VtZW50ICRlc2NhcGUtcmVzZXJ2ZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgJHVyaS1wYXJ0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgemVyby1sZW5ndGggc3RyaW5nLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmICRlc2NhcGUtcmVzZXJ2ZWQgaXMgdHJ1ZSwgYWxsIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgb3RoZXIgdGhhbiB0aGUgbG93ZXIKLSAqIGNhc2UgbGV0dGVycyBhLXosIHRoZSB1cHBlciBjYXNlIGxldHRlcnMgQS1aLCB0aGUgZGlnaXRzIDAtOSwgdGhlIFBFUkNFTlQKLSAqIFNJR04gIiUiIGFuZCB0aGUgTlVNQkVSIFNJR04gIiMiLCBhcyB3ZWxsIGFzIGNlcnRhaW4gb3RoZXIgY2hhcmFjdGVyczoKLSAqIHNwZWNpZmljYWxseSwgSFlQSEVOLU1JTlVTICgiLSIpLCBMT1cgTElORSAoIl8iKSwgRlVMTCBTVE9QICIuIiwgRVhDTEFNQVRJT04KLSAqIE1BUksgIiEiLCBUSUxERSAifiIsIEFTVEVSSVNLICIqIiwgQVBPU1RST1BIRSAiJyIsIExFRlQgUEFSRU5USEVTSVMgIigiLCBhbmQKLSAqIFJJR0hUIFBBUkVOVEhFU0lTICIpIi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiAkZXNjYXBlLXJlc2VydmVkIGlzIGZhbHNlLCBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mCi0gKiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBlc2NhcGVkLiBUaGVzZSBhcmUgdGhlIGZvbGxvd2luZzogU0VNSUNPTE9OICI7IiwKLSAqIFNPTElEVVMgIi8iLCBRVUVTVElPTiBNQVJLICI/IiwgQ09MT04gIjoiLCBDT01NRVJDSUFMIEFUICJAIiwgQU1QRVJTQU5EICImIiwKLSAqIEVRVUFMUyBTSUdOICI9IiwgUExVUyBTSUdOICIrIiwgRE9MTEFSIFNJR04gIiQiLCBDT01NQSAiLCIsIExFRlQgU1FVQVJFCi0gKiBCUkFDS0VUICJbIiBhbmQgUklHSFQgU1FVQVJFIEJSQUNLRVQgIl0iLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRvIGVuc3VyZSB0aGF0IGVzY2FwZWQgVVJJcyBjYW4gYmUgY29tcGFyZWQgdXNpbmcgc3RyaW5nIGNvbXBhcmlzb24KLSAqIGZ1bmN0aW9ucywgdGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyBnZW5lcmF0ZSBoZXhhZGVjaW1hbCB2YWx1ZXMgdXNpbmcgdGhlCi0gKiB1cHBlci1jYXNlIGxldHRlcnMgQS1GLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIEdlbmVyYWxseSwgJGVzY2FwZS1yZXNlcnZlZCBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiBlc2NhcGluZyBhIHN0cmluZyB0aGF0Ci0gKiBpcyB0byBmb3JtIGEgc2luZ2xlIHBhcnQgb2YgYSBVUkksIGFuZCB0byBmYWxzZSB3aGVuIGVzY2FwaW5nIGFuIGVudGlyZSBVUkkKLSAqIG9yIFVSSSByZWZlcmVuY2UuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogU2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBlc2NhcGUgdGhlIFBFUkNFTlQgU0lHTiAiJSIgYW5kIHRoaXMgY2hhcmFjdGVyCi0gKiBpcyBub3QgYWxsb3dlZCBpbiBhIFVSSSwgdXNlcnMgd2lzaGluZyB0byBjb252ZXJ0IGNoYXJhY3RlciBzdHJpbmdzLCBzdWNoIGFzCi0gKiBmaWxlIG5hbWVzLCB0aGF0IGluY2x1ZGUgIiUiIHRvIGEgVVJJIHNob3VsZCBtYW51YWxseSBlc2NhcGUgIiUiIGJ5IHJlcGxhY2luZwotICogaXQgd2l0aCAiJTI1Ii4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuRXNjYXBlSFRNTFVyaSBleHRlbmRzIEFic3RyYWN0VVJJRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkVzY2FwZS1odG1sLVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5Fc2NhcGVIVE1MVXJpKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImVzY2FwZS1odG1sLXVyaSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudHMgYWZ0ZXIgYXBwbGljYXRpb24gb2YgdGhlIFVSSQotCSAqICAgICAgICAgZXNjYXBpbmcgcnVsZXMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBlc2NhcGVfdXJpKGFyZ3MsIGZhbHNlLCBmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4YWN0bHlPbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FeGFjdGx5T25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZDBkODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4YWN0bHlPbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyAkYXJnIGlmIGl0IGNvbnRhaW5zIGV4YWN0bHkgb25lIGl0ZW0uIE90aGVyd2lzZSwgcmFpc2VzIGFuIGVycm9yCi0gKiBbZXJyOkZPUkcwMDA1XS4gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mICRhcmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkV4YWN0bHlPbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRXhhY3RseU9uZS4KLQkgKi8KLQlwdWJsaWMgRm5FeGFjdGx5T25lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImV4YWN0bHktb25lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBleGFjdGx5X29uZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBFeGFjdGx5LW9uZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpleGFjdGx5LW9uZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBleGFjdGx5X29uZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5ub3Rfb25lKG51bGwpOwotCi0JCXJldHVybiBhcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4aXN0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4aXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIwMzk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FeGlzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyBub3QgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlOwotICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KLSAqLwotcHVibGljIGNsYXNzIEZuRXhpc3RzIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkV4aXN0cy4KLQkgKi8KLQlwdWJsaWMgRm5FeGlzdHMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXhpc3RzIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBleGlzdHMoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRXhpc3RzIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmV4aXN0cyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBleGlzdHMoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQkJZWxzZQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRmFsc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GYWxzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmE5YjVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GYWxzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHhzOmJvb2xlYW4gdmFsdWUgZmFsc2UuIEVxdWl2YWxlbnQgdG8geHM6Ym9vbGVhbigiMCIpLgotICovCi1wdWJsaWMgY2xhc3MgRm5GYWxzZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5GYWxzZS4KLQkgKi8KLQlwdWJsaWMgRm5GYWxzZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJmYWxzZSIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZm5fZmFsc2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRmFsc2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZmFsc2Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fZmFsc2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRmxvb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GbG9vci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjY1OWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GbG9vci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbGFyZ2VzdCAoY2xvc2VzdCB0byBwb3NpdGl2ZSBpbmZpbml0eSkgbnVtYmVyIHdpdGggbm8gZnJhY3Rpb25hbAotICogcGFydCB0aGF0IGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mICRhcmcuIElmIHR5cGUgb2YgJGFyZyBpcyBvbmUgb2YKLSAqIHRoZSBmb3VyIG51bWVyaWMgdHlwZXMgeHM6ZmxvYXQsIHhzOmRvdWJsZSwgeHM6ZGVjaW1hbCBvciB4czppbnRlZ2VyIHRoZSB0eXBlCi0gKiBvZiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mICRhcmcuIElmIHRoZSB0eXBlIG9mICRhcmcgaXMgYSB0eXBlCi0gKiBkZXJpdmVkIGZyb20gb25lIG9mIHRoZSBudW1lcmljIHR5cGVzLCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBiYXNlCi0gKiBudW1lcmljIHR5cGUuIEZvciBmbG9hdCBhbmQgZG91YmxlIGFyZ3VtZW50cywgaWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlCi0gKiB6ZXJvICgrMCksIHRoZW4gcG9zaXRpdmUgemVybyAoKzApIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgbmVnYXRpdmUKLSAqIHplcm8gKC0wKSwgdGhlbiBuZWdhdGl2ZSB6ZXJvICgtMCkgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkZsb29yIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkZsb29yLgotCSAqLwotCXB1YmxpYyBGbkZsb29yKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImZsb29yIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9mbG9vcihhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogRmxvb3Igb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpmbG9vciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9mbG9vcihSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCU51bWVyaWNUeXBlIG50ID0gRm5BYnMuZ2V0X3NpbmdsZV9udW1lcmljX2FyZyhhcmcpOwotCi0JCS8vIGVtcHR5IGFyZwotCQlpZiAobnQgPT0gbnVsbCkKLQkJCXJldHVybiByczsKLQotCQlycy5hZGQobnQuZmxvb3IoKSk7Ci0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tRGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGNiNmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21EYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDAgYW5kIDIzLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogaG91cnMgY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuSG91cnNGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ib3Vyc0Zyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5Ib3Vyc0Zyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJob3Vycy1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBob3Vyc19mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBIb3Vycy1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmhvdXJzLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaG91cnNfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQuaG91cigpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tRHVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21EdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTVhNzEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZXhwZWN0ZWQgeHM6ZHVyYXRpb24gYXJndW1lbnQuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGhvdXJzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuSG91cnNGcm9tRHVyYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ib3Vyc0Zyb21EdXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRm5Ib3Vyc0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJob3Vycy1mcm9tLWR1cmF0aW9uIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBob3Vyc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEhvdXJzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46aG91cnMtZnJvbS1kdXJhdGlvbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBob3Vyc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiBkdGQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdGQuaG91cnMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21UaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTI5ZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAwIGFuZCAyMywgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUKLSAqIHZhbHVlIG9mIHRoZSBob3VycyBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Ib3Vyc0Zyb21UaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSG91cnNGcm9tVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5Ib3Vyc0Zyb21UaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImhvdXJzLWZyb20tdGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gaG91cnNfZnJvbV90aW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEhvdXJzLWZyb20tVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpob3Vycy1mcm9tLXRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaG91cnNfZnJvbV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNUaW1lIGR0ID0gKFhTVGltZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC5ob3VyKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSUQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTU2ODhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmQgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogCSAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgxMTY4IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHNlcXVlbmNlIG9mIGVsZW1lbnQgbm9kZXMgdGhhdCBoYXZlIGFuIElEIHZhbHVlIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBvbmUKLSAqIG9yIG1vcmUgb2YgdGhlIElEUkVGIHZhbHVlcyBzdXBwbGllZCBpbiAkYXJnIC4KLSAqLwotcHVibGljIGNsYXNzIEZuSUQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW5zZXJ0QmVmb3JlLgotCSAqLwotCXB1YmxpYyBGbklEKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImlkIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpZChhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0LUJlZm9yZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjppbnNlcnQtYmVmb3JlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGlkKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCi0JCUl0ZXJhdG9yIGFyZ0l0ID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgaWRyZWZSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQlTdHJpbmdbXSBpZHJlZnN0ID0gaWRyZWZSUy5maXJzdCgpLnN0cmluZ192YWx1ZSgpLnNwbGl0KCIgIik7Ci0KLQkJQXJyYXlMaXN0IGlkcmVmcyA9IGNyZWF0ZUlEUmVmcyhpZHJlZnN0KTsKLQkJUmVzdWx0U2VxdWVuY2Ugbm9kZUFyZyA9IG51bGw7Ci0JCU5vZGVUeXBlIG5vZGVUeXBlID0gbnVsbDsKLQkJaWYgKGFyZ0l0Lmhhc05leHQoKSkgewotCQkJbm9kZUFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQkJbm9kZVR5cGUgPSAoTm9kZVR5cGUpbm9kZUFyZy5maXJzdCgpOwotCQl9IGVsc2UgewotCQkJaWYgKGNvbnRleHQuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQl9Ci0JCQlpZiAoIShjb250ZXh0LmNvbnRleHRfaXRlbSgpIGluc3RhbmNlb2YgTm9kZVR5cGUpKSB7Ci0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCX0KLQkJCW5vZGVUeXBlID0gKE5vZGVUeXBlKSBjb250ZXh0LmNvbnRleHRfaXRlbSgpOwotCQkJaWYgKG5vZGVUeXBlLm5vZGVfdmFsdWUoKS5nZXRPd25lckRvY3VtZW50KCkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCU5vZGUgbm9kZSA9IG5vZGVUeXBlLm5vZGVfdmFsdWUoKTsKLQkJaWYgKG5vZGUuZ2V0T3duZXJEb2N1bWVudCgpID09IG51bGwpIHsKLQkJCS8vIFczQyBUZXN0IHN1aXRlIHNlZW1zIHRvIHdhbnQgWFBEWTAwMDIKLQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQkvL3Rocm93IER5bmFtaWNFcnJvci5ub0NvbnRleHREb2MoKTsKLQkJfQotCQkKLQkJaWYgKGhhc0lEUkVGKGlkcmVmcywgbm9kZSkpIHsKLQkJCUVsZW1lbnRUeXBlIGVsZW1lbnQgPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpIG5vZGUpOwotCQkJcnMuYWRkKGVsZW1lbnQpOwotCQl9Ci0JCQotCQlycyA9IHByb2Nlc3NBdHRyaWJ1dGVzKG5vZGUsIGlkcmVmcywgcnMpOwotCQlycyA9IHByb2Nlc3NDaGlsZE5vZGVzKG5vZGUsIGlkcmVmcywgcnMpOwotCi0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0IGNyZWF0ZUlEUmVmcyhTdHJpbmdbXSBpZFJlZnRva2VucykgewotCQlBcnJheUxpc3QgeHNpZFJlZiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpZFJlZnRva2Vucy5sZW5ndGg7IGkrKykgewotCQkJWFNJRFJFRiBpZHJlZiA9IG5ldyBYU0lEUkVGKGlkUmVmdG9rZW5zW2ldKTsKLQkJCXhzaWRSZWYuYWRkKGlkcmVmKTsKLQkJfQotCQlyZXR1cm4geHNpZFJlZjsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcHJvY2Vzc0NoaWxkTm9kZXMoTm9kZSBub2RlLCBMaXN0IGlkcmVmcywgUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJaWYgKCFub2RlLmhhc0NoaWxkTm9kZXMoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlOb2RlTGlzdCBub2RlTGlzdCA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQlmb3IgKGludCBub2RlY250ID0gMDsgbm9kZWNudCA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBub2RlY250KyspIHsKLQkJCU5vZGUgY2hpbGROb2RlID0gbm9kZUxpc3QuaXRlbShub2RlY250KTsKLQkJCWlmIChjaGlsZE5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAhaXNEdXBsaWNhdGUoY2hpbGROb2RlLCBycykpIHsKLQkJCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KWNoaWxkTm9kZSk7Ci0JCQkJaWYgKGVsZW1lbnQuaXNJRCgpKSB7Ci0JCQkJCWlmIChoYXNJRFJFRihpZHJlZnMsIGNoaWxkTm9kZSkpIHsKLQkJCQkJCXJzLmFkZChlbGVtZW50KTsKLQkJCQkJfQotCQkJCX0gCi0JCQkJcnMgPSBwcm9jZXNzQXR0cmlidXRlcyhjaGlsZE5vZGUsIGlkcmVmcywgcnMpOwotCQkJCXJzID0gcHJvY2Vzc0NoaWxkTm9kZXMoY2hpbGROb2RlLCBpZHJlZnMsIHJzKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJzOwotCi0JfQotCQotCXByaXZhdGUgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHByb2Nlc3NBdHRyaWJ1dGVzKE5vZGUgbm9kZSwgTGlzdCBpZHJlZnMsIFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCWlmICghbm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCQkKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZUxpc3QgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJZm9yIChpbnQgYXRzdWIgPSAwOyBhdHN1YiA8IGF0dHJpYnV0ZUxpc3QuZ2V0TGVuZ3RoKCk7IGF0c3ViKyspIHsKLQkJCUF0dHIgYXROb2RlID0gKEF0dHIpIGF0dHJpYnV0ZUxpc3QuaXRlbShhdHN1Yik7Ci0JCQlOb2RlVHlwZSBhdFR5cGUgPSBuZXcgQXR0clR5cGUoYXROb2RlKTsKLQkJCWlmIChhdFR5cGUuaXNJRCgpKSB7Ci0JCQkJaWYgKGhhc0lEUkVGKGlkcmVmcywgYXROb2RlKSkgewotCQkJCQlpZiAoIWlzRHVwbGljYXRlKG5vZGUsIHJzKSkgewotCQkJCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudClub2RlKTsKLQkJCQkJCXJzLmFkZChlbGVtZW50KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzSURSRUYoTGlzdCBpZHJlZnMsIE5vZGUgbm9kZSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGlkcmVmcy5zaXplKCk7IGkrKykgewotCQkJWFNJRFJFRiBpZHJlZiA9IChYU0lEUkVGKSBpZHJlZnMuZ2V0KGkpOwotCQkJaWYgKGlkcmVmLnN0cmluZ192YWx1ZSgpLmVxdWFscyhub2RlLmdldE5vZGVWYWx1ZSgpKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0R1cGxpY2F0ZShOb2RlIG5vZGUsIFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJaWYgKGl0Lm5leHQoKS5lcXVhbHMobm9kZSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfU1RBUik7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklEUkVGLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSURSRUYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE2YmFjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSURSRUYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIAkgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MTE2OCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEZuSURSRUYgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW5zZXJ0QmVmb3JlLgotCSAqLwotCXB1YmxpYyBGbklEUkVGKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImlkcmVmIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpZHJlZihhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0LUJlZm9yZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjppbnNlcnQtYmVmb3JlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGlkcmVmKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCi0JCUl0ZXJhdG9yIGFyZ0l0ID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgaWRyZWZSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQlTdHJpbmdbXSBpZHN0ID0gaWRyZWZSUy5maXJzdCgpLnN0cmluZ192YWx1ZSgpLnNwbGl0KCIgIik7Ci0KLQkJQXJyYXlMaXN0IGlkcyA9IGNyZWF0ZUlEcyhpZHN0KTsKLQkJUmVzdWx0U2VxdWVuY2Ugbm9kZUFyZyA9IG51bGw7Ci0JCU5vZGVUeXBlIG5vZGVUeXBlID0gbnVsbDsKLQkJaWYgKGFyZ0l0Lmhhc05leHQoKSkgewotCQkJbm9kZUFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQkJbm9kZVR5cGUgPSAoTm9kZVR5cGUpbm9kZUFyZy5maXJzdCgpOwotCQl9IGVsc2UgewotCQkJaWYgKGNvbnRleHQuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQl9Ci0JCQlpZiAoIShjb250ZXh0LmNvbnRleHRfaXRlbSgpIGluc3RhbmNlb2YgTm9kZVR5cGUpKSB7Ci0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCX0KLQkJCW5vZGVUeXBlID0gKE5vZGVUeXBlKSBjb250ZXh0LmNvbnRleHRfaXRlbSgpOwotCQkJaWYgKG5vZGVUeXBlLm5vZGVfdmFsdWUoKS5nZXRPd25lckRvY3VtZW50KCkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCU5vZGUgbm9kZSA9IG5vZGVUeXBlLm5vZGVfdmFsdWUoKTsKLQkJaWYgKG5vZGUuZ2V0T3duZXJEb2N1bWVudCgpID09IG51bGwpIHsKLQkJCS8vIFczQyB0ZXN0IHN1aXRlIHNlZW1zIHRvIHdhbnQgWFBEWTAwMDIgaGVyZQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCS8vdGhyb3cgRHluYW1pY0Vycm9yLm5vQ29udGV4dERvYygpOwotCQl9Ci0JCQotCQlpZiAoaGFzSUQoaWRzLCBub2RlKSkgewotCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCkgbm9kZSk7Ci0JCQlycy5hZGQoZWxlbWVudCk7Ci0JCX0KLQkJCi0JCXJzID0gcHJvY2Vzc0F0dHJpYnV0ZXMobm9kZSwgaWRzLCBycyk7Ci0JCXJzID0gcHJvY2Vzc0NoaWxkTm9kZXMobm9kZSwgaWRzLCBycyk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgY3JlYXRlSURzKFN0cmluZ1tdIGlkdG9rZW5zKSB7Ci0JCUFycmF5TGlzdCB4c2lkID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGlkdG9rZW5zLmxlbmd0aDsgaSsrKSB7Ci0JCQlYU0lEIGlkID0gbmV3IFhTSUQoaWR0b2tlbnNbaV0pOwotCQkJeHNpZC5hZGQoaWQpOwotCQl9Ci0JCXJldHVybiB4c2lkOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBwcm9jZXNzQ2hpbGROb2RlcyhOb2RlIG5vZGUsIExpc3QgaWRzLCBSZXN1bHRTZXF1ZW5jZSBycykgewotCQlpZiAoIW5vZGUuaGFzQ2hpbGROb2RlcygpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQkJCi0JCU5vZGVMaXN0IG5vZGVMaXN0ID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCWZvciAoaW50IG5vZGVjbnQgPSAwOyBub2RlY250IDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7IG5vZGVjbnQrKykgewotCQkJTm9kZSBjaGlsZE5vZGUgPSBub2RlTGlzdC5pdGVtKG5vZGVjbnQpOwotCQkJaWYgKGNoaWxkTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFICYmICFpc0R1cGxpY2F0ZShjaGlsZE5vZGUsIHJzKSkgewotCQkJCUVsZW1lbnRUeXBlIGVsZW1lbnQgPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpY2hpbGROb2RlKTsKLQkJCQlpZiAoZWxlbWVudC5pc0lEUkVGKCkpIHsKLQkJCQkJaWYgKGhhc0lEKGlkcywgY2hpbGROb2RlKSkgewotCQkJCQkJcnMuYWRkKGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfSAKLQkJCQlycyA9IHByb2Nlc3NBdHRyaWJ1dGVzKGNoaWxkTm9kZSwgaWRzLCBycyk7Ci0JCQkJcnMgPSBwcm9jZXNzQ2hpbGROb2RlcyhjaGlsZE5vZGUsIGlkcywgcnMpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcnM7Ci0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcHJvY2Vzc0F0dHJpYnV0ZXMoTm9kZSBub2RlLCBMaXN0IGlkcmVmcywgUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJaWYgKCFub2RlLmhhc0F0dHJpYnV0ZXMoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlTGlzdCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlmb3IgKGludCBhdHN1YiA9IDA7IGF0c3ViIDwgYXR0cmlidXRlTGlzdC5nZXRMZW5ndGgoKTsgYXRzdWIrKykgewotCQkJQXR0ciBhdE5vZGUgPSAoQXR0cikgYXR0cmlidXRlTGlzdC5pdGVtKGF0c3ViKTsKLQkJCU5vZGVUeXBlIGF0VHlwZSA9IG5ldyBBdHRyVHlwZShhdE5vZGUpOwotCQkJaWYgKGF0VHlwZS5pc0lEKCkpIHsKLQkJCQlpZiAoaGFzSUQoaWRyZWZzLCBhdE5vZGUpKSB7Ci0JCQkJCWlmICghaXNEdXBsaWNhdGUobm9kZSwgcnMpKSB7Ci0JCQkJCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KW5vZGUpOwotCQkJCQkJcnMuYWRkKGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNJRChMaXN0IGlkcywgTm9kZSBub2RlKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKSB7Ci0JCQlYU0lEIGlkcmVmID0gKFhTSUQpIGlkcy5nZXQoaSk7Ci0JCQlpZiAoaWRyZWYuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRHVwbGljYXRlKE5vZGUgbm9kZSwgUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJSXRlcmF0b3IgaXQgPSBycy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlpZiAoaXQubmV4dCgpLmVxdWFscyhub2RlKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19TVEFSKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW1wbGljaXRUaW1lem9uZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkltcGxpY2l0VGltZXpvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3ODQ5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW1wbGljaXRUaW1lem9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgaW1wbGljaXQgdGltZXpvbmUgcHJvcGVydHkgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LgotICogQ29tcG9uZW50cyBvZiB0aGUgZHluYW1pYyBjb250ZXh0IGFyZSBkaXNjdXNzZWQgaW4gU2VjdGlvbiBDLjIgRHluYW1pYwotICogQ29udGV4dCBDb21wb25lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkltcGxpY2l0VGltZXpvbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW1wbGljaXRUaW1lem9uZS4KLQkgKi8KLQlwdWJsaWMgRm5JbXBsaWNpdFRpbWV6b25lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImltcGxpY2l0LXRpbWV6b25lIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpbXBsaWNpdF90aW1lem9uZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogSW1wbGljaXQtVGltZXpvbmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjppbXBsaWNpdC10aW1lem9uZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBpbXBsaWNpdF90aW1lem9uZShDb2xsZWN0aW9uIGFyZ3MsCi0JCQlEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCi0JCXRyeSB7Ci0JCQlBbnlUeXBlIHJlcyA9IChYU0R1cmF0aW9uKSBkYy50eigpLmNsb25lKCk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlcnIpIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluU2NvcGVQcmVmaXhlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluU2NvcGVQcmVmaXhlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzA5ZDc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JblNjb3BlUHJlZml4ZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBqYXZheC54bWwuWE1MQ29uc3RhbnRzOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGluLXNjb3BlLXByZWZpeGVzIGZvciB0aGUgZWxlbWVudCBhbmQgYW55IG9mIGl0J3MgYW5jZXN0b3JzLgotICovCi1wdWJsaWMgY2xhc3MgRm5JblNjb3BlUHJlZml4ZXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5QcmVmaXhGcm9tUU5hbWUKLQkgKi8KLQlwdWJsaWMgRm5JblNjb3BlUHJlZml4ZXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW4tc2NvcGUtcHJlZml4ZXMiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGluU2NvcGVQcmVmaXhlcyhhcmdzLCBfZmwuZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIFByZWZpeC1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnByZWZpeC1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGluU2NvcGVQcmVmaXhlcyhDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotLy8JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCQlDb2xsZWN0aW9uIGNhcmdzID0gYXJnczsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJICByZXR1cm4gcnM7Ci0JCQotCQlBbnlUeXBlIGFueXR5cGUgPSBhcmcxLmZpcnN0KCk7Ci0JCWlmICghKGFueXR5cGUgaW5zdGFuY2VvZiBFbGVtZW50VHlwZSkpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCX0KLQotCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gKEVsZW1lbnRUeXBlKSBhcmcxLmZpcnN0KCk7Ci0JCUxpc3QgcHJlZml4TGlzdCA9IGxvb2t1cFByZWZpeGVzKGVsZW1lbnQpOwotCQljcmVhdGVQcmVmaXhSZXN1bHRTZXQocnMsIHByZWZpeExpc3QpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcmVmaXhSZXN1bHRTZXQoUmVzdWx0U2VxdWVuY2UgcnMsIExpc3QgcHJlZml4TGlzdCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IHByZWZpeExpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBwcmVmaXhMaXN0LmdldChpKTsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcocHJlZml4KSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGxvb2t1cFByZWZpeGVzKEVsZW1lbnRUeXBlIGVsZW1lbnQpIHsKLQkJRWxlbWVudCBkb21FbG0gPSAoRWxlbWVudCkgZWxlbWVudC5ub2RlX3ZhbHVlKCk7Ci0JCQotCQlMaXN0IHByZWZpeExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCU5vZGUgbm9kZSA9IGRvbUVsbTsKLQkJCi0JCXdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRE9DVU1FTlRfTk9ERSkgewotCQkJTmFtZWROb2RlTWFwIGF0dHJzID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRycy5pdGVtKGkpOwotCQkJCVN0cmluZyBwcmVmaXggPSBudWxsOwotCQkJCWlmIChhdHRyLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwgJiYKLQkJCQkJYXR0ci5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoWE1MQ29uc3RhbnRzLlhNTE5TX0FUVFJJQlVURV9OU19VUkkpKSB7Ci0JCQkJCS8vIERlZmF1bHQgTmFtZXNwYWNlCi0JCQkJCWlmIChhdHRyLmdldE5vZGVOYW1lKCkuZXF1YWxzKFhNTENvbnN0YW50cy5YTUxOU19BVFRSSUJVVEUpKSB7Ci0JCQkJCQlwcmVmaXggPSAiIjsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8vIFNob3VsZCB3ZSBjaGVjayB0aGUgbmFtZXNwYWNlIGluIHRoZSBEeW5hbWljIENvbnRleHQgYW5kIHJldHVybiB0aGF0Pz8/Ci0JCQkJCQlwcmVmaXggPSBhdHRyLmdldExvY2FsTmFtZSgpOwotCQkJCQl9Ci0JCQkJCWlmIChwcmVmaXggIT0gbnVsbCkgewotCQkJCQkJaWYgKCFwcmVmaXhMaXN0LmNvbnRhaW5zKHByZWZpeCkpIHsKLQkJCQkJCQlwcmVmaXhMaXN0LmFkZChwcmVmaXgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlub2RlID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0JCX0KLQkJcmV0dXJuIHByZWZpeExpc3Q7Ci0JfQotCQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IEVsZW1lbnRUeXBlKCksIFNlcVR5cGUuT0NDX1BMVVMpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluZGV4T2YuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbmRleE9mLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZDg2NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluZGV4T2YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBjb2xsYXRpb24gYW5kIGNvbXBhcmlzb24gaXNzdWVzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIFJldHVybnMgYSBzZXF1ZW5jZSBvZiBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZpbmcgdGhlIHBvc2l0aW9ucyB3aXRoaW4gdGhlCi0gKiBzZXF1ZW5jZSAkc2VxUGFyYW0gb2YgaXRlbXMgdGhhdCBhcmUgZXF1YWwgdG8gJHNyY2hQYXJhbS4KLSAqLwotcHVibGljIGNsYXNzIEZuSW5kZXhPZiBleHRlbmRzIEFic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbiB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW5kZXhPZi4KLQkgKi8KLQlwdWJsaWMgRm5JbmRleE9mKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImluZGV4LW9mIiksIDIsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpbmRleF9vZihhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgY29tcGFyYWJsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgZXhwcmVzc2lvbiBvZiBhbnkgdHlwZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXByaXZhdGUgc3RhdGljIENtcEVxIGdldF9jb21wYXJhYmxlKEFueVR5cGUgYXQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJWFNTdHJpbmcgbm9kZVN0cmluZyA9IG5ldyBYU1N0cmluZyhhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQlyZXR1cm4gbm9kZVN0cmluZzsKLQkJfQotCQkKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5ub3RfY21wKG51bGwpOwotCi0JCXJldHVybiAoQ21wRXEpIGF0OwotCX0KLQotCS8qKgotCSAqIEluZGV4LU9mIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGR5bmFtaWNDb250ZXh0IAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjppbmRleC1vZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBpbmRleF9vZihDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQkKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJaWYgKGFyZzIuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkKLQkJU3RyaW5nIGNvbGxhdGlvblVyaSA9IGR5bmFtaWNDb250ZXh0LmRlZmF1bHRfY29sbGF0aW9uX25hbWUoKTsKLQkJaWYgKGNpdGVyLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgYXJnMyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQkJaWYgKCFhcmczLmVtcHR5KCkpIHsKLQkJCQlYU1N0cmluZyBjb2xsYXRpb24gPSAoWFNTdHJpbmcpIGFyZzMuZmlyc3QoKTsKLQkJCQljb2xsYXRpb25VcmkgPSBjb2xsYXRpb24uc3RyaW5nX3ZhbHVlKCk7Ci0JCQl9Ci0JCX0KLQotCQlBbnlBdG9taWNUeXBlIGF0ID0gKEFueUF0b21pY1R5cGUpYXJnMi5maXJzdCgpOwotCi0JCWdldF9jb21wYXJhYmxlKGF0KTsKLQotCQlpbnQgaW5kZXggPSAxOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZzEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBbnlUeXBlIGNtcHR5cGUgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0JCQlnZXRfY29tcGFyYWJsZShjbXB0eXBlKTsKLQotCQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBDbXBFcSkpCi0JCQkJY29udGludWU7Ci0JCQkKLQkJCWlmIChpc0Jvb2xlYW4oY21wdHlwZSwgYXQpKSB7Ci0JCQkJWFNCb29sZWFuIGJvb2xhdCA9IChYU0Jvb2xlYW4pIGNtcHR5cGU7Ci0JCQkJaWYgKGJvb2xhdC5lcShhdCwgZHluYW1pY0NvbnRleHQpKSB7Ci0gCQkJCSAgIHJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihpbmRleCkpKTsKLQkJCQl9Ci0JCQl9IGVsc2UgCi0JCQkKLQkJCWlmIChpc051bWVyaWMoY21wdHlwZSwgYXQpKSB7Ci0JCQkJTnVtZXJpY1R5cGUgbnVtZXJpY2F0ID0gKE51bWVyaWNUeXBlKSBhdDsKLQkJCQlpZiAobnVtZXJpY2F0LmVxKGNtcHR5cGUsIGR5bmFtaWNDb250ZXh0KSkgewotCQkJCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoaW5kZXgpKSk7Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkKLQkJCWlmIChpc0R1cmF0aW9uKGNtcHR5cGUsIGF0KSkgewotCQkJCVhTRHVyYXRpb24gZHVyYXQgPSAoWFNEdXJhdGlvbikgYXQ7Ci0JCQkJaWYgKGR1cmF0LmVxKGNtcHR5cGUsIGR5bmFtaWNDb250ZXh0KSkgewotCQkJCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoaW5kZXgpKSk7Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkKLQkJCWlmIChuZWVkc1N0cmluZ0NvbXBhcmlzb24oY21wdHlwZSwgYXQpKSB7Ci0JCQkJWFNTdHJpbmcgeHN0cjEgPSBuZXcgWFNTdHJpbmcoY21wdHlwZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJWFNTdHJpbmcgaXRlbVN0ciA9IG5ldyBYU1N0cmluZyhhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJaWYgKEZuQ29tcGFyZS5jb21wYXJlX3N0cmluZyhjb2xsYXRpb25VcmksIHhzdHIxLCBpdGVtU3RyLCBkeW5hbWljQ29udGV4dCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpIHsKLQkJCQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGluZGV4KSkpOwotCQkJCX0KLQkJCX0gCi0JCQkKLQkJCWluZGV4Kys7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShBbnlUeXBlLmNsYXNzLCBTZXFUeXBlLk9DQ19TVEFSKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKEFueUF0b21pY1R5cGUuY2xhc3MsIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkluc2VydEJlZm9yZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkluc2VydEJlZm9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ2NWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbnNlcnRCZWZvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYSBuZXcgc2VxdWVuY2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdmFsdWUgb2YgJHRhcmdldCB3aXRoIHRoZSB2YWx1ZQotICogb2YgJGluc2VydHMgaW5zZXJ0ZWQgYXQgdGhlIHBvc2l0aW9uIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgb2YgJHBvc2l0aW9uLgotICogKFRoZSB2YWx1ZSBvZiAkdGFyZ2V0IGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgc2VxdWVuY2UgY29uc3RydWN0aW9uLikKLSAqLwotcHVibGljIGNsYXNzIEZuSW5zZXJ0QmVmb3JlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkluc2VydEJlZm9yZS4KLQkgKi8KLQlwdWJsaWMgRm5JbnNlcnRCZWZvcmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW5zZXJ0LWJlZm9yZSIpLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gaW5zZXJ0X2JlZm9yZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQtQmVmb3JlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmluc2VydC1iZWZvcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaW5zZXJ0X2JlZm9yZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMzsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHRhcmdldCA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGluc2VydHMgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQkvLyBzYW5pdHkgY2hleAotCQlpZiAoYXJnMi5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IGFyZzIuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0ludGVnZXIpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkvLyBYWFggY2xvbmluZyEKLQkJaWYgKHRhcmdldC5lbXB0eSgpKQotCQkJcmV0dXJuIGluc2VydHM7Ci0JCWlmIChpbnNlcnRzLmVtcHR5KCkpCi0JCQlyZXR1cm4gdGFyZ2V0OwotCi0JCWludCBwb3NpdGlvbiA9ICgoWFNJbnRlZ2VyKSBhdCkuaW50X3ZhbHVlKCkuaW50VmFsdWUoKTsKLQotCQlpZiAocG9zaXRpb24gPCAxKQotCQkJcG9zaXRpb24gPSAxOwotCQlpbnQgdGFyZ2V0X3NpemUgPSB0YXJnZXQuc2l6ZSgpOwotCi0JCWlmIChwb3NpdGlvbiA+IHRhcmdldF9zaXplKQotCQkJcG9zaXRpb24gPSB0YXJnZXRfc2l6ZSArIDE7Ci0KLQkJaW50IGN1cnBvcyA9IDE7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gdGFyZ2V0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChjdXJwb3MgPT0gcG9zaXRpb24pCi0JCQkJcnMuY29uY2F0KGluc2VydHMpOwotCi0JCQlycy5hZGQoYXQpOwotCi0JCQljdXJwb3MrKzsKLQkJfQotCQlpZiAoY3VycG9zID09IHBvc2l0aW9uKQotCQkJcnMuY29uY2F0KGluc2VydHMpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSXJpVG9VUkkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JcmlUb1VSSS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmVhYjRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JcmlUb1VSSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNjI3NjUgLSByZW5hbWVkIHRvIGNvcnJlY3QgZnVuY3Rpb24gbmFtZS4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUzMTkgLSBmaXggVVRGLTggZXNjYXBpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi1wdWJsaWMgY2xhc3MgRm5JcmlUb1VSSSBleHRlbmRzIEFic3RyYWN0VVJJRnVuY3Rpb24gewotCi0JcHVibGljIEZuSXJpVG9VUkkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaXJpLXRvLXVyaSIpLCAxKTsKLQl9Ci0JCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgYXJndW1lbnRzIGFmdGVyIGFwcGxpY2F0aW9uIG9mIHRoZSBVUkkKLQkgKiAgICAgICAgIGVzY2FwaW5nIHJ1bGVzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZXNjYXBlX3VyaShhcmdzLCBmYWxzZSwgdHJ1ZSk7Ci0JfQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxhbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5MYW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MmZiYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxhbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MDk3MiAtIGZpeCBmbjpsYW5nIGltcGxlbWVudGF0aW9uIHNvIGl0IG1hdGNoZXMgc3BlYy4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGNvcnJlY3QgaW52YWxpZFR5cGUgdG8gdGhyb3cgWFBUWTAwMDQgaW5zdGVhZCBvZiBGT1JHMDAwNgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBvcmcudzNjLmRvbS4qOwotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgbGFuZ3VhZ2Ugb2YgJG5vZGUsIG9yIHRoZSBjb250ZXh0IG5vZGUgaWYgdGhlCi0gKiBzZWNvbmQgYXJndW1lbnQgaXMgb21pdHRlZCwgYXMgc3BlY2lmaWVkIGJ5IHhtbDpsYW5nIGF0dHJpYnV0ZXMgaXMgdGhlIHNhbWUKLSAqIGFzLCBvciBpcyBhIHN1Ymxhbmd1YWdlIG9mLCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5ICR0ZXN0bGFuZy4gVGhlIGxhbmd1YWdlCi0gKiBvZiB0aGUgYXJndW1lbnQgbm9kZSwgb3IgdGhlIGNvbnRleHQgbm9kZSBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9taXR0ZWQsCi0gKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgeG1sOmxhbmcgYXR0cmlidXRlIG9uIHRoZSBub2RlLCBvciwgaWYgdGhlCi0gKiBub2RlIGhhcyBubyBzdWNoIGF0dHJpYnV0ZSwgYnkgdGhlIHZhbHVlIG9mIHRoZSB4bWw6bGFuZyBhdHRyaWJ1dGUgb24gdGhlCi0gKiBuZWFyZXN0IGFuY2VzdG9yIG9mIHRoZSBub2RlIHRoYXQgaGFzIGFuIHhtbDpsYW5nIGF0dHJpYnV0ZS4gSWYgdGhlcmUgaXMgbm8KLSAqIHN1Y2ggYW5jZXN0b3IsIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkxhbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5MYW5nLgotCSAqLwotCXB1YmxpYyBGbkxhbmcoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibGFuZyIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbGFuZyhhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogTGFuZ3VhZ2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bGFuZyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBsYW5nKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmcKLQkJSXRlcmF0b3IgY2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSBudWxsOwotCQlpZiAoY2FyZ3Muc2l6ZSgpID09IDEpIHsKLQkJCWlmIChjb250ZXh0LmNvbnRleHRfaXRlbSgpID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJfQotCQkJYXJnMiA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlhcmcyLmFkZChjb250ZXh0LmNvbnRleHRfaXRlbSgpKTsKLQkJfSBlbHNlIHsKLQkJCWFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJfQotCQkKLQkJU3RyaW5nIGxhbmcgPSAiIjsKLQotCQlpZiAoIWFyZzEuZW1wdHkoKSkgewotCQkJbGFuZyA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCi0JCQotCQlpZiAoIShhcmcyLmZpcnN0KCkgaW5zdGFuY2VvZiBOb2RlVHlwZSkgKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJTm9kZVR5cGUgYW4gPSAoTm9kZVR5cGUpIGFyZzIuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTQm9vbGVhbih0ZXN0X2xhbmcoYW4ubm9kZV92YWx1ZSgpLCBsYW5nKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBMYW5ndWFnZSB0ZXN0IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgTm9kZSB0byB0ZXN0LgotCSAqIEBwYXJhbSBsYW5nCi0JICogICAgICAgICAgICBMYW5ndWFnZSB0byB0ZXN0IGZvci4KLQkgKiBAcmV0dXJuIEJvb2xlYW4gcmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIHRlc3RfbGFuZyhOb2RlIG5vZGUsIFN0cmluZyBsYW5nKSB7Ci0JCU5hbWVkTm9kZU1hcCBhdHRycyA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCi0JCWlmIChhdHRycyAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLQotCQkJCWlmICghInhtbDpsYW5nIi5lcXVhbHMoYXR0ci5nZXROYW1lKCkpKQotCQkJCQljb250aW51ZTsKLQkJCQkKLQkJCQlTdHJpbmcgeG1sbGFuZ1ZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQkJCWludCBoeXBoZW5JbmRleCA9IHhtbGxhbmdWYWx1ZS5pbmRleE9mKCctJyk7Ci0JCQkJCi0JCQkJaWYgKGh5cGhlbkluZGV4ID4gLTEpIHsKLQkJCQkJeG1sbGFuZ1ZhbHVlID0geG1sbGFuZ1ZhbHVlLnN1YnN0cmluZygwLCBoeXBoZW5JbmRleCk7Ci0JCQkJfQotCi0JCQkJCi0JCQkJU3RyaW5nIGxhbmdMYW5ndWFnZSA9IGxhbmc7Ci0JCQkJaWYgKGxhbmcubGVuZ3RoKCkgPiAyKSB7Ci0JCQkJCWxhbmdMYW5ndWFnZSA9IGxhbmcuc3Vic3RyaW5nKDAsIDIpOwotCQkJCX0KLQkJCQkKLQkJCQlyZXR1cm4geG1sbGFuZ1ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UobGFuZ0xhbmd1YWdlKTsKLQkJCX0KLQkJfQotCi0JCU5vZGUgcGFyZW50ID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gdGVzdF9sYW5nKHBhcmVudCwgbGFuZyk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxhc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmY2Y2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBvZiBpdGVtcwotICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSWYgdGhlIGNvbnRleHQgaXRlbSBpcyB1bmRlZmluZWQsIGFuIGVycm9yIGlzCi0gKiByYWlzZWQgW2VycjpGT05DMDAwMV0uCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkxhc3QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTGFzdC4KLQkgKi8KLQlwdWJsaWMgRm5MYXN0KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImxhc3QiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGxhc3QoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIExhc3Qgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpsYXN0IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxhc3QoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQkJCi0JCWlmIChkYy5mb2N1cygpID09IG51bGwgfHwgZGMuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJfQotCi0JCWludCBsYXN0ID0gZGMubGFzdCgpOwotCi0JCWFzc2VydCBsYXN0ICE9IDA7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGxhc3QpKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDgyZTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Mb2NhbE5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGltcGxlbWVudGF0aW9uIG9mIGZuOmxvY2FsLW5hbWUgYWNjb3JkaW5nIHRvIHNwZWMuICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBuYW1lIG9mICRhcmcgYXMgYW4geHM6c3RyaW5nIHRoYXQgd2lsbCBlaXRoZXIKLSAqIGJlIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcgb3Igd2lsbCBoYXZlIHRoZSBsZXhpY2FsIGZvcm0gb2YgYW4geHM6TkNOYW1lLgotICovCi1wdWJsaWMgY2xhc3MgRm5Mb2NhbE5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Mb2NhbE5hbWUuCi0JICovCi0JcHVibGljIEZuTG9jYWxOYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImxvY2FsLW5hbWUiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGxvY2FsX25hbWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIExvY2FsLU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bG9jYWwtbmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBsb2NhbF9uYW1lKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJnCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCQkKLQkJaWYgKGNhcmdzLmlzRW1wdHkoKSkgewotCQkJaWYgKGNvbnRleHQuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJZWxzZSB7Ci0JCQkJYXJnMSA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQkJYXJnMS5hZGQoY29udGV4dC5jb250ZXh0X2l0ZW0oKSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQl9Ci0JCQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlOb2RlVHlwZSBhbiA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCQkKLQotCQlRTmFtZSBuYW1lID0gYW4ubm9kZV9uYW1lKCk7Ci0KLQkJU3RyaW5nIHNuYW1lID0gIiI7Ci0JCWlmIChuYW1lICE9IG51bGwpCi0JCQlzbmFtZSA9IG5hbWUubG9jYWwoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHNuYW1lKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZUZyb21RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZUZyb21RTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjk0MmIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Mb2NhbE5hbWVGcm9tUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOk5DTkFNRSByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHBhcnQgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUKLSAqIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTG9jYWxOYW1lRnJvbVFOYW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTG9jYWxOYW1lRnJvbVFOYW1lLgotCSAqLwotCXB1YmxpYyBGbkxvY2FsTmFtZUZyb21RTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsb2NhbC1uYW1lLWZyb20tUU5hbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGxvY2FsX25hbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTG9jYWwtTmFtZS1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmxvY2FsLW5hbWUtZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBsb2NhbF9uYW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJnCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJUU5hbWUgcW5hbWUgPSAoUU5hbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTTkNOYW1lKHFuYW1lLmxvY2FsKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgUU5hbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxvd2VyQ2FzZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxvd2VyQ2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTE3YjQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Mb3dlckNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMDk2IC0gaW1wcm92ZW1lbnRzIGZvciBzdXJyb2dhdGUgaGFuZGxpbmcgIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogPHA+Ci0gKiBDb252ZXJzaW9uIHRvIGxvd2VyLWNhc2UgZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOmxvd2VyLWNhc2UoJGFyZyBhcyB4czpzdHJpbmc/KSBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgdGhlIHZhbHVlIG9mICRhcmcgYWZ0ZXIgdHJhbnNsYXRpbmcgZXZlcnkgY2hhcmFjdGVyIHRvIGl0cwotICogbG93ZXItY2FzZSBjb3JyZXNwb25kZW50LiBFdmVyeSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGxvd2VyLWNhc2UKLSAqIGNvcnJlc3BvbmRlbnQgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHZhbHVlIGluIGl0cyBvcmlnaW5hbCBmb3JtLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIHRoZSB2YWx1ZSBvZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHplcm8tbGVuZ3RoIHN0cmluZyBpcwotICogcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGbkxvd2VyQ2FzZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkxvd2VyQ2FzZS4KLQkgKi8KLQlwdWJsaWMgRm5Mb3dlckNhc2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibG93ZXItY2FzZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudHMgYmVpbmcgY29udmVydGVkIHRvIGxvd2VyIGNhc2UuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBsb3dlcl9jYXNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYXJndW1lbnRzIHRvIGxvd2VyIGNhc2UuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlIGFyZ3VtZW50cyB0byBsb3dlciBjYXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbG93ZXJfY2FzZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoIiIpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVN0cmluZyBzdHIgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhzdHIudG9Mb3dlckNhc2UoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1hdGNoZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NTBjNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMDk2IC0gaW1wcm92ZW1lbnRzIGZvciBzdXJyb2dhdGUgaGFuZGxpbmcKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gaW1wcm92ZW1lbnRzIHRvIFJlZ3VsYXIgRXhwcmVzc2lvbiAgIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lio7Ci0KLS8qKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiAkaW5wdXQgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIHN1cHBsaWVkCi0gKiBhcyAkcGF0dGVybiBhcyBpbmZsdWVuY2VkIGJ5IHRoZSB2YWx1ZSBvZiAkZmxhZ3MsIGlmIHByZXNlbnQ7IG90aGVyd2lzZSwgaXQKLSAqIHJldHVybnMgZmFsc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1hdGNoZXMgZXh0ZW5kcyBBYnN0cmFjdFJlZ0V4RnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWF0Y2hlcy4KLQkgKi8KLQlwdWJsaWMgRm5NYXRjaGVzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1hdGNoZXMiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1hdGNoZXMoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTWF0Y2hlcyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptYXRjaGVzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1hdGNoZXMoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpIHsKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHBhdHRlcm4gPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCVN0cmluZyBmbGFncyA9IG51bGw7Ci0KLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBmbGFnUlMgPSBudWxsOwotCQkJZmxhZ1JTID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJCWZsYWdzID0gZmxhZ1JTLmZpcnN0KCkuc3RyaW5nX3ZhbHVlKCk7Ci0JCQlpZiAodmFsaWRmbGFncy5pbmRleE9mKGZsYWdzKSA9PSAtMSAmJiBmbGFncy5sZW5ndGgoKSA+IDAgKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2ZsYWdzX2Vycm9yKG51bGwpOwotCQkJfQotCQl9Ci0KLQkJdHJ5IHsKLQkJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCQlyZXN1bHQgPSBtYXRjaGVzKHBhdHRlcm4sIGZsYWdzLCBzdHIxKTsKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHJlc3VsdCkpOwotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIHBleCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2Vycm9yKHBleC5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2ZmIzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWF4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgcHJvbW90aW9uIGlzc3VlCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBmaXggcHJvbW90aW9uIHJ1bGVzIGZvciBmbjptYXgKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvbXBhcmFibGVUeXBlUHJvbW90ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3RlcjsKLQotLyoqCi0gKiBTZWxlY3RzIGFuIGl0ZW0gZnJvbSB0aGUgaW5wdXQgc2VxdWVuY2UgJGFyZyB3aG9zZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IKLSAqIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBldmVyeSBvdGhlciBpdGVtIGluIHRoZSBpbnB1dCBzZXF1ZW5jZS4gSWYgdGhlcmUgYXJlCi0gKiB0d28gb3IgbW9yZSBzdWNoIGl0ZW1zLCB0aGVuIHRoZSBzcGVjaWZpYyBpdGVtIHdob3NlIHZhbHVlIGlzIHJldHVybmVkIGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1heCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5NYXguCi0JICovCi0JcHVibGljIEZuTWF4KCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1heCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbWF4KGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXggb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gY29udGV4dCAKLQkgKiAgICAgICAgICAgIFJlbGV2YW50IGR5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptYXggb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWF4KENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gZ2V0X2FyZyhhcmdzLCBDbXBHdC5jbGFzcyk7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCUNtcEd0IG1heCA9IG51bGw7Ci0KLQkJVHlwZVByb21vdGVyIHRwID0gbmV3IENvbXBhcmFibGVUeXBlUHJvbW90ZXIoKTsKLQkJdHAuY29uc2lkZXJTZXF1ZW5jZShhcmcpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueUF0b21pY1R5cGUgY29udiA9IHRwLnByb21vdGUoKEFueVR5cGUpIGkubmV4dCgpKTsKLQkJCQotCQkJaWYgKGNvbnYgaW5zdGFuY2VvZiBYU0RvdWJsZSAmJiAoKFhTRG91YmxlKWNvbnYpLm5hbigpIHx8IGNvbnYgaW5zdGFuY2VvZiBYU0Zsb2F0ICYmICgoWFNGbG9hdCljb252KS5uYW4oKSkgewotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh0cC5wcm9tb3RlKG5ldyBYU0Zsb2F0KEZsb2F0Lk5hTikpKTsKLQkJCX0KLQkJCWlmIChtYXggPT0gbnVsbCB8fCAoKENtcEd0KWNvbnYpLmd0KChBbnlUeXBlKW1heCwgY29udGV4dCkpIHsKLQkJCQltYXggPSAoQ21wR3QpY29udjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKEFueVR5cGUpIG1heCk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgZXhwcmVzc2lvbnMuCi0JICogQHBhcmFtIG9wCi0JICogICAgICAgICAgICBpbnB1dCBjbGFzcy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZ2V0X2FyZyhDb2xsZWN0aW9uIGFyZ3MsIENsYXNzIG9wKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gYXJnOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI0MzA3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBwcm9tb3Rpb24gaXNzdWUgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBmaXggcHJvbW90aW9uIHJ1bGVzIGZvciBmbjptaW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvbXBhcmFibGVUeXBlUHJvbW90ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3RlcjsKLQotLyoqCi0gKiBzZWxlY3RzIGFuIGl0ZW0gZnJvbSB0aGUgaW5wdXQgc2VxdWVuY2UgJGFyZyB3aG9zZSB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IKLSAqIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBldmVyeSBvdGhlciBpdGVtIGluIHRoZSBpbnB1dCBzZXF1ZW5jZS4gSWYgdGhlcmUgYXJlCi0gKiB0d28gb3IgbW9yZSBzdWNoIGl0ZW1zLCB0aGVuIHRoZSBzcGVjaWZpYyBpdGVtIHdob3NlIHZhbHVlIGlzIHJldHVybmVkIGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBpbmRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuTWluIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1pbi4KLQkgKi8KLQlwdWJsaWMgRm5NaW4oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWluIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtaW4oYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE1pbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkeW5hbWljIAotCSAqICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1pbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtaW4oQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSBGbk1heC5nZXRfYXJnKGFyZ3MsIENtcEx0LmNsYXNzKTsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJQ21wTHQgbWF4ID0gbnVsbDsKLQotCQlUeXBlUHJvbW90ZXIgdHAgPSBuZXcgQ29tcGFyYWJsZVR5cGVQcm9tb3RlcigpOwotCQl0cC5jb25zaWRlclNlcXVlbmNlKGFyZyk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55QXRvbWljVHlwZSBjb252ID0gdHAucHJvbW90ZSgoQW55VHlwZSkgaS5uZXh0KCkpOwotCQkJCi0JCQlpZiAoY29udiBpbnN0YW5jZW9mIFhTRG91YmxlICYmICgoWFNEb3VibGUpY29udikubmFuKCkgfHwgY29udiBpbnN0YW5jZW9mIFhTRmxvYXQgJiYgKChYU0Zsb2F0KWNvbnYpLm5hbigpKSB7Ci0JCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHRwLnByb21vdGUobmV3IFhTRmxvYXQoRmxvYXQuTmFOKSkpOwotCQkJfQotCQkJaWYgKG1heCA9PSBudWxsIHx8ICgoQ21wTHQpY29udikubHQoKEFueVR5cGUpbWF4LCBjb250ZXh0KSkgewotCQkJCW1heCA9IChDbXBMdCljb252OwotCQkJfQotCQl9Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygoQW55VHlwZSkgbWF4KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbURhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWUzZjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHZhbHVlIGJldHdlZW4gMCBhbmQgNTksIGJvdGggaW5jbHVzaXZlLCByZXByZXNlbnRpbmcKLSAqIHRoZSBtaW51dGUgY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTWludXRlc0Zyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1pbnV0ZXNGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuTWludXRlc0Zyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtaW51dGVzLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1pbnV0ZXNfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTWludXRlcy1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1pbnV0ZXMtZnJvbS1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtaW51dGVzX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0Lm1pbnV0ZSgpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxNzI2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGV4cGVjdGVkIGFyZ3MgZm9yIGZuTWludXRlc0Zyb21EdXJhdGlvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBtaW51dGVzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTWludXRlc0Zyb21EdXJhdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1pbnV0ZXNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuTWludXRlc0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtaW51dGVzLWZyb20tZHVyYXRpb24iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1pbnV0ZXNfZnJvbV9kdXJhdGlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNaW51dGVzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bWludXRlcy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1pbnV0ZXNfZnJvbV9kdXJhdGlvbihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRHVyYXRpb24gZHRkID0gKFhTRHVyYXRpb24pIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHRkLm1pbnV0ZXMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDY3ZjgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgdmFsdWUgYmV0d2VlbiAwIHRvIDU5LCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogdmFsdWUgb2YgdGhlIG1pbnV0ZXMgY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUKLSAqIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTWludXRlc0Zyb21UaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWludXRlc0Zyb21UaW1lLgotCSAqLwotCXB1YmxpYyBGbk1pbnV0ZXNGcm9tVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtaW51dGVzLWZyb20tdGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbWludXRlc19mcm9tX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTWludXRlcy1mcm9tLVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bWludXRlcy1mcm9tLXRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWludXRlc19mcm9tX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU1RpbWUgZHQgPSAoWFNUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0Lm1pbnV0ZSgpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aEZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZGQwODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAxIGFuZCAxMiwgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUKLSAqIG1vbnRoIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1vbnRoRnJvbURhdGUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Nb250aEZyb21EYXRlLgotCSAqLwotCXB1YmxpYyBGbk1vbnRoRnJvbURhdGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibW9udGgtZnJvbS1kYXRlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtb250aF9mcm9tX2RhdGUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTW9udGgtZnJvbS1EYXRlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1vbnRoLWZyb20tZGF0ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtb250aF9mcm9tX2RhdGUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGUgZHQgPSAoWFNEYXRlKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0Lm1vbnRoKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhGcm9tRGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aEZyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzhmZjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aEZyb21EYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEyLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogbW9udGggY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTW9udGhGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Nb250aEZyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5Nb250aEZyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtb250aC1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtb250aF9mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNb250aC1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1vbnRoLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbW9udGhfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQubW9udGgoKTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoc0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoc0Zyb21EdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDI3YmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aHNGcm9tRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uLiAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGV4cGVjdGVkIHhzOmR1cmF0aW9uIGFyZ3VtZW50Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbW9udGhzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTW9udGhzRnJvbUR1cmF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTW9udGhzRnJvbUR1cmF0aW9uLgotCSAqLwotCXB1YmxpYyBGbk1vbnRoc0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtb250aHMtZnJvbS1kdXJhdGlvbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbW9udGhzX2Zyb21fZHVyYXRpb24oYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTW9udGhzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bW9udGhzLWZyb20tZHVyYXRpb24gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbW9udGhzX2Zyb21fZHVyYXRpb24oQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU0R1cmF0aW9uIHltZCA9IChYU0R1cmF0aW9uKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IHltZC5tb250aCgpOwotCi0JCWlmICh5bWQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRHVyYXRpb24oKSwKLQkJCQkJU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMzMWYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gRml4ZWQgYXJndW1lbnRzIGZvciBOYW1lIGZ1bmN0aW9uLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMDE1MzkgLSBmaXhlZCAiY29udGV4dCB1bmRlZmluZWQiIGJ1ZyBpbiBjYXNlIG9mIHplcm8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpdHkuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSBub2RlLCBhcyBhbiB4czpzdHJpbmcgdGhhdCBpcyBlaXRoZXIgdGhlIHplcm8tbGVuZ3RoCi0gKiBzdHJpbmcsIG9yIGhhcyB0aGUgbGV4aWNhbCBmb3JtIG9mIGFuIHhzOlFOYW1lLgotICovCi1wdWJsaWMgY2xhc3MgRm5OYW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5OYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5hbWUiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5hbWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gY29udGV4dAotCSAqICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpuYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5hbWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gbnVsbDsKLQkJCi0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWlmIChjb250ZXh0LmNvbnRleHRfaXRlbSgpID09IG51bGwpCi0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCWVsc2UgewotCQkJCWFyZzEgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkJCWFyZzEuYWRkKGNvbnRleHQuY29udGV4dF9pdGVtKCkpOwotCQkJfQotCQl9IGVsc2UgewotCQkJYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCX0KLQkJCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJICAgcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkgICByZXR1cm4gcnM7Ci0JCX0KLQotCQlOb2RlVHlwZSBhbiA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCQkKLQkJUU5hbWUgbmFtZSA9IGFuLm5vZGVfbmFtZSgpOwotCi0JCVN0cmluZyBzbmFtZSA9ICIiOwotCQlpZiAobmFtZSAhPSBudWxsKQotCQkgIHNuYW1lID0gbmFtZS5zdHJpbmdfdmFsdWUoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHNuYW1lKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5hbWVzcGFjZVVyaS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5hbWVzcGFjZVVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUxNTU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gY29ycmVjdGVkIGltcGxlbWVudGF0aW9uIGFjY29yZGluZyB0byBzcGVjLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSB4czpRTmFtZSBvZiAkYXJnLgotICovCi1wdWJsaWMgY2xhc3MgRm5OYW1lc3BhY2VVcmkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5OYW1lc3BhY2VVcmkuCi0JICovCi0JcHVibGljIEZuTmFtZXNwYWNlVXJpKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5hbWVzcGFjZS11cmkiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5hbWVzcGFjZV91cmkoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5hbWVzcGFjZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bmFtZXNwYWNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuYW1lc3BhY2VfdXJpKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IG51bGw7Ci0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWlmIChjb250ZXh0LmNvbnRleHRfaXRlbSgpID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJfQotCQkJYXJnMSA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlhcmcxLmFkZChjb250ZXh0LmNvbnRleHRfaXRlbSgpKTsKLQkJfSBlbHNlIHsKLQkJCS8vIGdldCBhcmcKLQkJCWFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQl9Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU0FueVVSSSgiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJTm9kZVR5cGUgYW4gPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlRTmFtZSBuYW1lID0gYW4ubm9kZV9uYW1lKCk7Ci0KLQkJU3RyaW5nIHNuYW1lID0gIiI7Ci0JCWlmIChuYW1lICE9IG51bGwpCi0JCQlzbmFtZSA9IG5hbWUubmFtZXNwYWNlKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0FueVVSSShzbmFtZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3MTFjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZXNwYWNlVXJpRnJvbVFOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIFVSSSBmb3IgJGFyZyBhcyBhbiB4czpzdHJpbmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBJZiAkYXJnIGlzIGluIG5vIG5hbWVzcGFjZSwgdGhlCi0gKiB6ZXJvLWxlbmd0aCBzdHJpbmcgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5hbWVzcGFjZVVyaUZyb21RTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5hbWVzcGFjZVVyaUZyb21RTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBuYW1lc3BhY2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm5hbWVzcGFjZS11cmktZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuYW1lc3BhY2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCVFOYW1lIHFuYW1lID0gKFFOYW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJU3RyaW5nIG5zID0gcW5hbWUubmFtZXNwYWNlKCk7Ci0KLQkJaWYgKG5zID09IG51bGwpCi0JCQlucyA9ICIiOwotCQlycy5hZGQobmV3IFhTQW55VVJJKG5zKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OaWxsZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OaWxsZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM3N2MwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmlsbGVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYXJndW1lbnQgbm9kZSBpcyAibmlsbGVkIi4gSWYKLSAqIHRoZSBhcmd1bWVudCBpcyBub3QgYW4gZWxlbWVudCBub2RlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTmlsbGVkIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTmlsbGVkLgotCSAqLwotCXB1YmxpYyBGbk5pbGxlZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJuaWxsZWQiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5pbGxlZChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBOaWxsZWQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bmlsbGVkIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5pbGxlZChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gYXJnMTsKLQkJfQotCQlOb2RlVHlwZSBudCA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCQkKLQkJcmV0dXJuIG50Lm5pbGxlZCgpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob2RlTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vZGVOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzUzMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vZGVOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiBleHBhbmRlZC1RTmFtZSBmb3Igbm9kZSBraW5kcyB0aGF0IGNhbiBoYXZlIG5hbWVzLiBGb3Igb3RoZXIga2luZHMKLSAqIG9mIG5vZGVzIGl0IHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuTm9kZU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ob2RlTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5Ob2RlTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJub2RlLW5hbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5vZGVfbmFtZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBOb2RlLU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bm9kZS1uYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5vZGVfbmFtZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlRTmFtZSBub2RlbmFtZSA9IG50Lm5vZGVfbmFtZSgpOwotCQlpZiAobm9kZW5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiByczsKLQotCQlycy5hZGQobm9kZW5hbWUpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplU3BhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob3JtYWxpemVTcGFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzA2OTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob3JtYWxpemVTcGFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ0NzEgLSBpbXByb3ZlbWVudHMgdG8gbm9ybWFsaXplLXNwYWNlIGZ1bmN0aW9uIChzdXBwb3J0IGZvciBhcml0eSAwKQotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gY29ycmVjdCBpbXBsZW1lbnRhdGlvbiB0byBjb3JyZWN0bHkgZ2V0IGNvbnRleHQgbm9kZSAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIGhhbmRsZSBjb250ZXh0IGFuZCBlbXB0eSBzZXF1ZW5jZXMgY29ycmVjdGx5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gbm9ybWFsaXplIHdoaXRlc3BhY2UuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOm5vcm1hbGl6ZS1zcGFjZSgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyB3aXRoIHdoaXRlc3BhY2Ugbm9ybWFsaXplZCBieSBzdHJpcHBpbmcKLSAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2luZyBzZXF1ZW5jZXMgb2Ygb25lIG9yIG1vcmUgdGhhbgotICogb25lIHdoaXRlc3BhY2UgY2hhcmFjdGVyIHdpdGggYSBzaW5nbGUgc3BhY2UsICN4MjAuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCBhcyBUQUIgKCN4OSksIExJTkUgRkVFRCAoI3hBKSwgQ0FSUklBR0UKLSAqIFJFVFVSTiAoI3hEKSBhbmQgU1BBQ0UgKCN4MjApLiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsCi0gKiB0aGUgY2xhc3MgcmV0dXJucyB0aGUgemVyby1sZW5ndGggc3RyaW5nLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5Ob3JtYWxpemVTcGFjZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5vcm1hbGl6ZVNwYWNlLgotCSAqLwotCXB1YmxpYyBGbk5vcm1hbGl6ZVNwYWNlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5vcm1hbGl6ZS1zcGFjZSIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzIGJlaW5nIG5vcm1hbGl6ZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBub3JtYWxpemVfc3BhY2UoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbGl6ZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gc3BhY2UgZnJvbSwgaW4gb3JkZXIgdG8gYmUgbm9ybWFsaXplZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIG5vcm1hbGl6aW5nIHRoZSBzcGFjZSBpbiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugbm9ybWFsaXplX3NwYWNlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCQkKLQkJaWYgKGNhcmdzLmlzRW1wdHkoKSkgewotCQkgIC8vIHN1cHBvcnQgZm9yIGFyaXR5ID0gMAotCQkgIGFyZzEgPSBnZXRSZXN1bHRTZXRGb3JBcml0eVplcm8oZF9jb250ZXh0KTsKLQkJfQotCQllbHNlIHsKLQkJICBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJU3RyaW5nIHN0ciA9ICIiOwotCQlpZiAoISBhcmcxLmVtcHR5KCkpIHsKLQkJCXN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfSAKLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhub3JtYWxpemUoc3RyKSkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogVGhlIG5vcm1hbGl6aW5nIHByb2Nlc3MuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgaXMgdGhlIHN0cmluZyB0aGF0IHNwYWNlIHdpbGwgYmUgbm9ybWFsaXplZCBpbi4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIG5vcm1hbGl6aW5nIG9wZXJhdGlvbi4KLQkgKi8KLQkvLyBYWFggZml4IHRoaXMKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHN0cikgewotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQkJaW50IHN0YXRlID0gMDsgLy8gMCBiZWdpbgotCQkvLyAxIG1pZGRsZQotCQkvLyAyIGVuZAotCQkvLyAzIHNraXBwaW5nCi0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgewotCQkJY2hhciB4ID0gc3RyLmNoYXJBdChpKTsKLQotCQkJYm9vbGVhbiB3aGl0ZSA9IGlzX3doaXRlc3BhY2UoeCk7Ci0KLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCS8vIGRvaW5nIHRoZSBiZWdpbm5pbmcKLQkJCWNhc2UgMDoKLQkJCQlpZiAod2hpdGUpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWVsc2UgewotCQkJCQlzYi5hcHBlbmQoeCk7Ci0JCQkJCXN0YXRlID0gMTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCS8vIGRvaW5nIHRoZSBtaWRkbGUKLQkJCWNhc2UgMToKLQkJCQlpZiAod2hpdGUpIHsKLQkJCQkJc3RhdGUgPSAzOwotCQkJCQlzYi5hcHBlbmQoJyAnKTsKLQkJCQl9IGVsc2UKLQkJCQkJc2IuYXBwZW5kKHgpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM6Ci0JCQkJaWYgKCF3aGl0ZSkgewotCQkJCQlzdGF0ZSA9IDE7Ci0JCQkJCXNiLmFwcGVuZCh4KTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJfQotCQl9Ci0KLQkJLy8gbm93IGJhc2ljYWxseSB3ZSBjYW4gb25seSBoYXZlIGEgd2hpdGVzcGFjZSBhdCB0aGUgZW5kLi4uCi0JCVN0cmluZyByZXN1bHQgPSBzYi50b1N0cmluZygpOwotCQlpbnQgbGVuID0gcmVzdWx0Lmxlbmd0aCgpOwotCi0JCWlmIChsZW4gPT0gMCkKLQkJCXJldHVybiByZXN1bHQ7Ci0JCWlmIChyZXN1bHQuY2hhckF0KGxlbiAtIDEpID09ICcgJykKLQkJCXJldHVybiByZXN1bHQuc3Vic3RyaW5nKDAsIGxlbiAtIDEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZSBvciBub3QuCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjaGFyYWN0ZXIgdGhpcyBvcGVyYXRpb24gd2lsbCB0YWtlIHBsYWNlIG9uLgotCSAqIEByZXR1cm4gV2hldGhlciBvciBub3QgdGhlIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc193aGl0ZXNwYWNlKGNoYXIgeCkgewotCQlzd2l0Y2ggKHgpIHsKLQkJY2FzZSAnICc6Ci0JCWNhc2UgJ1xyJzoKLQkJY2FzZSAnXHQnOgotCQljYXNlICdcbic6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplVW5pY29kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vcm1hbGl6ZVVuaWNvZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA0NWM3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplVW5pY29kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE1MiAtIGltcGxlbWVudCBmbjpub3JtYWxpemUtdW5pY29jZGUKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyOTAzMzcgLSBSZXZpc2l0IHVzZSBvZiBJQ1UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5Ob3JtYWxpemVyOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gbm9ybWFsaXplIHVuaWNvZGUuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOm5vcm1hbGl6ZS11bmljb2RlKCRhcmcgYXMgeHM6c3RyaW5nPykgYXMgeHM6c3RyaW5nCi0gKiBvciBmbjpub3JtYWxpemUtdW5pY29kZSgkYXJnIGFzIHhzOnN0cmluZz8sICRub3JtYWxpemF0aW9uLWZvcm0gYXMgeHM6c3RyaW5nKSBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRoZSBub3JtYWxpemF0aW9uIGZvcm0gc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQuCi0gKiA8L3A+Ci0gKiAKLSAqLwotcHVibGljIGNsYXNzIEZuTm9ybWFsaXplVW5pY29kZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBXM0NOb3JtYWxpemVyIG5vcm1hbGl6ZXIgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTm9ybWFsaXplVW5pY29kZQotCSAqLwotCXB1YmxpYyBGbk5vcm1hbGl6ZVVuaWNvZGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibm9ybWFsaXplLXVuaWNvZGUiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbW1vbiBpbnRlcmZhY2Ugd2hpY2ggbm9ybWFsaXplcnMgbXVzdCBhZGhlcmUgdG8KLQkgKi8KLQlwdWJsaWMgaW50ZXJmYWNlIFczQ05vcm1hbGl6ZXIgewotCQlTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBhcmd1bWVudCwgU3RyaW5nIG5vcm1hbGl6YXRpb25Gb3JtKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotCX07Ci0JCi0JLyoqCi0JICogVzNDIG5vcm1hbGl6ZXIgaW1wbGVtZW50ZWQgdmlhIElCTSdzIElDVQotCSAqLwotCXN0YXRpYyBjbGFzcyBJQ1VOb3JtYWxpemVyIGltcGxlbWVudHMgVzNDTm9ybWFsaXplciB7Ci0JCQotCQlwcml2YXRlIE1hcDxTdHJpbmcsIE5vcm1hbGl6ZXIuTW9kZT4gbW9kZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTm9ybWFsaXplci5Nb2RlPigpOwotCQl7Ci0JCQkvLyBDYW4ndCBoYW5kbGUgIkZVTExZLU5PUk1BTElaRUQiIHlldAotCQkJCi0JCQltb2RlTWFwLnB1dCgiTkZDIiwgTm9ybWFsaXplci5ORkMpOwotCQkJbW9kZU1hcC5wdXQoIk5GRCIsIE5vcm1hbGl6ZXIuTkZEKTsKLQkJCW1vZGVNYXAucHV0KCJORktDIiwgTm9ybWFsaXplci5ORktDKTsKLQkJCW1vZGVNYXAucHV0KCJORktEIiwgTm9ybWFsaXplci5ORktEKTsKLQkJfQotCQkKLQkJcHVibGljIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIGFyZ3VtZW50LCBTdHJpbmcgbm9ybWFsaXphdGlvbkZvcm0pCi0JCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCQlOb3JtYWxpemVyLk1vZGUgbW9kZSA9IG1vZGVNYXAuZ2V0KG5vcm1hbGl6YXRpb25Gb3JtKTsKLQkJCWlmIChtb2RlICE9IG51bGwpIHsKLQkJCQlyZXR1cm4gTm9ybWFsaXplci5ub3JtYWxpemUoYXJndW1lbnQsIG1vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtKG5vcm1hbGl6YXRpb25Gb3JtKTsKLQkJCX0KLQkJfQotCX0KLQotCXN0YXRpYyBjbGFzcyBKREs2Tm9ybWFsaXplciBpbXBsZW1lbnRzIFczQ05vcm1hbGl6ZXIgewotCQlwcml2YXRlIE1ldGhvZCBub3JtYWxpemVNZXRob2Q7Ci0JCXByaXZhdGUgTWFwPFN0cmluZywgRW51bT4gZm9ybU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgRW51bT4oKTsKLQotCQlwdWJsaWMgSkRLNk5vcm1hbGl6ZXIoQ2xhc3M8Pz4gbm9ybWFsaXplckNscywgQ2xhc3M8PyBleHRlbmRzIEVudW0+IGZvcm1DbHMpIHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbiwgTm9TdWNoTWV0aG9kRXhjZXB0aW9uIHsKLQkJCXRoaXMubm9ybWFsaXplTWV0aG9kID0gbm9ybWFsaXplckNscy5nZXRNZXRob2QoIm5vcm1hbGl6ZSIsIENoYXJTZXF1ZW5jZS5jbGFzcywgZm9ybUNscyk7Ci0JCQlFbnVtW10gZm9ybUNvbnN0YW50cyA9IGZvcm1DbHMuZ2V0RW51bUNvbnN0YW50cygpOwotCQkJZm9yIChFbnVtIGZvcm0gOiBmb3JtQ29uc3RhbnRzKSB7Ci0JCQkJZm9ybU1hcC5wdXQoZm9ybS5uYW1lKCksIGZvcm0pOwotCQkJfQotCQkJLy8gQ2FuJ3QgaGFuZGxlICJGVUxMWS1OT1JNQUxJWkVEIiB5ZXQKLQkJfQotCQkKLQkJcHVibGljIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIGFyZ3VtZW50LCBTdHJpbmcgbm9ybWFsaXphdGlvbkZvcm0pCi0JCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJCS8vaWYgKG5vcm1hbGl6YXRpb25Gb3JtLmVxdWFscygiRlVMTFktTk9STUFMSVpFRCIpKSB7Ci0JCQkvLyAgIFdlIGNhbid0IGhhbmRsZSB0aGlzIG9uZSB5ZXQKLQkJCS8vIH0KLQkJCUVudW0gZm9ybSA9IGZvcm1NYXAuZ2V0KG5vcm1hbGl6YXRpb25Gb3JtKTsKLQkJCWlmIChmb3JtICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlyZXR1cm4gKFN0cmluZylub3JtYWxpemVNZXRob2QuaW52b2tlKG51bGwsIGFyZ3VtZW50LCBmb3JtKTsKLQkJCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLQkJCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJ1bnRpbWVfZXJyb3IoImphdmEudGV4dC5Ob3JtYWxpemVyLm5vcm1hbGl6ZSguLi4sIFwiIiArIG5vcm1hbGl6YXRpb25Gb3JtICsgIlwiKSIsIGUpOwotCQkJCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJCQl0aHJvdyBEeW5hbWljRXJyb3IucnVudGltZV9lcnJvcigiamF2YS50ZXh0Lk5vcm1hbGl6ZXIubm9ybWFsaXplKC4uLiwgXCIiICsgbm9ybWFsaXphdGlvbkZvcm0gKyAiXCIpIiwgZSk7Ci0JCQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCXRocm93IER5bmFtaWNFcnJvci5ydW50aW1lX2Vycm9yKCJqYXZhLnRleHQuTm9ybWFsaXplci5ub3JtYWxpemUoLi4uLCBcIiIgKyBub3JtYWxpemF0aW9uRm9ybSArICJcIikiLCBlKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXRocm93IER5bmFtaWNFcnJvci51bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0obm9ybWFsaXphdGlvbkZvcm0pOwotCQkJfQkJCQotCQl9Ci0JfQotCi0Jc3RhdGljIGNsYXNzIEZhaWxpbmdOb3JtYWxpemVyIGltcGxlbWVudHMgVzNDTm9ybWFsaXplciB7Ci0JCQotCQlwdWJsaWMgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgYXJndW1lbnQsIFN0cmluZyBub3JtYWxpemF0aW9uRm9ybSkKLQkJCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci51bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0oIkNhbid0IG5vcm1hbGl6ZSB0byBmb3JtICIgKyBub3JtYWxpemF0aW9uRm9ybSArICI6IE5vIElDVSBMaWJyYXJ5IG9yIEphdmEgNiBmb3VuZC4gJ25vcm1hbGl6ZS11bmljb2RlJyByZXF1aXJlcyBlaXRoZXIgJ2NvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplcicgb3IgJ2phdmEudGV4dC5Ob3JtYWxpemVyJyBvbiB0aGUgY2xhc3NwYXRoIik7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgc3BhY2UgaW4gdGhlIGFyZ3VtZW50cyBiZWluZyBub3JtYWxpemVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbm9ybWFsaXplX3VuaWNvZGUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbGl6ZSB1bmljb2RlIGNvZGVwb2ludHMgaW4gdGhlIGFyZ3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gdGhlIGlucHV0IHN0cmluZyBhbmQgb3B0aW9uYWxseSB0aGUgbm9ybWFsaXphdGlvbiB0eXBlIGZyb20uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBub3JtYWxpemluZyB0aGUgc3BhY2UgaW4gdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5vcm1hbGl6ZV91bmljb2RlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSAxICYmIGFyZ3Muc2l6ZSgpIDw9IDI7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCQotCQlJdGVyYXRvciBjYXJnc0l0ZXJhdG9yID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3NJdGVyYXRvci5uZXh0KCk7Ci0KLQotCQlTdHJpbmcgbm9ybWFsaXphdGlvblR5cGUgPSAiTkZDIjsKLQkJaWYgKGNhcmdzSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKWNhcmdzSXRlcmF0b3IubmV4dCgpOwotCQkJLy8gVHJpbSBhbmQgY29udmVydCB0byB1cHBlciBhcyBwZXIgdGhlIHNwZWMKLQkJCWlmIChhcmcyLmVtcHR5KCkpIHsKLQkJCQlub3JtYWxpemF0aW9uVHlwZSA9ICIiOwotCQkJfSBlbHNlIHsKLQkJCQlub3JtYWxpemF0aW9uVHlwZSA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKS50cmltKCkudG9VcHBlckNhc2UoKTsKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nIGFyZ3VtZW50ID0gIiI7Ci0JCWlmICghIGFyZzEuZW1wdHkoKSkgYXJndW1lbnQgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCQkJCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJU3RyaW5nIG5vcm1hbGl6ZWQgPSBub3JtYWxpemF0aW9uVHlwZS5lcXVhbHMoIiIpID8gYXJndW1lbnQgOiBnZXROb3JtYWxpemVyKCkubm9ybWFsaXplKGFyZ3VtZW50LCBub3JtYWxpemF0aW9uVHlwZSk7Ci0JCXJzLmFkZChuZXcgWFNTdHJpbmcobm9ybWFsaXplZCkpOwotCQkKLQkJcmV0dXJuIHJzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFczQ05vcm1hbGl6ZXIgZ2V0Tm9ybWFsaXplcigpIHsKLQkJaWYgKG5vcm1hbGl6ZXIgPT0gbnVsbCkgewotCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotCQkJCi0JCQlub3JtYWxpemVyID0gY3JlYXRlSUNVTm9ybWFsaXplcihjbGFzc0xvYWRlcik7Ci0JCQlpZiAobm9ybWFsaXplciA9PSBudWxsKSB7Ci0JCQkJbm9ybWFsaXplciA9IGNyZWF0ZUpES05vcm1hbGl6ZXIoY2xhc3NMb2FkZXIpOwotCQkJfQotCQkJaWYgKG5vcm1hbGl6ZXIgPT0gbnVsbCkgewotCQkJCW5vcm1hbGl6ZXIgPSBuZXcgRmFpbGluZ05vcm1hbGl6ZXIoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbm9ybWFsaXplcjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBXM0NOb3JtYWxpemVyIGNyZWF0ZUpES05vcm1hbGl6ZXIoQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJLy8gSWYgdGhhdCBmYWlscywgd2UnbGwgY2hlY2sgZm9yIHRoZSBKYXZhIDYgTm9ybWFsaXplciBjbGFzcwotCQl0cnkgewotCQkJQ2xhc3M8Pz4gbm9ybWFsaXplckNsYXNzID0gY2xhc3NMb2FkZXIubG9hZENsYXNzKCJqYXZhLnRleHQuTm9ybWFsaXplciIpOwotCQkJQ2xhc3M8PyBleHRlbmRzIEVudW0+IGZvcm1DbGFzcyA9IChDbGFzczw/IGV4dGVuZHMgRW51bT4pIGNsYXNzTG9hZGVyLmxvYWRDbGFzcygiamF2YS50ZXh0Lk5vcm1hbGl6ZXIkRm9ybSIpOwotCQkJCi0JCQlyZXR1cm4gbmV3IEpESzZOb3JtYWxpemVyKG5vcm1hbGl6ZXJDbGFzcywgZm9ybUNsYXNzKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBXM0NOb3JtYWxpemVyIGNyZWF0ZUlDVU5vcm1hbGl6ZXIoQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJLy8gRmlyc3QgYXR0ZW1wdCBpcyB0byB0cnkgdGhlIElCTSBJQ1UgbGlicmFyeQotCQl0cnkgewotCQkJaWYgKGNsYXNzTG9hZGVyLmxvYWRDbGFzcygiY29tLmlibS5pY3UudGV4dC5Ob3JtYWxpemVyIikgIT0gbnVsbCkgewotCQkJCXJldHVybiBuZXcgSUNVTm9ybWFsaXplcigpOwotCQkJfQotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE0MjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIHByb3BhZ2F0ZSBwb3NzaWJsZSBlcnJvcnMgZnJvbSB4czpib29sZWFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogJGFyZyBpcyBmaXJzdCByZWR1Y2VkIHRvIGFuIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIGJ5IGFwcGx5aW5nIHRoZQotICogZm46Ym9vbGVhbigpIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIGlzIGZhbHNlLAotICogYW5kIGZhbHNlIGlmIHRoZSBlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZSBpcyB0cnVlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Ob3QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTm90LgotCSAqLwotCXB1YmxpYyBGbk5vdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJub3QiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yIAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyAxIGFyZ3VtZW50IG9ubHkhCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gZm5fbm90KGFyZ3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBOb3Qgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm5vdGUgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fbm90KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTQm9vbGVhbiByZXQgPSBGbkJvb2xlYW4uZm5fYm9vbGVhbihhcmcpOwotCi0JCWJvb2xlYW4gYW5zd2VyID0gZmFsc2U7Ci0KLQkJaWYgKHJldC52YWx1ZSgpID09IGZhbHNlKQotCQkJYW5zd2VyID0gdHJ1ZTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihhbnN3ZXIpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OdW1iZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OdW1iZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhNzljNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTnVtYmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjYyNzY1IC0gZml4ZXMgZmxvYXQgaGFuZGxpbmcgZm9yIGZuOm51bWJlciAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjk4NTE5IC0gaW1wcm92ZW1lbnRzIHRvIGZuOm51bWJlciBpbXBsZW1lbnRhdGlvbiwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZXJpbmcgdG8gbm9kZSBhcmd1bWVudHMuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBpbmRpY2F0ZWQgYnkgJGFyZyBvciwgaWYgJGFyZyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29udGV4dAotICogaXRlbSBhZnRlciBhdG9taXphdGlvbiwgY29udmVydGVkIHRvIGFuIHhzOmRvdWJsZS4gSWYgJGFyZyBvciB0aGUgY29udGV4dAotICogaXRlbSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGFuIHhzOmRvdWJsZSwgdGhlIHhzOmRvdWJsZSB2YWx1ZSBOYU4gaXMKLSAqIHJldHVybmVkLiBJZiB0aGUgY29udGV4dCBpdGVtIGlzIHVuZGVmaW5lZCBhbiBlcnJvciBpcyByYWlzZWQ6Ci0gKiBbZXJyOkZPTkMwMDAxXS4KLSAqLwotcHVibGljIGNsYXNzIEZuTnVtYmVyIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk51bWJlci4KLQkgKi8KLQlwdWJsaWMgRm5OdW1iZXIoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibnVtYmVyIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gbnVsbDsKLQkJaWYgKGFyZ3MuaXNFbXB0eSgpKSB7Ci0JCQlhcmd1bWVudCA9IGdldFJlc3VsdFNldEZvckFyaXR5WmVybyhkeW5hbWljX2NvbnRleHQoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJcnMuYWRkKGZuX251bWJlcihhcmd1bWVudCwgZHluYW1pY19jb250ZXh0KCkpKTsKLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE51bWJlciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bnVtYmVyIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRG91YmxlIGZuX251bWJlcihSZXN1bHRTZXF1ZW5jZSBhcmcsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJaWYgKGFyZy5zaXplKCkgPiAxKSB7Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUoImJhZCBhcmd1bWVudCBwYXNzZWQgdG8gZm46bnVtYmVyKCkiKSk7Ci0JCX0gZWxzZSBpZiAoYXJnLnNpemUoKSA9PSAxKSB7Ci0JCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJCS8qCi0JCQlpZiAoIShhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKQotCQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQkqLwotCQkJCi0JCQlpZiAoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSB7Ci0JCQkgIGlmICgoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkpIHsKLQkJCQkgcmV0dXJuIChYU0RvdWJsZSlhdDsKLQkJCSAgfSBlbHNlIGlmICgoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkgewotCQkJCSAgZmxvYXQgdmFsdWUgPSAoKFhTRmxvYXQpYXQpLmZsb2F0X3ZhbHVlKCk7Ci0JCQkJICBpZiAoRmxvYXQuaXNOYU4odmFsdWUpKSB7Ci0JCQkJCSAgcmV0dXJuIG5ldyBYU0RvdWJsZShEb3VibGUuTmFOKTsKLQkJCQkgIH0gZWxzZSBpZiAodmFsdWUgPT0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFkpIHsKLQkJCQkJICByZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSk7Ci0JCQkJICB9IGVsc2UgaWYgKHZhbHVlID09IEZsb2F0LlBPU0lUSVZFX0lORklOSVRZKSB7Ci0JCQkJCSAgcmV0dXJuIG5ldyBYU0RvdWJsZShEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpOwotCQkJCSAgfSBlbHNlIHsKLQkJCQkJICByZXR1cm4gbmV3IFhTRG91YmxlKChkb3VibGUpdmFsdWUpOyAKLQkJCQkgIH0KLQkJCSAgfSBlbHNlIHsKLQkJCQkgWFNEb3VibGUgZCA9IFhTRG91YmxlLnBhcnNlX2RvdWJsZShhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJIHJldHVybiBkICE9IG51bGwgPyBkIDogbmV3IFhTRG91YmxlKERvdWJsZS5OYU4pOwotCQkJICB9Ci0JCQl9Ci0JCQllbHNlIGlmIChhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJWFNEb3VibGUgZCA9IFhTRG91YmxlLnBhcnNlX2RvdWJsZSgoRm5EYXRhLmF0b21pemUoYXQpKS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJcmV0dXJuIGQgIT0gbnVsbCA/IGQgOiBuZXcgWFNEb3VibGUoRG91YmxlLk5hTik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5OYU4pOwotCQl9Ci0JCQotCQkvLyB1bnJlYWNoCi0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk9uZU9yTW9yZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk9uZU9yTW9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTAzYmRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5PbmVPck1vcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyAkYXJnIGlmIGl0IGNvbnRhaW5zIG9uZSBvciBtb3JlIGl0ZW1zLiBPdGhlcndpc2UsIHJhaXNlcyBhbiBlcnJvcgotICogW2VycjpGT1JHMDAwNF0uIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiAkYXJnLgotICovCi1wdWJsaWMgY2xhc3MgRm5PbmVPck1vcmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuT25lT3JNb3JlLgotCSAqLwotCXB1YmxpYyBGbk9uZU9yTW9yZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJvbmUtb3ItbW9yZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gb25lX29yX21vcmUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogT25lLW9yLU1vcmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46b25lLW9yLW1vcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb25lX29yX21vcmUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5lbXB0eV9zZXEobnVsbCk7Ci0KLQkJcmV0dXJuIGFyZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUG9zaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Qb3NpdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmI3Y2EzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Qb3NpdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIGluZGljYXRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250ZXh0IGl0ZW0gd2l0aGluIHRoZQotICogc2VxdWVuY2Ugb2YgaXRlbXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSWYgdGhlIGNvbnRleHQgaXRlbSBpcwotICogdW5kZWZpbmVkLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT05DMDAwMV0uCi0gKi8KLXB1YmxpYyBjbGFzcyBGblBvc2l0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblBvc2l0aW9uLgotCSAqLwotCXB1YmxpYyBGblBvc2l0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInBvc2l0aW9uIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBwb3NpdGlvbihhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUG9zaXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpwb3NpdGlvbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBwb3NpdGlvbihDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCi0JCWlmIChkYy5mb2N1cygpLmNvbnRleHRfaXRlbSgpID09IG51bGwpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihkYwotCQkJCS5jb250ZXh0X3Bvc2l0aW9uKCkpKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblByZWZpeEZyb21RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblByZWZpeEZyb21RTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2Q5Mzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5QcmVmaXhGcm9tUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6TkNOYW1lIHJlcHJlc2VudGluZyB0aGUgcHJlZml4IGZvciAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIG9yICRhcmcgaGFzIG5vIHByZWZpeCwgYW4gZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblByZWZpeEZyb21RTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblByZWZpeEZyb21RTmFtZQotCSAqLwotCXB1YmxpYyBGblByZWZpeEZyb21RTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJwcmVmaXgtZnJvbS1RTmFtZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gcHJlZml4KGFyZ3MsIF9mbC5keW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUHJlZml4LWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cHJlZml4LWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcHJlZml4KENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJnCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCSAgcmV0dXJuIHJzOwotCi0JCVFOYW1lIHFuYW1lID0gKFFOYW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJU3RyaW5nIHByZWZpeCA9IHFuYW1lLnByZWZpeCgpOwotCQkKLQotCQlpZiAocHJlZml4ICE9IG51bGwpIHsKLQkJCWlmIChkYy5wcmVmaXhfZXhpc3RzKHByZWZpeCkpIHsKLQkJCQkgIHJzLmFkZChuZXcgWFNOQ05hbWUocHJlZml4KSk7Ci0JCQl9IGVsc2UgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkUHJlZml4KCk7Ci0JCQl9Ci0JCX0gCi0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBRTmFtZSgpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUU5hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5RTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTA4MjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5RTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOlFOYW1lIHdpdGggdGhlIG5hbWVzcGFjZSBVUkkgZ2l2ZW4gaW4gJHBhcmFtVVJJLiBJZiAkcGFyYW1VUkkKLSAqIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgdGhlIGVtcHR5IHNlcXVlbmNlLCBpdCByZXByZXNlbnRzICJubyBuYW1lc3BhY2UiLiBUaGUKLSAqIHByZWZpeCAob3IgYWJzZW5jZSBvZiBhIHByZWZpeCkgaW4gJHBhcmFtUU5hbWUgaXMgcmV0YWluZWQgaW4gdGhlIHJldHVybmVkCi0gKiB4czpRTmFtZSB2YWx1ZS4gVGhlIGxvY2FsIG5hbWUgaW4gdGhlIHJlc3VsdCBpcyB0YWtlbiBmcm9tIHRoZSBsb2NhbCBwYXJ0IG9mCi0gKiAkcGFyYW1RTmFtZS4KLSAqLwotcHVibGljIGNsYXNzIEZuUU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5RTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5RTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJRTmFtZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gcmVzb2x2ZV9RTmFtZShhcmdzLCBzdGF0aWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXNvbHZlIHRoZSBRTmFtZSBvZiB0aGUgZ2l2ZW4gYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0ZWggZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBmbjpRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXNvbHZlX1FOYW1lKENvbGxlY3Rpb24gYXJncywgU3RhdGljQ29udGV4dCBzYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJU3RyaW5nIG5zID0gbnVsbDsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlucyA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBuYW1lID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVFOYW1lIHFuID0gUU5hbWUucGFyc2VfUU5hbWUobmFtZSk7Ci0JCWlmIChxbiA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmxleGljYWxfZXJyb3IobnVsbCk7Ci0JCXFuLnNldF9uYW1lc3BhY2UobnMpOwotCi0JCXJzLmFkZChxbik7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlbW92ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlbW92ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBiMWMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZW1vdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYSBuZXcgc2VxdWVuY2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdmFsdWUgb2YgJHRhcmdldCB3aXRoIHRoZSBpdGVtIGF0Ci0gKiB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSBvZiAkcG9zaXRpb24gcmVtb3ZlZC4gSWYgJHBvc2l0aW9uIGlzCi0gKiBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiAkdGFyZ2V0LCAkdGFyZ2V0IGlzCi0gKiByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uIGNvbnNpc3RzIG9mIGFsbCBpdGVtcwotICogb2YgJHRhcmdldCB3aG9zZSBpbmRleCBpcyBsZXNzIHRoYW4gJHBvc2l0aW9uLCBmb2xsb3dlZCBieSBhbGwgaXRlbXMgb2YKLSAqICR0YXJnZXQgd2hvc2UgaW5kZXggaXMgZ3JlYXRlciB0aGFuICRwb3NpdGlvbi4gSWYgJHRhcmdldCBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJlbW92ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5SZW1vdmUuCi0JICovCi0JcHVibGljIEZuUmVtb3ZlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJlbW92ZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gcmVtb3ZlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFJlbW92ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyZW1vdmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcmVtb3ZlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDI7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSB0YXJnZXQgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCWlmIChhcmcyLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnMi5maXJzdCgpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTSW50ZWdlcikpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCWludCBwb3NpdGlvbiA9ICgoWFNJbnRlZ2VyKSBhdCkuaW50X3ZhbHVlKCkuaW50VmFsdWUoKTsKLQotCQlpZiAocG9zaXRpb24gPCAxKQotCQkJcmV0dXJuIHRhcmdldDsKLQotCQlpZiAocG9zaXRpb24gPiB0YXJnZXQuc2l6ZSgpKQotCQkJcmV0dXJuIHRhcmdldDsKLQotCQlpZiAodGFyZ2V0LmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJaW50IGN1cnBvcyA9IDE7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gdGFyZ2V0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChjdXJwb3MgIT0gcG9zaXRpb24pCi0JCQkJcnMuYWRkKGF0KTsKLQotCQkJY3VycG9zKys7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlcGxhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZXBsYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTM0NTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlcGxhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGFkZGVkIGV4Y2VwdGlvbiBoYW5kbGluZyB0byB0b3NzIGNvcnJlY3QgZXJyb3IgbnVtYmVycy4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKLQotLyoqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgeHM6c3RyaW5nIHRoYXQgaXMgb2J0YWluZWQgYnkgcmVwbGFjaW5nIGVhY2gKLSAqIG5vbi1vdmVybGFwcGluZyBzdWJzdHJpbmcgb2YgJGlucHV0IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gJHBhdHRlcm4gd2l0aCBhbgotICogb2NjdXJyZW5jZSBvZiB0aGUgJHJlcGxhY2VtZW50IHN0cmluZy4KLSAqLwotcHVibGljIGNsYXNzIEZuUmVwbGFjZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBSblJlcGxhY2UuCi0JICovCi0JcHVibGljIEZuUmVwbGFjZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyZXBsYWNlIiksIDMsIDQpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXBsYWNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFJlcGxhY2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cmVwbGFjZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXBsYWNlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKQotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzQgPSBudWxsOwotCQlpZiAoYXJnaXRlci5oYXNOZXh0KCkpIHsKLQkJCWFyZzQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQkJU3RyaW5nIGZsYWdzID0gYXJnNC5maXJzdCgpLnN0cmluZ192YWx1ZSgpOwotCQkJCi0JCQlpZiAoZmxhZ3MubGVuZ3RoKCkgPT0gMCkgewotCQkJCWFyZzQgPSBudWxsOwotCQkJfSBlbHNlIGlmIChpc0ZsYWdWYWxpZChmbGFncykgPT0gZmFsc2UpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwMSIsICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gZmxhZ3MiKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgcGF0dGVybiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIHJlcGxhY2VtZW50ID0gKChYU1N0cmluZykgYXJnMy5maXJzdCgpKS52YWx1ZSgpOwotCQkKLQkJdHJ5IHsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoc3RyMS5yZXBsYWNlQWxsKHBhdHRlcm4sIHJlcGxhY2VtZW50KSkpOwotCQkJcmV0dXJuIHJzOyAKLQkJfSBjYXRjaCAoUGF0dGVyblN5bnRheEV4Y2VwdGlvbiBlcnIpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5yZWdleF9lcnJvcihudWxsKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwNCIsICJpbnZhbGlkIHJlZ2V4LiIpOwotCQl9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGV4KSB7Ci0JCQlTdHJpbmcgY2xhc3NOYW1lID0gZXguZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQlpZiAoY2xhc3NOYW1lLmVuZHNXaXRoKCJTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIikpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwNCIsICJyZXN1bHQgb3V0IG9mIGJvdW5kcyIpOwotCQkJfQotCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiRk9SWDAwMDMiLCAiaW52YWxpZCByZWdleC4iKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwNCIsICJpbnZhbGlkIHJlZ2V4LiIpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNGbGFnVmFsaWQoU3RyaW5nIGZsYWcpIHsKLQkJY2hhciBmbGFnc1tdID0geydzJywgJ20nLCAnaScsICd4J307Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGZsYWdzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoZmxhZy5pbmRleE9mKGZsYWdzW2ldKSAhPSAtMSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVRTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVRTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzQxNjAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZXNvbHZlUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODg4ODYgLSBhZGQgdW5pdCB0ZXN0cyBhbmQgZml4IGZuOnJlc29sdmUtcW5hbWUgZnVuY3Rpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6UU5hbWUgdmFsdWUgKHRoYXQgaXMsIGFuIGV4cGFuZGVkLVFOYW1lKSBieSB0YWtpbmcgYW4geHM6c3RyaW5nCi0gKiB0aGF0IGhhcyB0aGUgbGV4aWNhbCBmb3JtIG9mIGFuIHhzOlFOYW1lIChhIHN0cmluZyBpbiB0aGUgZm9ybQotICogInByZWZpeDpsb2NhbC1uYW1lIiBvciAibG9jYWwtbmFtZSIpIGFuZCByZXNvbHZpbmcgaXQgdXNpbmcgdGhlIGluLXNjb3BlCi0gKiBuYW1lc3BhY2VzIGZvciBhIGdpdmVuIGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJlc29sdmVRTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblJlc29sdmVRTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5SZXNvbHZlUU5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicmVzb2x2ZS1RTmFtZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gcmVzb2x2ZV9RTmFtZShhcmdzLCBzdGF0aWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXNvbHZlLVFOYW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyZXNvbHZlLVFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHJlc29sdmVfUU5hbWUoQ29sbGVjdGlvbiBhcmdzLCBTdGF0aWNDb250ZXh0IHNjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy9Db2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IGFyZ3M7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJU3RyaW5nIG5hbWUgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJUU5hbWUgcW4gPSBRTmFtZS5wYXJzZV9RTmFtZShuYW1lKTsKLQotCQlpZiAocW4gPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5sZXhpY2FsX2Vycm9yKG51bGwpOwotCi0JCUVsZW1lbnRUeXBlIHhzZWxlbWVudCA9IChFbGVtZW50VHlwZSkgYXJnMi5maXJzdCgpOwotCQlFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgeHNlbGVtZW50Lm5vZGVfdmFsdWUoKTsKLQotCQlpZiAocW4ucHJlZml4KCkgIT0gbnVsbCkgewotCQkJU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGVsZW1lbnQubG9va3VwTmFtZXNwYWNlVVJJKHFuLnByZWZpeCgpKTsKLQkJCQotCQkJaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRQcmVmaXgoKTsKLQkJCX0KLQkJCXFuLnNldF9uYW1lc3BhY2UobmFtZXNwYWNlVVJJKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChxbi5sb2NhbCgpLmVxdWFscyhlbGVtZW50LmdldExvY2FsTmFtZSgpKSAmJiBlbGVtZW50LmlzRGVmYXVsdE5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkgewotCQkJCXFuLnNldF9uYW1lc3BhY2UoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0KLQkJcnMuYWRkKHFuKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBFbGVtZW50VHlwZSgpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVVUkkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZXNvbHZlVVJJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNGVmNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVVUkkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBlbmFibGUgYSByZWxhdGl2ZSBVUkkgdG8gYmUgcmVzb2x2ZWQKLSAqIGFnYWluc3QgYW4gYWJzb2x1dGUgVVJJLiBUaGUgZmlyc3QgZm9ybSBvZiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzICRyZWxhdGl2ZQotICogYWdhaW5zdCB0aGUgdmFsdWUgb2YgdGhlIGJhc2UtdXJpIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LiBJZiB0aGUKLSAqIGJhc2UtdXJpIHByb3BlcnR5IGlzIG5vdCBpbml0aWFsaXplZCBpbiB0aGUgc3RhdGljIGNvbnRleHQgYW4gZXJyb3IgaXMgcmFpc2VkCi0gKiBbZXJyOkZPTlMwMDA1XS4KLSAqIAotICogSWYgJHJlbGF0aXZlIGlzIGEgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZSwgaXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCAkYmFzZSwgb3IKLSAqIHRoZSBiYXNlLXVyaSBwcm9wZXJ0eSBmcm9tIHRoZSBzdGF0aWMgY29udGV4dCwgdXNpbmcgYW4gYWxnb3JpdGhtIHN1Y2ggYXMgdGhlCi0gKiBvbmVzIGRlc2NyaWJlZCBpbiBbUkZDIDIzOTZdIG9yIFtSRkMgMzk4Nl0sIGFuZCB0aGUgcmVzdWx0aW5nIGFic29sdXRlIFVSSQotICogcmVmZXJlbmNlIGlzIHJldHVybmVkLiBBbiBlcnJvciBtYXkgYmUgcmFpc2VkIFtlcnI6Rk9SRzAwMDldIGluIHRoZQotICogcmVzb2x1dGlvbiBwcm9jZXNzLiBJZiAkcmVsYXRpdmUgaXMgYW4gYWJzb2x1dGUgVVJJIHJlZmVyZW5jZSwgaXQgaXMgcmV0dXJuZWQKLSAqIHVuY2hhbmdlZC4gSWYgJHJlbGF0aXZlIG9yICRiYXNlIGlzIG5vdCBhIHZhbGlkIHhzOmFueVVSSSBhbiBlcnJvciBpcyByYWlzZWQKLSAqIFtlcnI6Rk9SRzAwMDJdLiBJZiAkcmVsYXRpdmUgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMKLSAqIHJldHVybmVkLgotICovCi1wdWJsaWMgY2xhc3MgRm5SZXNvbHZlVVJJIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuQmFzZVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5SZXNvbHZlVVJJKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJlc29sdmUtdXJpIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXNvbHZlVVJJKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXNvbHZlLVVSSSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkX2NvbnRleHQKLQkgKiAgICAgICAgICAgIER5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyZXNvbHZlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXNvbHZlVVJJKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRfY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChkX2NvbnRleHQuYmFzZV91cmkoKSA9PSBudWxsKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3Iubm9CYXNlVVJJKCk7Ci0JCX0KLQkJCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBhcmdzOwotCQlJdGVyYXRvciBhcmdpdCA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJlbGF0aXZlUlMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0Lm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYmFzZVVyaVJTID0gbnVsbDsKLQkJaWYgKGFyZ2l0Lmhhc05leHQoKSkgewotCQkJYmFzZVVyaVJTID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdC5uZXh0KCk7Ci0JCX0KLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQotCQlpZiAocmVsYXRpdmVSUy5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlBbnlUeXBlIHJlbGF0aXZlVVJJID0gcmVsYXRpdmVSUy5maXJzdCgpOwotCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBudWxsOwotCQkJCQotCQlpZiAoYmFzZVVyaVJTID09IG51bGwpIHsKLQkJCXJlc29sdmVkVVJJID0gcmVzb2x2ZVVSSShkX2NvbnRleHQuYmFzZV91cmkoKS5zdHJpbmdfdmFsdWUoKSwgcmVsYXRpdmVVUkkuc3RyaW5nX3ZhbHVlKCkpOwotCQl9IGVsc2UgewotCQkJQW55VHlwZSBiYXNlVVJJID0gYmFzZVVyaVJTLmZpcnN0KCk7Ci0JCQlyZXNvbHZlZFVSSSA9IHJlc29sdmVVUkkoYmFzZVVSSS5zdHJpbmdfdmFsdWUoKSwgcmVsYXRpdmVVUkkuc3RyaW5nX3ZhbHVlKCkpOwotCQl9Ci0KLQkJcnMuYWRkKG5ldyBYU0FueVVSSShyZXNvbHZlZFVSSSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZSwgU3RyaW5nIHJlbGF0aXZlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJU3RyaW5nIHJlc29sdmVkID0gbnVsbDsKLQkJdHJ5IHsKLQkJCVVSSSBiYXNlVVJJID0gbmV3IFVSSShiYXNlKTsKLQkJCXJlc29sdmVkID0gYmFzZVVSSS5yZXNvbHZlKHJlbGF0aXZlKS50b1N0cmluZygpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5lcnJvclJlc29sdmluZ1VSSSgpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZDsKLQl9Ci0JCi0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJldmVyc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZXZlcnNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNzAxOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJldmVyc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIFNlcXVlbmNlIHJldmVyc2UgZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnJldmVyc2UoJGFyZyBhcyBpdGVtKCkqKSBhcyBpdGVtKCkqCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXZlcnNlcyB0aGUgb3JkZXIgb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblJldmVyc2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5SZXZlcnNlLgotCSAqLwotCXB1YmxpYyBGblJldmVyc2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicmV2ZXJzZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSByZXZlcnNhbCBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gcmV2ZXJzZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXZlcnNlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSByZXZlcnNlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSByZXZlcnNhbCBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcmV2ZXJzZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIFhYWCBsYW1lCi0JCUxpc3RJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQkJaS5uZXh0KCk7Ci0KLQkJd2hpbGUgKGkuaGFzUHJldmlvdXMoKSkKLQkJCXJzLmFkZCgoQW55VHlwZSkgaS5wcmV2aW91cygpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NGZiYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIGNsZWFuIHVwIGZuOnJvb3QgYWNjb3JkaW5nIHRvIHNwZWMuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgxMTU5IC0gdGFrIGV4dHJhIGNhcmUgdG8gZmluZCB0aGUgcm9vdCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0byB3aGljaCAkYXJnIGJlbG9uZ3MuIFRoaXMgd2lsbCB1c3VhbGx5LCBidXQKLSAqIG5vdCBuZWNlc3NhcmlseSwgYmUgYSBkb2N1bWVudCBub2RlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Sb290IGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuUm9vdC4KLQkgKi8KLQlwdWJsaWMgRm5Sb290KCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJvb3QiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJLy9SZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gZm5fcm9vdChhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUm9vdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cm9vdCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9yb290KENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQkJCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBzYW5pdHkgY2hlY2sgYXJnCi0vLwkJaWYgKGNhcmdzLmlzRW1wdHkoKSkKLS8vCQkJcmV0dXJuIHJzOwotCi0JCWlmIChjYXJncy5zaXplKCkgPiAxKQotCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IG51bGw7Ci0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWFyZyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlpZiAoZGMuY29udGV4dF9pdGVtKCkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCQl9Ci0JCQlhcmcuYWRkKGRjLmNvbnRleHRfaXRlbSgpKTsKLQkJfSBlbHNlIHsKLQkJCWFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7CQkJCi0JCX0KLQkJCi0JCWlmIChhcmcuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlBbnlUeXBlIGFhID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYWEgaW5zdGFuY2VvZiBOb2RlVHlwZSkpCi0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCi0JCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBhYTsKLQotCQkvLyBvayB3ZSBnb3QgYSBzYW5lIGFyZ3VtZW50Li4uIG93biBpdC4KLQotCQlOb2RlIHJvb3QgPSBudC5ub2RlX3ZhbHVlKCk7Ci0KLQkJd2hpbGUgKHJvb3QgIT0gbnVsbCAmJiAhIChyb290IGluc3RhbmNlb2YgRG9jdW1lbnQpKSB7Ci0JCQlOb2RlIG5ld3Jvb3QgPSByb290LmdldFBhcmVudE5vZGUoKTsKLQkJCWlmIChuZXdyb290ID09IG51bGwgJiYgcm9vdCBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCQluZXdyb290ID0gKChBdHRyKXJvb3QpLmdldE93bmVyRWxlbWVudCgpOwotCQkJfQotCQkJCQotCQkJLy8gZm91bmQgaXQKLQkJCWlmIChuZXdyb290ID09IG51bGwpCi0JCQkJYnJlYWs7Ci0KLQkJCXJvb3QgPSBuZXdyb290OwotCQl9Ci0KLQkJcnMuYWRkKE5vZGVUeXBlLmRvbV90b194cGF0aChyb290KSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvdW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q1MDVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciB3aXRoIG5vIGZyYWN0aW9uYWwgcGFydCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIGFyZ3VtZW50LgotICogSWYgdGhlcmUgYXJlIHR3byBzdWNoIG51bWJlcnMsIHRoZW4gdGhlIG9uZSB0aGF0IGlzIGNsb3Nlc3QgdG8gcG9zaXRpdmUKLSAqIGluZmluaXR5IGlzIHJldHVybmVkLiBNb3JlIGZvcm1hbGx5LCBmbjpyb3VuZCh4KSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQgYXMKLSAqIGZuOmZsb29yKHgrMC41KS4gSWYgdHlwZSBvZiAkYXJnIGlzIG9uZSBvZiB0aGUgZm91ciBudW1lcmljIHR5cGVzIHhzOmZsb2F0LAotICogeHM6ZG91YmxlLCB4czpkZWNpbWFsIG9yIHhzOmludGVnZXIgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUgc2FtZSBhcyB0aGUKLSAqIHR5cGUgb2YgJGFyZy4gSWYgdGhlIHR5cGUgb2YgJGFyZyBpcyBhIHR5cGUgZGVyaXZlZCBmcm9tIG9uZSBvZiB0aGUgbnVtZXJpYwotICogdHlwZXMsIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gaXMgdGhlIGJhc2UgbnVtZXJpYyB0eXBlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Sb3VuZCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Sb3VuZC4KLQkgKi8KLQlwdWJsaWMgRm5Sb3VuZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyb3VuZCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyAxIGFyZ3VtZW50IG9ubHkhCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gZm5fcm91bmQoYXJndW1lbnQpOwotCX0KLQotCS8qKgotCSAqIFJvdW5kIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cm91bmQgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fcm91bmQoUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBzYW5pdHkgY2hleAotCQlOdW1lcmljVHlwZSBudCA9IEZuQWJzLmdldF9zaW5nbGVfbnVtZXJpY19hcmcoYXJnKTsKLQotCQkvLyBlbXB0eSBhcmcKLQkJaWYgKG50ID09IG51bGwpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJcnMuYWRkKG50LnJvdW5kKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvdW5kSGFsZlRvRXZlbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvdW5kSGFsZlRvRXZlbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWUwNjhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb3VuZEhhbGZUb0V2ZW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIG5lYXJlc3QgKHRoYXQgaXMsIG51bWVyaWNhbGx5IGNsb3Nlc3QpIG51bWVyaWMgdG8KLSAqICRhcmcgdGhhdCBpcyBhIG11bHRpcGxlIG9mIHRlbiB0byB0aGUgcG93ZXIgb2YgbWludXMgJHByZWNpc2lvbi4gSWYgdHdvIHN1Y2gKLSAqIHZhbHVlcyBhcmUgZXF1YWxseSBuZWFyIChlLmcuIGlmIHRoZSBmcmFjdGlvbmFsIHBhcnQgaW4gJGFyZyBpcyBleGFjdGx5Ci0gKiAuNTAwLi4uKSwgcmV0dXJucyB0aGUgb25lIHdob3NlIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0IGlzIGV2ZW4uIElmIHR5cGUgb2YKLSAqICRhcmcgaXMgb25lIG9mIHRoZSBmb3VyIG51bWVyaWMgdHlwZXMgeHM6ZmxvYXQsIHhzOmRvdWJsZSwgeHM6ZGVjaW1hbCBvcgotICogeHM6aW50ZWdlciB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mICRhcmcuIElmIHRoZQotICogdHlwZSBvZiAkYXJnIGlzIGEgdHlwZSBkZXJpdmVkIGZyb20gb25lIG9mIHRoZSBudW1lcmljIHR5cGVzLCB0aGUgdHlwZSBvZiB0aGUKLSAqIHJldHVybiBpcyB0aGUgYmFzZSBudW1lcmljIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJvdW5kSGFsZlRvRXZlbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Sb3VuZEhhbGZUb0V2ZW4uCi0JICovCi0JcHVibGljIEZuUm91bmRIYWxmVG9FdmVuKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJvdW5kLWhhbGYtdG8tZXZlbiIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJaWYgKGFyZ3Muc2l6ZSgpID09IDIpIHsKLQkJCXJldHVybiBmbl9yb3VuZF9oYWxmX3RvX2V2ZW4oYXJncyk7Ci0JCX0KLQkJCi0JCXJldHVybiBmbl9yb3VuZF9oYWxmX3RvX2V2ZW4oYXJndW1lbnQpOwotCX0KLQotCS8qKgotCSAqIFJvdW5kLUhhbGYtdG8tRXZlbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnJvdW5kLWhhbGYtdG8tZXZlbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9yb3VuZF9oYWxmX3RvX2V2ZW4oUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlOdW1lcmljVHlwZSBudCA9IEZuQWJzLmdldF9zaW5nbGVfbnVtZXJpY19hcmcoYXJnKTsKLQotCQkvLyBlbXB0eSBhcmcKLQkJaWYgKG50ID09IG51bGwpCi0JCQlyZXR1cm4gcnM7Ci0JCQotCQlycy5hZGQobnQucm91bmRfaGFsZl90b19ldmVuKCkpOwotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fcm91bmRfaGFsZl90b19ldmVuKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCQotCQlpZiAoYXJncy5zaXplKCkgPiAyIHx8IGFyZ3Muc2l6ZSgpIDw9IDEpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCX0KLQkJCi0JCUl0ZXJhdG9yIGFyZ0l0ID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSByc0FyZzEgPSAgKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzUHJlY2lzaW9uID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCQotCQlOdW1lcmljVHlwZSBudCA9IChOdW1lcmljVHlwZSkgcnNBcmcxLmZpcnN0KCk7Ci0JCU51bWVyaWNUeXBlIG50UHJlY2lzaW9uID0gKE51bWVyaWNUeXBlKSByc1ByZWNpc2lvbi5maXJzdCgpOwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkKLQkJcnMuYWRkKG50LnJvdW5kX2hhbGZfdG9fZXZlbihJbnRlZ2VyLnBhcnNlSW50KG50UHJlY2lzaW9uLnN0cmluZ192YWx1ZSgpKSkpOwotCQlyZXR1cm4gcnM7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4YzFiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21EYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNzc3NzQgLSBYU0RFY2ltYWwgcmV0dXJuaW5nIHdyb25nIHZhbHVlcy4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpkZWNpbWFsIHZhbHVlIGJldHdlZW4gMCBhbmQgNjAuOTk5Li4uLCBib3RoIGluY2x1c2l2ZQotICogcmVwcmVzZW50aW5nIHRoZSBzZWNvbmRzIGFuZCBmcmFjdGlvbmFsIHNlY29uZHMgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZgotICogJGFyZy4gTm90ZSB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDYwIHNlY29uZHMgdG8gYWNjb21tb2RhdGUKLSAqIG9jY2FzaW9uYWwgbGVhcCBzZWNvbmRzIHVzZWQgdG8ga2VlcCBodW1hbiB0aW1lIHN5bmNocm9uaXplZCB3aXRoIHRoZQotICogcm90YXRpb24gb2YgdGhlIHBsYW5ldC4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuU2Vjb25kc0Zyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblNlY29uZHNGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuU2Vjb25kc0Zyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzZWNvbmRzLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHNlY29uZHNfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU2Vjb25kcy1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnNlY29uZHMtZnJvbS1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzZWNvbmRzX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJZG91YmxlIHJlcyA9IGR0LnNlY29uZCgpOwotCi0JCXJzLmFkZChuZXcgWFNEZWNpbWFsKEJpZ0RlY2ltYWwudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyNzY3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU2Vjb25kc0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNzc3NzQgLSBYU0RlY2ltYWwgcmV0dXJuaW5nIHdyb25nIHZhbHVlcy4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIHhzOmR1cmF0aW9uIGV4cGVjdGVkIGFyZ3VtZW50LiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmRlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBzZWNvbmRzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuU2Vjb25kc0Zyb21EdXJhdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblNlY29uZHNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuU2Vjb25kc0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzZWNvbmRzLWZyb20tZHVyYXRpb24iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHNlY29uZHNfZnJvbV9kdXJhdGlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZWNvbmRzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c2Vjb25kcy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHNlY29uZHNfZnJvbV9kdXJhdGlvbihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRHVyYXRpb24gZHRkID0gKFhTRHVyYXRpb24pIGFyZzEuZmlyc3QoKTsKLQotCQlkb3VibGUgcmVzID0gZHRkLnNlY29uZHMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcnMuYWRkKG5ldyBYU0RlY2ltYWwoQmlnRGVjaW1hbC52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTVkYjNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNzc3NzQgLSBYU0RlY2ltYWwgcmV0dXJpbmcgd3JvbmcgdmFsdWVzLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmRlY2ltYWwgdmFsdWUgYmV0d2VlbiAwIGFuZCA2MC45OTkuLi4sIGJvdGggaW5jbHVzaXZlLAotICogcmVwcmVzZW50aW5nIHRoZSBzZWNvbmRzIGFuZCBmcmFjdGlvbmFsIHNlY29uZHMgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZgotICogJGFyZy4gTm90ZSB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDYwIHNlY29uZHMgdG8gYWNjb21tb2RhdGUKLSAqIG9jY2FzaW9uYWwgbGVhcCBzZWNvbmRzIHVzZWQgdG8ga2VlcCBodW1hbiB0aW1lIHN5bmNocm9uaXplZCB3aXRoIHRoZQotICogcm90YXRpb24gb2YgdGhlIHBsYW5ldC4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuU2Vjb25kc0Zyb21UaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU2Vjb25kc0Zyb21UaW1lLgotCSAqLwotCXB1YmxpYyBGblNlY29uZHNGcm9tVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzZWNvbmRzLWZyb20tdGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc2Vjb25kc19mcm9tX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQmFzZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46YmFzZS11cmkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc2Vjb25kc19mcm9tX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU1RpbWUgZHQgPSAoWFNUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJZG91YmxlIHJlcyA9IGR0LnNlY29uZCgpOwotCi0JCXJzLmFkZChuZXcgWFNEZWNpbWFsKEJpZ0RlY2ltYWwudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXJ0c1dpdGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGFydHNXaXRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NDI2ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXJ0c1dpdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIG9mICRhcmcxIHN0YXJ0cwotICogd2l0aCBhIHNlcXVlbmNlIG9mIGNvbGxhdGlvbiB1bml0cyB0aGF0IHByb3ZpZGVzIGEgbWluaW1hbCBtYXRjaCB0byB0aGUKLSAqIGNvbGxhdGlvbiB1bml0cyBvZiAkYXJnMiBhY2NvcmRpbmcgdG8gdGhlIGNvbGxhdGlvbiB0aGF0IGlzIHVzZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblN0YXJ0c1dpdGggZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdGFydHNXaXRoLgotCSAqLwotCXB1YmxpYyBGblN0YXJ0c1dpdGgoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3RhcnRzLXdpdGgiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0YXJ0c193aXRoKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFN0YXJ0cy13aXRoIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN0YXJ0cy13aXRoIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN0YXJ0c193aXRoKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgc3RyMSA9ICIiOwotCQlTdHJpbmcgc3RyMiA9ICIiOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmICghYXJnMi5lbXB0eSgpKQotCQkJc3RyMiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlpbnQgc3RyMWxlbiA9IHN0cjEubGVuZ3RoKCk7Ci0JCWludCBzdHIybGVuID0gc3RyMi5sZW5ndGgoKTsKLQotCQlpZiAoc3RyMWxlbiA9PSAwICYmIHN0cjJsZW4gIT0gMCkgewotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQkJCXJldHVybiByczsKLQkJfQotCQlpZiAoc3RyMmxlbiA9PSAwKSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbih0cnVlKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlpZiAoc3RyMS5zdGFydHNXaXRoKHN0cjIpKQotCQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQllbHNlCi0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGF0aWNCYXNlVXJpLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RhdGljQmFzZVVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTBhM2ZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGF0aWNCYXNlVXJpLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGJhc2UtdXJpIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LiBJZiB0aGUKLSAqIGJhc2UtdXJpIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBDb21wb25lbnRzIG9mCi0gKiB0aGUgc3RhdGljIGNvbnRleHQgYXJlIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEMuMSBTdGF0aWMgQ29udGV4dCBDb21wb25lbnRzIGluCi0gKiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RhdGljQmFzZVVyaSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdGF0aWNCYXNlVXJpLgotCSAqLwotCXB1YmxpYyBGblN0YXRpY0Jhc2VVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3RhdGljLWJhc2UtdXJpIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdGF0aWNfYmFzZV91cmkoYXJncywgc3RhdGljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogU3RhdGljLWJhc2UtVXJpIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpzdGF0aWMtYmFzZS11cmkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RhdGljX2Jhc2VfdXJpKENvbGxlY3Rpb24gYXJncywKLQkJCVN0YXRpY0NvbnRleHQgc2MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQkJYXNzZXJ0IHNjICE9IG51bGw7Ci0KLQkJLy8gbWFrZSBhIGNvcHkgcHJvbGx5Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhzYy5iYXNlX3VyaSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZjZhOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDQ3MSAtIGltcHJvdmVtZW50cyB0byBmbjpzdHJpbmcgZnVuY3Rpb24gKHN1cHBvcnQgZm9yIGFyaXR5IDApIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxOTM4IC0gaGFuZGxlIGNvbnRleHQgYW5kIGVtcHR5IHNlcXVlbmNlcyBjb3JyZWN0bHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyByZXByZXNlbnRlZCBhcyBhIHhzOnN0cmluZy4gSWYgbm8gYXJndW1lbnQgaXMKLSAqIHN1cHBsaWVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgY29udGV4dCBpdGVtICguKS4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RyaW5nIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN0cmluZy4KLQkgKi8KLQlwdWJsaWMgRm5TdHJpbmcoKSB7Ci0JICBzdXBlcihuZXcgUU5hbWUoInN0cmluZyIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3RyaW5nKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTdHJpbmcgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3RyaW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN0cmluZyhDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRfY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IChhcmdzLnNpemUoKSA9PSAwIHx8IGFyZ3Muc2l6ZSgpID09IDEpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCQkJCQotCQlpZiAoYXJncy5pc0VtcHR5KCkpIHsKLQkJCS8vIHN1cHBvcnQgZm9yIGFyaXR5ID0gMAotCQkJcmV0dXJuIGdldFJlc3VsdFNldEZvckFyaXR5WmVybyhkX2NvbnRleHQpOwotCQl9Ci0JCWVsc2UgewotCQkJYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsJCi0JCX0KLQotCQkvLyBzYW5pdHkgY2hlY2sgYXJncwotCQlpZiAoYXJnMS5zaXplKCkgPiAxKQotCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoIiIpKTsKLQkJfSBlbHNlIHsKLQkJCUFueVR5cGUgYXQgPSBhcmcxLmZpcnN0KCk7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKGF0LnN0cmluZ192YWx1ZSgpKSk7Ci0JCX0KLQkJCi0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdKb2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nSm9pbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQwOTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdKb2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gam9pbiBzdHJpbmdzIHRvZ2V0aGVyLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjpzdHJpbmctam9pbigkYXJnMSBhcyB4czpzdHJpbmcqLCAkYXJnMiBhcyB4czpzdHJpbmcpIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyBhIHhzOnN0cmluZyBjcmVhdGVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIG1lbWJlcnMgb2YgdGhlCi0gKiAkYXJnMSBzZXF1ZW5jZSB1c2luZyAkYXJnMiBhcyBhIHNlcGFyYXRvci4gSWYgdGhlIHZhbHVlIG9mICRhcmcyIGlzIHRoZQotICogemVyby1sZW5ndGggc3RyaW5nLCB0aGVuIHRoZSBtZW1iZXJzIG9mICRhcmcxIGFyZSBjb25jYXRlbmF0ZWQgd2l0aG91dCBhCi0gKiBzZXBhcmF0b3IuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcxIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHplcm8tbGVuZ3RoIHN0cmluZyBpcwotICogcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblN0cmluZ0pvaW4gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdHJpbmdKb2luCi0JICovCi0JcHVibGljIEZuU3RyaW5nSm9pbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdHJpbmctam9pbiIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBqb2luaW5nIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdHJpbmdfam9pbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBKb2luIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBqb2luZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0aGUgYXJndW1lbnRzIGJlaW5nIGpvaW5lZCB0b2dldGhlci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN0cmluZ19qb2luKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0JCVN0cmluZyBzZXBhcmF0b3IgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gYXJnMS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCVhTU3RyaW5nIGl0ZW0gPSAoWFNTdHJpbmcpIGkubmV4dCgpOwotCQkJYnVmLmFwcGVuZChpdGVtLnZhbHVlKCkpOwotCQkJCi0JCQlpZiAoaS5oYXNOZXh0KCkpCi0JCQkJYnVmLmFwcGVuZChzZXBhcmF0b3IpOwotCQl9Ci0JCQotCQlyZXN1bHQgPSBidWYudG9TdHJpbmcoKTsKLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhyZXN1bHQpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19TVEFSKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nTGVuZ3RoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nTGVuZ3RoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMmQwOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ0xlbmd0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ0NzEgLSBpbXByb3ZlbWVudHMgdG8gc3RyaW5nLWxlbmd0aCBmdW5jdGlvbiAoc3VwcG9ydCBmb3IgYXJpdHkgMCkKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIGhhbmRsZSBjb250ZXh0IGFuZCBlbXB0eSBzZXF1ZW5jZXMgY29ycmVjdGx5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHN0cmluZyBsZW5ndGguCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnN0cmluZy1sZW5ndGgoJGFyZyBhcyB4czpzdHJpbmc/KSBhcyB4czppbnRlZ2VyCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIGFuIHhzOmludGVnZXIgZXF1YWwgdG8gdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIG9mIHRoZQotICogdmFsdWUgb2YgJGFyZy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSB4czppbnRlZ2VyIDAgaXMgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblN0cmluZ0xlbmd0aCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN0cmluZ0xlbmd0aAotCSAqLwotCXB1YmxpYyBGblN0cmluZ0xlbmd0aCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdHJpbmctbGVuZ3RoIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0cmluZ19sZW5ndGgoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gdGhlIHN0cmluZyBsZW5ndGguCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgdGhlIHN0cmluZyBsZW5ndGggZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RyaW5nX2xlbmd0aChDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRfY29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gbnVsbDsKLQotCQlpZiAoY2FyZ3MuaXNFbXB0eSgpKSB7Ci0JCSAgLy8gc3VwcG9ydCBmb3IgYXJpdHkgPSAwCi0JCSAgcmV0dXJuIGdldFJlc3VsdFNldEZvckFyaXR5WmVybyhkX2NvbnRleHQpOwotCQl9Ci0JCWVsc2UgewotCQkgIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICIiOwotCQlpZiAoISBhcmcxLmVtcHR5KCkpIHsKLQkJCXN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihzdHIuY29kZVBvaW50Q291bnQoMCwgc3RyLmxlbmd0aCgpKSkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdUb0NvZGVwb2ludHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdUb0NvZGVwb2ludHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNkNTNkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nVG9Db2RlcG9pbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNTU0IC0gaW1wcm92ZW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UgYW5kIGZpeCBzdXJyb2dhdGUgaGFuZGxpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvZGVQb2ludEl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvcjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgY29uc3RpdHV0ZSBhbiB4czpzdHJpbmcuIElmICRhcmcgaXMKLSAqIGEgemVyby1sZW5ndGggc3RyaW5nIG9yIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLgotICovCi1wdWJsaWMgY2xhc3MgRm5TdHJpbmdUb0NvZGVwb2ludHMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdHJpbmdUb0NvZGVwb2ludHMuCi0JICovCi0JcHVibGljIEZuU3RyaW5nVG9Db2RlcG9pbnRzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN0cmluZy10by1jb2RlcG9pbnRzIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdHJpbmdfdG9fY29kZXBvaW50cyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBCYXNlLVVyaSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpiYXNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdHJpbmdfdG9fY29kZXBvaW50cyhDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkgICByZXR1cm4gcnM7Ci0KLQkJWFNTdHJpbmcgeHN0ciA9IChYU1N0cmluZykgYXJnMS5maXJzdCgpOwotCi0JCUNvZGVQb2ludEl0ZXJhdG9yIGNwaSA9IG5ldyBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvcih4c3RyLnZhbHVlKCkpOwotCQkKLQkJZm9yIChpbnQgY29kZVBvaW50ID0gY3BpLmN1cnJlbnQoKTsgY29kZVBvaW50ICE9IENvZGVQb2ludEl0ZXJhdG9yLkRPTkU7IGNvZGVQb2ludCA9IGNwaS5uZXh0KCkpIHsKLSAgICAgICAgICAgCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihjb2RlUG9pbnQpKSk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnNlcXVlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMmJkZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI2Mjc2NSAtIGVhc2VkIHJlc3RyaWN0aW9uIG9uIGRhdGEgdHlwZS4uLmNvbnZlcnQgbnVtZXJpY3MgdG8gWFNEb3VibGUuCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NTgwNiAtIGZpeGVkIGZuOnN1YnNlcXVlbmNlIGZvciBpbmRleGVzIHN0YXJ0aW5nIGJlZm9yZSAxCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgY29udGlndW91cyBzZXF1ZW5jZSBvZiBpdGVtcyBpbiB0aGUgdmFsdWUgb2YgJHNvdXJjZVNlcSBiZWdpbm5pbmcKLSAqIGF0IHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mICRzdGFydGluZ0xvYyBhbmQgY29udGludWluZyBmb3IgdGhlCi0gKiBudW1iZXIgb2YgaXRlbXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZiAkbGVuZ3RoLiBNb3JlIHNwZWNpZmljYWxseSwgcmV0dXJucwotICogdGhlIGl0ZW1zIGluICRzb3VyY2VTdHJpbmcgd2hvc2UgcG9zaXRpb24gJHAgb2JleXM6IC0gZm46cm91bmQoJHN0YXJ0aW5nTG9jKQotICogPD0gJHAgPCBmbjpyb3VuZCgkc3RhcnRpbmdMb2MpICsgZm46cm91bmQoJGxlbmd0aCkKLSAqLwotcHVibGljIGNsYXNzIEZuU3Vic2VxdWVuY2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3Vic2VxdWVuY2UuCi0JICovCi0JcHVibGljIEZuU3Vic2VxdWVuY2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3Vic2VxdWVuY2UiKSwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN1YnNlcXVlbmNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFN1YnNlcXVlbmNlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN1YnNlcXVlbmNlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN1YnNlcXVlbmNlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAzOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugc2VxID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHN0YXJ0TG9jID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGxlbmd0aCA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCWlmIChzdGFydExvYy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IHN0YXJ0TG9jLmZpcnN0KCk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJYXQgPSBuZXcgWFNEb3VibGUoYXQuc3RyaW5nX3ZhbHVlKCkpOwotCi0JCWludCBzdGFydCA9IChpbnQpICgoWFNEb3VibGUpIGF0KS5kb3VibGVfdmFsdWUoKTsKLQotCQlpZiAobGVuZ3RoLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCi0JCWF0ID0gbGVuZ3RoLmZpcnN0KCk7Ci0JCQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSkgewotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCQkKLQkJYXQgPSBuZXcgWFNEb3VibGUoYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0KLQkJaW50IGxlbiA9IChpbnQpICgoWFNEb3VibGUpIGF0KS5kb3VibGVfdmFsdWUoKTsKLQotCQlpZiAoc2VxLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJaW50IHBvcyA9IDE7Ci0KLQkJaW50IGVuZCA9IHN0YXJ0ICsgbGVuOwotCi0JCS8vIFhYWDogSHVnZSBvcHRpbWl6YXRpb24gcG9zc2libGUgaGVyZSEKLQkJZm9yIChJdGVyYXRvciBpID0gc2VxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChzdGFydCA8PSBwb3MgJiYgcG9zIDwgZW5kKQotCQkJCXJzLmFkZChhdCk7Ci0KLQkJCXBvcysrOwotCQl9Ci0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYTYxZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3OTUgLSBpbXByb3ZlbWVudHMgdG8gZnVuY3Rpb24sIHN1YnN0cmluZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIHJlaW1wbGVtZW50ZWQgdG8gYmUgc3Vycm9nYXRlIHNlbnNpdGl2ZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29kZVBvaW50SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogPHA+Ci0gKiBGdW5jdGlvbiB0byBvYnRhaW4gYSBzdWJzdHJpbmcgZnJvbSBhIHN0cmluZy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46c3Vic3RyaW5nKCRzb3VyY2VTdHJpbmcgYXMgeHM6c3RyaW5nPywgJHN0YXJ0aW5nTG9jIGFzIHhzOmRvdWJsZSkKLSAqIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgcG9ydGlvbiBvZiB0aGUgdmFsdWUgb2YgJHNvdXJjZVN0cmluZyBiZWdpbm5pbmcgYXQgdGhlCi0gKiBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mICRzdGFydGluZ0xvYy4gVGhlIGNoYXJhY3RlcnMgcmV0dXJuZWQgZG8KLSAqIG5vdCBleHRlbmQgYmV5b25kICRzb3VyY2VTdHJpbmcuIElmICRzdGFydGluZ0xvYyBpcyB6ZXJvIG9yIG5lZ2F0aXZlLCBvbmx5Ci0gKiB0aG9zZSBjaGFyYWN0ZXJzIGluIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gemVybyBhcmUgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRzb3VyY2VTdHJpbmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nCi0gKiBpcyByZXR1cm5lZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nIGlzIGxvY2F0ZWQgYXQgcG9zaXRpb24gMSwgbm90IHBvc2l0aW9uIDAuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblN1YnN0cmluZyBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN1YnN0cmluZwotCSAqLwotCXB1YmxpYyBGblN1YnN0cmluZygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdWJzdHJpbmciKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgc3Vic3RyaW5nIG9idGFpbmVkIGZyb20gdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN1YnN0cmluZyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBzdWJzdHJpbmcgZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gYSBzdWJzdHJpbmcuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBzdWJzdHJpbmcgZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3Vic3RyaW5nKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKGFyZ3MpKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBzdHJpbmdBcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBzdGFydFBvc0FyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGxlbmd0aEFyZyA9IG51bGw7Ci0JCQotCQlpZiAoYXJnaS5oYXNOZXh0KCkpIHsKLQkJICBsZW5ndGhBcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwkKLQkJfQotCi0JCWlmIChzdHJpbmdBcmcuZW1wdHkoKSkgewotCQkJcmV0dXJuIGVtcHR5U3RyaW5nKHJzKTsKLQkJfQotCi0JCVN0cmluZyBzdHIgPSAoKFhTU3RyaW5nKSBzdHJpbmdBcmcuZmlyc3QoKSkudmFsdWUoKTsKLQkJZG91YmxlIGRzdGFydCA9ICgoWFNEb3VibGUpIHN0YXJ0UG9zQXJnLmZpcnN0KCkpLmRvdWJsZV92YWx1ZSgpOwotCQkKLQkJLy8gaXMgc3RhcnQgaXMgTmFOLCBubyBjaGFycyBhcmUgcmV0dXJuZWQKLQkJaWYgKERvdWJsZS5pc05hTihkc3RhcnQpIHx8IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSA9PSBkc3RhcnQpIHsKLQkJCXJldHVybiBlbXB0eVN0cmluZyhycyk7Ci0JCX0KLQkJbG9uZyBpc3RhcnQgPSBNYXRoLnJvdW5kKGRzdGFydCk7Ci0JCQotCQlsb25nIGlsZW5ndGggPSBMb25nLk1BWF9WQUxVRTsKLQkJaWYgKGxlbmd0aEFyZyAhPSBudWxsKSB7Ci0JCQlkb3VibGUgZGxlbmd0aCA9ICgoWFNEb3VibGUpIGxlbmd0aEFyZy5maXJzdCgpKS5kb3VibGVfdmFsdWUoKTsKLQkJCWlmIChEb3VibGUuaXNOYU4oZGxlbmd0aCkpCi0JCQkJcmV0dXJuIGVtcHR5U3RyaW5nKHJzKTsKLQkJCS8vIFN3aXRjaCB0byB0aGUgcm91bmRlZCBraW5kCi0JCQlpbGVuZ3RoID0gTWF0aC5yb3VuZChkbGVuZ3RoKTsKLQkJCWlmIChpbGVuZ3RoIDw9IDApCi0JCQkJcmV0dXJuIGVtcHR5U3RyaW5nKHJzKTsKLQkJfQotCQkKLQkJCi0JCS8vIGNvdWxkIGd1ZXNzIHRvbyBzaG9ydCBpbiBjYXNlcyBzdXBwbGVtZW50YXJ5IGNoYXJzIAotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKGludCkgTWF0aC5taW4oc3RyLmxlbmd0aCgpLCBpbGVuZ3RoKSk7Ci0KLQkJLy8gVGhpcyBsb29rcyBsaWtlIGFuIGluZWZmaWNpZW50IHdheSB0byBpdGVyYXRlLCBidXQgZHVlIHRvIHN1cnJvZ2F0ZSBoYW5kbGluZywKLQkJLy8gc3RyaW5nIGluZGV4ZXMgYXJlIG5vIGdvb2QgaGVyZS4gV2VsY29tZSB0byBVVEYtMTYhCi0JCQotCQlDb2RlUG9pbnRJdGVyYXRvciBzdHJJdGVyID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHN0cik7Ci0JCWZvciAobG9uZyBwID0gMTsgc3RySXRlci5jdXJyZW50KCkgIT0gQ29kZVBvaW50SXRlcmF0b3IuRE9ORTsgKytwLCBzdHJJdGVyLm5leHQoKSkgewotCQkJaWYgKGlzdGFydCA8PSBwICYmIHAgLSBpc3RhcnQgPCBpbGVuZ3RoKQotCQkJCXNiLmFwcGVuZENvZGVQb2ludChzdHJJdGVyLmN1cnJlbnQoKSk7Ci0JCX0KLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhzYi50b1N0cmluZygpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBlbXB0eVN0cmluZyhSZXN1bHRTZXF1ZW5jZSBycykgewotCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoQ29sbGVjdGlvbiBhY3R1YWxBcmdzKSB7Ci0JCUNvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEb3VibGUoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkKLQkJLy8gZm9yIGFyaXR5IDMKLQkJaWYgKGFjdHVhbEFyZ3Muc2l6ZSgpID09IDMpIHsKLQkJICBfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRG91YmxlKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nQWZ0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdBZnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGEwOGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdBZnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIHZhbHVlIG9mICRhcmcxIHRoYXQgZm9sbG93cyBpbiB0aGUgdmFsdWUgb2YKLSAqICRhcmcxIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2VxdWVuY2Ugb2YgY29sbGF0aW9uIHVuaXRzIHRoYXQgcHJvdmlkZXMgYQotICogbWluaW1hbCBtYXRjaCB0byB0aGUgY29sbGF0aW9uIHVuaXRzIG9mICRhcmcyIGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQKLSAqIGlzIHVzZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblN1YnN0cmluZ0FmdGVyIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3Vic3RyaW5nQWZ0ZXIuCi0JICovCi0JcHVibGljIEZuU3Vic3RyaW5nQWZ0ZXIoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3Vic3RyaW5nLWFmdGVyIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdWJzdHJpbmdfYWZ0ZXIoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU3Vic3RyaW5nLUFmdGVyIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN1YnN0cmluZy1hZnRlciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdWJzdHJpbmdfYWZ0ZXIoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCVN0cmluZyBzdHIyID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKSB7Ci0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmICghYXJnMi5lbXB0eSgpKSB7Ci0JCQlzdHIyID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0KLQkJaW50IHN0cjFsZW4gPSBzdHIxLmxlbmd0aCgpOwotCQlpbnQgc3RyMmxlbiA9IHN0cjIubGVuZ3RoKCk7Ci0KLQkJaWYgKHN0cjJsZW4gPT0gMCkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZyhzdHIxKSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlpbnQgaW5kZXggPSBzdHIxLmluZGV4T2Yoc3RyMik7Ci0JCWlmIChpbmRleCA9PSAtMSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCi0JCWlmICgoaW5kZXggKyBzdHIybGVuKSA8IHN0cjFsZW4pIHsKLQkJCWluZGV4ICs9IHN0cjJsZW47Ci0JCQlyZXN1bHQgPSBzdHIxLnN1YnN0cmluZyhpbmRleCwgc3RyMWxlbik7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHJlc3VsdCkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdCZWZvcmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdCZWZvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0ZDUyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nQmVmb3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgdmFsdWUgb2YgJGFyZzEgdGhhdCBwcmVjZWRlcyBpbiB0aGUgdmFsdWUgb2YKLSAqICRhcmcxIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2VxdWVuY2Ugb2YgY29sbGF0aW9uIHVuaXRzIHRoYXQgcHJvdmlkZXMgYQotICogbWluaW1hbCBtYXRjaCB0byB0aGUgY29sbGF0aW9uIHVuaXRzIG9mICRhcmcyIGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQKLSAqIGlzIHVzZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblN1YnN0cmluZ0JlZm9yZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN1YnN0cmluZ0JlZm9yZS4KLQkgKi8KLQlwdWJsaWMgRm5TdWJzdHJpbmdCZWZvcmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3Vic3RyaW5nLWJlZm9yZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3Vic3RyaW5nX2JlZm9yZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdWJzdHJpbmctQmVmb3JlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN1YnN0cmluZy1iZWZvcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3Vic3RyaW5nX2JlZm9yZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpIHsKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpIHsKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlpbnQgc3RyMmxlbiA9IHN0cjIubGVuZ3RoKCk7Ci0KLQkJaWYgKHN0cjJsZW4gPT0gMCkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJaW50IGluZGV4ID0gc3RyMS5pbmRleE9mKHN0cjIpOwotCQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoIiIpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHN0cjEuc3Vic3RyaW5nKDAsIGluZGV4KSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk5MjM4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3VtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGZpeCBwcm9tb3Rpb24gcnVsZXMgZm9yIGZuOnN1bQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TY2FsYXJUeXBlUHJvbW90ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3RlcjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYSB2YWx1ZSBvYnRhaW5lZCBieSBhZGRpbmcgdG9nZXRoZXIgdGhlIHZhbHVlcyBpbiAkYXJnLiBJZiB0aGUKLSAqIHNpbmdsZS1hcmd1bWVudCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBpcyB1c2VkLCB0aGVuIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYW4KLSAqIGVtcHR5IHNlcXVlbmNlIGlzIHRoZSB4czppbnRlZ2VyIHZhbHVlIDAuIElmIHRoZSB0d28tYXJndW1lbnQgZm9ybSBpcyB1c2VkLAotICogdGhlbiB0aGUgdmFsdWUgcmV0dXJuZWQgZm9yIGFuIGVtcHR5IHNlcXVlbmNlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgJHplcm8KLSAqIGFyZ3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5TdW0gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlzdGF0aWMgcHJpdmF0ZSBYU0ludGVnZXIgWkVSTyA9IG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci5aRVJPKTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN1bS4KLQkgKi8KLQlwdWJsaWMgRm5TdW0oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3VtIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUl0ZXJhdG9yIGFyZ0l0ZXJhdG9yID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmdTZXF1ZW5jZSA9IChSZXN1bHRTZXF1ZW5jZSlhcmdJdGVyYXRvci5uZXh0KCk7Ci0JCUFueUF0b21pY1R5cGUgemVybyA9IFpFUk87Ci0JCWlmIChhcmdJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIHplcm9TZXF1ZW5jZSA9IChSZXN1bHRTZXF1ZW5jZSlhcmdJdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAoemVyb1NlcXVlbmNlLnNpemUoKSAhPSAxKQotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQlpZiAoISAoemVyb1NlcXVlbmNlLmZpcnN0KCkgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUoemVyb1NlcXVlbmNlLmZpcnN0KCkuc3RyaW5nX3ZhbHVlKCkpKTsKLQkJCXplcm8gPSAoQW55QXRvbWljVHlwZSl6ZXJvU2VxdWVuY2UuZmlyc3QoKTsKLQkJfQotCQlyZXR1cm4gc3VtKGFyZ1NlcXVlbmNlLCB6ZXJvKTsKLQl9Ci0KLQkvKioKLQkgKiBTdW0gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3VtIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN1bShSZXN1bHRTZXF1ZW5jZSBhcmcsIEFueUF0b21pY1R5cGUgemVybykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoemVybyk7Ci0KLQkJTWF0aFBsdXMgdG90YWwgPSBudWxsOwotCi0JCVR5cGVQcm9tb3RlciB0cCA9IG5ldyBTY2FsYXJUeXBlUHJvbW90ZXIoKTsKLQkJdHAuY29uc2lkZXJTZXF1ZW5jZShhcmcpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueUF0b21pY1R5cGUgY29udiA9IHRwLnByb21vdGUoKEFueVR5cGUpIGkubmV4dCgpKTsKLQkJCQotCQkJaWYgKGNvbnYgaW5zdGFuY2VvZiBYU0RvdWJsZSAmJiAoKFhTRG91YmxlKWNvbnYpLm5hbigpIHx8IGNvbnYgaW5zdGFuY2VvZiBYU0Zsb2F0ICYmICgoWFNGbG9hdCljb252KS5uYW4oKSkgewotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh0cC5wcm9tb3RlKG5ldyBYU0Zsb2F0KEZsb2F0Lk5hTikpKTsKLQkJCX0KLQkJCWlmICh0b3RhbCA9PSBudWxsKSB7Ci0JCQkJdG90YWwgPSAoTWF0aFBsdXMpY29udjsgCi0JCQl9IGVsc2UgewotCQkJCXRvdGFsID0gKE1hdGhQbHVzKXRvdGFsLnBsdXMoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoY29udikpLmZpcnN0KCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KChBbnlUeXBlKSB0b3RhbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWI5MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBjb21wb25lbnQgb2YgJGFyZyBpZiBhbnkuIElmICRhcmcgaGFzIGEgdGltZXpvbmUKLSAqIGNvbXBvbmVudCwgdGhlbiB0aGUgcmVzdWx0IGlzIGFuIHhkdDpkYXlUaW1lRHVyYXRpb24gdGhhdCBpbmRpY2F0ZXMgZGV2aWF0aW9uCi0gKiBmcm9tIFVUQzsgaXRzIHZhbHVlIG1heSByYW5nZSBmcm9tICsxNDowMCB0byAtMTQ6MDAgaG91cnMsIGJvdGggaW5jbHVzaXZlLgotICogT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsCi0gKiByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuVGltZXpvbmVGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRpbWV6b25lRnJvbURhdGUuCi0JICovCi0JcHVibGljIEZuVGltZXpvbmVGcm9tRGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0aW1lem9uZS1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHRpbWV6b25lX2Zyb21fZGF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaW1lem9uZS1mcm9tLURhdGUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46dGltZXpvbmUtZnJvbS1kYXRlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRpbWV6b25lX2Zyb21fZGF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZSBkdCA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpZiAoZHQudGltZXpvbmVkKCkpIHsKLQkJCXJzLmFkZChkdC50eigpKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMWJjOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdGltZXpvbmUgY29tcG9uZW50IG9mICRhcmcgaWYgYW55LiBJZiAkYXJnIGhhcyBhIHRpbWV6b25lCi0gKiBjb21wb25lbnQsIHRoZW4gdGhlIHJlc3VsdCBpcyBhbiB4ZHQ6ZGF5VGltZUR1cmF0aW9uIHRoYXQgaW5kaWNhdGVzIGRldmlhdGlvbgotICogZnJvbSBVVEM7IGl0cyB2YWx1ZSBtYXkgcmFuZ2UgZnJvbSArMTQ6MDAgdG8gLTE0OjAwIGhvdXJzLCBib3RoIGluY2x1c2l2ZS4KLSAqIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLAotICogcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRpbWV6b25lRnJvbURhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVGltZXpvbmVGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuVGltZXpvbmVGcm9tRGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidGltZXpvbmUtZnJvbS1kYXRlVGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gdGltZXpvbmVfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVGltZXpvbmUtZnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0aW1lem9uZS1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRpbWV6b25lX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaWYgKGR0LnRpbWV6b25lZCgpKSB7Ci0JCQlycy5hZGQoZHQudHooKSk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21UaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVGltZXpvbmVGcm9tVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDE1MzcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21UaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdGltZXpvbmUgY29tcG9uZW50IG9mICRhcmcgaWYgYW55LiBJZiAkYXJnIGhhcyBhIHRpbWV6b25lCi0gKiBjb21wb25lbnQsIHRoZW4gdGhlIHJlc3VsdCBpcyBhbiB4ZHQ6ZGF5VGltZUR1cmF0aW9uIHRoYXQgaW5kaWNhdGVzIGRldmlhdGlvbgotICogZnJvbSBVVEM7IGl0cyB2YWx1ZSBtYXkgcmFuZ2UgZnJvbSArMTQ6MDAgdG8gLTE0OjAwIGhvdXJzLCBib3RoIGluY2x1c2l2ZS4KLSAqIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLAotICogcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRpbWV6b25lRnJvbVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5UaW1lem9uZUZyb21UaW1lLgotCSAqLwotCXB1YmxpYyBGblRpbWV6b25lRnJvbVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidGltZXpvbmUtZnJvbS10aW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0aW1lem9uZV9mcm9tX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVGltZXpvbmUtZnJvbS1UaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnRpbWV6b25lLWZyb20tdGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB0aW1lem9uZV9mcm9tX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0KLQotCQlYU1RpbWUgZHQgPSAoWFNUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaWYgKGR0LnRpbWV6b25lZCgpKSB7Ci0JCQlycy5hZGQoZHQudHooKSk7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVG9rZW5pemUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ub2tlbml6ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDYyMjE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ub2tlbml6ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICogICAgIEplc3BlciBTIE1vbGxlciAgICAgIC0gQnVnIDI4MTkzOCAtIG5vIG1hdGNoZXMgc2hvdWxkIHJldHVybiBmdWxsIGlucHV0IAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC4qOwotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gYnJlYWtzIHRoZSAkaW5wdXQgc3RyaW5nIGludG8gYSBzZXF1ZW5jZSBvZiBzdHJpbmdzLCB0cmVhdGluZwotICogYW55IHN1YnN0cmluZyB0aGF0IG1hdGNoZXMgJHBhdHRlcm4gYXMgYSBzZXBhcmF0b3IuIFRoZSBzZXBhcmF0b3JzIHRoZW1zZWx2ZXMKLSAqIGFyZSBub3QgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRva2VuaXplIGV4dGVuZHMgQWJzdHJhY3RSZWdFeEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRva2VuaXplLgotCSAqLwotCXB1YmxpYyBGblRva2VuaXplKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRva2VuaXplIiksIDIsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0b2tlbml6ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUb2tlbml6ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0b2tlbml6ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB0b2tlbml6ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgc3RyMSA9ICIiOwotCQlpZiAoIWFyZzEuZW1wdHkoKSkgewotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlTdHJpbmcgcGF0dGVybiA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIGZsYWdzID0gbnVsbDsKLQotCQlpZiAoYXJnaXRlci5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIGZsYWdSUyA9IG51bGw7Ci0JCQlmbGFnUlMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQkJZmxhZ3MgPSBmbGFnUlMuZmlyc3QoKS5zdHJpbmdfdmFsdWUoKTsKLQkJCWlmICh2YWxpZGZsYWdzLmluZGV4T2YoZmxhZ3MpID09IC0xICYmIGZsYWdzLmxlbmd0aCgpID4gMCApIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IucmVnZXhfZmxhZ3NfZXJyb3IobnVsbCk7Ci0JCQl9Ci0JCX0KLQotCQl0cnkgewotCQkJQXJyYXlMaXN0PFN0cmluZz4gcmV0ID0gdG9rZW5pemUocGF0dGVybiwgZmxhZ3MsIHN0cjEpOwotCi0JCQlmb3IoU3RyaW5nIHRva2VuIDogcmV0KSB7Ci0JCQkJcnMuYWRkKG5ldyBYU1N0cmluZyh0b2tlbikpOwotCQkJfQotCQl9IGNhdGNoIChQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIGVycikgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2Vycm9yKG51bGwpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3Q8U3RyaW5nPiB0b2tlbml6ZShTdHJpbmcgcGF0dGVybiwgU3RyaW5nIGZsYWdzLCBTdHJpbmcgc3JjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJTWF0Y2hlciBtYXRjaGVyID0gcmVnZXgocGF0dGVybiwgZmxhZ3MsIHNyYyk7Ci0JCUFycmF5TGlzdDxTdHJpbmc+IHRva2VucyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQlpbnQgc3RhcnRwb3MgPSAwOwotCQlpbnQgZW5kcG9zID0gc3JjLmxlbmd0aCgpOwotCQl3aGlsZSAobWF0Y2hlci5maW5kKCkpIHsKLQkJCVN0cmluZyBkZWxpbSA9IG1hdGNoZXIuZ3JvdXAoKTsKLQkJCWlmIChkZWxpbS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X21hdGNoX3plcm9fbGVuZ3RoKG51bGwpOwotCQkJfQotCQkJU3RyaW5nIHRva2VuID0gc3JjLnN1YnN0cmluZyhzdGFydHBvcywgbWF0Y2hlci5zdGFydCgpKTsKLQkJCXN0YXJ0cG9zID0gbWF0Y2hlci5lbmQoKTsKLQkJCXRva2Vucy5hZGQodG9rZW4pOwotCQl9Ci0JCWlmIChzdGFydHBvcyA8IGVuZHBvcykgewotCQkJU3RyaW5nIHRva2VuID0gc3JjLnN1YnN0cmluZyhzdGFydHBvcywgZW5kcG9zKTsKLQkJCXRva2Vucy5hZGQodG9rZW4pOwotCQl9Ci0JCXJldHVybiB0b2tlbnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTIwZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFRoZSBpbnB1dCAkdmFsdWUgaXMgcmV0dXJuZWQsIHVuY2hhbmdlZCwgYXMgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uIEluCi0gKiBhZGRpdGlvbiwgdGhlIGlucHV0cyAkdmFsdWUsIGNvbnZlcnRlZCB0byBhbiB4czpzdHJpbmcsIGFuZCAkbGFiZWwgbWF5IGJlCi0gKiBkaXJlY3RlZCB0byBhIHRyYWNlIGRhdGEgc2V0LiBUaGUgbG9jYXRpb24gYW5kIGZvcm1hdCBvZiB0aGUgdHJhY2UgZGF0YSBzZXQKLSAqIGFyZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuIFRoZSBvcmRlcmluZyBvZiBvdXRwdXQgZnJvbSBpbnZvY2F0aW9ucyBvZiB0aGUKLSAqIGZuOnRyYWNlKCkgZnVuY3Rpb24gaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5UcmFjZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5UcmFjZS4KLQkgKi8KLQlwdWJsaWMgRm5UcmFjZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0cmFjZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gdHJhY2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVHJhY2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46dHJhY2Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdHJhY2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBzYW5pdHkgY2hlY2sgYXJncwotCQlpZiAoYXJncy5zaXplKCkgIT0gMikKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlcmF0b3IgYXJnc2kgPSBhcmdzLml0ZXJhdG9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnc2kubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzaS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzIuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcyLmZpcnN0KCk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNTdHJpbmcpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlYU1N0cmluZyBsYWJlbCA9IChYU1N0cmluZykgYXQ7Ci0KLQkJaW50IGluZGV4ID0gMTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyBpbmRleCsrKSB7Ci0JCQlhdCA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKGxhYmVsLnZhbHVlKCkgKyAiIFsiICsgaW5kZXggKyAiXSAiCi0JCQkJCSsgYXQuc3RyaW5nX3R5cGUoKSArICI6IiArIGF0LnN0cmluZ192YWx1ZSgpKTsKLQotCQl9Ci0KLQkJcmV0dXJuIGFyZzE7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYW5zbGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYW5zbGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWY3ODRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcmFuc2xhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UgYW5kIG1ha2UKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgZnVuY3Rpb24gc3Vycm9nYXRlIGF3YXJlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db2RlUG9pbnRJdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU3RyaW5nQ29kZVBvaW50SXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiA8cD4KLSAqIFRyYW5zbGF0aW9uIGZ1bmN0aW9uLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjp0cmFuc2xhdGUoJGFyZyBhcyB4czpzdHJpbmc/LCAkbWFwU3RyaW5nIGFzIHhzOnN0cmluZywgJHRyYW5zU3RyaW5nCi0gKiBhcyB4czpzdHJpbmcpIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyBtb2RpZmllZCBzbyB0aGF0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUKLSAqIHZhbHVlIG9mICRhcmcgdGhhdCBvY2N1cnMgYXQgc29tZSBwb3NpdGlvbiBOIGluIHRoZSB2YWx1ZSBvZiAkbWFwU3RyaW5nIGhhcwotICogYmVlbiByZXBsYWNlZCBieSB0aGUgY2hhcmFjdGVyIHRoYXQgb2NjdXJzIGF0IHBvc2l0aW9uIE4gaW4gdGhlIHZhbHVlIG9mCi0gKiAkdHJhbnNTdHJpbmcuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nIGlzCi0gKiByZXR1cm5lZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBFdmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHZhbHVlIG9mICRhcmcgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHZhbHVlIG9mCi0gKiAkbWFwU3RyaW5nIGlzIHVuY2hhbmdlZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBFdmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHZhbHVlIG9mICRhcmcgdGhhdCBhcHBlYXJzIGF0IHNvbWUgcG9zaXRpb24gTSBpbiB0aGUKLSAqIHZhbHVlIG9mICRtYXBTdHJpbmcsIHdoZXJlIHRoZSB2YWx1ZSBvZiAkdHJhbnNTdHJpbmcgaXMgbGVzcyB0aGFuIE0KLSAqIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBpcyBvbWl0dGVkIGZyb20gdGhlIHJldHVybmVkIHZhbHVlLiBJZiAkbWFwU3RyaW5nIGlzCi0gKiB0aGUgemVyby1sZW5ndGggc3RyaW5nICRhcmcgaXMgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgYSBjaGFyYWN0ZXIgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGluICRtYXBTdHJpbmcsIHRoZW4gdGhlIGZpcnN0IG9jY3VycmVuY2UKLSAqIGRldGVybWluZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gSWYgJHRyYW5zU3RyaW5nIGlzIGxvbmdlciB0aGFuCi0gKiAkbWFwU3RyaW5nLCB0aGUgZXhjZXNzIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblRyYW5zbGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRyYW5zbGF0ZS4KLQkgKi8KLQlwdWJsaWMgRm5UcmFuc2xhdGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidHJhbnNsYXRlIiksIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBiZWluZyB0cmFuc2xhdGVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gdHJhbnNsYXRlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFRyYW5zbGF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSB0cmFuc2xhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdHJhbnNsYXRpbmcgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRyYW5zbGF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmczID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcnMuYWRkKG5ldyBYU1N0cmluZygiIikpOwotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIG1hcHN0ciA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIHRyYW5zc3RyID0gKChYU1N0cmluZykgYXJnMy5maXJzdCgpKS52YWx1ZSgpOwotCi0JCU1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiByZXBsYWNlbWVudHMgPSBidWlsZFJlcGxhY2VtZW50TWFwKG1hcHN0ciwgdHJhbnNzdHIpOwotCQkKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihzdHIubGVuZ3RoKCkpOwotCQlDb2RlUG9pbnRJdGVyYXRvciBzdHJJdGVyID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHN0cik7Ci0JCWZvciAoaW50IGlucHV0ID0gc3RySXRlci5jdXJyZW50KCk7IGlucHV0ICE9IENvZGVQb2ludEl0ZXJhdG9yLkRPTkU7IGlucHV0ID0gc3RySXRlci5uZXh0KCkpIHsKLQkJCUludGVnZXIgaW5wdXRDb2RlcG9pbnQgPSBJbnRlZ2VyLnZhbHVlT2YoaW5wdXQpOwotCQkJaWYgKHJlcGxhY2VtZW50cy5jb250YWluc0tleShpbnB1dENvZGVwb2ludCkpIHsKLQkJCQlJbnRlZ2VyIHJlcGxhY2VXaXRoID0gcmVwbGFjZW1lbnRzLmdldChpbnB1dENvZGVwb2ludCk7Ci0JCQkJaWYgKHJlcGxhY2VXaXRoICE9IG51bGwpIHsKLQkJCQkJc2IuYXBwZW5kQ29kZVBvaW50KHJlcGxhY2VXaXRoLmludFZhbHVlKCkpOwotCQkJCX0JCQkJCQotCQkJfSBlbHNlIHsKLQkJCQlzYi5hcHBlbmRDb2RlUG9pbnQoaW5wdXQpOwotCQkJfQotCQl9Ci0JCQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHNiLnRvU3RyaW5nKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogQnVpbGQgYSByZXBsYWNlbWVudCBtYXAgZnJvbSB0aGUgbWFwc3RyIGFuZCB0aGUgdHJhbnNzdHIgZm9yIHRyYW5zbGF0aW9uLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXBwaW5nIGVhY2ggY29kZXBvaW50Ci0JICogbWVudGlvbmVkIGluIHRoZSBtYXBzdHIgaW50byB0aGUgY29ycmVzcG9uZGluZyBjb2RlcG9pbnQgaW4gdHJhbnNzdHIsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgbWFwcGluZyBpbiB0cmFuc3N0ci4KLQkgKiAKLQkgKiBAcGFyYW0gbWFwc3RyIFRoZSAibWFwcGluZyBmcm9tIiBzdHJpbmcKLQkgKiBAcGFyYW0gdHJhbnNzdHIgVGhlICJtYXBwaW5nIGludG8iIHN0cmluZwotCSAqIEByZXR1cm4gQSBtYXAgd2hpY2ggbWFwcyBpbnB1dCBjb2RlcG9pbnQgdG8gb3V0cHV0IGNvZGVwb2ludCAob3IgbnVsbCkKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXA8SW50ZWdlciwgSW50ZWdlcj4gYnVpbGRSZXBsYWNlbWVudE1hcChTdHJpbmcgbWFwc3RyLCBTdHJpbmcgdHJhbnNzdHIpIHsKLQkJLy8gQnVpbGQgbWFwcGluZyAobWFwIGZyb20gY29kZXBvaW50IC0+IGNvZGVwb2ludCkJCQotCQlNYXA8SW50ZWdlciwgSW50ZWdlcj4gcmVwbGFjZW1lbnRzID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4obWFwc3RyLmxlbmd0aCgpICogNCk7Ci0KLQkJQ29kZVBvaW50SXRlcmF0b3IgbWFwSXRlciA9IG5ldyBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvcihtYXBzdHIpOwotCQlDb2RlUG9pbnRJdGVyYXRvciB0cmFuc0l0ZXIgPSBuZXcgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IodHJhbnNzdHIpOwotCQkvLyBJdGVyYXRlIHRocm91Z2ggYm90aCBtYXBJdGVyIGFuZCB0cmFuc0l0ZXIgYW5kIHByb2R1Y2UgdGhlIG1hcHBpbmcKLQkJaW50IG1hcEZyb20gPSBtYXBJdGVyLmN1cnJlbnQoKTsKLQkJaW50IG1hcFRvID0gdHJhbnNJdGVyLmN1cnJlbnQoKTsKLQkJd2hpbGUgKG1hcEZyb20gIT0gQ29kZVBvaW50SXRlcmF0b3IuRE9ORSkgewotCQkJSW50ZWdlciBjb2RlcG9pbnRGcm9tID0gSW50ZWdlci52YWx1ZU9mKG1hcEZyb20pOwotCQkJaWYgKCEgcmVwbGFjZW1lbnRzLmNvbnRhaW5zS2V5KGNvZGVwb2ludEZyb20pKSB7Ci0JCQkJLy8gb25seSBvdmVyd3JpdGUgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5Ci0JCQkJSW50ZWdlciByZXBsYWNlbWVudCA9IG1hcFRvICE9IENvZGVQb2ludEl0ZXJhdG9yLkRPTkUgPyBJbnRlZ2VyLnZhbHVlT2YobWFwVG8pIDogbnVsbDsKLQkJCQlyZXBsYWNlbWVudHMucHV0KGNvZGVwb2ludEZyb20sIHJlcGxhY2VtZW50KTsKLQkJCX0KLQkJCW1hcEZyb20gPSBtYXBJdGVyLm5leHQoKTsKLQkJCW1hcFRvID0gdHJhbnNJdGVyLm5leHQoKTsJCi0JCX0KLQkJcmV0dXJuIHJlcGxhY2VtZW50czsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcnVlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJ1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjQ2NGE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcnVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgeHM6Ym9vbGVhbiB2YWx1ZSB0cnVlLiBFcXVpdmFsZW50IHRvIHhzOmJvb2xlYW4oIjEiKS4KLSAqLwotcHVibGljIGNsYXNzIEZuVHJ1ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5UcnVlLgotCSAqLwotCXB1YmxpYyBGblRydWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidHJ1ZSIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZm5fdHJ1ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUcnVlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnRydWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fdHJ1ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVW5vcmRlcmVkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVW5vcmRlcmVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNThhY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblVub3JkZXJlZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGl0ZW1zIG9mICRzb3VyY2VTZXEgaW4gYSBub24tZGV0ZXJtaW5pc3RpYyBvcmRlci4KLSAqLwotcHVibGljIGNsYXNzIEZuVW5vcmRlcmVkIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblVub3JkZXJlZC4KLQkgKi8KLQlwdWJsaWMgRm5Vbm9yZGVyZWQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidW5vcmRlcmVkIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB1bm9yZGVyZWQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVW5vcmRlcmVkIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnVub3JkZXJlZCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB1bm9yZGVyZWQoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyBYWFggbGFtZQotCQlBcnJheUxpc3QgdG1wID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJdG1wLmFkZChpLm5leHQoKSk7Ci0KLQkJQ29sbGVjdGlvbnMuc2h1ZmZsZSh0bXApOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IHRtcC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCQlycy5hZGQoKEFueVR5cGUpIGkubmV4dCgpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblVwcGVyQ2FzZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblVwcGVyQ2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmZkNjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5VcHBlckNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogPHA+Ci0gKiBDb252ZXJzaW9uIHRvIHVwcGVyLWNhc2UgZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnVwcGVyLWNhc2UoJGFyZyBhcyB4czpzdHJpbmc/KSBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgdGhlIHZhbHVlIG9mICRhcmcgYWZ0ZXIgdHJhbnNsYXRpbmcgZXZlcnkgY2hhcmFjdGVyIHRvIGl0cwotICogdXBwZXItY2FzZSBjb3JyZXNwb25kZW50LiBFdmVyeSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIHVwcGVyLWNhc2UKLSAqIGNvcnJlc3BvbmRlbnQgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHZhbHVlIGluIGl0cyBvcmlnaW5hbCBmb3JtLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIHRoZSB2YWx1ZSBvZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHplcm8tbGVuZ3RoIHN0cmluZyBpcwotICogcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblVwcGVyQ2FzZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblVwcGVyQ2FzZS4KLQkgKi8KLQlwdWJsaWMgRm5VcHBlckNhc2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidXBwZXItY2FzZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudHMgYmVpbmcgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB1cHBlcl9jYXNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYXJndW1lbnRzIHRvIHVwcGVyIGNhc2UuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlIGFyZ3VtZW50cyB0byB1cHBlciBjYXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdXBwZXJfY2FzZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJzLmFkZChuZXcgWFNTdHJpbmcoIiIpKTsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVN0cmluZyBzdHIgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhzdHIudG9VcHBlckNhc2UoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGI2N2NmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyRnJvbURhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgeWVhciBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuCi0gKiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5ZZWFyRnJvbURhdGUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5ZZWFyRnJvbURhdGUuCi0JICovCi0JcHVibGljIEZuWWVhckZyb21EYXRlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInllYXItZnJvbS1kYXRlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB5ZWFyX2Zyb21fZGF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBZZWFyLWZyb20tRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp5ZWFyLWZyb20tZGF0ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB5ZWFyX2Zyb21fZGF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZSBkdCA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQueWVhcigpOwotCi0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4N2IwMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgeWVhciBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZQotICogb2YgJGFyZy4gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zCi0gKiB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblllYXJGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5ZZWFyRnJvbURhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGblllYXJGcm9tRGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgieWVhci1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB5ZWFyX2Zyb21fZGF0ZV90aW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFllYXItZnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp5ZWFyLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgeWVhcl9mcm9tX2RhdGVfdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSAoWFNEYXRlVGltZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC55ZWFyKCk7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyc0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJzRnJvbUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MGRmYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJzRnJvbUR1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZQotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGV4cGVjdGVkIHhzOmR1cmF0aW9uIGFyZ3VtZW50IAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHllYXJzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuWWVhcnNGcm9tRHVyYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5ZZWFyc0Zyb21EdXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRm5ZZWFyc0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ5ZWFycy1mcm9tLWR1cmF0aW9uIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB5ZWFyc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFllYXJzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46eWVhcnMtZnJvbS1kdXJhdGlvbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB5ZWFyc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiB5bWQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSB5bWQueWVhcigpOwotCQlpZiAoeW1kLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gblplcm9Pck9uZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gblplcm9Pck9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTExMDhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5aZXJvT3JPbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogUmV0dXJucyAkYXJnIGlmIGl0IGNvbnRhaW5zIHplcm8gb3Igb25lIGl0ZW1zLiBPdGhlcndpc2UsIHJhaXNlcyBhbiBlcnJvcgotICogW2VycjpGT1JHMDAwM10uIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiAkYXJnLgotICovCi1wdWJsaWMgY2xhc3MgRm5aZXJvT3JPbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuWmVyb09yT25lLgotCSAqLwotCXB1YmxpYyBGblplcm9Pck9uZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ6ZXJvLW9yLW9uZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gemVyb19vcl9vbmUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogWmVyby1vci1PbmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46emVyby1vci1vbmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgemVyb19vcl9vbmUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcuc2l6ZSgpID4gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5tb3JlX29uZV9pdGVtKG51bGwpOwotCi0JCXJldHVybiBhcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0NvbnZlcnRPcGVyYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzQ29udmVydE9wZXJhbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk2MTBhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzQ29udmVydE9wZXJhbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogRnVuY3Rpb24gdG8gY29udmVydCBhIHNlcXVlbmNlIG9mIGl0ZW1zIHRvIGEgc2VxdWVuY2Ugb2YgYXRvbWljIHZhbHVlcy4KLSAqLwotcHVibGljIGNsYXNzIEZzQ29udmVydE9wZXJhbmQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwdWJsaWMgRnNDb252ZXJ0T3BlcmFuZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb252ZXJ0LW9wZXJhbmQiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGNvbnZlcnRfb3BlcmFuZChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0LU9wZXJhbmQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZnM6IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvbnZlcnRfb3BlcmFuZChDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMjsKLQotCQlJdGVyYXRvciBpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFjdHVhbCA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGV4cGVjdGVkID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQotCQlpZiAoZXhwZWN0ZWQuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBleHBlY3RlZC5maXJzdCgpOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueUF0b21pY1R5cGUgZXhwX2FhdCA9IChBbnlBdG9taWNUeXBlKSBhdDsKLQotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIDEKLQkJaWYgKGFjdHVhbC5lbXB0eSgpKQotCQkJcmV0dXJuIHJlc3VsdDsKLQotCQkvLyBjb252ZXJ0IHNlcXVlbmNlCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFjdHVhbC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgaXRlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gMgotCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCQkvLyBhCi0JCQkJaWYgKGV4cF9hYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQkJCXJlc3VsdC5hZGQobmV3IFhTU3RyaW5nKGl0ZW0uc3RyaW5nX3ZhbHVlKCkpKTsKLQkJCQkvLyBiCi0JCQkJZWxzZSBpZiAoZXhwX2FhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKQotCQkJCQlyZXN1bHQuYWRkKG5ldyBYU0RvdWJsZShpdGVtLnN0cmluZ192YWx1ZSgpKSk7Ci0JCQkJLy8gYwotCQkJCWVsc2UgewotCQkJCQlhc3NlcnQgZXhwX2FhdCBpbnN0YW5jZW9mIEN0clR5cGU7Ci0KLQkJCQkJQ3RyVHlwZSBjb25zID0gKEN0clR5cGUpIGV4cF9hYXQ7Ci0KLQkJCQkJUmVzdWx0U2VxdWVuY2UgdG1wID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJCQkJLmNyZWF0ZV9uZXcobmV3IFhTU3RyaW5nKGl0ZW0uc3RyaW5nX3ZhbHVlKCkpKTsKLQotCQkJCQlSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0ZWQgPSBjb25zLmNvbnN0cnVjdG9yKHRtcCk7Ci0JCQkJCXJlc3VsdC5jb25jYXQoY29udmVydGVkKTsKLQotCQkJCQl0bXAucmVsZWFzZSgpOwotCQkJCX0KLQkJCX0KLQkJCS8vIDQKLQkJCWVsc2UKLQkJCQlyZXN1bHQuYWRkKGl0ZW0pOwotCi0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNEaXYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNEaXYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlNjljYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRGl2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHRoZSBEaXZpc2lvbiBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzRGl2IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc0Rpdi4KLQkgKi8KLQlwdWJsaWMgRnNEaXYoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZGl2IiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfZGl2KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIERpdiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmczpkaXYgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfZGl2KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc1BsdXMuZG9fbWF0aF9vcChhcmdzLCBNYXRoRGl2LmNsYXNzLCAiZGl2Iik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0VxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRXEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ3MTk5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRXEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUvZWxlbWVudCBub2RlcyAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZml4ZWQgY29tcGFyaXNvbiBvbiBzZXF1ZW5jZSByYW5nZSB2YWx1ZXMuCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBlcSBmb3IgdW50eXBlZCBhdG9taWMgdmFsdWVzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHRoZSBFcXVhbGl0eSBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzRXEgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzRXEuCi0JICovCi0JcHVibGljIEZzRXEoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXEiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19lcV92YWx1ZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydHMgYXJndW1lbnRzIHRvIHZhbHVlcy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgY29udmVyc2lvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIHZhbHVlX2NvbnZlcnRfYXJncyhDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KGFyZ3Muc2l6ZSgpKTsKLQotCQkvLyBhdG9taXplIGFyZ3VtZW50cwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmdzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGkubmV4dCgpOwotCi0JCQkvL0ZuRGF0YS5mYXN0X2F0b21pemUocnMpOwotCQkJcnMgPSBGbkRhdGEuYXRvbWl6ZShycyk7Ci0KLQkJCWlmIChycy5lbXB0eSgpKQotCQkJCXJldHVybiBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCWlmIChycy5zaXplKCkgPiAxKQotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJCUFueVR5cGUgYXJnID0gcnMuZmlyc3QoKTsKLQotCQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCQlhcmcgPSBuZXcgWFNTdHJpbmcoYXJnLnN0cmluZ192YWx1ZSgpKTsKLQotCQkJcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkJcnMuYWRkKGFyZyk7Ci0JCQlyZXN1bHQuYWRkKHJzKTsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQ29udmVyc2lvbiBvcGVyYXRpb24gZm9yIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gY29udmVydCB2YWx1ZSBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGNvbnZlcnNpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19lcV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkb19jbXBfdmFsdWVfb3AoYXJncywgQ21wRXEuY2xhc3MsICJlcSIsIGR5bmFtaWNDb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBBIGZhc3QgRXF1YWxpdHkgb3BlcmF0aW9uLCBubyBjb252ZXJzaW9uIGZvciB0aGUgaW5wdXRzIHBlcmZvcm1lZC4KLQkgKiAKLQkgKiBAcGFyYW0gb25lCi0JICogICAgICAgICAgICBpbnB1dDEgb2YgYW55IHR5cGUuCi0JICogQHBhcmFtIHR3bwotCSAqICAgICAgICAgICAgaW5wdXQyIG9mIGFueSB0eXBlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBFcXVhbGl0eSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGZzX2VxX2Zhc3QoQW55VHlwZSBvbmUsIEFueVR5cGUgdHdvLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCW9uZSA9IEZuRGF0YS5hdG9taXplKG9uZSk7Ci0JCXR3byA9IEZuRGF0YS5hdG9taXplKHR3byk7Ci0KLQkJaWYgKG9uZSBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCW9uZSA9IG5ldyBYU1N0cmluZyhvbmUuc3RyaW5nX3ZhbHVlKCkpOwotCi0JCWlmICh0d28gaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQl0d28gPSBuZXcgWFNTdHJpbmcodHdvLnN0cmluZ192YWx1ZSgpKTsKLQotCQlpZiAoIShvbmUgaW5zdGFuY2VvZiBDbXBFcSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUNtcEVxIGNtcG9uZSA9IChDbXBFcSkgb25lOwotCi0JCXJldHVybiBjbXBvbmUuZXEodHdvLCBkeW5hbWljQ29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogTWFraW5nIHN1cmUgdGhhdCB0aGUgdHlwZXMgYXJlIHRoZSBzYW1lIGJlZm9yZSBjb21wYXJpbmcgdGhlIGlucHV0cy4KLQkgKiAKLQkgKiBAcGFyYW0gYQotCSAqICAgICAgICAgICAgaW5wdXQxIG9mIGFueSB0eXBlLgotCSAqIEBwYXJhbSBiCi0JICogICAgICAgICAgICBpbnB1dDIgb2YgYW55IHR5cGUuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICAgIER5bmFtaWMgQ29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBFcXVhbGl0eSBvcGVyYXRpb24uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkb19nZW5lcmFsX3BhaXIoQW55VHlwZSBhLCBBbnlUeXBlIGIsCi0JCQlNZXRob2QgY29tcGFyYXRvciwgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNlY3Rpb24gMy41LjIKLQotCQkvLyBydWxlIGEKLQkJLy8gaWYgb25lIGlzIHVudHlwZWQgYW5kIG90aGVyIGlzIG51bWVyaWMsIGNhc3QgdW50eXBlZCB0bwotCQkvLyBkb3VibGUKLQkJaWYgKChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljICYmIGIgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkKLQkJCQl8fCAoYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyAmJiBhIGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKSB7Ci0JCQlpZiAoYSBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCQlhID0gbmV3IFhTRG91YmxlKGEuc3RyaW5nX3ZhbHVlKCkpOwotCQkJZWxzZQotCQkJCWIgPSBuZXcgWFNEb3VibGUoYi5zdHJpbmdfdmFsdWUoKSk7Ci0KLQkJfQotCi0JCS8vIHJ1bGUgYgotCQkvLyBpZiBvbmUgaXMgdW50eXBlZCBhbmQgb3RoZXIgaXMgc3RyaW5nIG9yIHVudHlwZWQsIHRoZW4gY2FzdAotCQkvLyB1bnR5cGVkIHRvIHN0cmluZwotCQllbHNlIGlmICgoYSBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYwotCQkJCSYmIChiIGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgfHwgKGIgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMgJiYgKGEgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSkpKSB7Ci0KLQkJCWlmIChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKQotCQkJCWEgPSBuZXcgWFNTdHJpbmcoYS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQlpZiAoYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCQliID0gbmV3IFhTU3RyaW5nKGIuc3RyaW5nX3ZhbHVlKCkpOwotCQl9Ci0KLQkJLy8gcnVsZSBjCi0JCS8vIGlmIG9uZSBpcyB1bnR5cGVkIGFuZCBvdGhlciBpcyBub3Qgc3RyaW5nLHVudHlwZWQsbnVtZXJpYwotCQkvLyBjYXN0IHVudHlwZWQgdG8gZHluYW1pYyB0eXBlIG9mIG90aGVyCi0KLQkJLy8gWFhYPwotCQllbHNlIGlmIChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0ZWQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhKTsKLQkJCWFzc2VydCBjb252ZXJ0ZWQuc2l6ZSgpID09IDE7Ci0JCQlhID0gY29udmVydGVkLmZpcnN0KCk7Ci0JCX0gZWxzZSBpZiAoYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJUmVzdWx0U2VxdWVuY2UgY29udmVydGVkID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYik7Ci0JCQlhc3NlcnQgY29udmVydGVkLnNpemUoKSA9PSAxOwotCQkJYiA9IGNvbnZlcnRlZC5maXJzdCgpOwotCQl9Ci0KLQkJLy8gcnVsZSBkCi0JCS8vIGlmIHZhbHVlIGNvbXBhcmlzb24gaXMgdHJ1ZSwgcmV0dXJuIHRydWUuCi0KLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYSk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGIpOwotCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQob25lKTsKLQkJYXJncy5hZGQodHdvKTsKLQotCQlPYmplY3QgbWFyZ3NbXSA9IHsgYXJncywgZGMgfTsKLQotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gKFJlc3VsdFNlcXVlbmNlKSBjb21wYXJhdG9yLmludm9rZShudWxsLCBtYXJncyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXJyKSB7Ci0JCQlUaHJvd2FibGUgZXggPSBlcnIuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0KLQkJCWlmIChleCBpbnN0YW5jZW9mIER5bmFtaWNFcnJvcikKLQkJCQl0aHJvdyAoRHluYW1pY0Vycm9yKSBleDsKLQotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfQotCi0JCWlmICgoKFhTQm9vbGVhbikgcmVzdWx0LmZpcnN0KCkpLnZhbHVlKCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQSBnZW5lcmFsIGVxdWFsaXR5IGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICBEeW5hbWljIGNvbnRleHQgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGdlbmVyYWwgZXF1YWxpdHkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfZXFfZ2VuZXJhbChDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc0VxLmNsYXNzLCAiZnNfZXFfdmFsdWUiLCBkYyk7Ci0JfQotCi0JLy8gdm9vZG9vIDMKLQkvKioKLQkgKiBBY3R1YWwgZXF1YWxpdHkgb3BlcmF0aW9uIGZvciBmc19lcV9nZW5lcmFsLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIHR5cGUgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gbW5hbWUKLQkgKiAgICAgICAgICAgIE1ldGhvZCBuYW1lIGZvciB0ZW1wbGF0ZSBzaW11bGF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZG9fY21wX2dlbmVyYWxfb3AoQ29sbGVjdGlvbiBhcmdzLCBDbGFzcyB0eXBlLAotCQkJU3RyaW5nIG1uYW1lLCBEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gZG8gdGhlIHZvb2RvbwotCQlNZXRob2QgY29tcGFyYXRvciA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCUNsYXNzIG1hcmdzZGVmW10gPSB7IENvbGxlY3Rpb24uY2xhc3MsIER5bmFtaWNDb250ZXh0LmNsYXNzIH07Ci0KLQkJCWNvbXBhcmF0b3IgPSB0eXBlLmdldE1ldGhvZChtbmFtZSwgbWFyZ3NkZWYpOwotCi0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlcnIpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW6/J3QgZmluZCBtZXRob2QgOiAiICsgbW5hbWUsIGVycik7Ci0JCX0KLQotCQkvLyBzYW5pdHkgY2hlY2sgYXJncyBhbmQgZ2V0IHRoZW0KLQkJaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggPwotCQlpZiAob25lLmVtcHR5KCkgfHwgdHdvLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCi0JCS8vIGF0b21pemUKLQkJb25lID0gRm5EYXRhLmF0b21pemUob25lKTsKLQkJdHdvID0gRm5EYXRhLmF0b21pemUodHdvKTsKLQotCQkvLyB3ZSBnb3R0YSBmaW5kIGEgcGFpciB0aGF0IHNhdGlzZmllZCB0aGUgY29uZGl0aW9uCi0JCWZvciAoSXRlcmF0b3IgaSA9IG9uZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHR3by5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlBbnlUeXBlIGIgPSAoQW55VHlwZSkgai5uZXh0KCk7Ci0KLQkJCQlpZiAoZG9fZ2VuZXJhbF9wYWlyKGEsIGIsIGNvbXBhcmF0b3IsIGRjKSkKLQkJCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQl9Ci0KLQkvLyB2b29kb28gMgotCS8qKgotCSAqIEFjdHVhbCBlcXVhbGl0eSBvcGVyYXRpb24gZm9yIGZzX2VxX3ZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIHR5cGUgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gbW5hbWUKLQkgKiAgICAgICAgICAgIE1ldGhvZCBuYW1lIGZvciB0ZW1wbGF0ZSBzaW11bGF0aW9uLgotCSAqIEBwYXJhbSBkeW5hbWljQ29udGV4dCAKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZG9fY21wX3ZhbHVlX29wKENvbGxlY3Rpb24gYXJncywgQ2xhc3MgdHlwZSwKLQkJCVN0cmluZyBtbmFtZSwgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzICsgY29udmVydCBlbQotCQlpZiAoYXJncy5zaXplKCkgIT0gMikKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IHZhbHVlX2NvbnZlcnRfYXJncyhhcmdzKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChjYXJncy5zaXplKCkgPT0gMCkKLQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJLy8gbWFrZSBzdXJlIGFydWdtZW50cyBhcmUgY29tcGFyYWJsZSBieSBlcXVhbGl0eQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJQW55VHlwZSBhcmcgPSAoKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKSkuZmlyc3QoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzIuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCWlmICghKHR5cGUuaXNJbnN0YW5jZShhcmcpKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJdHJ5IHsKLQkJCUNsYXNzIG1hcmdzZGVmW10gPSB7IEFueVR5cGUuY2xhc3MsIER5bmFtaWNDb250ZXh0LmNsYXNzIH07Ci0JCQlNZXRob2QgbWV0aG9kID0gbnVsbDsKLQotCQkJbWV0aG9kID0gdHlwZS5nZXRNZXRob2QobW5hbWUsIG1hcmdzZGVmKTsKLQotCQkJT2JqZWN0IG1hcmdzW10gPSB7IGFyZzIuZmlyc3QoKSwgZHluYW1pY0NvbnRleHQgfTsKLQkJCUJvb2xlYW4gY21wcmVzID0gKEJvb2xlYW4pIG1ldGhvZC5pbnZva2UoYXJnLCBtYXJncyk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGNtcHJlcwotCQkJCQkuYm9vbGVhblZhbHVlKCkpKTsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGVycikgewotCQkJYXNzZXJ0IGZhbHNlOwotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImNhbm5vdCBjb21wYXJlIHVzaW5nIG1ldGhvZCAiICsgbW5hbWUsIGVycik7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiY2Fubm90IGNvbXBhcmUgdXNpbmcgbWV0aG9kICIgKyBtbmFtZSwgZXJyKTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlcnIpIHsKLQkJCVRocm93YWJsZSBleCA9IGVyci5nZXRUYXJnZXRFeGNlcHRpb24oKTsKLQotCQkJaWYgKGV4IGluc3RhbmNlb2YgRHluYW1pY0Vycm9yKQotCQkJCXRocm93IChEeW5hbWljRXJyb3IpIGV4OwotCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiY2Fubm90IGNvbXBhcmUgdXNpbmcgbWV0aG9kICIgKyBtbmFtZSwgZXgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0dlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxZTRlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb29sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHRoZSBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc0dlIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc0dlLgotCSAqLwotCXB1YmxpYyBGc0dlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImdlIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfZ2VfdmFsdWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfZ2VfdmFsdWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBncmVhdGVyID0gRnNHdC5mc19ndF92YWx1ZShhcmdzLCBkYyk7Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSBncmVhdGVyLmZpcnN0KCkpLnZhbHVlKCkpCi0JCQlyZXR1cm4gZ3JlYXRlcjsKLQotCQlSZXN1bHRTZXF1ZW5jZSBlcXVhbCA9IEZzRXEuZnNfZXFfdmFsdWUoYXJncywgZGMpOwotCi0JCWlmICgoKFhTQm9vbGVhbikgZXF1YWwuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiBlcXVhbDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBkYyAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19nZV9nZW5lcmFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX2dlbmVyYWxfb3AoYXJncywgRnNHZS5jbGFzcywgImZzX2dlX3ZhbHVlIiwgZGMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNHdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0d0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODM3MjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0d0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgdGhlIEdyZWF0ZXIgdGhhbiBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzR3QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzR3QuCi0JICovCi0JcHVibGljIEZzR3QoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZ3QiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19ndF92YWx1ZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogT3BlcmF0aW9uIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBkeW5hbWljCi0JICogICAgICAgICAgICAgRHluYW1pYyBjb250ZXhldAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfZ3RfdmFsdWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkeW5hbWljKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc0VxLmRvX2NtcF92YWx1ZV9vcChhcmdzLCBDbXBHdC5jbGFzcywgImd0IiwgZHluYW1pYyk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBkYyAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19ndF9nZW5lcmFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX2dlbmVyYWxfb3AoYXJncywgRnNHdC5jbGFzcywgImZzX2d0X3ZhbHVlIiwgZGMpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0lEaXYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNJRGl2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMTFkYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0lEaXYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgSW50ZXJnZXIgZGl2aXNpb24gZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc0lEaXYgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzSURpdi4KLQkgKi8KLQlwdWJsaWMgRnNJRGl2KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImlkaXYiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19pZGl2KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIElEaXYgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2lkaXYoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzUGx1cy5kb19tYXRoX29wKGFyZ3MsIE1hdGhJRGl2LmNsYXNzLCAiaWRpdiIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNMZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0xlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYWI0YzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0xlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIExlc3MgdGhhbiBvciBlcXVhbCB0byBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzTGUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzTGUuCi0JICovCi0JcHVibGljIEZzTGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibGUiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19sZV92YWx1ZShhcmdzLCBkeW5hbWljX2NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogT3BlcmF0aW9uIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSAKLSAgICAgKiAgICAgICAgIER5bmFtaWNDb250ZXh0IAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbGVfdmFsdWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBsZXNzID0gRnNMdC5mc19sdF92YWx1ZShhcmdzLCBkYyk7Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSBsZXNzLmZpcnN0KCkpLnZhbHVlKCkpCi0JCQlyZXR1cm4gbGVzczsKLQotCQlSZXN1bHRTZXF1ZW5jZSBlcXVhbCA9IEZzRXEuZnNfZXFfdmFsdWUoYXJncywgZGMpOwotCi0JCWlmICgoKFhTQm9vbGVhbikgZXF1YWwuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiBlcXVhbDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMgCi0JICogICAgICAgICAgICAgVGhlIGR5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbGVfZ2VuZXJhbChDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc0VxLmRvX2NtcF9nZW5lcmFsX29wKGFyZ3MsIEZzTGUuY2xhc3MsICJmc19sZV92YWx1ZSIsIGRjKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNMdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQ4MmUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNMdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTGVzcyB0aGFuIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNMdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNMdC4KLQkgKi8KLQlwdWJsaWMgRnNMdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsdCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX2x0X3ZhbHVlKGFyZ3MsIGR5bmFtaWNfY29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGNvbnRleHQgCi0JICogICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19sdF92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX3ZhbHVlX29wKGFyZ3MsIENtcEx0LmNsYXNzLCAibHQiLCBjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2x0X2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc0x0LmNsYXNzLCAiZnNfbHRfdmFsdWUiLCBkYyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01pbnVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTWludXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYzMDliNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTWludXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTWludXMgZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc01pbnVzIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc01pbnVzLgotCSAqLwotCXB1YmxpYyBGc01pbnVzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1pbnVzIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfbWludXMoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbWludXMoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzUGx1cy5kb19tYXRoX29wKGFyZ3MsIE1hdGhNaW51cy5jbGFzcywgIm1pbnVzIik7Ci0JfQotCi0JLyoqCi0JICogVW5hcnkgb3BlcmF0aW9uIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfbWludXNfdW5hcnkoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIG1ha2Ugc3VyZSB3ZSBnb3Qgb25seSBvbmUgYXJnCi0JCWlmIChhcmdzLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCS8vIG1ha2Ugc3VyZSB3ZSBnb3Qgb25seSBvbmUgbnVtZXJpYyBhdG9tCi0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlOdW1lcmljVHlwZSBudCA9IChOdW1lcmljVHlwZSkgYXQ7Ci0KLQkJcmV0dXJuIG50LnVuYXJ5X21pbnVzKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01vZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01vZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmMzNjFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNNb2QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTW9kdWxhciBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzTW9kIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc01vZC4KLQkgKi8KLQlwdWJsaWMgRnNNb2QoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibW9kIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfbW9kKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX21vZChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNQbHVzLmRvX21hdGhfb3AoYXJncywgTWF0aE1vZC5jbGFzcywgIm1vZCIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNOZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc05lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTgzN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc05lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBOb3QgZXF1YWwgZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc05lIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc05lLgotCSAqLwotCXB1YmxpYyBGc05lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5lIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfbmVfdmFsdWUoYXJncywgZHluYW1pY19jb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gY29udGV4dCAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19uZV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZuTm90LmZuX25vdChGc0VxLmZzX2VxX3ZhbHVlKGFyZ3MsIGNvbnRleHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX25lX2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc05lLmNsYXNzLCAiZnNfbmVfdmFsdWUiLCBkYyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzUGx1cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc1BsdXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjYzYwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzUGx1cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gQnVnIDI4NjA2MiAtIEFkZCB0eXBlIHByb21vdGlvbiBmb3IgbnVtZXJpYyBvcGVyYXRvcnMgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIFBsdXMgZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc1BsdXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzUGx1cy4KLQkgKi8KLQlwdWJsaWMgRnNQbHVzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInBsdXMiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19wbHVzKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYW5kIHByb21vdGUgYXJndW1lbnRzIGZvciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgY29udmVyc2lvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIGNvbnZlcnRfYXJncyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkvLyBLZWVwIHRyYWNrIG9mIG51bWVyaWMgdHlwZXMgZm9yIHByb21vdGlvbgotCQlib29sZWFuIGhhc19mbG9hdCA9IGZhbHNlOwotCQlib29sZWFuIGhhc19kb3VibGUgPSBmYWxzZTsKLQkJCi0JCS8vIGF0b21pemUgYXJndW1lbnRzCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBycyA9IEZuRGF0YS5hdG9taXplKChSZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCkpOwotCi0JCQlpZiAocnMuZW1wdHkoKSkKLQkJCQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotCi0JCQlpZiAocnMuc2l6ZSgpID4gMSkKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCi0JCQlBbnlUeXBlIGFyZyA9IHJzLmZpcnN0KCk7Ci0KLQkJCWlmIChhcmcgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCQlhcmcgPSBuZXcgWFNEb3VibGUoYXJnLnN0cmluZ192YWx1ZSgpKTsKLQkJCX0KLQotCQkJcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkJcnMuYWRkKGFyZyk7Ci0JCQlpZiAoYXJnIGluc3RhbmNlb2YgWFNEb3VibGUpIGhhc19kb3VibGUgPSB0cnVlOwotCQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTRmxvYXQpIGhhc19mbG9hdCA9IHRydWU7Ci0JCQlyZXN1bHQuYWRkKHJzKTsKLQkJfQotCi0JCWlmIChoYXNfZG91YmxlKSBoYXNfZmxvYXQgPSBmYWxzZTsKLQkJCi0JCWlmIChoYXNfZG91YmxlIHx8IGhhc19mbG9hdCkgewotCQkJLy8gcHJvbW90ZSBhcmd1bWVudHMKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHJlc3VsdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCk7Ci0JCQkJCQkJCQotCQkJCUFueVR5cGUgYXJnID0gcnMuZmlyc3QoKTsKLQkJCQkKLQkJCQlpZiAoaGFzX2RvdWJsZSAmJiAoYXJnIGluc3RhbmNlb2YgWFNGbG9hdCkpIHsKLQkJCQkJYXJnID0gbmV3IFhTRG91YmxlKCgoWFNGbG9hdClhcmcpLmZsb2F0X3ZhbHVlKCkpOwotCQkJCX0gZWxzZSBpZiAoaGFzX2RvdWJsZSAmJiAoYXJnIGluc3RhbmNlb2YgWFNEZWNpbWFsKSkgewotCQkJCQlhcmcgPSBuZXcgWFNEb3VibGUoKChYU0RlY2ltYWwpYXJnKS5nZXRWYWx1ZSgpLmRvdWJsZVZhbHVlKCkpOwotCQkJCX0gZWxzZSBpZiAoaGFzX2Zsb2F0ICYmIChhcmcgaW5zdGFuY2VvZiBYU0RlY2ltYWwpKSB7Ci0JCQkJCWFyZyA9IG5ldyBYU0Zsb2F0KCgoWFNEZWNpbWFsKWFyZykuZ2V0VmFsdWUoKS5mbG9hdFZhbHVlKCkpOwotCQkJCX0KLQotCQkJCWlmIChycy5maXJzdCgpICE9IGFyZykgewotCQkJCQkvLyBSZXBsYWNlIGFyZwotCQkJCQlycy5jbGVhcigpOwotCQkJCQlycy5hZGQoYXJnKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJfQotCQkKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX3BsdXMoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRvX21hdGhfb3AoYXJncywgTWF0aFBsdXMuY2xhc3MsICJwbHVzIik7Ci0JfQotCi0JLyoqCi0JICogVW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX3BsdXNfdW5hcnkoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gbWFrZSBzdXJlIHdlIGdvdCBvbmx5IG9uZSBhcmcKLQkJaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJLy8gbWFrZSBzdXJlIHdlIGdvdCBvbmx5IG9uZSBudW1lcmljIGF0b20KLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCS8vIG5vLW9wCi0JCXJldHVybiBhcmc7Ci0JfQotCi0JLy8gdm9vZG9vCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIHR5cGUgb2YgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBtbmFtZQotCSAqICAgICAgICAgICAgTWV0aG9kIG5hbWUgZm9yIHRlbXBsYXRlIHNpbXVsYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRvX21hdGhfb3AoQ29sbGVjdGlvbiBhcmdzLCBDbGFzcyB0eXBlLAotCQkJU3RyaW5nIG1uYW1lKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBzYW5pdHkgY2hlY2sgYXJncyArIGNvbnZlcnQgZW0KLQkJaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBjb252ZXJ0X2FyZ3MoYXJncyk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcmVzdWx0ID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoY2FyZ3Muc2l6ZSgpID09IDApCi0JCQlyZXR1cm4gcmVzdWx0OwotCi0JCS8vIG1ha2Ugc3VyZSBhcnVnbWVudHMgYXJlIGdvb2QgW2F0IGxlYXN0IHRoZSBmaXJzdCBvbmVdCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlBbnlUeXBlIGFyZyA9ICgoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpKS5maXJzdCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQotCQlpZiAoISh0eXBlLmlzSW5zdGFuY2UoYXJnKSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCS8vIGhlcmUgaXMgZGEgb3duYWdlCi0JCXRyeSB7Ci0JCQlDbGFzcyBtYXJnc2RlZltdID0geyBSZXN1bHRTZXF1ZW5jZS5jbGFzcyB9OwotCQkJTWV0aG9kIG1ldGhvZCA9IG51bGw7Ci0KLQkJCW1ldGhvZCA9IHR5cGUuZ2V0TWV0aG9kKG1uYW1lLCBtYXJnc2RlZik7Ci0KLQkJCU9iamVjdCBtYXJnc1tdID0geyBhcmcyIH07Ci0JCQlyZXR1cm4gKFJlc3VsdFNlcXVlbmNlKSBtZXRob2QuaW52b2tlKGFyZywgbWFyZ3MpOwotCi0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlcnIpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTm9TdWNoTWV0aG9kRXhjZXB0aW9uOiAiICsgZXJyLmdldE1lc3NhZ2UoKSk7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXJyKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIklsbGVnYWxBY2Nlc3NFeGNlcHRpb246ICIgKyBlcnIuZ2V0TWVzc2FnZSgpKTsKLQkJCWFzc2VydCBmYWxzZTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlcnIpIHsKLQkJCVRocm93YWJsZSBleCA9IGVyci5nZXRUYXJnZXRFeGNlcHRpb24oKTsKLQotCQkJaWYgKGV4IGluc3RhbmNlb2YgRHluYW1pY0Vycm9yKSB7Ci0JCQkJdGhyb3cgKER5bmFtaWNFcnJvcikgZXg7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQlTeXN0ZW0uZXhpdCgxKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaCEKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzVGltZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNUaW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjJlZWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNUaW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIENsYXNzIGZvciBNdWx0aXBsaWNhdGlvbiBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzVGltZXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzVGltZXMuCi0JICovCi0JcHVibGljIEZzVGltZXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidGltZXMiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc190aW1lcyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc190aW1lcyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNQbHVzLmRvX21hdGhfb3AoYXJncywgTWF0aFRpbWVzLmNsYXNzLCAidGltZXMiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZmIxNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3MTkgLSBTdHJpbmcgTGVuZ3RoIGRvZXMgbm90IHdvcmsgd2l0aCBFbGVtZW50IGFyZy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzk1IC0gaW1wcm92ZW1lbnRzIHRvIGZ1bmN0aW9uLCBzdWJzdHJpbmcgKGltcGxlbWVudGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24pLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MTE1OSAtIGltcGxlbWVudCB4czphbnlVcmkgLT4geHM6c3RyaW5nIHByb21vdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIHVuZGVmaW5lZCBjb250ZXh0IHNob3VsZCByYWlzZSBlcnJvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBmdW5jdGlvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGdW5jdGlvbiB7Ci0KLQlwcm90ZWN0ZWQgUU5hbWUgX25hbWU7Ci0JLyoqCi0JICogaWYgbmVnYXRpdmUsIG5lZWQgdG8gaGF2ZSAiYXQgbGVhc3QiCi0JICovCi0JcHJvdGVjdGVkIGludCBfbWluX2FyaXR5OyAKLQkKLQkvKioKLQkgKiBJZiAiYXQgbGVhc3QiLCB0aGlzIHNwZWNpLCB1bmxpbWl0ZWQgaWYgLTEKLQkgKi8KLQlwcm90ZWN0ZWQgaW50IF9tYXhfYXJpdHk7Ci0JCi0JcHJvdGVjdGVkIEZ1bmN0aW9uTGlicmFyeSBfZmw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgdGhlIGFyaXR5IG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlfbmFtZSA9IG5hbWU7Ci0JCWlmIChhcml0eSA8IDApIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXZSB3YW50IHRvIGF2b2lkIHRoaXMhIik7Ci0JCX0KLQkJX21pbl9hcml0eSA9IGFyaXR5OwotCQlfbWF4X2FyaXR5ID0gYXJpdHk7Ci0JCV9mbCA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gYXJpdHkKLQkgKiAgICAgICAgICAgIHRoZSBhcml0eSBvZiBhIHNwZWNpZmljIGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgbWluX2FyaXR5LCBpbnQgbWF4X2FyaXR5KSB7Ci0JCV9uYW1lID0gbmFtZTsKLQkJaWYgKG1pbl9hcml0eSA8IDAgfHwgbWF4X2FyaXR5IDwgMCB8fCBtYXhfYXJpdHkgPCBtaW5fYXJpdHkpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXZSB3YW50IHRvIGF2b2lkIHRoaXMhIik7Ci0JCX0KLQkJX21pbl9hcml0eSA9IG1pbl9hcml0eTsKLQkJX21heF9hcml0eSA9IG1heF9hcml0eTsKLQkJX2ZsID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotCi0JLyoqCi0JICogTWluaW1hbCBudW1iZXIgb2YgYWxsb3dlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgc21hbGxlc3QgbnVtYmVyIG9mIGVyZ3VtZW50cyBwb3NzaWJsZQotCSAqLwotCXB1YmxpYyBpbnQgbWluX2FyaXR5KCkgewotCQlyZXR1cm4gX21pbl9hcml0eTsKLQl9Ci0KLQkvKioKLQkgKiBNYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBoaWdoZXN0IG51bWJlciBvZiBlcmd1bWVudHMgcG9zc2libGUKLQkgKi8KLQlwdWJsaWMgaW50IG1heF9hcml0eSgpIHsKLQkJcmV0dXJuIF9tYXhfYXJpdHk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFuIHRvIHRoZQotCSAqIAotCSAqIEBwYXJhbSBhY3R1YWxfYXJpdHkKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIGJvb2xlYW4gbWF0Y2hlc19hcml0eShpbnQgYWN0dWFsX2FyaXR5KSB7Ci0JCWlmIChhY3R1YWxfYXJpdHkgPCBtaW5fYXJpdHkoKSkgcmV0dXJuIGZhbHNlOwotCQlpZiAoYWN0dWFsX2FyaXR5ID4gbWF4X2FyaXR5KCkpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCS8qKgotCSAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHNpZ25hdHVyZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFNpZ25hdHVyZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHNpZ25hdHVyZSgpIHsKLQkJcmV0dXJuIHNpZ25hdHVyZSh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyaXR5IGZyb20gc2lnbmF0dXJlLgotCSAqIAotCSAqIEBwYXJhbSBmCi0JICogICAgICAgICAgICBjdXJyZW50IGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gU2lnbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHNpZ25hdHVyZShGdW5jdGlvbiBmKSB7Ci0JCXJldHVybiBzaWduYXR1cmUoZi5uYW1lKCksIGYuaXNfdmFyYXJnKCkgPyAtMSA6IGYubWluX2FyaXR5KCkpOwotCX0KLQotCS8qKgotCSAqIEFwcGx5IHRoZSBuYW1lIGFuZCBhcml0eSB0byBzaWduYXR1cmUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gU2lnbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHNpZ25hdHVyZShRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJU3RyaW5nIG4gPSBuYW1lLmV4cGFuZGVkX25hbWUoKTsKLQkJaWYgKG4gPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCW4gKz0gIl8iOwotCi0JCWlmIChhcml0eSA8IDApCi0JCQluICs9ICJ4IjsKLQkJZWxzZQotCQkJbiArPSBhcml0eTsKLQotCQlyZXR1cm4gbjsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yOwotCi0JLy8gY29udmVydCBhcmd1bWVudCBhY2NvcmRpbmcgdG8gc2VjdGlvbiAzLjEuNSBvZiB4cGF0aCAyLjAgc3BlYwotCS8qKgotCSAqIENvbnZlcnQgdGhlIGlucHV0IGFyZ3VtZW50IGFjY29yZGluZyB0byBzZWN0aW9uIDMuMS41IG9mIHNwZWNpZmljYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHBhcmFtIGV4cGVjdGVkCi0JICogICAgICAgICAgICBFeHBlY3RlZCBTZXF1ZW5jZSB0eXBlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIENvbnZlcnRlZCBhcmd1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvbnZlcnRfYXJndW1lbnQoUmVzdWx0U2VxdWVuY2UgYXJnLAotCQkJU2VxVHlwZSBleHBlY3RlZCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IGFyZzsKLQotCQkvLyBYWFg6IFNob3VsZCB1c2UgdHlwZV9jbGFzcyBpbnN0ZWFkIGFuZCB1c2UgaXRlbS5nZXRDbGFzcygpLmlzQXNzaWduYWJsZVRvKGV4cGVjdGVkLnR5cGVfY2xhc3MoKSkKLQkJQW55VHlwZSBleHBlY3RlZF90eXBlID0gZXhwZWN0ZWQudHlwZSgpOwotCi0JCS8vIGV4cGVjdGVkIGlzIGF0b21pYwotCQlpZiAoZXhwZWN0ZWRfdHlwZSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpIHsKLQkJCUFueUF0b21pY1R5cGUgZXhwZWN0ZWRfYWF0ID0gKEFueUF0b21pY1R5cGUpIGV4cGVjdGVkX3R5cGU7Ci0JCQkKLQkJCS8vIGF0b21pemUKLQkJCVJlc3VsdFNlcXVlbmNlIHJzID0gRm5EYXRhLmF0b21pemUoYXJnKTsKLQotCQkJLy8gY2FzdCB1bnR5cGVkIHRvIGV4cGVjdGVkIHR5cGUKLQkJCXJlc3VsdCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0JCQkJCi0JCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCQkJLy8gY3JlYXRlIGEgbmV3IGl0ZW0gb2YgdGhlIGV4cGVjdGVkCi0JCQkJCS8vIHR5cGUgaW5pdGlhbGl6ZWQgd2l0aCBmcm9tIHRoZSBzdHJpbmcKLQkJCQkJLy8gdmFsdWUgb2YgdGhlIGl0ZW0KLQkJCQkJUmVzdWx0U2VxdWVuY2UgY29udmVydGVkID0gbnVsbDsKLQkJCQkJaWYgKGV4cGVjdGVkX2FhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSB7Ci0JCQkJCSAgIFhTU3RyaW5nIHN0clR5cGUgPSBuZXcgWFNTdHJpbmcoaXRlbS5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJCSAgIGNvbnZlcnRlZCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHN0clR5cGUpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkgICBjb252ZXJ0ZWQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhpdGVtKTsKLQkJCQkJfQotCQkJCQkKLQkJCQkJcmVzdWx0LmNvbmNhdChjb252ZXJ0ZWQpOwotCQkJCX0KLQkJCQkvLyB4czphbnlVUkkgcHJvbW90aW9uIHRvIHhzOnN0cmluZwotCQkJCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0FueVVSSSAmJiBleHBlY3RlZF9hYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgewotCQkJCQlyZXN1bHQuYWRkKG5ldyBYU1N0cmluZyhpdGVtLnN0cmluZ192YWx1ZSgpKSk7Ci0JCQkJfQotCQkJCS8vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24KLQkJCQllbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCQkJaWYgKGV4cGVjdGVkX2FhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSB7Ci0JCQkJCSAgWFNEb3VibGUgZG91YmxlVHlwZSA9IG5ldyBYU0RvdWJsZShpdGVtLnN0cmluZ192YWx1ZSgpKTsKLQkJCQkJICByZXN1bHQuYWRkKGRvdWJsZVR5cGUpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkgIHJlc3VsdC5hZGQoaXRlbSk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlyZXN1bHQuYWRkKGl0ZW0pOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8vIGRvIHNlcXVlbmNlIHR5cGUgbWF0Y2hpbmcgb24gY29udmVydGVkIGFyZ3VtZW50cwotCQlyZXR1cm4gZXhwZWN0ZWQubWF0Y2gocmVzdWx0KTsKLQl9Ci0KLQkvLyBjb252ZXJ0IGFyZ3VtZW50cwotCS8vIHJldHVybnMgY29sbGVjdGlvbiBvZiBhcmd1bWVudHMKLQkvKioKLQkgKiBDb252ZXJ0IGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBleHBlY3RlZAotCSAqICAgICAgICAgICAgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIENvbnZlcnRlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uIGNvbnZlcnRfYXJndW1lbnRzKENvbGxlY3Rpb24gYXJncywKLQkJCUNvbGxlY3Rpb24gZXhwZWN0ZWQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPD0gZXhwZWN0ZWQuc2l6ZSgpOwotCi0JCUl0ZXJhdG9yIGFyZ2kgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCUl0ZXJhdG9yIGV4cGkgPSBleHBlY3RlZC5pdGVyYXRvcigpOwotCi0JCS8vIGNvbnZlcnQgYWxsIGFyZ3VtZW50cwotCQl3aGlsZSAoYXJnaS5oYXNOZXh0KCkpIHsKLQkJCXJlc3VsdC5hZGQoY29udmVydF9hcmd1bWVudCgoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpLAotCQkJCQkoU2VxVHlwZSkgZXhwaS5uZXh0KCkpKTsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBnZXRSZXN1bHRTZXRGb3JBcml0eVplcm8oRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCi0JCUFueVR5cGUgY29udGV4dEl0ZW0gPSBkX2NvbnRleHQuY29udGV4dF9pdGVtKCk7Ci0JCWlmIChjb250ZXh0SXRlbSAhPSBudWxsKSB7Ci0JCSAgLy8gaWYgY29udGV4dCBpdGVtIGlzIGRlZmluZWQsIHRoZW4gdGhhdCBpcyB0aGUgZGVmYXVsdCBhcmd1bWVudAotCQkgIC8vIHRvIGZuOnN0cmluZyBmdW5jdGlvbgotCQkgIHJzLmFkZChuZXcgWFNTdHJpbmcoY29udGV4dEl0ZW0uc3RyaW5nX3ZhbHVlKCkpKTsKLQkJfSBlbHNlIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgZnVuY3Rpb24gbGlicmFyeSB2YXJpYWJsZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmwKLQkgKiAgICAgICAgICAgIEZ1bmN0aW9uIExpYnJhcnkuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2Z1bmN0aW9uX2xpYnJhcnkoRnVuY3Rpb25MaWJyYXJ5IGZsKSB7Ci0JCV9mbCA9IGZsOwotCX0KLQotCXByb3RlY3RlZCBTdGF0aWNDb250ZXh0IHN0YXRpY19jb250ZXh0KCkgewotCQlpZiAoX2ZsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gX2ZsLnN0YXRpY19jb250ZXh0KCk7Ci0JfQotCi0JcHJvdGVjdGVkIER5bmFtaWNDb250ZXh0IGR5bmFtaWNfY29udGV4dCgpIHsKLQkJaWYgKF9mbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIF9mbC5keW5hbWljX2NvbnRleHQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc192YXJhcmcoKSB7Ci0JCXJldHVybiBfbWluX2FyaXR5ICE9IF9tYXhfYXJpdHk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uTGlicmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbkxpYnJhcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1ZTEyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0NDcxIC0gaW1wcm92ZW1lbnRzIHRvIGZuOnN0cmluZyBmdW5jdGlvbiAoc3VwcG9ydCBmb3IgYXJpdHkgMCkKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgRnVuY3Rpb24gTGlicmFyeSBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgRnVuY3Rpb25MaWJyYXJ5IHsKLQlwcml2YXRlIFN0cmluZyBfbmFtZXNwYWNlOwotCXByaXZhdGUgTWFwIF9mdW5jdGlvbnM7Ci0JcHJpdmF0ZSBTdGF0aWNDb250ZXh0IF9zYzsKLQlwcml2YXRlIER5bmFtaWNDb250ZXh0IF9kYzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGdW5jdGlvbkxpYnJhcnkuCi0JICogCi0JICogQHBhcmFtIG5zCi0JICogICAgICAgICAgICBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIEZ1bmN0aW9uTGlicmFyeShTdHJpbmcgbnMpIHsKLQkJX25hbWVzcGFjZSA9IG5zOwotCQlfZnVuY3Rpb25zID0gbmV3IEhhc2h0YWJsZSgpOwotCQlfc2MgPSBudWxsOwotCQlfZGMgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBmdW5jdGlvbiB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkX2Z1bmN0aW9uKEZ1bmN0aW9uIHgpIHsKLQkJeC5uYW1lKCkuc2V0X25hbWVzcGFjZShfbmFtZXNwYWNlKTsKLQkJeC5zZXRfZnVuY3Rpb25fbGlicmFyeSh0aGlzKTsKLQkJX2Z1bmN0aW9ucy5wdXQoeC5zaWduYXR1cmUoKSwgeCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvciBub3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lIG9mIGZ1bmN0aW9uLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSB0ZXN0LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGZ1bmN0aW9uX2V4aXN0cyhRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJcmV0dXJuIGZ1bmN0aW9uKG5hbWUsIGFyaXR5KSAhPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEZ1bmN0aW9uIHN1cHBvcnQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gVGhlIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgRnVuY3Rpb24gZnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCUZ1bmN0aW9uIGYgPSAoRnVuY3Rpb24pIF9mdW5jdGlvbnMuZ2V0KEZ1bmN0aW9uLnNpZ25hdHVyZShuYW1lLCBhcml0eSkpOwotCi0JCWlmIChmICE9IG51bGwgfHwgYXJpdHkgPT0gLTEpCi0JCQlyZXR1cm4gZjsKLQotCQkvLyBzZWUgaWYgd2UgZ290IGEgdmFyZyBvbmUKLQkJZiA9IGZ1bmN0aW9uKG5hbWUsIC0xKTsKLQotCQkvLyBub3BlCi0JCWlmIChmID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCWlmIChmLm1hdGNoZXNfYXJpdHkoYXJpdHkpKQotCQkJcmV0dXJuIGY7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgbmFtZXNwYWNlLgotCSAqIAotCSAqIEByZXR1cm4gTmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgbmFtZXNwYWNlKCkgewotCQlyZXR1cm4gX25hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgc3RhdGljIGNvbnRleHQgb24gZnVuY3Rpb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3N0YXRpY19jb250ZXh0KFN0YXRpY0NvbnRleHQgc2MpIHsKLQkJX3NjID0gc2M7Ci0JfQotCi0JLyoqCi0JICogU2V0IGR5bmFtaWMgY29udGV4dCBvbiBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfZHluYW1pY19jb250ZXh0KER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCV9kYyA9IGRjOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFN0YXRpYyBjb250ZXh0LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyBTdGF0aWNDb250ZXh0IHN0YXRpY19jb250ZXh0KCkgewotCQlyZXR1cm4gX3NjOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIER5bmFtaWMgY29udGV4dC4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQuCi0JICovCi0JcHVibGljIER5bmFtaWNDb250ZXh0IGR5bmFtaWNfY29udGV4dCgpIHsKLQkJcmV0dXJuIF9kYzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhEaXYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aERpdi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDQxZjM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aERpdi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgTWF0aGVtYXRpY2FsIGRpdmlzaW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hdGhEaXYgewotCS8qKgotCSAqIERpdmlzaW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoSURpdi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoSURpdi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2Q3NmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aElEaXYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIE1hdGhlbWF0aWNhbCBJbnRlZ2VyIERpdmlzaW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hdGhJRGl2IHsKLQkvKioKLQkgKiBJbnRlZ2VyIERpdmlzaW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aE1pbnVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhNaW51cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDg2YjNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aE1pbnVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBNYXRoZW1hdGljYWwgU3VidHJhY3Rpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0aE1pbnVzIHsKLQkvKioKLQkgKiBTdWJ0cmFjdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoTW9kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhNb2QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZhMWIwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhNb2QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIE1hdGhlbWF0aWNhbCBNb2R1bGFyIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBNYXRoTW9kIHsKLQkvKioKLQkgKiBNb2R1bGFyIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtb2QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoUGx1cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoUGx1cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2M0ODZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aFBsdXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIE1hdGhlbWF0aWNhbCBBZGRpdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBNYXRoUGx1cyB7Ci0JLyoqCi0JICogQWRkaXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoVGltZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aFRpbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODgyMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoVGltZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIE1hdGhlbWF0aWNhbCBNdWx0aXBsaWNhdGlvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBNYXRoVGltZXMgewotCS8qKgotCSAqIE11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0aW1lcyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRXhjZXB0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRXhjZXB0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NzFiMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEV4Y2VwdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIEV4Y2VwdCBvcGVyYXRpb24gb24gbm9kZSB0eXBlcy4KLSAqLwotcHVibGljIGNsYXNzIE9wRXhjZXB0IGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE9wRXhjZXB0LgotCSAqLwotCXB1YmxpYyBPcEV4Y2VwdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJleGNlcHQiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBvcF9leGNlcHQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogT3AtRXhjZXB0IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG9wX2V4Y2VwdChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gY29udmVydCBhcmd1bWVudHMKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3VtZW50cwotCQlJdGVyYXRvciBpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggbGFtZQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBvbmUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQotCQkJLy8gZGVhdGgKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHR3by5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlOb2RlVHlwZSBub2RlMiA9IChOb2RlVHlwZSkgai5uZXh0KCk7Ci0KLQkJCQlpZiAobm9kZS5ub2RlX3ZhbHVlKCkgPT0gbm9kZTIubm9kZV92YWx1ZSgpKSB7Ci0JCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0JCQlpZiAoIWZvdW5kKQotCQkJCXJzLmFkZChub2RlKTsKLQkJfQotCQlycyA9IE5vZGVUeXBlLmVsaW1pbmF0ZV9kdXBzKHJzKTsKLQkJcnMgPSBOb2RlVHlwZS5zb3J0X2RvY3VtZW50X29yZGVyKHJzKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCQlTZXFUeXBlIHN0ID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfU1RBUik7Ci0KLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoc3QpOwotCQl9Ci0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRnVuY3Rpb25MaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRnVuY3Rpb25MaWJyYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZTU1NmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEZ1bmN0aW9uTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi0vLyB0aGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGxpYmMgPUQKLS8qKgotICogTWFpbnRhaW5zIGEgbGlicmFyeSBvZiBidWlsdC1pbiBvcGVyYXRvcnMgYXMgZnVuY3Rpb25zLgotICogCi0gKiBUaGlzIGlzIG5lY2Vzc2FyeSBpZiBub3JtYWxpemF0aW9uIGlzIGJlaW5nIHVzZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBPcEZ1bmN0aW9uTGlicmFyeSBleHRlbmRzIEZ1bmN0aW9uTGlicmFyeSB7Ci0KLQkvLyBYWFggc2hvdWxkIGJlIGludGVybmFsCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfT1BfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC14cXVlcnktc2VtYW50aWNzLTIwMDMwNTAyLyI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3BGdW5jdGlvbkxpYnJhcnkuCi0JICovCi0JcHVibGljIE9wRnVuY3Rpb25MaWJyYXJ5KCkgewotCQlzdXBlcihYUEFUSF9PUF9OUyk7Ci0KLQkJLy8gb3BlcmF0b3JzIGFjY29yZGluZyB0byBmb3JtYWwgc2VtYW50aWNzCi0JCWFkZF9mdW5jdGlvbihuZXcgRnNEaXYoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNFcSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc0dlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzR3QoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNJRGl2KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzTGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNMdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGc01pbnVzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzTW9kKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzTmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRnNQbHVzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZzVGltZXMoKSk7Ci0KLQkJLy8gdXRpbGl0eSBmdW5jdGlvbnMgaW4gZm9ybWFsIHNlbWFudGljcwotCQlhZGRfZnVuY3Rpb24obmV3IEZzQ29udmVydE9wZXJhbmQoKSk7Ci0KLQkJLy8gb3BlcmF0b3JzIGFjY29yZGluZyB0byBmdW5jdGlvbnMgJiBvcGVyYXRvcnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBPcEV4Y2VwdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBPcEludGVyc2VjdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBPcFRvKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IE9wVW5pb24oKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEludGVyc2VjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEludGVyc2VjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDE4NWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BJbnRlcnNlY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBJbnRlcnNlY3Qgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgT3BJbnRlcnNlY3QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3BJbnRlcnNlY3QuCi0JICovCi0JcHVibGljIE9wSW50ZXJzZWN0KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImludGVyc2VjdCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIG9wX2ludGVyc2VjdChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPcC1JbnRlcnNlY3Qgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb3BfaW50ZXJzZWN0KENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gY29udmVydCBhcmd1bWVudHMKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3VtZW50cwotCQlJdGVyYXRvciBpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggbGFtZQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBvbmUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQotCQkJLy8gZGVhdGgKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHR3by5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlOb2RlVHlwZSBub2RlMiA9IChOb2RlVHlwZSkgai5uZXh0KCk7Ci0KLQkJCQlpZiAobm9kZS5ub2RlX3ZhbHVlKCkgPT0gbm9kZTIubm9kZV92YWx1ZSgpKSB7Ci0JCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0JCQlpZiAoZm91bmQpCi0JCQkJcnMuYWRkKG5vZGUpOwotCQl9Ci0JCXJzID0gTm9kZVR5cGUuZWxpbWluYXRlX2R1cHMocnMpOwotCQlycyA9IE5vZGVUeXBlLnNvcnRfZG9jdW1lbnRfb3JkZXIocnMpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCVNlcVR5cGUgc3QgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19TVEFSKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCX0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BUby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFRvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOTRiOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFRvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBUbyBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBPcFRvIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE9wVG8uCi0JICovCi0JcHVibGljIE9wVG8oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidG8iKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDI7Ci0KLQkJLy8gSXRlcmF0b3IgaSA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQkvLyByZXR1cm4gb3BfdG8oIChSZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCksIChSZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCkpOwotCQlyZXR1cm4gb3BfdG8oYXJncyk7Ci0JfQotCi0JLyoqCi0JICogT3AtVG8gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb3BfdG8oQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGNvbnZlcnQgYXJndW1lbnRzCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmd1bWVudHMKLQkJSXRlcmF0b3IgaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHIgPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCQlpbnQgb25lID0gKChYU0ludGVnZXIpIHIuZmlyc3QoKSkuaW50X3ZhbHVlKCkuaW50VmFsdWUoKTsKLQkJciA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0JCWlmIChyLmZpcnN0KCkgPT0gbnVsbCkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCWludCB0d28gPSAoKFhTSW50ZWdlcikgci5maXJzdCgpKS5pbnRfdmFsdWUoKS5pbnRWYWx1ZSgpOwotCi0JCWlmIChvbmUgPiB0d28pCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gaW5jbHVzaXZlIGZpcnN0IGFuZCBsYXN0Ci0JCXJzLmFkZChuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihvbmUpKSk7Ci0KLQkJaWYgKG9uZSA9PSB0d28pIHsKLQkJCXJldHVybiByczsKLQkJfQotCQkvKgotCQkgKiBmb3Iob25lKys7IG9uZSA8PSB0d287IG9uZSsrKSB7IHJzLmFkZChuZXcgWFNJbnRlZ2VyKG9uZSkpOyB9Ci0JCSAqIAotCQkgKiByZXR1cm4gcnM7Ci0JCSAqLwotCQlyZXR1cm4gbmV3IFJhbmdlUmVzdWx0U2VxdWVuY2Uob25lLCB0d28pOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkJU2VxVHlwZSBzdCA9IG5ldyBTZXFUeXBlKG5ldyBYU0ludGVnZXIoKSk7Ci0KLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoc3QpOwotCQl9Ci0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVW5pb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BVbmlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzY2MDFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BVbmlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgVW5pb24gb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgT3BVbmlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBPcFVuaW9uLgotCSAqLwotCXB1YmxpYyBPcFVuaW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInVuaW9uIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gb3BfdW5pb24oYXJncyk7Ci0JfQotCi0JLyoqCi0JICogT3AtVW5pb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb3BfdW5pb24oQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCS8vIGNvbnZlcnQgYXJndW1lbnRzCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmd1bWVudHMKLQkJSXRlcmF0b3IgaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIG9uZSA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0KLQkJLy8gWFhYIGkgZG9uJ3QgZmluayB1J3ZlIGV2ZXIgc2VlbiBhbnl0aGluZyBsYW1lciB0aGFuIHRoaXMKLQkJcnMuY29uY2F0KG9uZSk7Ci0JCXJzLmNvbmNhdCh0d28pOwotCQlycyA9IE5vZGVUeXBlLmVsaW1pbmF0ZV9kdXBzKHJzKTsKLQkJcnMgPSBOb2RlVHlwZS5zb3J0X2RvY3VtZW50X29yZGVyKHJzKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCQlTZXFUeXBlIHN0ID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfU1RBUik7Ci0KLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoc3QpOwotCQl9Ci0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueUF0b21pY1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55QXRvbWljVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjI4NDZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55QXRvbWljVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi0vKioKLSAqIENvbW1vbiBiYXNlIGZvciBldmVyeSBhdG9taWMgdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW55QXRvbWljVHlwZSBleHRlbmRzIEFueVNpbXBsZVR5cGUgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlTaW1wbGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueVNpbXBsZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NiNmM5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueVNpbXBsZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotLyoqCi0gKiBDb21tb24gYmFzZSBmb3IgZXZlcnkgc2ltcGxlIHR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFueVNpbXBsZVR5cGUgZXh0ZW5kcyBBbnlUeXBlIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjRkZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLS8qKgotICogQ29tbW9uIGJhc2UgZm9yIGV2ZXJ5IHR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFueVR5cGUgewotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiBEYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHN0cmluZ190eXBlKCk7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gRGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIGFic3RyYWN0IFN0cmluZyBzdHJpbmdfdmFsdWUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQXR0clR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQXR0clR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4ZTllMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0F0dHJUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpICAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgxMTU5IC0gd2Ugd2VyZSBtaXNzaW5nIG91dCBvbiBxdWFsaWZpZWQgYXR0cmlidXRlcwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjg5MzA0IC0gZml4ZSBzY2hlbWEgYXdhcm5lc3Mgb2YgdHlwZXMgb24gYXR0cmlidXRlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMyMzkwMCAtIGltcHJvdmluZyBjb21wdXRpbmcgdGhlIHR5cGVkIHZhbHVlIG9mIGVsZW1lbnQgJgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIG5vZGVzLCB3aGVyZSB0aGUgc2NoZW1hIHR5cGUgb2Ygbm9kZXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLlBTVklBdHRyTlNJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5UeXBlSW5mbzsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBBdHRyaWJ1dGVUeXBlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBBdHRyVHlwZSBleHRlbmRzIE5vZGVUeXBlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFID0gImF0dHJpYnV0ZSI7Ci0JcHJpdmF0ZSBBdHRyIF92YWx1ZTsKLQotCS8vIGNvbnN0cnVjdG9yIG9ubHkgdXNlZnVsbCBmb3Igc3RyaW5nX3R5cGUoKQotCS8vIFhYWCBuZWVkcyB0byBiZSBmaXhlZCBpbiBmdXR1cmUKLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBudWxsCi0JICovCi0JcHVibGljIEF0dHJUeXBlKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgYXR0cmlidXRlIGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIEF0dHJUeXBlKEF0dHIgdikgewotCQlzdXBlcih2KTsKLQkJX3ZhbHVlID0gdjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gImF0dHJpYnV0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBBVFRSSUJVVEU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXRWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdHlwZWQgdmFsdWUgb2YgYW4KLQkgKiBhdHRyaWJ1dGUgbm9kZS4KLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0eXBlZC12YWx1ZSBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoIShfdmFsdWUgaW5zdGFuY2VvZiBQU1ZJQXR0ck5TSW1wbCkpIHsKLQkJCXJzLmFkZChuZXcgWFNVbnR5cGVkQXRvbWljKHN0cmluZ192YWx1ZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlQU1ZJQXR0ck5TSW1wbCB0eXBlSW5mbyA9IChQU1ZJQXR0ck5TSW1wbCkgX3ZhbHVlOwotCQkJCi0JCQlYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSB0eXBlSW5mby5nZXRUeXBlRGVmaW5pdGlvbigpOwkJICAgCi0JCQlpZiAodHlwZURlZiAhPSBudWxsKSB7Ci0JCQkgICBycyA9IGdldFhETVR5cGVkVmFsdWUodHlwZURlZiwgdHlwZUluZm8uZ2V0SXRlbVZhbHVlVHlwZXMoKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgIHJzLmFkZChuZXcgWFNVbnR5cGVkQXRvbWljKHN0cmluZ192YWx1ZSgpKSk7ICAKLQkJCX0KLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIE5hbWUgb2YgdGhlIG5vZGUKLQkgKi8KLQlwdWJsaWMgUU5hbWUgbm9kZV9uYW1lKCkgewotCQlRTmFtZSBuYW1lID0gbmV3IFFOYW1lKF92YWx1ZS5nZXRQcmVmaXgoKSwgX3ZhbHVlLmdldExvY2FsTmFtZSgpLAotCQkJCV92YWx1ZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IG5vZGUgaXMgb2YgdHlwZSBJRAotCSAqIEBzaW5jZSAxLjE7Ci0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJRCgpIHsKLQkJcmV0dXJuIGlzQXR0clR5cGUoU0NIRU1BX1RZUEVfSUQpOwotCX0KLQkKLQkvKioKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGlzQXR0clR5cGUoU0NIRU1BX1RZUEVfSURSRUYpOwotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0F0dHJUeXBlKFN0cmluZyB0eXBlTmFtZSkgewotCQlpZiAoX3ZhbHVlLmdldE93bmVyRG9jdW1lbnQoKS5pc1N1cHBvcnRlZCgiQ29yZSIsICIzLjAiKSkgewotCQkJcmV0dXJuIHR5cGVJbmZvKHR5cGVOYW1lKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiB0eXBlSW5mbyhTdHJpbmcgdHlwZU5hbWUpIHsKLQkJVHlwZUluZm8gdHlwZUluZm8gPSBfdmFsdWUuZ2V0U2NoZW1hVHlwZUluZm8oKTsKLQkJcmV0dXJuIGlzVHlwZSh0eXBlSW5mbywgdHlwZU5hbWUpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ2FsZW5kYXJUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0NhbGVuZGFyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjA1ODI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ2FsZW5kYXJUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gZml4IGRhdGVzIGZvciBjb21wYXJpc29uIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci0KLS8vIGNvbW1vbiBiYXNlIGZvciBhbnl0aGluZyB0aGF0IHVzZXMgYSBjYWxlbmRhci4uLiBiYXNpY2FsbHkgc3R1ZmYgZG9pbmcgd2l0aAotLy8gdGltZS4uLiBob3BlZnVsbHkgaW4gdGhlIGZ1dHVyZSB0aGlzIG1heSBiZSBmYWN0b3JlZCBvdXQgaGVyZQotLyoqCi0gKiBDb21tb24gYmFzZSBmb3IgYWxsIENhbGVuZGFyIGJhc2VkIGNsYXNzZXMKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIENhbGVuZGFyVHlwZSBleHRlbmRzIEN0clR5cGUgewotCi0JcHVibGljIENhbGVuZGFyIG5vcm1hbGl6ZUNhbGVuZGFyKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0aW1lem9uZSkgewotCQlDYWxlbmRhciBhZGp1c3RlZCA9IChDYWxlbmRhcikgY2FsLmNsb25lKCk7Ci0JCQotCQlpZiAodGltZXpvbmUgIT0gbnVsbCkgewotCQkJaW50IGhvdXJzID0gdGltZXpvbmUuaG91cnMoKTsKLQkJCWludCBtaW51dGVzID0gdGltZXpvbmUubWludXRlcygpOwotCQkJaWYgKCF0aW1lem9uZS5uZWdhdGl2ZSgpKSB7Ci0JCQkJaG91cnMgKj0gLTE7Ci0JCQkJbWludXRlcyAqPSAtMTsKLQkJCX0KLQkJCWFkanVzdGVkLmFkZChDYWxlbmRhci5IT1VSX09GX0RBWSwgaG91cnMpOwotCQkJYWRqdXN0ZWQuYWRkKENhbGVuZGFyLk1JTlVURSwgbWludXRlcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBhZGp1c3RlZDsKLQkJCi0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55VHlwZSBhYXQpIHsKLQkJaWYgKCEgKGFhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKSByZXR1cm4gZmFsc2U7Ci0JCi0JCVN0cmluZyB0eXBlID0gYWF0LnN0cmluZ190eXBlKCk7Ci0JCWlmICh0eXBlLmVxdWFscygieHM6Z01vbnRoRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnTW9udGgiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhck1vbnRoIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0NvbW1lbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0NvbW1lbnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNzQ4NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Db21tZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gYnVnIDI4MTE4NiAtIGltcGxlbWVudGF0aW9uIG9mIGZuOmlkIGFuZCBmbjppZHJlZgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLnczYy5kb20uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDb21tZW50VHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgQ29tbWVudFR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlQgPSAiY29tbWVudCI7Ci0JcHJpdmF0ZSBDb21tZW50IF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2UgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHYKLQkgKiAgICAgICAgICAgIFRoZSBjb21tZW50IGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIENvbW1lbnRUeXBlKENvbW1lbnQgdikgewotCQlzdXBlcih2KTsKLQkJX3ZhbHVlID0gdjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gImNvbW1lbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gQ09NTUVOVDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUuZ2V0Tm9kZVZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBjb21tZW50IHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJcnMuYWRkKG5ldyBYU1N0cmluZyhfdmFsdWUuZ2V0RGF0YSgpKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIFVuc3VwcG9ydGVkIG1ldGhvZCBmb3IgdGhpcyBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBRTmFtZSBub2RlX25hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzSURSRUYoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0N0clR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ3RyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2FlNjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ3RyVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3RyVHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ3RyVHlwZSBleHRlbmRzIEFueUF0b21pY1R5cGUgewotCS8vIHVzZWQgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwotCS8vIGFyZyBpcyBlaXRoZXIgZW1wdHkgc2VxdWVuY2UsIG9yIDEgYW55YXRvbWljdHlwZQotCS8qKgotCSAqIFVzZWQgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIEVpdGhlciBhbiBlbXB0eSBzZXF1ZW5jZSBvciAxIGF0b21pYyB0eXBlCi0JICogQHJldHVybiBUaGUgcmVzdWx0aW5nIFJlc3VsdFNlcXVlbmNlCi0JICovCi0JcHVibGljIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3I7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHR5cGVfbmFtZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Eb2NUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0RvY1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2OWE2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0RvY1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy53M2MuZG9tLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRG9jdW1lbnRUeXBlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2NUeXBlIGV4dGVuZHMgTm9kZVR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBET0NVTUVOVCA9ICJkb2N1bWVudCI7Ci0JcHJpdmF0ZSBEb2N1bWVudCBfdmFsdWU7Ci0JcHJpdmF0ZSBTdHJpbmcgX3N0cmluZ192YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKi8KLQlwdWJsaWMgRG9jVHlwZShEb2N1bWVudCB2KSB7Ci0JCXN1cGVyKHYpOwotCQlfdmFsdWUgPSB2OwotCQlfc3RyaW5nX3ZhbHVlID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZAotCSAqIAotCSAqIEByZXR1cm4gQWN0dWFsIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIERvY3VtZW50IHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAiZG9jdW1lbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gRE9DVU1FTlQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCS8vIFhYWCBjYWNoaW5nCi0JCWlmIChfc3RyaW5nX3ZhbHVlID09IG51bGwpCi0JCQlfc3RyaW5nX3ZhbHVlID0gRWxlbWVudFR5cGUudGV4dG5vZGVfc3RyaW5ncyhfdmFsdWUpOwotCi0JCXJldHVybiBfc3RyaW5nX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJLy8gWFhYIG5vIHBzdmkKLQkJcnMuYWRkKG5ldyBYU1VudHlwZWRBdG9taWMoc3RyaW5nX3ZhbHVlKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICogCi0JICogQHJldHVybiBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBRTmFtZSBub2RlX25hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRWxlbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRWxlbWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBkZjE2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0VsZW1lbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NjEzNCAtIGltcHJvdmVtZW50cyB0byBzY2hlbWEgYXdhcmUgcHJpbWl0aXZlIHR5cGUgc3VwcG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gYnVnIDI4MTE4NiAtIGltcGxlbWVudGF0aW9uIG9mIGZuOmlkIGFuZCBmbjppZHJlZgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjg5MzA0IC0gZml4IHNjaGVtYSBhd2FybmVzcyBvZiB0eXBlcyBvbiBlbGVtZW50cwotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjk3OTU4IC0gRml4IGZuOm5pbGxlZCBmb3IgZWxlbWVudHMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMyMzkwMCAtIGltcHJvdmluZyBjb21wdXRpbmcgdGhlIHR5cGVkIHZhbHVlIG9mIGVsZW1lbnQgJgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgbm9kZXMsIHdoZXJlIHRoZSBzY2hlbWEgdHlwZSBvZiBub2RlcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2ltcGxlLCB3aXRoIHZhcmlldGllcyAnbGlzdCcgYW5kICd1bmlvbicuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLlBTVklFbGVtZW50TlNJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVHlwZUluZm87Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRWxlbWVudFR5cGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIEVsZW1lbnRUeXBlIGV4dGVuZHMgTm9kZVR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UID0gImVsZW1lbnQiOwotCi0JcHJpdmF0ZSBFbGVtZW50IF92YWx1ZTsKLQotCXByaXZhdGUgU3RyaW5nIF9zdHJpbmdfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBhIG51bGwgZWxlbWVudAotCSAqLwotCXB1YmxpYyBFbGVtZW50VHlwZSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIGVsZW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFR5cGUoRWxlbWVudCB2KSB7Ci0JCXN1cGVyKHYpOwotCQlfdmFsdWUgPSB2OwotCi0JCV9zdHJpbmdfdmFsdWUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFRoaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBBZG9wdGVycyBuZWVkIHRvIHVzZQotCSAqIEVsZW1lbnRUeXBlKEVsZW1lbnQpCi0JICogCi0JICogQHBhcmFtIHYKLQkgKiBAcGFyYW0gbm9kZVBvc2l0aW9uCi0JICogQGRlcHJlY2F0ZWQgVXNlIEVsZW1lbnRUeXBlKEVsZW1lbnQgdikgaW5zdGVhZC4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudFR5cGUoRWxlbWVudCB2LCBpbnQgbm9kZVBvc2l0aW9uKSB7Ci0JCS8vIHVudXNlZCBwYXJhbWV0ZXIsIG5vZGVQb3NpdGlvbiEKLQkJc3VwZXIodik7Ci0JCV92YWx1ZSA9IHY7Ci0JCV9zdHJpbmdfdmFsdWUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGVsZW1lbnQgdmFsdWUgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIEVsZW1lbnQgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJlbGVtZW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIEVMRU1FTlQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGJlaW5nIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGJlaW5nIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQkvLyBYWFggY2FuIHdlIGNhY2hlID8KLQkJaWYgKF9zdHJpbmdfdmFsdWUgIT0gbnVsbCkKLQkJCXJldHVybiBfc3RyaW5nX3ZhbHVlOwotCi0JCV9zdHJpbmdfdmFsdWUgPSB0ZXh0bm9kZV9zdHJpbmdzKF92YWx1ZSk7Ci0KLQkJcmV0dXJuIF9zdHJpbmdfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0eXBlZCB2YWx1ZSBvZiBhbgotCSAqIGVsZW1lbnQgbm9kZS4KLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0eXBlZC12YWx1ZSBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQotCQlpZiAoIShfdmFsdWUgaW5zdGFuY2VvZiBQU1ZJRWxlbWVudE5TSW1wbCkpIHsKLQkJCXJzLmFkZChuZXcgWFNVbnR5cGVkQXRvbWljKHN0cmluZ192YWx1ZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgIFBTVklFbGVtZW50TlNJbXBsIHR5cGVJbmZvID0gKFBTVklFbGVtZW50TlNJbXBsKSBfdmFsdWU7Ci0KLQkJICAgLy8gaWYgdGhlICduaWxsZWQnIHByb3BlcnR5IG9mIHRoZSBub2RlIGlzICdmYWxzZScsIGF0dGVtcHQgdG8KLQkJICAgLy8gY29uc3RydWN0IHRoZSB0eXBlZC12YWx1ZSBhcyBwZXIgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KLQkJICAgLy8gWERNIHNwZWMuIGlmIHRoZSAnbmlsbGVkJyBwcm9wZXJ0eSBpcyAndHJ1ZScsIHRoZSB0eXBlZC12YWx1ZQotCQkgICAvLyBpcyBhbiBlbXB0eSBzZXF1ZW5jZS4KLQkJICAgaWYgKCF0eXBlSW5mby5nZXROaWwoKSkgewotCQkgICAgICBYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSB0eXBlSW5mby5nZXRUeXBlRGVmaW5pdGlvbigpOwkJICAgCi0JCSAgICAgIGlmICh0eXBlRGVmICE9IG51bGwpIHsKLQkJICAgICAgICAgcnMgPSBnZXRYRE1UeXBlZFZhbHVlKHR5cGVEZWYsIHR5cGVJbmZvLmdldEl0ZW1WYWx1ZVR5cGVzKCkpOwotCQkgICAgICB9Ci0JCSAgICAgIGVsc2UgewotCQkJICAgICBycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOyAgCi0JCSAgICAgIH0KLQkJICAgfQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8vIHJlY3Vyc2l2ZWx5IGNvbmNhdGVuYXRlIFRleHROb2RlIHN0cmluZ3MKLQkvKioKLQkgKiBSZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIE5vZGUgdG8gcmVjdXJzZQotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIHN1cHBsaWVkCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdGV4dG5vZGVfc3RyaW5ncyhOb2RlIG5vZGUpIHsKLQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCi0JCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpIHsKLQkJCVRleHQgdG4gPSAoVGV4dCkgbm9kZTsKLQkJCXJlc3VsdCArPSB0bi5nZXREYXRhKCk7Ci0JCX0KLQotCQlOb2RlTGlzdCBubCA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCi0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHJlc3VsdCk7Ci0JCS8vIGNvbmNhdGVuYXRlIGNoaWxkcmVuCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJTm9kZSBuID0gbmwuaXRlbShpKTsKLQotCQkJYnVmLmFwcGVuZCh0ZXh0bm9kZV9zdHJpbmdzKG4pKTsKLQkJfQotCi0JCXJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZQotCSAqIAotCSAqIEByZXR1cm4gUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKi8KLQlwdWJsaWMgUU5hbWUgbm9kZV9uYW1lKCkgewotCQlRTmFtZSBuYW1lID0gbmV3IFFOYW1lKF92YWx1ZS5nZXRQcmVmaXgoKSwgX3ZhbHVlLmdldExvY2FsTmFtZSgpLAotCQkJCV92YWx1ZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG5pbGxlZCgpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChfdmFsdWUgaW5zdGFuY2VvZiBQU1ZJRWxlbWVudE5TSW1wbCkgewotCQkJUFNWSUVsZW1lbnROU0ltcGwgcHN2aUVsZW1lbnQgPSAoUFNWSUVsZW1lbnROU0ltcGwpIF92YWx1ZTsKLQkJCXJzLmFkZChuZXcgWFNCb29sZWFuKHBzdmlFbGVtZW50LmdldE5pbCgpKSk7Ci0JCX0gZWxzZSB7Ci0JCQlycy5hZGQobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCQlyZXR1cm4gaXNFbGVtZW50VHlwZShTQ0hFTUFfVFlQRV9JRCk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSURSRUYoKSB7Ci0JCXJldHVybiBpc0VsZW1lbnRUeXBlKFNDSEVNQV9UWVBFX0lEUkVGKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0VsZW1lbnRUeXBlKFN0cmluZyB0eXBlTmFtZSkgewotCQlUeXBlSW5mbyB0eXBlSW5mbyA9IF92YWx1ZS5nZXRTY2hlbWFUeXBlSW5mbygpOwotCQlyZXR1cm4gaXNUeXBlKHR5cGVJbmZvLCB0eXBlTmFtZSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL05vZGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL05vZGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMzhjMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Ob2RlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKS0gYnVnIDI3Nzc3NCAtIFhTRGVjaW1hbCByZXR1cm5pbmcgd3JvbmcgdmFsdWVzLgotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4OTMwNCAtIGZpeGVkIHNjaGVtYSBhd2FyZW5lc3Mgb24gZWxlbWVudHMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzE4MzEzIC0gaW1wcm92ZW1lbnRzIHRvIGNvbXB1dGF0aW9uIG9mIHR5cGVkIHZhbHVlcyBvZiBub2RlcywKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB2YWxpZGF0ZWQgYnkgWE1MIFNjaGVtYSBwcmltaXRpdmUgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzIzOTAwIC0gaW1wcm92aW5nIGNvbXB1dGluZyB0aGUgdHlwZWQgdmFsdWUgb2YgZWxlbWVudCAmCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIHNjaGVtYSB0eXBlIG9mIG5vZGVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLmR2LkludmFsaWREYXRhdHlwZVZhbHVlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuVmFsaWRhdGVkSW5mbzsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLmR2LlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuWFNTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwudmFsaWRhdGlvbi5WYWxpZGF0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuU2hvcnRMaXN0OwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTT2JqZWN0TGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1NpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlBzeWNob1BhdGhUeXBlSGVscGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVHlwZUluZm87Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiBhIE5vZGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE5vZGVUeXBlIGV4dGVuZHMgQW55VHlwZSB7Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX1RZUEVfSURSRUYgPSAiSURSRUYiOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9UWVBFX0lEID0gIklEIjsKLQlwcml2YXRlIE5vZGUgX25vZGU7Ci0JCQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBUaGUgTm9kZSBiZWluZyByZXByZXNlbnRlZAotCSAqIEBwYXJhbSBkb2N1bWVudF9vcmRlcgotCSAqICAgICAgICAgICAgVGhlIGRvY3VtZW50IG9yZGVyCi0JICovCi0JcHVibGljIE5vZGVUeXBlKE5vZGUgbm9kZSkgewotCQlfbm9kZSA9IG5vZGU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZAotCSAqIAotCSAqIEByZXR1cm4gQWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKi8KLQlwdWJsaWMgTm9kZSBub2RlX3ZhbHVlKCkgewotCQlyZXR1cm4gX25vZGU7Ci0JfQotCi0JLy8gQWNjZXNzb3JzIGRlZmluZWQgaW4gWFBhdGggRGF0YSBtb2RlbAotCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoLWRhdGFtb2RlbC8KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkCi0JICogCi0JICogQHJldHVybiBBY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBSZXN1bHRTZXF1ZW5jZSB0eXBlZF92YWx1ZSgpOwotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICogCi0JICogQHJldHVybiBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBRTmFtZSBub2RlX25hbWUoKTsgLy8gbWF5IHJldHVybiBudWxsIFsiZW1wdHkgc2VxdWVuY2UiXQotCi0JLy8gWFhYIGVsZW1lbnQgc2hvdWxkIG92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG5pbGxlZCgpIHsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JfQotCi0JLy8gYSBsaXR0bGUgZmFjdG9yeSBmb3IgY29udmVydGluZyBmcm9tIERPTSB0byBvdXIgcmVwcmVzZW50YXRpb24KLQlwdWJsaWMgc3RhdGljIE5vZGVUeXBlIGRvbV90b194cGF0aChOb2RlIG5vZGUpIHsKLQkJYXNzZXJ0IG5vZGUgIT0gbnVsbDsKLQkJCi0JCXN3aXRjaCAobm9kZS5nZXROb2RlVHlwZSgpKSB7Ci0JCWNhc2UgTm9kZS5FTEVNRU5UX05PREU6Ci0JCQlyZXR1cm4gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KSBub2RlKTsKLQotCQljYXNlIE5vZGUuQ09NTUVOVF9OT0RFOgotCQkJcmV0dXJuIG5ldyBDb21tZW50VHlwZSgoQ29tbWVudCkgbm9kZSk7Ci0KLQkJY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFOgotCQkJcmV0dXJuIG5ldyBBdHRyVHlwZSgoQXR0cikgbm9kZSk7Ci0KLQkJY2FzZSBOb2RlLlRFWFRfTk9ERToKLQkJCXJldHVybiBuZXcgVGV4dFR5cGUoKFRleHQpIG5vZGUpOwotCi0JCWNhc2UgTm9kZS5ET0NVTUVOVF9OT0RFOgotCQkJcmV0dXJuIG5ldyBEb2NUeXBlKChEb2N1bWVudCkgbm9kZSk7Ci0KLQkJY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLQkJCXJldHVybiBuZXcgUElUeXBlKChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pIG5vZGUpOwotCi0JCQkvLyBYWFgKLQkJZGVmYXVsdDoKLQkJCWFzc2VydCBmYWxzZTsKLQotCQl9Ci0KLQkJLy8gdW5yZWFjaC4uLiBob3BlZnVsbHkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBlbGltaW5hdGVfZHVwcyhSZXN1bHRTZXF1ZW5jZSBycykgewotCQlIYXNodGFibGUgYWRkZWQgPSBuZXcgSGFzaHRhYmxlKHJzLnNpemUoKSk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCU5vZGUgbiA9IG5vZGUubm9kZV92YWx1ZSgpOwotCi0JCQlpZiAoYWRkZWQuY29udGFpbnNLZXkobikpCi0JCQkJaS5yZW1vdmUoKTsKLQkJCWVsc2UKLQkJCQlhZGRlZC5wdXQobiwgQm9vbGVhbi5UUlVFKTsKLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzb3J0X2RvY3VtZW50X29yZGVyKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCUFycmF5TGlzdCByZXMgPSBuZXcgQXJyYXlMaXN0KHJzLnNpemUoKSk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCWJvb2xlYW4gYWRkZWQgPSBmYWxzZTsKLQotCQkJZm9yIChpbnQgaiA9IDA7IGogPCByZXMuc2l6ZSgpOyBqKyspIHsKLQkJCQlOb2RlVHlwZSB4ID0gKE5vZGVUeXBlKSByZXMuZ2V0KGopOwotCi0JCQkJaWYgKGJlZm9yZShub2RlLCB4KSkgewotCQkJCQlyZXMuYWRkKGosIG5vZGUpOwotCQkJCQlhZGRlZCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmICghYWRkZWQpCi0JCQkJcmVzLmFkZChub2RlKTsKLQkJfQotCi0JCXJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcmVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgbm9kZSA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCXJzLmFkZChub2RlKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gc2FtZShOb2RlVHlwZSBhLCBOb2RlVHlwZSBiKSB7Ci0JCXJldHVybiAoYS5ub2RlX3ZhbHVlKCkuaXNTYW1lTm9kZShiLm5vZGVfdmFsdWUoKSkpOwotCQkvLyBXaGlsZSBjb21wYXJlX25vZGUoYSwgYikgPT0gMCBpcyB0ZW1wdGluZywgaXQgaXMgYWxzbyBleHBlbnNpdmUKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBiZWZvcmUoTm9kZVR5cGUgdHdvKSB7Ci0JCXJldHVybiBiZWZvcmUodGhpcywgdHdvKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gYmVmb3JlKE5vZGVUeXBlIGEsIE5vZGVUeXBlIGIpIHsKLQkJcmV0dXJuIGNvbXBhcmVfbm9kZShhLCBiKSA8IDA7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gYWZ0ZXIoTm9kZVR5cGUgdHdvKSB7Ci0JCXJldHVybiBhZnRlcih0aGlzLCB0d28pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhZnRlcihOb2RlVHlwZSBhLCBOb2RlVHlwZSBiKSB7Ci0JCXJldHVybiBjb21wYXJlX25vZGUoYSwgYikgPiAwOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBpbnQgY29tcGFyZV9ub2RlKE5vZGVUeXBlIGEsIE5vZGVUeXBlIGIpIHsKLQkJTm9kZSBub2RlQSA9IGEubm9kZV92YWx1ZSgpOwotCQlOb2RlIG5vZGVCID0gYi5ub2RlX3ZhbHVlKCk7Ci0JCQotCQlpZiAobm9kZUEgPT0gbm9kZUIgfHwgbm9kZUEuaXNTYW1lTm9kZShub2RlQikpIHJldHVybiAwOwotCi0JCURvY3VtZW50IGRvY0EgPSBnZXREb2N1bWVudChub2RlQSk7Ci0JCURvY3VtZW50IGRvY0IgPSBnZXREb2N1bWVudChub2RlQik7Ci0JCQotCQlpZiAoZG9jQSAhPSBkb2NCICYmICEgZG9jQS5pc1NhbWVOb2RlKGRvY0IpKSB7Ci0JCQlyZXR1cm4gY29tcGFyZURvY3VtZW50cyhkb2NBLCBkb2NCKTsKLQkJfQotCQlzaG9ydCByZWxhdGlvbiA9IG5vZGVBLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGVCKTsKLQkJaWYgKChyZWxhdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKSAhPSAwKSAKLQkJCSAgcmV0dXJuIDE7Ci0JCWlmICgocmVsYXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykgIT0gMCkgCi0JCQkgIHJldHVybiAtMTsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgcmVzdWx0IGZyb20gbm9kZSBjb21wYXJpc29uOiAiICsgcmVsYXRpb24pOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGludCBjb21wYXJlRG9jdW1lbnRzKERvY3VtZW50IGRvY0EsIERvY3VtZW50IGRvY0IpIHsKLQkJLy8gQXJiaXRyYXJ5IGJ1dCBmdWxmaWxscyB0aGUgc3BlYyAocHJvdmlkZWQgZG9jdW1lblVSSSBpcyBhbHdheXMgc2V0KQotCQlpZiAoZG9jQi5nZXREb2N1bWVudFVSSSgpID09IG51bGwgJiYgZG9jQS5nZXREb2N1bWVudFVSSSgpID09IG51bGwpIHsKLQkJCS8vIEJlc3QgZ3Vlc3MKLQkJCXJldHVybiAwOyAKLQkJfQotCQlyZXR1cm4gZG9jQi5nZXREb2N1bWVudFVSSSgpLmNvbXBhcmVUbyhkb2NBLmdldERvY3VtZW50VVJJKCkpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIERvY3VtZW50IGdldERvY3VtZW50KE5vZGUgbm9kZUEpIHsKLQkJcmV0dXJuIG5vZGVBIGluc3RhbmNlb2YgRG9jdW1lbnQgPyAoRG9jdW1lbnQpbm9kZUEgOiBub2RlQS5nZXRPd25lckRvY3VtZW50KCk7Ci0JfQotCi0JcHJvdGVjdGVkIE9iamVjdCBnZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZShYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYpIHsJCQotCQlTdHJpbmcgc3RyVmFsdWUgPSBzdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWlmICh0eXBlRGVmID09IG51bGwpIHsKLQkJICAgcmV0dXJuIG5ldyBYU1VudHlwZWRBdG9taWMoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlyZXR1cm4gU2NoZW1hVHlwZVZhbHVlRmFjdG9yeS5uZXdTY2hlbWFUeXBlVmFsdWUoUHN5Y2hvUGF0aFR5cGVIZWxwZXIuZ2V0WFNEVHlwZVNob3J0Q29kZSh0eXBlRGVmKSwgc3RyVmFsdWUpOwotCQkKLQl9IC8vIGdldFR5cGVkVmFsdWVGb3JQcmltaXRpdmVUeXBlIAotCi0JCi0JLyoKLQkgKiBDb25zdHJ1Y3QgdGhlICJ0eXBlZCB2YWx1ZSIgZnJvbSBhICJzdHJpbmcgdmFsdWUiLCBnaXZlbiB0aGUgc2ltcGxlVHlwZSBvZiB0aGUgbm9kZS4KLSAgICAgKi8KLQlwcm90ZWN0ZWQgUmVzdWx0U2VxdWVuY2UgZ2V0WERNVHlwZWRWYWx1ZShYU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYsIFNob3J0TGlzdCBpdGVtVmFsVHlwZXMpIHsKLQkJCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQkJCi0JCWlmICgiYW55U2ltcGxlVHlwZSIuZXF1YWxzKHR5cGVEZWYuZ2V0TmFtZSgpKSB8fCAKLQkJICAgICJhbnlBdG9taWNUeXBlIi5lcXVhbHModHlwZURlZi5nZXROYW1lKCkpKSB7Ci0JCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhzdHJpbmdfdmFsdWUoKSkpOwotCQl9Ci0JCWVsc2UgewotCQkJWFNTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wVHlwZSA9IG51bGw7Ci0JCQlSZXN1bHRTZXF1ZW5jZSByc1NpbXBsZUNvbnRlbnQgPSBudWxsOwotCi0JCQlpZiAodHlwZURlZiBpbnN0YW5jZW9mIFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJWFNDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGVEZWZpbml0aW9uID0gKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlRGVmOwotCQkJCXNpbXBUeXBlID0gY29tcGxleFR5cGVEZWZpbml0aW9uLmdldFNpbXBsZVR5cGUoKTsKLQkJCQlpZiAoc2ltcFR5cGUgIT0gbnVsbCkgewotCQkJCQkvLyBlbGVtZW50IGhhcyBhIGNvbXBsZXhUeXBlIHdpdGggYSBzaW1wbGUgY29udGVudAotCQkJCQlyc1NpbXBsZUNvbnRlbnQgPSBnZXRUeXBlZFZhbHVlRm9yU2ltcGxlQ29udGVudChzaW1wVHlwZSwgaXRlbVZhbFR5cGVzKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIGVsZW1lbnQgaGFzIGEgY29tcGxleFR5cGUgd2l0aCBjb21wbGV4IGNvbnRlbnQKLQkJCQkJcnMuYWRkKG5ldyBYU1VudHlwZWRBdG9taWMoc3RyaW5nX3ZhbHVlKCkpKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vIGVsZW1lbnQgaGFzIGEgc2ltcGxlVHlwZQotCQkJCXNpbXBUeXBlID0gKFhTU2ltcGxlVHlwZURlZmluaXRpb24pIHR5cGVEZWY7Ci0JCQkJcnNTaW1wbGVDb250ZW50ID0gZ2V0VHlwZWRWYWx1ZUZvclNpbXBsZUNvbnRlbnQoc2ltcFR5cGUsIGl0ZW1WYWxUeXBlcyk7Ci0JCQl9Ci0KLQkJCWlmIChyc1NpbXBsZUNvbnRlbnQgIT0gbnVsbCkgewotCQkJCXJzID0gIHJzU2ltcGxlQ29udGVudDsKLQkJCX0KLQkJfQotCQkJCi0JCXJldHVybiByczsKLQkJCi0JfSAvLyBnZXRYRE1UeXBlZFZhbHVlCi0JCi0JCi0gICAgLyoKLSAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNvbnN0cnVjdCB0eXBlZCB2YWx1ZSBvZiBhbiBYRE0gbm9kZS4KLSAgICAgKi8KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGdldFR5cGVkVmFsdWVGb3JTaW1wbGVDb250ZW50KFhTU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcFR5cGUsIFNob3J0TGlzdCBpdGVtVmFsdWVUeXBlcykgewotCQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQkKLQkJaWYgKHNpbXBUeXBlLmdldFZhcmlldHkoKSA9PSBYU1NpbXBsZVR5cGVEZWZpbml0aW9uLlZBUklFVFlfQVRPTUlDKSB7Ci0JCSAgIEFueVR5cGUgc2NoZW1hVHlwZVZhbHVlID0gU2NoZW1hVHlwZVZhbHVlRmFjdG9yeS5uZXdTY2hlbWFUeXBlVmFsdWUoUHN5Y2hvUGF0aFR5cGVIZWxwZXIuZ2V0WFNEVHlwZVNob3J0Q29kZShzaW1wVHlwZSksIAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ192YWx1ZSgpKTsKLQkJICAgaWYgKHNjaGVtYVR5cGVWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJcnMuYWRkKHNjaGVtYVR5cGVWYWx1ZSk7Ci0JCSAgIH0gZWxzZSB7Ci0JCQkJcnMuYWRkKG5ldyBYU1VudHlwZWRBdG9taWMoc3RyaW5nX3ZhbHVlKCkpKTsKLQkJICAgfQotCQl9Ci0JCWVsc2UgaWYgKHNpbXBUeXBlLmdldFZhcmlldHkoKSA9PSBYU1NpbXBsZVR5cGVEZWZpbml0aW9uLlZBUklFVFlfTElTVCkgewotCQkJYWRkQXRvbWljTGlzdEl0ZW1zVG9SZXN1bHRTZXQoc2ltcFR5cGUsIGl0ZW1WYWx1ZVR5cGVzLCBycyk7Ci0JCX0KLQkJZWxzZSBpZiAoc2ltcFR5cGUuZ2V0VmFyaWV0eSgpID09IFhTU2ltcGxlVHlwZURlZmluaXRpb24uVkFSSUVUWV9VTklPTikgewotCQkJZ2V0VHlwZWRWYWx1ZUZvclZhcmlldHlVbmlvbihzaW1wVHlwZSwgcnMpOwotCQl9Ci0JCQotCQlyZXR1cm4gcnM7Ci0JCQotCX0gLy8gZ2V0VHlwZWRWYWx1ZUZvclNpbXBsZUNvbnRlbnQKLQkKLQkKLQkvKgotCSAqIElmIHRoZSB2YXJpZXR5IG9mIHNpbXBsZVR5cGUgd2FzICdsaXN0JywgYWRkIHRoZSB0eXBlZCAibGlzdCBpdGVtIiB2YWx1ZXMgdG8gdGhlIHBhcmVudCByZXN1bHQgc2V0LiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkQXRvbWljTGlzdEl0ZW1zVG9SZXN1bHRTZXQoWFNTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wVHlwZSwgU2hvcnRMaXN0IGl0ZW1WYWx1ZVR5cGVzLCBSZXN1bHRTZXF1ZW5jZSBycykgewotCQkKLQkJLy8gdG9rZW5pemUgdGhlIHN0cmluZyB2YWx1ZSBieSBhICdsb25nZXN0IHNlcXVlbmNlJyBvZiB3aGl0ZS1zcGFjZXMuIHRoaXMgZ2l2ZXMgdXMgdGhlIGxpc3QgaXRlbXMgYXMgc3RyaW5nIHZhbHVlcy4KLQkJU3RyaW5nW10gbGlzdEl0ZW1zU3RyVmFsdWVzID0gc3RyaW5nX3ZhbHVlKCkuc3BsaXQoIlxccysiKTsKLQkJCi0JCVhTU2ltcGxlVHlwZURlZmluaXRpb24gaXRlbVR5cGUgPSBzaW1wVHlwZS5nZXRJdGVtVHlwZSgpOwkJCi0JCWlmIChpdGVtVHlwZS5nZXRWYXJpZXR5KCkgPT0gWFNTaW1wbGVUeXBlRGVmaW5pdGlvbi5WQVJJRVRZX0FUT01JQykgewotCQkJZm9yIChpbnQgbGlzdEl0ZW1JZHggPSAwOyBsaXN0SXRlbUlkeCA8IGxpc3RJdGVtc1N0clZhbHVlcy5sZW5ndGg7IGxpc3RJdGVtSWR4KyspIHsKLQkJCSAgIC8vIGFkZCBhbiBhdG9taWMgdHlwZWQgdmFsdWUgKHdob3NlIHR5cGUgaXMgdGhlICJpdGVtICB0eXBlIiBvZiB0aGUgbGlzdCwgYW5kICJzdHJpbmcgdmFsdWUiIGlzIHRoZSAic3RyaW5nIAotCQkJICAgLy8gdmFsdWUgb2YgdGhlIGxpc3QgaXRlbSIpIHRvIHRoZSAicmVzdWx0IHNlcXVlbmNlIi4KLQkJICAgICAgIHJzLmFkZChTY2hlbWFUeXBlVmFsdWVGYWN0b3J5Lm5ld1NjaGVtYVR5cGVWYWx1ZShQc3ljaG9QYXRoVHlwZUhlbHBlci5nZXRYU0RUeXBlU2hvcnRDb2RlKGl0ZW1UeXBlKSwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zU3RyVmFsdWVzW2xpc3RJdGVtSWR4XSkpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGl0ZW1UeXBlLmdldFZhcmlldHkoKSA9PSBYU1NpbXBsZVR5cGVEZWZpbml0aW9uLlZBUklFVFlfVU5JT04pIHsKLQkJICAgIC8vIGhlcmUgdGhlIGxpc3QgaXRlbXMgbWF5IGhhdmUgZGlmZmVyZW50IGF0b21pYyB0eXBlcwotCQkJZm9yIChpbnQgbGlzdEl0ZW1JZHggPSAwOyBsaXN0SXRlbUlkeCA8IGxpc3RJdGVtc1N0clZhbHVlcy5sZW5ndGg7IGxpc3RJdGVtSWR4KyspIHsKLQkJCQlTdHJpbmcgbGlzdEl0ZW0gPSBsaXN0SXRlbXNTdHJWYWx1ZXNbbGlzdEl0ZW1JZHhdOwotCQkJCXJzLmFkZChTY2hlbWFUeXBlVmFsdWVGYWN0b3J5Lm5ld1NjaGVtYVR5cGVWYWx1ZShpdGVtVmFsdWVUeXBlcy5pdGVtKGxpc3RJdGVtSWR4KSwgbGlzdEl0ZW0pKTsKLQkJCX0KLQkJfQotCQkKLQl9IC8vIGFkZEF0b21pY0xpc3RJdGVtc1RvUmVzdWx0U2V0Ci0JCi0JCi0JLyoKLQkgKiBJZiB0aGUgdmFyaWV0eSBvZiBzaW1wbGVUeXBlIHdhcyAndW5pb24nLCBmaW5kIHRoZSB0eXBlZCB2YWx1ZSAoYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgJ3Jlc3VsdCBzZXQnKSAKLQkgKiB0byBiZSByZXR1cm5lZCBhcyB0aGUgdHlwZWQgdmFsdWUgb2YgdGhlIHBhcmVudCBub2RlLCBieSBjb25zaWRlcmluZyB0aGUgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiAoaS5lCi0JICogd2hpY2hldmVyIG1lbWJlciB0eXBlIGZpcnN0IGluIG9yZGVyLCBjYW4gc3VjY2Vzc2Z1bGx5IHZhbGlkYXRlIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHBhcmVudCBub2RlKS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZ2V0VHlwZWRWYWx1ZUZvclZhcmlldHlVbmlvbihYU1NpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBUeXBlLCBSZXN1bHRTZXF1ZW5jZSBycykgewotCQkKLQkJWFNPYmplY3RMaXN0IG1lbWJlclR5cGVzID0gc2ltcFR5cGUuZ2V0TWVtYmVyVHlwZXMoKTsKLQkJLy8gY2hlY2sgbWVtYmVyIHR5cGVzIGluIG9yZGVyLCB0byBmaW5kIHRoYXQgd2hpY2ggb25lIGNhbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGUgdGhlIHN0cmluZyB2YWx1ZS4KLQkJZm9yIChpbnQgbWVtVHlwZUlkeCA9IDA7IG1lbVR5cGVJZHggPCBtZW1iZXJUeXBlcy5nZXRMZW5ndGgoKTsgbWVtVHlwZUlkeCsrKSB7Ci0JCSAgIFhTU2ltcGxlVHlwZSBtZW1TaW1wbGVUeXBlID0gKFhTU2ltcGxlVHlwZSkgbWVtYmVyVHlwZXMuaXRlbShtZW1UeXBlSWR4KTsKLQkJICAgaWYgKGlzVmFsdWVWYWxpZEZvclNpbXBsZVR5cGUoc3RyaW5nX3ZhbHVlKCksIG1lbVNpbXBsZVR5cGUpKSB7Ci0JCQkgIAotCQkJICAgcnMuYWRkKFNjaGVtYVR5cGVWYWx1ZUZhY3RvcnkubmV3U2NoZW1hVHlwZVZhbHVlKFBzeWNob1BhdGhUeXBlSGVscGVyLmdldFhTRFR5cGVTaG9ydENvZGUobWVtU2ltcGxlVHlwZSksIHN0cmluZ192YWx1ZSgpKSk7Ci0JCQkgICAvLyBubyBtb3JlIG1lbWJlclR5cGVzIG5lZWQgdG8gYmUgY2hlY2tlZAotCQkJICAgYnJlYWs7IAotCQkgICB9Ci0JCX0KLQkJCi0JfSAvLyBnZXRUeXBlZFZhbHVlRm9yVmFyaWV0eVVuaW9uCi0JCi0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgYSAic3RyaW5nIHZhbHVlIiBpcyB2YWxpZCBmb3IgYSBnaXZlbiBzaW1wbGVUeXBlIGRlZmluaXRpb24uIFRoaXMgaXMgYSBoZWxwZWQgbWV0aG9kIGZvciBvdGhlciBtZXRob2RzLgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc1ZhbHVlVmFsaWRGb3JTaW1wbGVUeXBlIChTdHJpbmcgdmFsdWUsIFhTU2ltcGxlVHlwZSBzaW1wbFR5cGUpIHsKLQkJCi0JCWJvb2xlYW4gaXNWYWx1ZVZhbGlkID0gdHJ1ZTsKLQkJCi0JCXRyeSB7Ci0JCQlWYWxpZGF0ZWRJbmZvIHZhbGlkYXRlZEluZm8gPSBuZXcgVmFsaWRhdGVkSW5mbygpOwotCQkJVmFsaWRhdGlvbkNvbnRleHQgdmFsaWRhdGlvblN0YXRlID0gbmV3IFZhbGlkYXRpb25TdGF0ZSgpOwotICAgICAJCQotCQkJLy8gYXR0ZW1wdCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgd2l0aCB0aGUgc2ltcGxlVHlwZQotCQkJc2ltcGxUeXBlLnZhbGlkYXRlKHZhbHVlLCB2YWxpZGF0aW9uU3RhdGUsIHZhbGlkYXRlZEluZm8pOwotCSAgICB9IAotCQljYXRjaChJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiBleCl7Ci0JCQlpc1ZhbHVlVmFsaWQgPSBmYWxzZTsKLQkgICAgfQotCQkKLQkJcmV0dXJuIGlzVmFsdWVWYWxpZDsKLQkJCi0JfSAvLyBpc1ZhbHVlVmFsaWRGb3JBU2ltcGxlVHlwZQotCQotCQotCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzSUQoKTsKLQkKLQlwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0lEUkVGKCk7Ci0KLQkvKioKLQkgKiBVdGlsaXR5IG1ldGhvZCB0byBjaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIFR5cGVJbmZvIG1hdGNoZXMuCi0JICogQHBhcmFtIHR5cGVJbmZvCi0JICogQHBhcmFtIHR5cGVOYW1lCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIGlzVHlwZShUeXBlSW5mbyB0eXBlSW5mbywgU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCWlmICh0eXBlSW5mbyAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgdHlwZUluZm9OYW1lID0gdHlwZUluZm8uZ2V0VHlwZU5hbWUoKTsKLQkJCWlmICh0eXBlSW5mb05hbWUgIT0gbnVsbCkgewotCQkJCWlmICh0eXBlSW5mby5nZXRUeXBlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UodHlwZU5hbWUpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0gCi0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvTnVtZXJpY1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvTnVtZXJpY1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI1MmY1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL051bWVyaWNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTnVtZXJpY1R5cGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE51bWVyaWNUeXBlIGV4dGVuZHMgQ3RyVHlwZQotCi1pbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQsCi0KLU1hdGhQbHVzLCBNYXRoTWludXMsIE1hdGhUaW1lcywgTWF0aERpdiwgTWF0aElEaXYsIE1hdGhNb2QgewotCi0JLy8gWFhYIG5lZWRlZCBmb3IgZm46Ym9vbGVhbgotCS8qKgotCSAqIENoZWNrIHdoZXRoZXIgbm9kZSByZXByZXNudHMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBub2RlIHJlcHJlc250cyAwLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB6ZXJvKCk7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotCSAqIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgUmVzdWx0U2VxdWVuY2UgdW5hcnlfbWludXMoKTsKLQotCS8vIG51bWVyaWMgZnVuY3Rpb25zCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSBhYnMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIGNlaWxpbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSBmbG9vcigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgTnVtZXJpY1R5cGUgcm91bmQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbigpOwotCQotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSByb3VuZF9oYWxmX3RvX2V2ZW4oaW50IHByZWNpc2lvbik7Ci0KLQlwcm90ZWN0ZWQgQW55VHlwZSBnZXRfc2luZ2xlX2FyZyhSZXN1bHRTZXF1ZW5jZSBycykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChycy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJcmV0dXJuIHJzLmZpcnN0KCk7Ci0JfQotCi0JLyoqKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN1cHBsaWVkIG5vZGUgaXMgb2YgdGhlIHN1cHBsaWVkIHR5cGUKLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIGJlaW5nIHRlc3RlZAotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBUaGUgdHlwZSBleHBlY3RlZAotCSAqIEByZXR1cm4gVGhlIG5vZGUgYmVpbmcgdGVzdGVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQW55VHlwZSBnZXRfc2luZ2xlX3R5cGUoQW55VHlwZSBhdCwgQ2xhc3MgdHlwZSkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmICghdHlwZS5pc0luc3RhbmNlKGF0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJcmV0dXJuIGF0OwotCX0KLQotCS8qKioKLQkgKiBDaGVjayB3aGV0aGVyIGZpcnN0IG5vZGUgaW4gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgaXMgb2YgdGhlIHN1cHBsaWVkCi0JICogdHlwZQotCSAqIAotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgVGhlIG5vZGUgYmVpbmcgdGVzdGVkCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFRoZSB0eXBlIGV4cGVjdGVkCi0JICogQHJldHVybiBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIElmIG5vZGUgYmVpbmcgdGVzdGVkIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlCi0JICovCi0JcHVibGljIHN0YXRpYyBBbnlUeXBlIGdldF9zaW5nbGVfdHlwZShSZXN1bHRTZXF1ZW5jZSBycywgQ2xhc3MgdHlwZSkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAocnMuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBycy5maXJzdCgpOwotCi0JCWlmICghdHlwZS5pc0luc3RhbmNlKGF0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJcmV0dXJuIGF0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvUElUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1BJVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTRlZjRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvUElUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgUElUeXBlIGV4dGVuZHMgTm9kZVR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OID0gInByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24iOwotCXByaXZhdGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cwotCSAqIEBwYXJhbSBkb2Nfb3JkZXIKLQkgKiAgICAgICAgICAgIFRoZSBkb2N1bWVudCBvcmRlcgotCSAqLwotCXB1YmxpYyBQSVR5cGUoUHJvY2Vzc2luZ0luc3RydWN0aW9uIHYpIHsKLQkJc3VwZXIodik7Ci0JCV92YWx1ZSA9IHY7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cwotCSAqIAotCSAqIEByZXR1cm4gQWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHMKLQkgKi8KLQlwdWJsaWMgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLQkgKiBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUuZ2V0RGF0YSgpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotCSAqIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLQkgKiAgICAgICAgIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0eXBlZF92YWx1ZSgpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChuZXcgWFNTdHJpbmcoc3RyaW5nX3ZhbHVlKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyB0aGUgbm9kZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIEEgUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJUU5hbWUgbmFtZSA9IG5ldyBRTmFtZShudWxsLCBfdmFsdWUuZ2V0VGFyZ2V0KCkpOwotCi0JCW5hbWUuc2V0X25hbWVzcGFjZShudWxsKTsKLQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNJRCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9RTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDZjNDY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MTE1OSAtIGRlYnVnZ2luZyBjb252ZW5pZW5jZSB0b1N0cmluZyBtZXRob2QgCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODg4ODYgLSBhZGQgdW5pdCB0ZXN0cyBhbmQgZml4IGZuOnJlc29sdmUtcW5hbWUgZnVuY3Rpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBRTmFtZSBkYXRhdHlwZSAobmFtZSBvZiBhIG5vZGUpCi0gKi8KLXB1YmxpYyBjbGFzcyBRTmFtZSBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1FfTkFNRSA9ICJ4czpRTmFtZSI7Ci0JcHJpdmF0ZSBTdHJpbmcgX25hbWVzcGFjZTsKLQlwcml2YXRlIFN0cmluZyBfcHJlZml4OwotCXByaXZhdGUgU3RyaW5nIF9sb2NhbF9wYXJ0OwotCXByaXZhdGUgYm9vbGVhbiBfZXhwYW5kZWQ7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIFByZWZpeCBvZiB0aGUgbm9kZSBuYW1lCi0JICogQHBhcmFtIGxvY2FsX3BhcnQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIG5hbWUgaXRzZWxmCi0JICogQHBhcmFtIG5zCi0JICogICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgbm9kZW5hbWUgYmVsb25ncyB0bwotCSAqLwotCXB1YmxpYyBRTmFtZShTdHJpbmcgcHJlZml4LCBTdHJpbmcgbG9jYWxfcGFydCwgU3RyaW5nIG5zKSB7Ci0JCXRoaXMocHJlZml4LCBsb2NhbF9wYXJ0KTsKLQkJaWYgKG5zICE9IG51bGwpIHsKLQkJCXNldF9uYW1lc3BhY2UobnMpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gcHJlZml4Ci0JICogICAgICAgICAgICBQcmVmaXggb2YgdGhlIG5vZGUgbmFtZQotCSAqIEBwYXJhbSBsb2NhbF9wYXJ0Ci0JICogICAgICAgICAgICBUaGUgbm9kZSBuYW1lIGl0c2VsZgotCSAqLwotCXB1YmxpYyBRTmFtZShTdHJpbmcgcHJlZml4LCBTdHJpbmcgbG9jYWxfcGFydCkgewotCQlfcHJlZml4ID0gcHJlZml4OwotCQlfbG9jYWxfcGFydCA9IGxvY2FsX3BhcnQ7Ci0JCV9leHBhbmRlZCA9IGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIG9ubHkgdGhlIG5vZGUgbmFtZSAobm8gcHJlZml4KQotCSAqIAotCSAqIEBwYXJhbSBsb2NhbF9wYXJ0Ci0JICogICAgICAgICAgICBUaGUgbm9kZSBuYW1lCi0JICovCi0JcHVibGljIFFOYW1lKFN0cmluZyBsb2NhbF9wYXJ0KSB7Ci0JCXRoaXMobnVsbCwgbG9jYWxfcGFydCk7Ci0JCXNldF9uYW1lc3BhY2UobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgd2l0aCBhIG51bGwgcHJlZml4IGFuZCBudWxsIG5vZGUgbmFtZQotCSAqLwotCXB1YmxpYyBRTmFtZSgpIHsKLQkJdGhpcyhudWxsLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFFOYW1lIGJ5IHBhcnNpbmcgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZQotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZQotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUU5hbWUgcGFyc2VfUU5hbWUoU3RyaW5nIHN0cikgewotCQlpbnQgb2NjdXJzID0gMDsKLQkJZm9yIChDaGFyYWN0ZXIgY2ggOiBzdHIudG9DaGFyQXJyYXkoKSkgewotCQkJaWYgKGNoID09ICc6JykgewotCQkJCW9jY3VycyArPTE7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChvY2N1cnMgPiAxKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJU3RyaW5nW10gdG9rZW5zID0gc3RyLnNwbGl0KCI6Iik7Ci0KLQkJaWYgKHRva2Vucy5sZW5ndGggPT0gMSkKLQkJCXJldHVybiBuZXcgUU5hbWUodG9rZW5zWzBdKTsKLQkJCi0JCWlmICh0b2tlbnMubGVuZ3RoID09IDIpIHsKLQkJCQlyZXR1cm4gbmV3IFFOYW1lKHRva2Vuc1swXSwgdG9rZW5zWzFdKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgUU5hbWUgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gZXh0cmFjdCBmcm9tCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgUU5hbWUgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIShhYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgJiYgIShhYXQgaW5zdGFuY2VvZiBRTmFtZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkKLQkJU3RyaW5nIHNhcmcgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0KLQkJUU5hbWUgcW5hbWUgPSBwYXJzZV9RTmFtZShzYXJnKTsKLQkJaWYgKHFuYW1lID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJcnMuYWRkKHFuYW1lKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmcoKQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIHN0cmluZygpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6UU5hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfUV9OQU1FOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiUU5hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJRTmFtZSI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZygpIHsKLQkJU3RyaW5nIHJlcyA9ICIiOwotCi0JCWlmIChfcHJlZml4ICE9IG51bGwpIHsKLQkJCXJlcyA9IF9wcmVmaXggKyAiOiI7Ci0JCX0KLQotCQlyZXMgKz0gX2xvY2FsX3BhcnQ7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGhuYW1lIGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlLiBUaGlzIG1ldGhvZCBtdXN0IG5vdAotCSAqIGJlIGNhbGxlZCBpZiBhIG5hbWVzcGFjZSBkb2VzIGV4aXN0IGZvciB0aGlzIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIEZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIG5hbWVzcGFjZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZXhwYW5kZWRfbmFtZSgpIHsKLQkJYXNzZXJ0IF9leHBhbmRlZDsKLQkJLy8gaWYoIV9leHBhbmRlZCkKLQkJLy8gcmV0dXJuIG51bGw7Ci0KLQkJU3RyaW5nIGUgPSAiIjsKLQkJaWYgKF9uYW1lc3BhY2UgIT0gbnVsbCkKLQkJCWUgKz0gX25hbWVzcGFjZSArICI6IjsKLQotCQlyZXR1cm4gZSArIF9sb2NhbF9wYXJ0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgcHJlZml4IG9mIHRoZSBub2RlJ3MgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIFByZWZpeCBvZiB0aGUgbm9kZSdzIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBwcmVmaXgoKSB7Ci0JCXJldHVybiBfcHJlZml4OwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBub2RlCi0JICogCi0JICogQHBhcmFtIG4KLQkgKiAgICAgICAgICAgIE5hbWVzcGFjZSB0aGlzIG5vZGUgYmVsb25ncyBpbgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9uYW1lc3BhY2UoU3RyaW5nIG4pIHsKLQkJX25hbWVzcGFjZSA9IG47Ci0JCV9leHBhbmRlZCA9IHRydWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBuYW1lc3BhY2UgdGhhdCB0aGlzIG5vZGUgYmVsb25ncyBpbi4gVGhpcyBtZXRob2QgbXVzdCBub3QKLQkgKiBiZSBjYWxsZWQgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGluIGEgbmFtZXNwYWNlCi0JICogCi0JICogQHJldHVybiBOYW1lc3BhY2UgdGhhdCB0aGlzIG5vZGUgYmVsb25ncyBpbgotCSAqLwotCXB1YmxpYyBTdHJpbmcgbmFtZXNwYWNlKCkgewotCQlhc3NlcnQgX2V4cGFuZGVkOwotCQlyZXR1cm4gX25hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5vZGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiBOb2RlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgbG9jYWwoKSB7Ci0JCXJldHVybiBfbG9jYWxfcGFydDsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGlzIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSBuYW1lc3BhY2UgaGFzIGJlZW4gZGVmaW5lZCBmb3Igbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kZWQoKSB7Ci0JCXJldHVybiBfZXhwYW5kZWQ7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIGEgc3VwcGxpZWQgUU5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gb2JqCi0JICogICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGNvbXBhcmUgd2l0aC4gU2hvdWxkIGJlIG9mIHR5cGUgUU5hbWUKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnQgdGhlIHNhbWUgbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLQotCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGNvbXBhcmluZyBhIHFuYW1lCi0JCWlmICghKG9iaiBpbnN0YW5jZW9mIFFOYW1lKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlRTmFtZSBhcmcgPSAoUU5hbWUpIG9iajsKLQotCQkvLyBpZiB0aGV5IGFyZW4ndCBleHBhbmRlZC4uLiB3ZSBjYW4ndCBjb21wYXJlIHRoZW0KLQkJaWYgKCFfZXhwYW5kZWQgfHwgIWFyZy5leHBhbmRlZCgpKSB7Ci0JCQlhc3NlcnQgZmFsc2U7IC8vIFhYWCBub3Qgc3RyaWNseSBuZWNlc3NhcnkKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCS8vIHR3byBjYXNlczogbnVsbCA9PSBudWxsLCBvciAuZXF1YWxzKG90aGVyKQotCQlTdHJpbmcgYXJnbiA9IGFyZy5uYW1lc3BhY2UoKTsKLQkJaWYgKF9uYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJaWYgKCFfbmFtZXNwYWNlLmVxdWFscyhhcmduKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYXJnbiAhPSBudWxsKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCVN0cmluZyBhcmdsID0gYXJnLmxvY2FsKCk7Ci0JCS8vIFhYWCBsb2NhbCBwYXJ0IHNob3VsZCBhbHdheXMgYmUgbm9uIG51bGwgPwotCQlpZiAoX2xvY2FsX3BhcnQgIT0gbnVsbCkgewotCQkJaWYgKCFfbG9jYWxfcGFydC5lcXVhbHMoYXJnbCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9IGVsc2UgewotCQkJaWYgKGFyZ2wgIT0gbnVsbCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGVzIHRoZSBoYXNoY29kZSBmb3IgdGhlIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBoYXNoY29kZSBmb3IgdGhlIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotCQlpbnQgbmFtZXNwYWNlID0gMzsKLQkJaW50IGxvY2FsID0gNDsKLQkJaW50IHJlc3VsdCA9IDA7Ci0KLQkJYXNzZXJ0IGV4cGFuZGVkKCk7Ci0KLQkJaWYgKF9uYW1lc3BhY2UgIT0gbnVsbCkKLQkJCW5hbWVzcGFjZSA9IF9uYW1lc3BhY2UuaGFzaENvZGUoKTsKLQkJaWYgKF9sb2NhbF9wYXJ0ICE9IG51bGwpCi0JCQlsb2NhbCA9IF9sb2NhbF9wYXJ0Lmhhc2hDb2RlKCk7Ci0KLQkJcmVzdWx0ID0gbmFtZXNwYWNlOwotCQlyZXN1bHQgXj0gKDIgKiBsb2NhbCk7Ci0KLQkJaWYgKF9leHBhbmRlZCkKLQkJCXJlc3VsdCBePSAocmVzdWx0ICsgMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgdGhlIHN1cHBsaWVkIFFOYW1lCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFFOYW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudCB0aGUgc2FtZSBub2RlLiBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUU5hbWUgdmFsID0gKFFOYW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBRTmFtZS5jbGFzcyk7Ci0JCXJldHVybiBlcXVhbHModmFsKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIHN0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvU2NoZW1hVHlwZVZhbHVlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9TY2hlbWFUeXBlVmFsdWVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZGJhODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9TY2hlbWFUeXBlVmFsdWVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMTgzMTMgLSBpbXByb3ZlbWVudHMgdG8gY29tcHV0YXRpb24gb2YgdHlwZWQgdmFsdWVzIG9mIG5vZGVzLCB3aGVuIHZhbGlkYXRlZCBieSBYTUwgU2NoZW1hIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUgdHlwZXMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMyMzkwMCAtIGltcHJvdmluZyBjb21wdXRpbmcgdGhlIHR5cGVkIHZhbHVlIG9mIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIHNjaGVtYQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIG9mIG5vZGVzIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlBzeWNob1BhdGhUeXBlSGVscGVyOwotCi0vKioKLSAqIEEgZmFjdG9yeSBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgdG8gY29uc3RydWN0IFBzeWNob1BhdGggc2NoZW1hIHR5cGUgcmVwcmVzZW50YXRpb24gY29ycmVzcG9uZGluZyAKLSAqIHRvIFhNTCBTY2hlbWEgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2hlbWFUeXBlVmFsdWVGYWN0b3J5IHsKLQotCXB1YmxpYyBzdGF0aWMgQW55VHlwZSBuZXdTY2hlbWFUeXBlVmFsdWUoc2hvcnQgdHlwZURlZiwgU3RyaW5nIHN0clZhbHVlKSB7Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5BTllVUklfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNBbnlVUkkoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5CT09MRUFOX0RUKSB7Ci0JCQlyZXR1cm4gbmV3IFhTQm9vbGVhbihCb29sZWFuLnZhbHVlT2Yoc3RyVmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuREFURV9EVCkgeyAgICAgICAKLQkJCXJldHVybiBYU0RhdGUucGFyc2VfZGF0ZShzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkRBVEVUSU1FX0RUKSB7Ci0JCQlyZXR1cm4gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJLy8gZGVjaW1hbCBhbmQgaXQncyBzdWJ0eXBlcwkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkRFQ0lNQUxfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKG5ldyBCaWdEZWNpbWFsKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLklOVEVHRVJfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkxPTkdfRFQpIHsgICAgIAotCQkJcmV0dXJuIG5ldyBYU0xvbmcobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuSU5UX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTSW50KG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLlNIT1JUX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTU2hvcnQobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuQllURV9EVCkgeyAgICAgIAotCQkJcmV0dXJuIG5ldyBYU0J5dGUobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTk9OTkVHQVRJVkVJTlRFR0VSX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTTm9uTmVnYXRpdmVJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLlBPU0lUSVZFSU5URUdFUl9EVCkgeyAgICAgIAotCQkJcmV0dXJuIG5ldyBYU1Bvc2l0aXZlSW50ZWdlcihuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5VTlNJR05FRExPTkdfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZExvbmcobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuVU5TSUdORURJTlRfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZEludChuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5VTlNJR05FRFNIT1JUX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTVW5zaWduZWRTaG9ydChuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5VTlNJR05FREJZVEVfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZEJ5dGUobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTk9OUE9TSVRJVkVJTlRFR0VSX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTTm9uUG9zaXRpdmVJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLk5FR0FUSVZFSU5URUdFUl9EVCkgeyAgICAgIAotCQkJcmV0dXJuIG5ldyBYU05lZ2F0aXZlSW50ZWdlcihuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCS8vIGVuZCBvZiwgZGVjaW1hbCB0eXBlcwotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuRE9VQkxFX0RUKSB7ICAgICAgIAotCQkJcmV0dXJuIG5ldyBYU0RvdWJsZShEb3VibGUucGFyc2VEb3VibGUoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJLy8gZHVyYXRpb24gYW5kIGl0J3Mgc3VidHlwZXMKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuRFVSQVRJT05fRFQpIHsgICAgICAgCi0JCQlyZXR1cm4gWFNEdXJhdGlvbi5wYXJzZURURHVyYXRpb24oc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBQc3ljaG9QYXRoVHlwZUhlbHBlci5EQVlUSU1FRFVSQVRJT05fRFQpIHsgICAgICAgCi0JCQlyZXR1cm4gWFNEYXlUaW1lRHVyYXRpb24ucGFyc2VEVER1cmF0aW9uKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gUHN5Y2hvUGF0aFR5cGVIZWxwZXIuWUVBUk1PTlRIRFVSQVRJT05fRFQpIHsgICAgICAgCi0JCQlyZXR1cm4gWFNZZWFyTW9udGhEdXJhdGlvbi5wYXJzZVlNRHVyYXRpb24oc3RyVmFsdWUpOwotCQl9Ci0JCS8vIGVuZCBvZiwgZHVyYXRpb24gdHlwZXMKLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkZMT0FUX0RUKSB7ICAgICAgICAKLQkJCXJldHVybiBuZXcgWFNGbG9hdChGbG9hdC5wYXJzZUZsb2F0KHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkdEQVlfRFQpIHsgICAgICAgIAotCQkJcmV0dXJuIFhTR0RheS5wYXJzZV9nRGF5KHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuR01PTlRIX0RUKSB7ICAgICAgICAKLQkJCXJldHVybiBYU0dNb250aC5wYXJzZV9nTW9udGgoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5HTU9OVEhEQVlfRFQpIHsgICAgICAgIAotCQkJcmV0dXJuIFhTR01vbnRoRGF5LnBhcnNlX2dNb250aERheShzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkdZRUFSX0RUKSB7ICAgICAgICAKLQkJCXJldHVybiBYU0dZZWFyLnBhcnNlX2dZZWFyKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuR1lFQVJNT05USF9EVCkgeyAgICAgICAgCi0JCQlyZXR1cm4gWFNHWWVhck1vbnRoLnBhcnNlX2dZZWFyTW9udGgoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5OT1RBVElPTl9EVCkgewotCQkJcmV0dXJuIG5ldyBYU1N0cmluZyhzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLlFOQU1FX0RUKSB7Ci0JCQlyZXR1cm4gUU5hbWUucGFyc2VfUU5hbWUoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQkvLyBzdHJpbmcgYW5kIGl0J3Mgc3VidHlwZXMKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuU1RSSU5HX0RUKSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHN0clZhbHVlKTsgICAKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTk9STUFMSVpFRFNUUklOR19EVCkgewotCQkJcmV0dXJuIG5ldyBYU05vcm1hbGl6ZWRTdHJpbmcoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5UT0tFTl9EVCkgewotCQkJcmV0dXJuIG5ldyBYU1Rva2VuKHN0clZhbHVlKTsgICAKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTkFNRV9EVCkgewotCQkJcmV0dXJuIG5ldyBYU05hbWUoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5OQ05BTUVfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNOQ05hbWUoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5FTlRJVFlfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNFbnRpdHkoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5JRF9EVCkgewotCQkJcmV0dXJuIG5ldyBYU0lEKHN0clZhbHVlKTsgICAKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuSURSRUZfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNJRFJFRihzdHJWYWx1ZSk7ICAgCi0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLk5NVE9LRU5fRFQpIHsKLQkJCXJldHVybiBuZXcgWFNOTVRPS0VOKHN0clZhbHVlKTsgICAKLQkJfQkJCi0JCS8vIGVuZCBvZiwgc3RyaW5nIHR5cGVzCi0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5USU1FX0RUKSB7Ci0JCQlyZXR1cm4gWFNUaW1lLnBhcnNlX3RpbWUoc3RyVmFsdWUpOwotCQl9ICAKLQkJCi0JICAgIC8vIGNyZWF0ZSBhIFhTU3RyaW5nIHZhbHVlLCBhcyBmYWxsYmFjayBvcHRpb24gCi0JCXJldHVybiBuZXcgWFNTdHJpbmcoc3RyVmFsdWUpOwotCQkKLQl9IC8vIG5ld1NjaGVtYVR5cGVWYWx1ZQotCQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvVGV4dFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvVGV4dFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4YmYzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1RleHRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFRleHRUeXBlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXh0VHlwZSBleHRlbmRzIE5vZGVUeXBlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVYVCA9ICJ0ZXh0IjsKLQlwcml2YXRlIFRleHQgX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSBUZXh0VHlwZSBub2RlCi0JICovCi0JcHVibGljIFRleHRUeXBlKFRleHQgdikgewotCQlzdXBlcih2KTsKLQkJX3ZhbHVlID0gdjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInRleHQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gVEVYVDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHZhbHVlIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlLmdldE5vZGVWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVGV4dCB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBUZXh0IHZhbHVlIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0eXBlZF92YWx1ZSgpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCXJzLmFkZChuZXcgWFNVbnR5cGVkQXRvbWljKF92YWx1ZS5nZXREYXRhKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogVW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGV0eXBlLgotCSAqIAotCSAqIEByZXR1cm4gbnVsbCAobm8gdXNlciBkZWZpbmVkIG5hbWUgZm9yIHRoaXMgbm9kZSBnZXRzIGRlZmluZWQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogV2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlOwotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFBhdGhEZWNpbWFsRm9ybWF0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hQYXRoRGVjaW1hbEZvcm1hdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDQzNzEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFBhdGhEZWNpbWFsRm9ybWF0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgzNDA0IC0gZml4ZWQgbG9jYWxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdFN5bWJvbHM7Ci1pbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIFhQYXRoIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIERlY2ltYWxGb3JtYXQgdG8gaGFuZGxlCi0gKiBzb21lIG9mIHRoZSB4cGF0aCBzcGVjaWZpYyBmb3JtYXR0aW5nIHJlcXVpcmVtZW50cy4gICBTcGVjaWZpY2FsbHkKLSAqIGl0IGFsbG93cyBmb3IgRSMgdG8gYmUgcmVwcmVzZW50ZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZXhwb25lbnQgdmFsdWUKLSAqIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlIGFsbCBleGlzdGluZyBEZWNpbWFsRm9ybWF0IHBhdHRlcm5zIGFyZSBoYW5kbGVkCi0gKiBhcyBpcy4KLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNlZSAxLjEKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aERlY2ltYWxGb3JtYXQgZXh0ZW5kcyBEZWNpbWFsRm9ybWF0IHsKLQkKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtODIyOTg4NTk1NTg2NDE4NzQwMEw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5FR19JTkZJTklUWSA9ICItSU5GIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9TX0lORklOSVRZID0gIklORiI7Ci0KLQlwdWJsaWMgWFBhdGhEZWNpbWFsRm9ybWF0KFN0cmluZyBwYXR0ZXJuKSB7Ci0JCS8vIFhwYXRoIGhhcmRjb2RlcyB0aGlzIHRvIFVTIGxvY2FsZQotCQlzdXBlcihwYXR0ZXJuLCBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKSk7Ci0JfQotCi0JLyoqCi0JICogRm9ybWF0cyB0aGUgc3RyaW5nIGRyb3BwaW5nIGEgWmVybyBFeHBvbmVudCBWYWx1ZSBpZiBpdCBleGlzdHMuCi0JICogQHBhcmFtIG9iagotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHhwYXRoRm9ybWF0KE9iamVjdCBvYmopIHsKLQkJcmV0dXJuIGZvcm1hdFhQYXRoKG9iaik7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZm9ybWF0WFBhdGgoT2JqZWN0IG9iaikgewotCQlTdHJpbmcgY3VyUGF0dGVybiA9IHRvUGF0dGVybigpOwotCQlTdHJpbmcgbmV3UGF0dGVybiA9IGN1clBhdHRlcm4ucmVwbGFjZSgiRTAiLCAiIik7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBGbG9hdCkgewotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdEZsb2F0VmFsdWUob2JqLCBjdXJQYXR0ZXJuLCBuZXdQYXR0ZXJuKTsKLQkJfQotCQlpZiAob2JqIGluc3RhbmNlb2YgRG91YmxlKSB7Ci0JCQlyZXR1cm4gZm9ybWF0RG91YmxlVmFsdWUob2JqLCBjdXJQYXR0ZXJuLCBuZXdQYXR0ZXJuKTsKLQkJfQotCQlyZXR1cm4gc3VwZXIuZm9ybWF0KG9iaiwgbmV3IFN0cmluZ0J1ZmZlcigpLCBuZXcgRmllbGRQb3NpdGlvbigwKSkudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBmb3JtYXREb3VibGVWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgY3VyUGF0dGVybiwKLQkJCVN0cmluZyBuZXdQYXR0ZXJuKSB7Ci0JCURvdWJsZSBkb3VibGVWYWx1ZSA9IChEb3VibGUpIG9iajsKLQkJaWYgKGlzRG91YmxlTmVnYXRpdmVJbmZpbml0eShkb3VibGVWYWx1ZSkpIHsKLQkJCXJldHVybiBORUdfSU5GSU5JVFk7Ci0JCX0KLQkJaWYgKGlzRG91YmxlUG9zaXRpdmVJbmZpbml0eShkb3VibGVWYWx1ZSkpIHsKLQkJCXJldHVybiBQT1NfSU5GSU5JVFk7Ci0JCX0KLQkJZG91YmxlWFBhdGhQYXR0ZXJuKG9iaiwgY3VyUGF0dGVybiwgbmV3UGF0dGVybik7Ci0JCXJldHVybiBmb3JtYXQob2JqLCBuZXcgU3RyaW5nQnVmZmVyKCksIG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb3VibGVYUGF0aFBhdHRlcm4oT2JqZWN0IG9iaiwgU3RyaW5nIGN1clBhdHRlcm4sCi0JCQlTdHJpbmcgbmV3UGF0dGVybikgewotCQlCaWdEZWNpbWFsIGRvdWJWYWx1ZSA9IEJpZ0RlY2ltYWwudmFsdWVPZigoKERvdWJsZSkgb2JqKSk7Ci0JCUJpZ0RlY2ltYWwgbWluVmFsdWUgPSBuZXcgQmlnRGVjaW1hbCgiLTFFNiIpOwotCQlCaWdEZWNpbWFsIG1heFZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoIjFFNiIpOwotCQlpZiAoZG91YlZhbHVlLmNvbXBhcmVUbyhtaW5WYWx1ZSkgPiAwICYmIGRvdWJWYWx1ZS5jb21wYXJlVG8obWF4VmFsdWUpIDwgMCkgewotCQkJYXBwbHlQYXR0ZXJuKG5ld1BhdHRlcm4pOwotCQl9IGVsc2UgeyAvL2lmIChkb3ViVmFsdWUuY29tcGFyZVRvKG1pblZhbHVlKSA8IDApIHsKLQkJCWFwcGx5UGF0dGVybihjdXJQYXR0ZXJuLnJlcGxhY2UoIjAuIyIsICIwLjAiKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNEb3VibGVQb3NpdGl2ZUluZmluaXR5KERvdWJsZSBkb3VibGVWYWx1ZSkgewotCQlyZXR1cm4gZG91YmxlVmFsdWUgPT0gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0RvdWJsZU5lZ2F0aXZlSW5maW5pdHkoRG91YmxlIGRvdWJsZVZhbHVlKSB7Ci0JCXJldHVybiBkb3VibGVWYWx1ZSA9PSBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RmxvYXRWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgY3VyUGF0dGVybiwKLQkJCVN0cmluZyBuZXdQYXR0ZXJuKSB7Ci0JCUZsb2F0IGZsb2F0VmFsdWUgPSAoRmxvYXQpIG9iajsKLQkJaWYgKGlzRmxvYXROZWdJbmZpbml0eShmbG9hdFZhbHVlKSkgewotCQkJcmV0dXJuIE5FR19JTkZJTklUWTsKLQkJfQotCQlpZiAoaXNGbG9hdFBvc0luZmluaXR5KGZsb2F0VmFsdWUpKSB7Ci0JCQlyZXR1cm4gUE9TX0lORklOSVRZOwotCQl9Ci0JCWZsb2F0WFBhdGhQYXR0ZXJuKGN1clBhdHRlcm4sIG5ld1BhdHRlcm4sIGZsb2F0VmFsdWUpOwotCQlyZXR1cm4gZm9ybWF0KG9iaiwgbmV3IFN0cmluZ0J1ZmZlcigpLCBuZXcgRmllbGRQb3NpdGlvbigwKSkudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNGbG9hdFBvc0luZmluaXR5KEZsb2F0IGZsb2F0VmFsdWUpIHsKLQkJcmV0dXJuIGZsb2F0VmFsdWUgPT0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRmxvYXROZWdJbmZpbml0eShGbG9hdCBmbG9hdFZhbHVlKSB7Ci0JCXJldHVybiBmbG9hdFZhbHVlID09IEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOwotCX0KLQotCXByaXZhdGUgdm9pZCBmbG9hdFhQYXRoUGF0dGVybihTdHJpbmcgY3VyUGF0dGVybiwgU3RyaW5nIG5ld1BhdHRlcm4sCi0JCQlGbG9hdCBmbG9hdFZhbHVlKSB7Ci0JCWlmIChmbG9hdFZhbHVlID4gLTFFNmYgJiYgZmxvYXRWYWx1ZSA8IDFFNmYpIHsKLQkJCQotCQkJYXBwbHlQYXR0ZXJuKG5ld1BhdHRlcm4pOwotCQl9IGVsc2UgaWYgKGZsb2F0VmFsdWUgPD0gLTFFNmYpIHsKLQkJCWFwcGx5UGF0dGVybihjdXJQYXR0ZXJuLnJlcGxhY2UoIjAuIyIsICIwLjAiICkpOwotCQl9Ci0JfQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0FueVVSSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0FueVVSSS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTFhNGJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNBbnlVUkkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcyNzQ3MTkgLSBpbXBsZW1lbnRhdGlvbiBvZiBlcXVhbGl0eSBvZiB4czphbnlVUkkgdmFsdWVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBmaXhlZCBjYXN0aW5nIHRvIHhzOmFueVVSSSBvbmx5IHN0cmluZywKLSAqICAgICAgICAgdW50eXBlZEF0b21pYywgYW5kIGFueVVSSSBhcmUgYWxsb3dlZC4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4Mzc3NyAtIGltcGxlbWVudGVkIGd0LCBsdCBjb21wYXJpc29uIGNvZGUuCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODExNTkgLSBhZGRlZCBwcm9tb3Rpb24gb2YgeHM6YW55VVJJIHRvIHN0cmluZyAocmV2ZXJzZSBjYXNlKSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBVbml2ZXJzYWwgUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSByZWZlcmVuY2UKLSAqLwotcHVibGljIGNsYXNzIFhTQW55VVJJIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0FOWV9VUkkgPSAieHM6YW55VVJJIjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkvKioKLQkgKiBBcml0eSAxIENvbnN0cnVjdG9yCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJCi0JICovCi0JcHVibGljIFhTQW55VVJJKFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogQXJpdHkgMCBDb25zdHJ1Y3Rvci4gSW5pdGlhdGVzIFVSSSB0byBudWxsLgotCSAqLwotCXB1YmxpYyBYU0FueVVSSSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmFueVVSSSIsIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19BTllfVVJJOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHR5cGUgbmFtZSBvZiB0aGlzIGRhdGF0eXBlCi0JICogCi0JICogQHJldHVybiAiYW55VVJJIiwgdGhlIHR5cGUgbmFtZSBvZiB0aGlzIGRhdGF0eXBlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiYW55VVJJIjsKLQl9Ci0KLQkvKioKLQkgKiBUcmFuc2Zvcm1zIGFuZCByZXRyaWV2ZXMgdGhlIFVSSSB2YWx1ZSBvZiB0aGlzIFVSSSBkYXRhdHlwZSBpbiBTdHJpbmcKLQkgKiBmb3JtYXQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBVUkkgdmFsdWUgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoZSBVUkkgZGF0YXR5cGUgYXMgYQotCSAqICAgICAgICAgU3RyaW5nCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRpb24gb2YgYSByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiBhIFVSSSBmcm9tIGEgcHJldmlvdXMgcmVzdWx0Ci0JICogc2VxdWVuY2UuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgcHJldmlvdXMgcmVzdWx0IHNlcXVlbmNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVVJJIHN1cHBsaWVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIShhYXQuc3RyaW5nX3R5cGUoKS5lcXVhbHMoInhzOnN0cmluZyIpCi0JCQkJfHwgYWF0LnN0cmluZ190eXBlKCkuZXF1YWxzKFhTX0FOWV9VUkkpIHx8IGFhdC5zdHJpbmdfdHlwZSgpCi0JCQkJLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTQW55VVJJKGFhdC5zdHJpbmdfdmFsdWUoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0JICogbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBvZiB0aGUgc2FtZSBTdHJpbmcuIEZhbHNlCi0JICogICAgICAgICBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTQW55VVJJIHx8IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nKSB7Ci0JCQlpZiAodGhpcy5zdHJpbmdfdmFsdWUoKS5lcXVhbHMoYXJnLnN0cmluZ192YWx1ZSgpKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBHcmVhdGVyIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotCSAqIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKQotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmICghKGFyZyBpbnN0YW5jZW9mIFhTQW55VVJJIHx8IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJCi0JCX0KLQkJCi0JCVN0cmluZyBhbnlVUkkgPSB0aGlzLnN0cmluZ192YWx1ZSgpOwotCQlTdHJpbmcgY29tcGFyZVRvVVJJID0gYXJnLnN0cmluZ192YWx1ZSgpOwotCQlpZiAoYW55VVJJLmNvbXBhcmVUbyhjb21wYXJlVG9VUkkpID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogTGVzcyB0aGFuIGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgeHM6YW55VVJJIChvciwgYnkgcHJvbW90aW9uIG9mIHRoaXMsIHhzOnN0cmluZykKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoIShhcmcgaW5zdGFuY2VvZiBYU0FueVVSSSB8fCBhcmcgaW5zdGFuY2VvZiBYU1N0cmluZykpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQkJCi0JCVN0cmluZyBhbnlVUkkgPSB0aGlzLnN0cmluZ192YWx1ZSgpOwotCQlTdHJpbmcgY29tcGFyZVRvVVJJID0gYXJnLnN0cmluZ192YWx1ZSgpOwotCQlpZiAoYW55VVJJLmNvbXBhcmVUbyhjb21wYXJlVG9VUkkpIDwgMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQmFzZTY0QmluYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQmFzZTY0QmluYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOTY4MDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0Jhc2U2NEJpbmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgxMDQ2IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi51dGlsLkJhc2U2NDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLmR2LnV0aWwuSGV4QmluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTQmFzZTY0QmluYXJ5IGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19CQVNFNjRfQklOQVJZID0gInhzOmJhc2U2NEJpbmFyeSI7Ci0JcHJpdmF0ZSBTdHJpbmcgX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHRvIGluaXRpYWxpc2UgdG8KLQkgKi8KLQlwdWJsaWMgWFNCYXNlNjRCaW5hcnkoU3RyaW5nIHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBudWxsCi0JICovCi0JcHVibGljIFhTQmFzZTY0QmluYXJ5KCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6YmFzZTY0QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0JBU0U2NF9CSU5BUlk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJiYXNlNjRCaW5hcnkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJiYXNlNjRCaW5hcnkiOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0QmluYXJ5IHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotCSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGJhc2U2NEJpbmFyeSB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBiYXNlNjRCaW5hcnkgdmFsdWUgCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIGJhc2U2NEJpbmFyeSB2YWx1ZSAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8IGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCVN0cmluZyBzdHJfdmFsdWUgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0JCQotCQlieXRlW10gZGVjb2RlZFZhbHVlID0gQmFzZTY0LmRlY29kZShzdHJfdmFsdWUpOwotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5KSB7Ci0JCQlkZWNvZGVkVmFsdWUgPSBIZXhCaW4uZGVjb2RlKHN0cl92YWx1ZSk7Ci0JCQlkZWNvZGVkVmFsdWUgPSBCYXNlNjQuZW5jb2RlKGRlY29kZWRWYWx1ZSkuZ2V0Qnl0ZXMoKTsKLQkJfSBlbHNlIHsKLQkJCWRlY29kZWRWYWx1ZSA9IHN0cl92YWx1ZS5nZXRCeXRlcygpOwotCQl9Ci0JCWlmIChkZWNvZGVkVmFsdWUgIT0gbnVsbCkgewotCQkgIHJzLmFkZChuZXcgWFNCYXNlNjRCaW5hcnkobmV3IFN0cmluZyhkZWNvZGVkVmFsdWUpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgLy8gaW52YWxpZCBiYXNlNjQgc3RyaW5nCi0JCSAgdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJCi0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0JICogbXVzdCBiZSBvZiB0eXBlIGJhc2U2NEJpbmFyeQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgc2FtZS4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqICAgICAgICAgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0gICAgICBTdHJpbmcgdmFsVG9Db21wYXJlID0gYXJnLnN0cmluZ192YWx1ZSgpOwotICAgICAgCi0gICAgICBieXRlW10gdmFsdWUxID0gQmFzZTY0LmRlY29kZShfdmFsdWUpOwotICAgICAgYnl0ZVtdIHZhbHVlMiA9IEJhc2U2NC5kZWNvZGUodmFsVG9Db21wYXJlKTsKLSAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkgewotICAgIAlyZXR1cm4gZmFsc2U7ICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgaW50IGxlbiA9IHZhbHVlMS5sZW5ndGg7Ci0gICAgICBpZiAobGVuICE9IHZhbHVlMi5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmICh2YWx1ZTFbaV0gIT0gdmFsdWUyW2ldKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiB0cnVlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0Jvb2xlYW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCb29sZWFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMGZkZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0Jvb2xlYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnMjc0Nzg0IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmJvb2xlYW4gZGF0YSB0eXBlIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGNvcnJlY3RlZCBjYXN0aW5nIHRvIGJvb2xlYW4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEd0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBMdDsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJ1ZSBvciBhIGZhbHNlIHZhbHVlLgotICovCi1wdWJsaWMgY2xhc3MgWFNCb29sZWFuIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19CT09MRUFOID0gInhzOmJvb2xlYW4iOwotCXByaXZhdGUgYm9vbGVhbiBfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgdGhlIG5ldyByZXByZXNlbnRhdGlvbiB0byB0aGUgYm9vbGVhbiBzdXBwbGllZAotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgSW5pdGlhbGl6ZXMgdGhpcyBkYXRhdHlwZSB0byByZXByZXNlbnQgdGhpcyBib29sZWFuCi0JICovCi0JcHVibGljIFhTQm9vbGVhbihib29sZWFuIHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgdG8gYSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIG9mIGZhbHNlLgotCSAqLwotCXB1YmxpYyBYU0Jvb2xlYW4oKSB7Ci0JICB0aGlzKGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpib29sZWFuIiwgdGhlIGZ1bGwgZGF0YXR5cGUgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfQk9PTEVBTjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZGF0YXR5cGUgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImJvb2xlYW4iLCB3aGljaCBpcyB0aGUgZGF0YXR5cGUgbmFtZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJib29sZWFuIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuICIiICsgX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgYm9vbGVhbiB2YWx1ZQotCSAqIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgYm9vbGVhbiB2YWx1ZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3VwcGxpZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCSAgcmV0dXJuIHJzOwotCQkKLQkJQW55VHlwZSBhbnlUeXBlID0gYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYW55VHlwZSBpbnN0YW5jZW9mIFhTRHVyYXRpb24gfHwgYW55VHlwZSBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYW55VHlwZSBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFueVR5cGUgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fAotCQkJYW55VHlwZSBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJU3RyaW5nIHN0cl92YWx1ZSA9IGFueVR5cGUuc3RyaW5nX3ZhbHVlKCk7Ci0JCQotCQkKLQkJaWYgKCEoaXNDYXN0YWJsZShhbnlUeXBlLCBzdHJfdmFsdWUpKSkgewotCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJQm9vbGVhbiBiID0gbnVsbDsKLQkJaWYgKGlzRmFsc2Uoc3RyX3ZhbHVlKSkgewotCQkgIGIgPSBCb29sZWFuLkZBTFNFOwkKLQkJfQotCQllbHNlIHsKLQkJICBiID0gQm9vbGVhbi5UUlVFOwkJCi0JCX0KLQkJCi0JCXJzLmFkZChuZXcgWFNCb29sZWFuKGIuYm9vbGVhblZhbHVlKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRmFsc2UoU3RyaW5nIHN0cl92YWx1ZSkgewotCQlyZXR1cm4gc3RyX3ZhbHVlLmVxdWFscygiMCIpIHx8IHN0cl92YWx1ZS5lcXVhbHMoImZhbHNlIikgfHwKLQkJICAgIHN0cl92YWx1ZS5lcXVhbHMoIiswIikgfHwgc3RyX3ZhbHVlLmVxdWFscygiLTAiKSB8fAotCQkgICAgc3RyX3ZhbHVlLmVxdWFscygiMC4wRTAiKSB8fCBzdHJfdmFsdWUuZXF1YWxzKCJOYU4iKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlUeXBlIGFueVR5cGUsIFN0cmluZyBzdHJfdmFsdWUpIHsKLQkJcmV0dXJuIHN0cl92YWx1ZS5lcXVhbHMoIjAiKSB8fCBzdHJfdmFsdWUuZXF1YWxzKCIxIikgfHwgCi0JCQkgc3RyX3ZhbHVlLmVxdWFscygidHJ1ZSIpIHx8IHN0cl92YWx1ZS5lcXVhbHMoImZhbHNlIikgfHwKLQkJCSBhbnlUeXBlIGluc3RhbmNlb2YgTnVtZXJpY1R5cGU7Ci0JfQotCi0JLy8gY29tcGFyaXNvbnMKLQkvKioKLQkgKiBDb21wYXJpc29uIGZvciBlcXVhbGl0eSBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuCi0JICogcmVwcmVzZW50YXRpb24uIFJldHVybnMgdHJ1ZSBpZiBib3RoIHJlcHJlc2VudCBzYW1lIGJvb2xlYW4gdmFsdWUsIGZhbHNlCi0JICogb3RoZXJ3aXNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0JICogICAgICAgICAgICB3aXRoLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eQotCSAqICAgICAgICAgY29tcGFyaXNvbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNCb29sZWFuIGJhcmcgPSAoWFNCb29sZWFuKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTQm9vbGVhbi5jbGFzcyk7Ci0KLQkJcmV0dXJuIHZhbHVlKCkgPT0gYmFyZy52YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbiByZXByZXNlbnRhdGlvbi4gUmV0dXJucwotCSAqIHRydWUgaWYgdGhpcyBYU0Jvb2xlYW4gcmVwcmVzZW50cyB0cnVlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotCSAqIHJlcHJlc2VudHMgZmFsc2UuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0JICogICAgICAgICAgICB3aXRoLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotCSAqICAgICAgICAgY29tcGFyaXNvbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGd0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNCb29sZWFuIGJhcmcgPSAoWFNCb29sZWFuKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTQm9vbGVhbi5jbGFzcyk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQlpZiAodmFsdWUoKSAmJiAhYmFyZy52YWx1ZSgpKQotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhlIHN1cHBsaWVkIGFuZCB0aGlzIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uIFJldHVybnMKLQkgKiB0cnVlIGlmIHRoaXMgWFNCb29sZWFuIHJlcHJlc2VudHMgZmFsc2UgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0JICogcmVwcmVzZW50cyB0cnVlLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgdG8gY29tcGFyZQotCSAqICAgICAgICAgICAgd2l0aC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gTmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUKLQkgKiAgICAgICAgIGNvbXBhcmlzb24KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTQm9vbGVhbiBiYXJnID0gKFhTQm9vbGVhbikgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywKLQkJCQlYU0Jvb2xlYW4uY2xhc3MpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLQkJaWYgKCF2YWx1ZSgpICYmIGJhcmcudmFsdWUoKSkKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQnl0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0J5dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlmMzA0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQnl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjM5IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6Ynl0ZSBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgWFNCeXRlIGV4dGVuZHMgWFNTaG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0JZVEUgPSAieHM6Ynl0ZSI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNCeXRlKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBieXRlIHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIEJ5dGUgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTQnl0ZShCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Ynl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19CWVRFOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJieXRlIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAnYnl0ZScgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgYnl0ZSBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnYnl0ZScgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgYnl0ZS4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKC0xMjhMKTsKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDEyN0wpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU0J5dGUoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MmI2NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0NzkyIC0gaW1wcm92ZW1lbnRzIHRvIHhzOmRhdGUgY29uc3RydWN0b3IgZnVuY3Rpb24uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCBjYXN0aW5nIGlzc3VlLiAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gZml4IGRhdGVzIGZvciBjb21wYXJpc29uIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogUmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIG9mIHRoZSBmb3JtIHllYXItbW9udGgtZGF5IGFuZCBvcHRpb25hbCB0aW1lem9uZQotICovCi1wdWJsaWMgY2xhc3MgWFNEYXRlIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LCBDbXBHdCwKLQotTWF0aE1pbnVzLCBNYXRoUGx1cywKLQotQ2xvbmVhYmxlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfREFURSA9ICJ4czpkYXRlIjsKLQlwcml2YXRlIENhbGVuZGFyIF9jYWxlbmRhcjsKLQlwcml2YXRlIGJvb2xlYW4gX3RpbWV6b25lZDsKLQlwcml2YXRlIFhTRHVyYXRpb24gX3R6OwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgYSBzdXBwbGllZCBkYXRlCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgVGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGhlIHRpbWUgem9uZSBvZiB0aGUgZGF0ZSB0byBiZSBzdG9yZWQuCi0JICovCi0JcHVibGljIFhTRGF0ZShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCi0JCV90eiA9IHR6OwotCQlpZiAodHogPT0gbnVsbCkKLQkJCV90aW1lem9uZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF0ZQotCSAqLwotCXB1YmxpYyBYU0RhdGUoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRhdGUiIHdoaWNoIGlzIHRoZSBkYXRheXBlIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJkYXRlIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIEEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb24KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLQkJQ2FsZW5kYXIgYyA9IChDYWxlbmRhcikgY2FsZW5kYXIoKS5jbG9uZSgpOwotCQlYU0R1cmF0aW9uIHQgPSB0eigpOwotCi0JCWlmICh0ICE9IG51bGwpCi0JCQl0ID0gKFhTRHVyYXRpb24pIHQuY2xvbmUoKTsKLQotCQlyZXR1cm4gbmV3IFhTRGF0ZShjLCB0KTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIChvZiB0aGUgZm9ybSB5ZWFyLW1vbnRoLWRheSBvcgotCSAqIHllYXItbW9udGgtZGF5K3RpbWV6b25lKSBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YKLQkgKiBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0JICogQHJldHVybiBUaGUgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RhdGUgcGFyc2VfZGF0ZShTdHJpbmcgc3RyKSB7Ci0KLQkJU3RyaW5nIGRhdGUgPSAiIjsKLQkJU3RyaW5nIHRpbWUgPSAiVDAwOjAwOjAwLjAiOwotCi0JCWludCBpbmRleCA9IHN0ci5pbmRleE9mKCcrJywgMSk7Ci0JCWlmIChpbmRleCA9PSAtMSkgewotCQkJaW5kZXggPSBzdHIuaW5kZXhPZignLScsIDEpOwotCQkJaWYgKGluZGV4ID09IC0xKQotCQkJCXJldHVybiBudWxsOwotCQkJaW5kZXggPSBzdHIuaW5kZXhPZignLScsIGluZGV4ICsgMSk7Ci0JCQlpZiAoaW5kZXggPT0gLTEpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgaW5kZXggKyAxKTsKLQkJfQotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCdaJywgMSk7Ci0JCWlmIChpbmRleCAhPSAtMSkgewotCQkJZGF0ZSA9IHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJLy8gaGVyZSB3ZSBnbwotCQkJZGF0ZSArPSB0aW1lOwotCQkJZGF0ZSArPSBzdHIuc3Vic3RyaW5nKGluZGV4LCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UgewotCQkJZGF0ZSA9IHN0ciArIHRpbWU7Ci0JCX0KLQotCQkvLyBzb3JyeSBhZ2FpbiA9RAotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNEYXRlKGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgdmFsdWUgaW4KLQkgKiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgdmFsdWUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkYXRlIHZhbHVlIHN1cHBsaWVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJWFNEYXRlIGR0ID0gY2FzdERhdGUoYWF0KTsKLQotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKGR0KTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55VHlwZSBhYXQpIHsKLQotCQkvLyBXZSBtaWdodCBiZSBhYmxlIHRvIGNhc3QgdGhlc2UuCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMKLQkJCQl8fCBhYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJcmV0dXJuIHRydWU7Ci0KLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgWFNEYXRlIGNhc3REYXRlKEFueVR5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCVhTRGF0ZSBkYXRlID0gKFhTRGF0ZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0RhdGUoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCVhTRGF0ZVRpbWUgZGF0ZVRpbWUgPSAoWFNEYXRlVGltZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0RhdGUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgZGF0ZVRpbWUudHooKSk7Ci0JCX0KLQotCQlyZXR1cm4gcGFyc2VfZGF0ZShhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSB5ZWFyIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgeWVhciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IHllYXIoKSB7Ci0JCWludCB5ID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5ZRUFSKTsKLQkJaWYgKF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuRVJBKSA9PSBHcmVnb3JpYW5DYWxlbmRhci5CQykKLQkJCXkgKj0gLTE7Ci0KLQkJcmV0dXJuIHk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgbW9udGggdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtb250aCgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgZGF5KCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZGF0ZSBoYXMgYW4gb3B0aW9uYWwgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIGl0Ci0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZS4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCUNhbGVuZGFyIGFkanVzdEZvcnRpbWV6b25lID0gY2FsZW5kYXIoKTsKLQotCQlpZiAoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkVSQSkgPT0gR3JlZ29yaWFuQ2FsZW5kYXIuQkMpIHsKLQkJCXJldCArPSAiLSI7Ci0JCX0KLQotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5ZRUFSKSwgNCk7Ci0KLQkJcmV0ICs9ICItIjsKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChtb250aCgpLCAyKTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpLAotCQkJCTIpOwotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJaW50IGhycyA9IF90ei5ob3VycygpOwotCQkJaW50IG1pbiA9IF90ei5taW51dGVzKCk7Ci0JCQlkb3VibGUgc2VjcyA9IF90ei5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkJcmV0ICs9ICJaIjsKLQkJCX0gZWxzZSB7Ci0JCQkJU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkJaWYgKF90ei5uZWdhdGl2ZSgpKSB7Ci0JCQkJCXRab25lU3RyICs9ICItIjsKLQkJCQl9IGVsc2UgewotCQkJCQl0Wm9uZVN0ciArPSAiKyI7Ci0JCQkJfQotCQkJCXRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOwotCQkJCXRab25lU3RyICs9ICI6IjsKLQkJCQl0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQotCQkJCXJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cml2ZSB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmRhdGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0RBVEU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBDYWxlbmRhciBjYWxlbmRhcigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQotCi0JLy8gY29tcGFyaXNvbnMKLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvCi0JICogYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gZGF0ZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdCBwb2ludCBpbiB0aW1lLgotCSAqICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlIHZhbCA9IChYU0RhdGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF0ZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuZXF1YWxzKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZSB2YWwgPSAoWFNEYXRlKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU0RhdGUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmJlZm9yZSh0aGF0Y2FsKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvIGFjY291bnQpCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgbGllcyBhZnRlciB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZSB2YWwgPSAoWFNEYXRlKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU0RhdGUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmFmdGVyKHRoYXRjYWwpOwotCX0KLQotCS8vIFhYWCB0aGlzIGlzIGluY29ycmVjdCBbZXBvY2hdCi0JLyoqCi0JICogQ3VycmVudGx5IHVuc3VwcG9ydGVkIG1ldGhvZC4gUmV0cmlldmVzIHRoZSBkYXRlIGluIG1pbGxpc2Vjb25kcyBzaW5jZQotCSAqIHRoZSBiZWdpbmluZyBvZiBlcG9jaAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoCi0JICovCi0JcHVibGljIGRvdWJsZSB2YWx1ZSgpIHsKLQkJcmV0dXJuIGNhbGVuZGFyKCkuZ2V0VGltZUluTWlsbGlzKCkgLyAxMDAwLjA7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotCSAqIHNlcXVlbmNlIChYU0RhdGUsIFhTWWVhck1vbnRoRHVyYXRpb24gYW5kIFhTRGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0JICogdmFsaWQgb25lcykuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotCSAqICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotCSAqICAgICAgICAgICAgWFNEYXlUaW1lRHVyYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSB0d28KLQkgKiAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWFNZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotCSAqICAgICAgICAgICAgWFNEYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQgb2YKLQkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IGFyZy5maXJzdCgpOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNEYXRlKSAmJiAhKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikKLQkJCQkmJiAhKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RhdGUoYXJnKTsKLQkJfQotCQkKLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikgewotCQkJcmV0dXJuIG1pbnVzWFNZZWFyTW9udGhEdXJhdGlvbihhdCk7Ci0JCX0KLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNEYXlUaW1lRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBhdDsKLQotCQl0cnkgewotCQkJWFNEYXRlIHJlcyA9IChYU0RhdGUpIGNsb25lKCk7Ci0JCQl0cnkgewotCQkJCVhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbENhbCA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0JCQkJCQkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoCi0JCQkJCQkJCShHcmVnb3JpYW5DYWxlbmRhcikgY2FsZW5kYXIoKSk7Ci0JCQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0JCQkJCQkubmV3RHVyYXRpb24odmFsLnN0cmluZ192YWx1ZSgpKTsKLQkJCQl4bWxDYWwuYWRkKGR0ZHVyYXRpb24ubmVnYXRlKCkpOwotCQkJCXJlcyA9IG5ldyBYU0RhdGUoeG1sQ2FsLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgcmVzLnR6KCkpOwotCQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0KLQkJCX0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBleCkgewotCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBtaW51c1hTWWVhck1vbnRoRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBhdDsKLQkJdHJ5IHsKLQkJCVhTRGF0ZSByZXMgPSAoWFNEYXRlKSBjbG9uZSgpOwotCi0JCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTU9OVEgsIHZhbC5tb250aFZhbHVlKCkgKiAtMSk7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXgpIHsKLQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU0RhdGUoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlIHZhbCA9IChYU0RhdGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF0ZS5jbGFzcyk7Ci0JCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJQ2FsZW5kYXIgdGhpc0NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQkJQ2FsZW5kYXIgdGhhdENhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCQlsb25nIGR1cmF0aW9uID0gdGhpc0NhbC5nZXRUaW1lSW5NaWxsaXMoKQotCQkJCQktIHRoYXRDYWwuZ2V0VGltZUluTWlsbGlzKCk7Ci0JCQlkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24oZHVyYXRpb24pOwotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KFhTRGF5VGltZUR1cmF0aW9uCi0JCQkJCS5wYXJzZURURHVyYXRpb24oZHRkdXJhdGlvbi50b1N0cmluZygpKSk7Ci0KLQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLQkgKiBzZXF1ZW5jZSAoWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUgb25seSB2YWxpZAotCSAqIG9uZXMpLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLQkgKiAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdAotCSAqICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZC4KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbWludXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJaWYgKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikgewotCQkJCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIGF0OwotCi0JCQkJWFNEYXRlIHJlcyA9IChYU0RhdGUpIGNsb25lKCk7Ci0KLQkJCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTU9OVEgsIHZhbC5tb250aFZhbHVlKCkpOwotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQkJWFNEYXlUaW1lRHVyYXRpb24gdmFsID0gKFhTRGF5VGltZUR1cmF0aW9uKSBhdDsKLQotCQkJCVhTRGF0ZSByZXMgPSAoWFNEYXRlKSBjbG9uZSgpOwotCi0JCQkJLy8gV2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgTnVtYmVyIG9mIGRheXMgZHJvcHBpbmcgdGhlIHJlc3QuCi0JCQkJaW50IGRheXMgPSB2YWwuZGF5cygpOwotCQkJCWlmICh2YWwubmVnYXRpdmUoKSkgewotCQkJCQlkYXlzICo9IC0xOwotCQkJCX0KLQkJCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkYXlzKTsKLQotCQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NSUxMSVNFQ09ORCwKLQkJCQkJCShpbnQpICh2YWwudGltZV92YWx1ZSgpICogMTAwMC4wKSk7Ci0JCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCQl9IGVsc2UgewotCQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJCX0KLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWEzM2YzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGltcHJvdmVkIHN0cmluZ192YWx1ZSgpIGltcGxlbWVudGF0aW9uIChtb3RpdmF0ZWQgYnkgYnVnLCAyODE4MjIpCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uLgotICogICAgICAgICAgICAgICAgICAtIGJ1ZyAyNjI3NjUgLSBhZGRpdGlvbmFsIHR3ZWFrIHRvIGNvbnZlcnQgMjQ6MDA6MDAgdG8gMDA6MDA6MDAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gZml4IGRhdGVzIGZvciBjb21wYXJpc29uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLlhNTEdyZWdvcmlhbkNhbGVuZGFyOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RhdGVUaW1lIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LCBDbXBHdCwKLQotTWF0aE1pbnVzLCBNYXRoUGx1cywKLQotQ2xvbmVhYmxlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfREFURV9USU1FID0gInhzOmRhdGVUaW1lIjsKLQlwcml2YXRlIENhbGVuZGFyIF9jYWxlbmRhcjsKLQlwcml2YXRlIGJvb2xlYW4gX3RpbWV6b25lZDsKLQlwcml2YXRlIFhTRHVyYXRpb24gX3R6OwotCi0JLyoqCi0JICogSW5pdGlhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIGEgc3VwcGxpZWQgZGF0ZSBhbmQgdGltZQotCSAqIAotCSAqIEBwYXJhbSBjYWwKLQkgKiAgICAgICAgICAgIFRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRoZSB0aW1lem9uZSBvZiB0aGUgZGF0ZSB0byBiZSBzdG9yZWQuCi0JICovCi0JcHVibGljIFhTRGF0ZVRpbWUoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQotCQlfdHogPSB0ejsKLQotCQlpZiAodHogPT0gbnVsbCkKLQkJCV90aW1lem9uZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCi0JICogCi0JICogQHJldHVybiBBIGNvcHkgb2YgdGhpcyBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0JCUNhbGVuZGFyIGMgPSAoQ2FsZW5kYXIpIGNhbGVuZGFyKCkuY2xvbmUoKTsKLQkJWFNEdXJhdGlvbiB0ID0gdHooKTsKLQotCQlpZiAodCAhPSBudWxsKQotCQkJdCA9IChYU0R1cmF0aW9uKSB0LmNsb25lKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0RhdGVUaW1lKGMsIHQpOwotCX0KLQotCS8qKgotCSAqIEluaXRpdGF0ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZQotCSAqLwotCXB1YmxpYyBYU0RhdGVUaW1lKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJkYXRlVGltZSIgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImRhdGVUaW1lIjsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB0byBzZWUgaWYgYSBjaGFyYWN0ZXIgaXMgbnVtZXJpYwotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBDaGFyYWN0ZXIgdG8gYmUgdGVzdGVkCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgbnVtZXJpYy4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc19kaWdpdChjaGFyIHgpIHsKLQkJaWYgKCcwJyA8PSB4ICYmIHggPD0gJzknKQotCQkJcmV0dXJuIHRydWU7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlIHllYXIsCi0JICogbW9udGggYW5kIGRheSBmcm9tIGl0Ci0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSBpcyB0aGUgeWVhciwgZWxlbWVudCAyIGlzIHRoZQotCSAqICAgICAgICAgbW9udGggYW5kIGVsZW1lbnQgMyBpcyB0aGUgZGF5Ci0JICovCi0JcHVibGljIHN0YXRpYyBpbnRbXSBwYXJzZV9kYXRlKFN0cmluZyBzdHIpIHsKLQkJaW50IHN0YXRlID0gMDsgLy8gMCBleHBlY3QgeWVhciBvciBtaW51cwotCQkvLyAxIGdldHRpbmcgeWVhcgotCQkvLyAyIGdldHRpbmcgbW9udGgKLQkJLy8gMyBnZXR0aW5nIGRheQotCi0JCWludFtdIHJldCA9IG5ldyBpbnRbM107Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyBpKyspCi0JCQlyZXRbaV0gPSAwOwotCi0JCVN0cmluZyB0b2tlbiA9ICIiOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKSB7Ci0JCQljaGFyIHggPSBzdHIuY2hhckF0KGkpOwotCi0JCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCQljYXNlIDA6Ci0JCQkJaWYgKGlzX2RpZ2l0KHgpKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJfSBlbHNlIGlmICh4ID09ICctJykgewotCQkJCQl0b2tlbiArPSB4OwotCQkJCX0gZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlzdGF0ZSA9IDE7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMToKLQkJCQkvLyB3ZSBnb3QgdGhlIHllYXIgaW4gdGhlb3J5Li4uCi0JCQkJaWYgKHggPT0gJy0nKSB7Ci0KLQkJCQkJLy8gY2hlY2sgb3V0IHRoZSB1bnNpZ25lZCB5ZWFyCi0JCQkJCVN0cmluZyB1eSA9IHRva2VuOwotCQkJCQlpZiAodXkuc3RhcnRzV2l0aCgiLSIpKQotCQkJCQkJdXkgPSB1eS5zdWJzdHJpbmcoMSwgdXkubGVuZ3RoKCkpOwotCQkJCQlpbnQgdXlsID0gdXkubGVuZ3RoKCk7Ci0KLQkJCQkJaWYgKHV5bCA8IDQpCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQotCQkJCQlpZiAodXlsID09IDQpIHsKLQkJCQkJCWlmICh1eS5jb21wYXJlVG8oIjAwMDAiKSA9PSAwKQotCQkJCQkJCXJldHVybiBudWxsOwotCQkJCQl9IGVsc2UgaWYgKHV5LmNoYXJBdCgwKSA9PSAnMCcpCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQotCQkJCQkvLyBzZW1tcyBnb29kIHRvIG1lCi0JCQkJCXJldFswXSA9IEludGVnZXIucGFyc2VJbnQodG9rZW4pOwotCQkJCQl0b2tlbiA9ICIiOwotCQkJCQlzdGF0ZSA9IDI7Ci0JCQkJfSBlbHNlIGlmIChpc19kaWdpdCh4KSkKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDI6Ci0JCQkJLy8gd2UgZ290IHRoZSBtb250aAotCQkJCWlmICh4ID09ICctJykgewotCQkJCQlpZiAodG9rZW4ubGVuZ3RoKCkgIT0gMikKLQkJCQkJCXJldHVybiBudWxsOwotCi0JCQkJCXJldFsxXSA9IEludGVnZXIucGFyc2VJbnQodG9rZW4pOwotCQkJCQl0b2tlbiA9ICIiOwotCQkJCQlzdGF0ZSA9IDM7Ci0JCQkJfSBlbHNlIGlmIChpc19kaWdpdCh4KSkKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM6Ci0JCQkJLy8gZ2V0dGluZyBkYXkKLQkJCQlpZiAoaXNfZGlnaXQoeCkpCi0JCQkJCXRva2VuICs9IHg7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCQlpZiAoc3RhdGUgIT0gMykKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdvdCB0aGUgZGF5Ci0JCWlmICh0b2tlbi5sZW5ndGgoKSAhPSAyKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0WzJdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvLyByZXR1cm4KLQkvLyBob3VyCi0JLy8gbWludXRlCi0JLy8gc2Vjb25kcwotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgaG91ciwKLQkgKiBtaW51dGUgYW5kIHNlY29uZHMgZnJvbSBpdAotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIEludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgaXMgdGhlIGhvdXIsIGVsZW1lbnQgMiBpcyB0aGUKLQkgKiAgICAgICAgIG1pbnV0ZSBhbmQgZWxlbWVudCAzIGlzIHRoZSBzZWNvbmRzCi0JICovCi0JcHVibGljIHN0YXRpYyBkb3VibGVbXSBwYXJzZV90aW1lKFN0cmluZyBzdHIpIHsKLQkJaW50IHN0YXRlID0gMDsgLy8gMCBnZXR0aW5nIG1pbnV0ZQotCQkvLyAxIGdldHRpbmcgaG91cgotCQkvLyAyIGdldHRpbmcgc2Vjb25kcyBbdGhlIHdob2xlIHBhcnRdCi0JCS8vIDMgZ2V0dGluZyBmcmFjdGlvbiBvZiBzZWNvbmRzCi0KLQkJZG91YmxlW10gcmV0ID0gbmV3IGRvdWJsZVszXTsKLQotCQlTdHJpbmcgdG9rZW4gPSAiIjsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKSB7Ci0JCQljaGFyIHggPSBzdHIuY2hhckF0KGkpOwotCi0JCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDE6Ci0JCQkJLy8gZ290IG1pbnV0ZSAvIGhvdXIKLQkJCQlpZiAoeCA9PSAnOicpIHsKLQkJCQkJaWYgKHRva2VuLmxlbmd0aCgpICE9IDIpCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJcmV0W3N0YXRlXSA9IEludGVnZXIucGFyc2VJbnQodG9rZW4pOwotCQkJCQlzdGF0ZSsrOwotCQkJCQl0b2tlbiA9ICIiOwotCQkJCX0gZWxzZSBpZiAoaXNfZGlnaXQoeCkpCi0JCQkJCXRva2VuICs9IHg7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAyOgotCQkJCWlmIChpc19kaWdpdCh4KSkgewotCQkJCQl0b2tlbiArPSB4OwotCQkJCQlpZiAodG9rZW4ubGVuZ3RoKCkgPiAyKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfSBlbHNlIGlmICh4ID09ICcuJykgewotCQkJCQl0b2tlbiArPSB4OwotCQkJCQlzdGF0ZSA9IDM7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM6Ci0JCQkJaWYgKGlzX2RpZ2l0KHgpKQotCQkJCQl0b2tlbiArPSB4OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQl9Ci0JCWlmICghKHN0YXRlID09IDMgfHwgc3RhdGUgPT0gMikpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQkvLyBnZXQgc2Vjb25kcwotCQkvLyB0aGlzIGlzIHdob2xlICsgZG90ICsgbm90aGluZyBlbHNlCi0JCWlmICh0b2tlbi5sZW5ndGgoKSA9PSAzKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0WzJdID0gRG91YmxlLnBhcnNlRG91YmxlKHRva2VuKTsKLQotCQlpZiAocmV0WzBdID09IDI0LjApIHsKLQkJCXJldFswXSA9IDAwLjA7Ci0JCX0KLQotCQkvLyBYWFggc2FuaXR5IGNoZWNrIGFyZ3MuLi4KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvLyByZXR1cm5zCi0JLy8gcG9zaXRpdmUvbmVnYXRpdmUKLQkvLyBob3VyCi0JLy8gbWludXRlCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZQotCSAqIHRpbWV6b25lIGZyb20gaXQKLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0JICogQHJldHVybiBJbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIHJlcHJlc2VudHMgd2hldGhlciB0aGUKLQkgKiAgICAgICAgIHRpbWV6b25lIGlzIGFoZWFkIG9yIGJlaGluZCBHTVQsIGVsZW1lbnQgMiBpcyB0aGUgaG91cgotCSAqICAgICAgICAgZGlzcGxhY2VtZW50IGFuZCBlbGVtZW50IDMgaXMgdGhlIG1pbnV0ZSBkaXNwbGFjZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBpbnRbXSBwYXJzZV90aW1lem9uZShTdHJpbmcgc3RyKSB7Ci0JCWludFtdIHJldCA9IG5ldyBpbnRbM107Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyBpKyspCi0JCQlyZXRbaV0gPSAwOwotCQlyZXRbMF0gPSAxOwotCi0JCWlmIChzdHIuZXF1YWxzKCJaIikpIHsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQkvLyBnZXQgaW5pdGlhbCBwbHVzL21pbnVzCi0JCWlmIChzdHIuc3RhcnRzV2l0aCgiKyIpKQotCQkJcmV0WzBdID0gMTsKLQkJZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIi0iKSkKLQkJCXJldFswXSA9IC0xOwotCQllbHNlCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlzdHIgPSBzdHIuc3Vic3RyaW5nKDEsIHN0ci5sZW5ndGgoKSk7Ci0KLQkJaWYgKHN0ci5sZW5ndGgoKSAhPSAoMiArIDEgKyAyKSkKLQkJCXJldHVybiBudWxsOwotCi0JCXRyeSB7Ci0JCQlyZXRbMV0gPSBJbnRlZ2VyLnBhcnNlSW50KHN0ci5zdWJzdHJpbmcoMCwgMikpOwotCQkJcmV0WzJdID0gSW50ZWdlci5wYXJzZUludChzdHIuc3Vic3RyaW5nKDMsIDUpKTsKLQotCQkJLy8gQWNjb3JkaW5nIHRvIHNjaGVtYSBzcGVjLCB0aW1lem9uZSBpcyBsaW1pdGVkIHRvCi0JCQkvLyB0aGlzLi4uIFt3ZWxsLi4gYWxtb3N0Li4uXQotCQkJaWYgKHJldFsxXSA+IDE0KQotCQkJCXJldHVybiBudWxsOwotCQkJaWYgKHJldFsyXSA+IDU5KQotCQkJCXJldHVybiBudWxsOwotCi0JCQlyZXR1cm4gcmV0OwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXJyKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIEF0dGVtcHRzIHRvIHNldCBhIHBhcnRpY3VsYXIgZmllbGQgaW4gdGhlIENhbGVuZGFyCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgVGhlIENhbGVuZGFyIG9iamVjdCB0byBzZXQgdGhlIGZpZWxkIGluCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIFRoZSBmaWVsZCB0byBzZXQKLQkgKiBAcGFyYW0gdmFsCi0JICogICAgICAgICAgICBUaGUgdmFsdWUgdG8gc2V0IHRoZSBmaWVsZCB0bwotCSAqIEByZXR1cm4gVHJ1ZSBpZiBzdWNjZXNzZnVsbHkgc2V0LiBGYWxzZSBvdGhlcndpc2UgKGR1ZSB0byBvdXQgb2YgYm91bmRzCi0JICogICAgICAgICBmb3IgdGhhdCBmaWVsZCkKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIHNldF9pdGVtKENhbGVuZGFyIGNhbCwgaW50IGl0ZW0sIGludCB2YWwpIHsKLQkJaW50IG1pbiA9IGNhbC5nZXRBY3R1YWxNaW5pbXVtKGl0ZW0pOwotCi0JCWlmICh2YWwgPCBtaW4pCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaW50IG1heCA9IGNhbC5nZXRBY3R1YWxNYXhpbXVtKGl0ZW0pOwotCi0JCWlmICh2YWwgPiBtYXgpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJY2FsLnNldChpdGVtLCB2YWwpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0JICogWFNEYXRlVGltZSBvYmplY3QgdXNpbmcgdGhhdCBpbmZvcm1hdGlvbgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIChhbmQgb3B0aW9uYWwKLQkgKiAgICAgICAgIHRpbWV6b25lKQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEYXRlVGltZSBwYXJzZURhdGVUaW1lKFN0cmluZyBzdHIpIHsKLQkJLy8gb2ggbm8uLi4gbm90IGFnYWluCi0KLQkJLy8gb2sgaXRzIHRocmVlIHRoaW5nczoKLQkJLy8gZGF0ZSBUIHRpbWUgdGltZXpvbmUKLQotCQlpbnQgaW5kZXggPSBzdHIuaW5kZXhPZignVCcpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQkvLyBzcGxpdCBkYXRlIGFuZCByZXN0Li4uCi0JCVN0cmluZyBkYXRlID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCVN0cmluZyB0aW1lID0gc3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHN0ci5sZW5ndGgoKSk7Ci0JCVN0cmluZyB0aW1lem9uZSA9IG51bGw7Ci0KLQkJLy8gY2hlY2sgZm9yIHRpbWV6b25lCi0JCWluZGV4ID0gdGltZS5pbmRleE9mKCcrJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gdGltZS5pbmRleE9mKCctJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gdGltZS5pbmRleE9mKCdaJyk7Ci0JCWlmIChpbmRleCAhPSAtMSkgewotCQkJdGltZXpvbmUgPSB0aW1lLnN1YnN0cmluZyhpbmRleCwgdGltZS5sZW5ndGgoKSk7Ci0JCQl0aW1lID0gdGltZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQl9Ci0KLQkJLy8gZ2V0IGRhdGUKLQkJaW50IGRbXSA9IHBhcnNlX2RhdGUoZGF0ZSk7Ci0JCWlmIChkID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQkvLyBTQU5JVFkgQ0hFWAotCQlUaW1lWm9uZSBVVEMgPSBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiVVRDIik7Ci0JCUdyZWdvcmlhbkNhbGVuZGFyIGNhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihVVEMpOwotCi0JCS8vIHllYXIKLQkJaW50IHllYXIgPSBkWzBdOwotCQlpZiAoeWVhciA8IDApIHsKLQkJCXllYXIgKj0gLTE7Ci0JCQljYWwuc2V0KENhbGVuZGFyLkVSQSwgR3JlZ29yaWFuQ2FsZW5kYXIuQkMpOwotCQl9IGVsc2UgewotCQkJY2FsLnNldChDYWxlbmRhci5FUkEsIEdyZWdvcmlhbkNhbGVuZGFyLkFEKTsKLQkJfQotCi0JCS8vIHRoaXMgaXMgYSBuaWNlIGJ1Zy4uLi4KLQkJLy8gaWYgc2F5IHRoZSBjdXJyZW50IGRheSBpcyAyOS4uLgotCQkvLyB0aGVuIGlmIHdlIHNldCB0aGUgbW9udGggdG8gZmViIGZvciBleGFtcGxlLCBhbmQgMjkgZG9lc24ndAotCQkvLyBleGlzdCBpbiB0aGF0IHllYXIsIHRoZW4gdGhlIGRhdGUgc2NyZXdzIHVwLgotCQljYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCwgMik7Ci0JCWNhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIDIpOwotCi0JCWlmICghc2V0X2l0ZW0oY2FsLCBDYWxlbmRhci5ZRUFSLCB5ZWFyKSkKLQkJCXJldHVybiBudWxsOwotCi0JCWlmICghc2V0X2l0ZW0oY2FsLCBDYWxlbmRhci5NT05USCwgZFsxXSAtIDEpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLkRBWV9PRl9NT05USCwgZFsyXSkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQkvLyBnZXQgdGltZQotCQlkb3VibGUgdFtdID0gcGFyc2VfdGltZSh0aW1lKTsKLQkJaWYgKHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCWlmICghc2V0X2l0ZW0oY2FsLCBDYWxlbmRhci5IT1VSX09GX0RBWSwgKGludCkgdFswXSkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIXNldF9pdGVtKGNhbCwgQ2FsZW5kYXIuTUlOVVRFLCAoaW50KSB0WzFdKSkKLQkJCXJldHVybiBudWxsOwotCi0JCWlmICghc2V0X2l0ZW0oY2FsLCBDYWxlbmRhci5TRUNPTkQsIChpbnQpIHRbMl0pKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJZG91YmxlIG1zID0gdFsyXSAtICgoaW50KSB0WzJdKTsKLQkJbXMgKj0gMTAwMDsKLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLk1JTExJU0VDT05ELCAoaW50KSBtcykpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQkvLyBnZXQgdGltZXpvbmUKLQkJaW50IHR6W10gPSBudWxsOwotCQlYU0R1cmF0aW9uIHR6ZCA9IG51bGw7Ci0JCWlmICh0aW1lem9uZSAhPSBudWxsKSB7Ci0JCQl0eiA9IHBhcnNlX3RpbWV6b25lKHRpbWV6b25lKTsKLQotCQkJaWYgKHR6ID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0KLQkJCXR6ZCA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigwLCB0elsxXSwgdHpbMl0sIDAuMCwgdHpbMF0gPCAwKTsKLQotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYU0RhdGVUaW1lKGNhbCwgdHpkKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIGFuZCB0aW1lCi0JICogdmFsdWUgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIGFuZCB0aW1lCi0JICogICAgICAgICAgICB2YWx1ZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRhdGUgYW5kIHRpbWUgdmFsdWUKLQkgKiAgICAgICAgIHN1cHBsaWVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbgotCQkJCXx8IGFhdCBpbnN0YW5jZW9mIFhTVGltZSB8fCBpc0dEYXRhVHlwZShhYXQpCi0JCQkJfHwgYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8IGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5Ci0JCQkJfHwgYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQlDYWxlbmRhclR5cGUgZHQgPSBjYXN0RGF0ZVRpbWUoYWF0KTsKLQotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKGR0KTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgQ2FsZW5kYXJUeXBlIGNhc3REYXRlVGltZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXRlVGltZShkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgZGF0ZVRpbWUudHooKSk7Ci0JCX0KLQotCQlyZXR1cm4gcGFyc2VEYXRlVGltZShhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSB5ZWFyIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgeWVhciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IHllYXIoKSB7Ci0JCWludCB5ID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5ZRUFSKTsKLQkJaWYgKF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuRVJBKSA9PSBHcmVnb3JpYW5DYWxlbmRhci5CQykKLQkJCXkgKj0gLTE7Ci0KLQkJcmV0dXJuIHk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgbW9udGggdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtb250aCgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgZGF5KCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBob3VyIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgaG91ciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IGhvdXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgbWludXRlIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgbWludXRlIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgbWludXRlKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NSU5VVEUpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBzZWNvbmRzIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgc2Vjb25kcyB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgZG91YmxlIHNlY29uZCgpIHsKLQkJZG91YmxlIHMgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLlNFQ09ORCk7Ci0KLQkJZG91YmxlIG1zID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NSUxMSVNFQ09ORCk7Ci0KLQkJbXMgLz0gMTAwMDsKLQotCQlzICs9IG1zOwotCQlyZXR1cm4gczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFBhZHMgdGhlIHN1cHBsaWVkIG51bWJlciB0byB0aGUgc3VwcGxpZWQgbnVtYmVyIG9mIGRpZ2l0cyBieSBhZGRpbmcgMCdzCi0JICogaW4gZnJvbnQgb2YgaXQKLQkgKiAKLQkgKiBAcGFyYW0gbnVtCi0JICogICAgICAgICAgICBOdW1iZXIgdGhhdCBzaSB0byBiZSBwYWRkZWQgKGlmIG5lY2Nlc3NheSkKLQkgKiBAcGFyYW0gbGVuCi0JICogICAgICAgICAgICBEZXNpcmVkIGxlbmd0aCBhZnRlciBwYWRkaW5nCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhZGRlZCBpbnRlZ2VyCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgcGFkX2ludChpbnQgbnVtLCBpbnQgbGVuKSB7Ci0JCVN0cmluZyByZXQgPSAiIjsKLQkJU3RyaW5nIHNudW0gPSAiIiArIG51bTsKLQotCQlpbnQgcGFkID0gbGVuIC0gc251bS5sZW5ndGgoKTsKLQotCQkvLyBzb3J0IG91dCB0aGUgbmVnYXRpdmUKLQkJaWYgKG51bSA8IDApIHsKLQkJCXJldCArPSAiLSI7Ci0JCQlzbnVtID0gc251bS5zdWJzdHJpbmcoMSwgc251bS5sZW5ndGgoKSk7Ci0JCQlwYWQrKzsKLQkJfQotCi0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHJldCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFkOyBpKyspIHsKLQkJCWJ1Zi5hcHBlbmQoIjAiKTsKLQkJfQotCQlidWYuYXBwZW5kKHNudW0pOwotCQlyZXQgPSBidWYudG9TdHJpbmcoKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCVN0cmluZyByZXQgPSAiIjsKLQotCQlDYWxlbmRhciBhZGp1c3RGb3J0aW1lem9uZSA9IGNhbGVuZGFyKCk7Ci0KLQkJaWYgKGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKSB7Ci0JCQlyZXQgKz0gIi0iOwotCQl9Ci0KLQkJcmV0ICs9IHBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLllFQVIpLCA0KTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gcGFkX2ludChtb250aCgpLCAyKTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gcGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSwgMik7Ci0KLQkJLy8gdGltZQotCQlyZXQgKz0gIlQiOwotCi0JCXJldCArPSBwYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSksIDIpOwotCi0JCXJldCArPSAiOiI7Ci0JCXJldCArPSBwYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5NSU5VVEUpLCAyKTsKLQotCQlyZXQgKz0gIjoiOwotCQlpbnQgaXNlY29uZCA9IChpbnQpIHNlY29uZCgpOwotCQlkb3VibGUgc2VjID0gc2Vjb25kKCk7Ci0KLQkJaWYgKChzZWMgLSAoaXNlY29uZCkpID09IDAuMCkKLQkJCXJldCArPSBwYWRfaW50KGlzZWNvbmQsIDIpOwotCQllbHNlIHsKLQkJCWlmIChzZWMgPCAxMC4wKQotCQkJCXJldCArPSAiMCIgKyBzZWM7Ci0JCQllbHNlCi0JCQkJcmV0ICs9IHNlYzsKLQkJfQotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJaW50IGhycyA9IF90ei5ob3VycygpOwotCQkJaW50IG1pbiA9IF90ei5taW51dGVzKCk7Ci0JCQlkb3VibGUgc2VjcyA9IF90ei5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkJcmV0ICs9ICJaIjsKLQkJCX0gZWxzZSB7Ci0JCQkJU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkJaWYgKF90ei5uZWdhdGl2ZSgpKSB7Ci0JCQkJCXRab25lU3RyICs9ICItIjsKLQkJCQl9IGVsc2UgewotCQkJCQl0Wm9uZVN0ciArPSAiKyI7Ci0JCQkJfQotCQkJCXRab25lU3RyICs9IHBhZF9pbnQoaHJzLCAyKTsKLQkJCQl0Wm9uZVN0ciArPSAiOiI7Ci0JCQkJdFpvbmVTdHIgKz0gcGFkX2ludChtaW4sIDIpOwotCi0JCQkJcmV0ICs9IHRab25lU3RyOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZGF0ZVRpbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0RBVEVfVElNRTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8vIGNvbXBhcmlzb25zCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgYW5kIHRpbWVzICh0YWtpbmcKLQkgKiB0aW1lem9uZXMgaW50byBhY2NvdW50KQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gZGF0ZXMgYW5kIHRpbWVzIGFyZSByZXByZXNlbnQgdGhlIHNhbWUgZXhhY3QKLQkgKiAgICAgICAgIHBvaW50IGluIHRpbWUuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZVRpbWUgdmFsID0gKFhTRGF0ZVRpbWUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXRlVGltZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuZXF1YWxzKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotCSAqIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBiZWZvcmUgdGhlIGRhdGUgYW5kIHRpbWUKLQkgKiAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGVUaW1lIHZhbCA9IChYU0RhdGVUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRGF0ZVRpbWUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmJlZm9yZSh0aGF0Y2FsKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLQkgKiBpbnRvIGFjY291bnQpCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGFuZCB0aW1lIGxpZXMgYWZ0ZXIgdGhlIGRhdGUgYW5kIHRpbWUKLQkgKiAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGVUaW1lIHZhbCA9IChYU0RhdGVUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRGF0ZVRpbWUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmFmdGVyKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvLyBYWFggdGhpcyBpcyBpbmNvcnJlY3QgW2Vwb2NoXQotCS8qKgotCSAqIEN1cnJlbnRseSB1bnN1cHBvcnRlZCBtZXRob2QuIFJldHJpZXZlcyB0aGUgZGF0ZSBpbiBtaWxsaXNlY29uZHMgc2luY2UKLQkgKiB0aGUgYmVnaW5pbmcgb2YgZXBvY2gKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGJlZ2luaW5nIG9mIHRoZSBlcG9jaAotCSAqLwotCXB1YmxpYyBkb3VibGUgdmFsdWUoKSB7Ci0JCXJldHVybiBjYWxlbmRhcigpLmdldFRpbWVJbk1pbGxpcygpIC8gMTAwMC4wOwotCX0KLQotCS8vIG1hdGgKLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0JICogc2VxdWVuY2UgKFhTRGF0ZVRpbWUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlCi0JICogb25seSB2YWxpZCBvbmVzKS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0JICogICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGVUaW1lLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotCSAqICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UgdHdvCi0JICogICAgICAgICAgICBkYXRlcy4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0JICogICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlVGltZSBvZiB0aGUKLQkgKiAgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0JICogICAgICAgICAgICBzdXBwbGllZC4KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbWludXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSAmJiAhKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikKLQkJCQkmJiAhKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pKSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJcmV0dXJuIG1pbnVzWFNEYXRlVGltZShhcmcpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikgewotCQkJcmV0dXJuIG1pbnVzWFNZZWFyTW9udGhEdXJhdGlvbihhdCk7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikgewotCQkJcmV0dXJuIG1pbnVzWFNEYXlUaW1lRHVyYXRpb24oYXQpOwotCQl9Ci0JCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0KLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNEYXRlVGltZShSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlVGltZSB2YWwgPSAoWFNEYXRlVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywKLQkJCQlYU0RhdGVUaW1lLmNsYXNzKTsKLQotCQlEdXJhdGlvbiBkdGR1cmF0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUNhbGVuZGFyIHRoaXNDYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJCUNhbGVuZGFyIHRoYXRDYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCQkJbG9uZyBkdXJhdGlvbiA9IHRoaXNDYWwuZ2V0VGltZUluTWlsbGlzKCkKLQkJCQkJLSB0aGF0Q2FsLmdldFRpbWVJbk1pbGxpcygpOwotCQkJZHRkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0JCQkJCS5uZXdEdXJhdGlvbihkdXJhdGlvbik7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoWFNEYXlUaW1lRHVyYXRpb24KLQkJCQkJLnBhcnNlRFREdXJhdGlvbihkdGR1cmF0aW9uLnRvU3RyaW5nKCkpKTsKLQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNEYXlUaW1lRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBhdDsKLQotCQl0cnkgewotCQkJWFNEYXRlVGltZSByZXMgPSAoWFNEYXRlVGltZSkgY2xvbmUoKTsKLQotCQkJdHJ5IHsKLQkJCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWwgPSBEYXRhdHlwZUZhY3RvcnkKLQkJCQkJCS5uZXdJbnN0YW5jZSgpCi0JCQkJCQkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKSBjYWxlbmRhcigpKTsKLQkJCQlEdXJhdGlvbiBkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkKLQkJCQkJCS5uZXdEdXJhdGlvbih2YWwuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCXhtbENhbC5hZGQoZHRkdXJhdGlvbi5uZWdhdGUoKSk7Ci0JCQkJcmVzID0gbmV3IFhTRGF0ZVRpbWUoeG1sQ2FsLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgcmVzLnR6KCkpOwotCQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0KLQkJCX0KLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGV4KSB7Ci0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNZZWFyTW9udGhEdXJhdGlvbihBbnlUeXBlIGF0KSB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIGF0OwotCi0JCXRyeSB7Ci0JCQlYU0RhdGVUaW1lIHJlcyA9IChYU0RhdGVUaW1lKSBjbG9uZSgpOwotCi0JCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTU9OVEgsIHZhbC5tb250aFZhbHVlKCkgKiAtMSk7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXgpIHsKLQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlVGltZSBhbmQgYSBzdXBwbGllZAotCSAqIHJlc3VsdCBzZXF1ZW5jZSAoWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUgb25seQotCSAqIHZhbGlkIG9uZXMpLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLQkgKiAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGVUaW1lIG9mIHRoZQotCSAqICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiAgICAgICAgICAgIHN1cHBsaWVkLgotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtaW51cyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQW55VHlwZSBhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgYXQ7Ci0KLQkJCQlYU0RhdGVUaW1lIHJlcyA9IChYU0RhdGVUaW1lKSBjbG9uZSgpOwotCi0JCQkJcmVzLmNhbGVuZGFyKCkuYWRkKENhbGVuZGFyLk1PTlRILCB2YWwubW9udGhWYWx1ZSgpKTsKLQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikgewotCQkJCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIGF0OwotCi0JCQkJWFNEYXRlVGltZSByZXMgPSAoWFNEYXRlVGltZSkgY2xvbmUoKTsKLQotCQkJCXRyeSB7Ci0JCQkJCVhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbENhbCA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0JCQkJCQkJLm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKAotCQkJCQkJCQkJKEdyZWdvcmlhbkNhbGVuZGFyKSBjYWxlbmRhcigpKTsKLQkJCQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0JCQkJCQkJLm5ld0R1cmF0aW9uKHZhbC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJCXhtbENhbC5hZGQoZHRkdXJhdGlvbik7Ci0JCQkJCXJlcyA9IG5ldyBYU0RhdGVUaW1lKHhtbENhbC50b0dyZWdvcmlhbkNhbGVuZGFyKCksIHJlcy50eigpKTsKLQkJCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQotCQkJCX0KLQotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQkJfSBlbHNlIHsKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCQl9Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RheVRpbWVEdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RheVRpbWVEdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODQwZWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXlUaW1lRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3OTM3NyAtIGltcHJvdmVtZW50cyB0byBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gb3BlcmF0aW9ucwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB4czpkYXlUaW1lRHVyYXRpb24uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguUm91bmRpbmdNb2RlOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGF5VGltZUR1cmF0aW9uIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RheVRpbWVEdXJhdGlvbiBleHRlbmRzIFhTRHVyYXRpb24gaW1wbGVtZW50cyBDbXBFcSwgQ21wTHQsCi0JCUNtcEd0LAotCi0JCU1hdGhQbHVzLCBNYXRoTWludXMsIE1hdGhUaW1lcywgTWF0aERpdiwKLQotCQlDbG9uZWFibGUgewotCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfREFZX1RJTUVfRFVSQVRJT04gPSAieHM6ZGF5VGltZUR1cmF0aW9uIjsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLiBJZiBtb3JlIHRoYW4gMjQgaG91cnMgaXMKLQkgKiBzdXBwbGllZCwgdGhlIG51bWJlciBvZiBkYXlzIGlzIGFkanVzdGVkIGFjb3JkaW5nbHkuIFRoZSBzYW1lIG9jY3VycyBmb3IKLQkgKiBtaW51dGVzIGFuZCBzZWNvbmRzCi0JICogCi0JICogQHBhcmFtIGRheXMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBkYXlzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBob3VycwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIGhvdXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBtaW51dGVzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgbWludXRlcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gc2Vjb25kcwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIG5lZ2F0aXZlCi0JICogICAgICAgICAgICBUcnVlIGlmIHRoaXMgZHVyYXRpb24gb2YgdGltZSByZXByZXNlbnRzIGEgYmFja3dhcmRzIHBhc3NhZ2UKLQkgKiAgICAgICAgICAgIHRocm91Z2ggdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIFhTRGF5VGltZUR1cmF0aW9uKGludCBkYXlzLCBpbnQgaG91cnMsIGludCBtaW51dGVzLCBkb3VibGUgc2Vjb25kcywKLQkJCWJvb2xlYW4gbmVnYXRpdmUpIHsKLQkJc3VwZXIoMCwgMCwgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMKLQkgKiAKLQkgKiBAcGFyYW0gc2VjcwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKi8KLQlwdWJsaWMgWFNEYXlUaW1lRHVyYXRpb24oZG91YmxlIHNlY3MpIHsKLQkJc3VwZXIoMCwgMCwgMCwgMCwgMCwgTWF0aC5hYnMoc2VjcyksIHNlY3MgPCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDBkYXlzLCAwaG91cnMsIDBtaW51dGVzLCAwc2Vjb25kcykKLQkgKi8KLQlwdWJsaWMgWFNEYXlUaW1lRHVyYXRpb24oKSB7Ci0JCXN1cGVyKDAsIDAsIDAsIDAsIDAsIDAuMCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYSB0aW1lIGR1cmF0aW9uCi0JICogCi0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIEB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG5ldyBYU0RheVRpbWVEdXJhdGlvbihkYXlzKCksIGhvdXJzKCksIG1pbnV0ZXMoKSwgc2Vjb25kcygpLAotCQkJCW5lZ2F0aXZlKCkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQkKLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkKLQkJWFNEdXJhdGlvbiBkdGQgPSBjYXN0RGF5VGltZUR1cmF0aW9uKGFhdCk7Ci0JCi0JCWlmIChkdGQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCi0JCXJzLmFkZChkdGQpOwotCQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgWFNEdXJhdGlvbiBjYXN0RGF5VGltZUR1cmF0aW9uKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uKSB7Ci0JCQlYU0R1cmF0aW9uIGR1cmF0aW9uID0gKFhTRHVyYXRpb24pIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXlUaW1lRHVyYXRpb24oZHVyYXRpb24uZGF5cygpLCBkdXJhdGlvbi5ob3VycygpLCBkdXJhdGlvbi5taW51dGVzKCksIGR1cmF0aW9uLnNlY29uZHMoKSwgZHVyYXRpb24ubmVnYXRpdmUoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZURURHVyYXRpb24oYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZQotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEdXJhdGlvbiBwYXJzZURURHVyYXRpb24oU3RyaW5nIHN0cikgewotCQlib29sZWFuIG5lZ2F0aXZlID0gZmFsc2U7Ci0JCWludCBkYXlzID0gMDsKLQkJaW50IGhvdXJzID0gMDsKLQkJaW50IG1pbnV0ZXMgPSAwOwotCQlkb3VibGUgc2Vjb25kcyA9IDA7Ci0KLQkJLy8gc3RyaW5nIGZvbGxvd2luZyB0aGUgUAotCQlTdHJpbmcgcHN0ciA9IG51bGw7Ci0JCVN0cmluZyB0c3RyID0gbnVsbDsKLQotCQkvLyBnZXQgdGhlIG5lZ2F0aXZlIGFuZCBwc3RyCi0JCWlmIChzdHIuc3RhcnRzV2l0aCgiLVAiKSkgewotCQkJbmVnYXRpdmUgPSB0cnVlOwotCQkJcHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiUCIpKSB7Ci0JCQluZWdhdGl2ZSA9IGZhbHNlOwotCQkJcHN0ciA9IHN0ci5zdWJzdHJpbmcoMSwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gbnVsbDsKLQotCQl0cnkgewotCQkJLy8gZ2V0IHRoZSBkYXlzCi0JCQlpbnQgaW5kZXggPSBwc3RyLmluZGV4T2YoJ0QnKTsKLQkJCWJvb2xlYW4gZGlkX3NvbWV0aGluZyA9IGZhbHNlOwotCi0JCQkvLyBubyBELi4uIG11c3QgaGF2ZSBUCi0JCQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJCQlpZiAocHN0ci5zdGFydHNXaXRoKCJUIikpIHsKLQkJCQkJdHN0ciA9IHBzdHIuc3Vic3RyaW5nKDEsIHBzdHIubGVuZ3RoKCkpOwotCQkJCX0gZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0gZWxzZSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gcHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCWRheXMgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0KTsKLQkJCQl0c3RyID0gcHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCBwc3RyLmxlbmd0aCgpKTsKLQotCQkJCWlmICh0c3RyLnN0YXJ0c1dpdGgoIlQiKSkgewotCQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHRzdHIubGVuZ3RoKCkgPiAwKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCXRzdHIgPSAiIjsKLQkJCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBkbyB0aGUgVCBzdHIKLQotCQkJLy8gaG91cgotCQkJaW5kZXggPSB0c3RyLmluZGV4T2YoJ0gnKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHRzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlob3VycyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCQkJLy8gbWludXRlCi0JCQlpbmRleCA9IHRzdHIuaW5kZXhPZignTScpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gdHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCW1pbnV0ZXMgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0KTsKLQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCX0KLQkJCS8vIHNlY29uZHMKLQkJCWluZGV4ID0gdHN0ci5pbmRleE9mKCdTJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSB0c3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJc2Vjb25kcyA9IERvdWJsZS5wYXJzZURvdWJsZShkaWdpdCk7Ci0JCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0JCQlpZiAoZGlkX3NvbWV0aGluZykgewotCQkJCS8vIG1ha2Ugc3VyZSB3ZSBwYXJzZWQgaXQgYWxsCi0JCQkJaWYgKHRzdHIubGVuZ3RoKCkgIT0gMCkKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlcnIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYU0RheVRpbWVEdXJhdGlvbihkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbmVnYXRpdmUpOwotCX0KLQotCS8qKgotCSAqIFJldHJpdmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJkYXlUaW1lRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJkYXlUaW1lRHVyYXRpb24iOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZGF5VGltZUR1cmF0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0RBWV9USU1FX0RVUkFUSU9OOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGFkZAotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0JICogICAgICAgICB0aGUgYWRkaXRpb24KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQkJCi0JCWRvdWJsZSByZXMgPSB2YWx1ZSgpICsgdmFsLnZhbHVlKCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RheVRpbWVEdXJhdGlvbihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0JICogZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbikKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBzdWJ0cmFjdAotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0JICogICAgICAgICB0aGUgc3VidHJhY3Rpb24KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU0RheVRpbWVEdXJhdGlvbi5jbGFzcyk7Ci0KLQkJZG91YmxlIHJlcyA9IHZhbHVlKCkgLSB2YWwudmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGF5VGltZUR1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5Ci0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLQkgKiAgICAgICAgIHRoZSBtdWx0aXBsaWNhdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZFJTID0gYXJnOwotCQkKLQkJaWYgKGFyZy5zaXplKCkgPT0gMSkgewotCQkJQW55VHlwZSBhcmdWYWx1ZSA9IGFyZy5maXJzdCgpOwotICAgICAgICAgICAgaWYgKGFyZ1ZhbHVlIGluc3RhbmNlb2YgWFNEZWNpbWFsKSB7Ci0gICAgICAgICAgICAJY29udmVydGVkUlMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoYXJnVmFsdWUuc3RyaW5nX3ZhbHVlKCkpKTsJCi0gICAgICAgICAgICB9Ci0JCX0KLQkJCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGNvbnZlcnRlZFJTLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYU0RvdWJsZS5jbGFzcyk7Ci0JCWlmICh2YWwubmFuKCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5uYW4oKTsKLQkJfQotCi0JCWRvdWJsZSByZXMgPSB2YWx1ZSgpICogdmFsLmRvdWJsZV92YWx1ZSgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEYXlUaW1lRHVyYXRpb24ocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGRpdmlzaW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gZGl2aWRlIGJ5Ci0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLQkgKiAgICAgICAgIHRoZSBkaXZpc2lvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlUeXBlIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCVhTRG91YmxlIGR0ID0gKFhTRG91YmxlKSBhdDsKLQkJCWRvdWJsZSByZXR2YWwgPSAwOwotCQkJCi0JCQlpZiAoZHQubmFuKCkpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IubmFuKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmICghZHQuemVybygpKSB7Ci0JCQkJQmlnRGVjaW1hbCByZXQgPSBCaWdEZWNpbWFsLlpFUk87Ci0JCQkJCi0JCQkJaWYgKGR0LmluZmluaXRlKCkpIHsKLQkJCQkJcmV0dmFsID0gdmFsdWUoKSAvIGR0LmRvdWJsZV92YWx1ZSgpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldCA9IEJpZ0RlY2ltYWwudmFsdWVPZih2YWx1ZSgpKTsKLQkJCQkJcmV0ID0gcmV0LmRpdmlkZShCaWdEZWNpbWFsLnZhbHVlT2YoZHQuZG91YmxlX3ZhbHVlKCkpLCAxOCwgUm91bmRpbmdNb2RlLkhBTEZfRVZFTik7Ci0JCQkJCXJldHZhbCA9IHJldC5kb3VibGVWYWx1ZSgpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLm92ZXJmbG93VW5kZXJmbG93KCk7Ci0JCQl9Ci0vLwkJCQlyZXQgPSB2YWx1ZSgpIC8gZHQuZG91YmxlX3ZhbHVlKCk7Ci0JCQkKLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCQkuY3JlYXRlX25ldyhuZXcgWFNEYXlUaW1lRHVyYXRpb24ocmV0dmFsKSk7Ci0JCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpIHsKLQkJCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCQkJCi0JCQlCaWdEZWNpbWFsIHJldCA9IEJpZ0RlY2ltYWwuWkVSTzsKLQkJCQkJCQkKLQkJCWlmICghZHQuemVybygpKSB7Ci0JCQkJcmV0ID0gQmlnRGVjaW1hbC52YWx1ZU9mKHZhbHVlKCkpOwotCQkJCXJldCA9IHJldC5kaXZpZGUoZHQuZ2V0VmFsdWUoKSwgMTgsIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4pOwotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3Iub3ZlcmZsb3dVbmRlcmZsb3coKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCQkJcmV0LmludFZhbHVlKCkpKTsJCi0JCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikgewotCQkJWFNEdXJhdGlvbiBtZCA9IChYU0R1cmF0aW9uKSBhdDsKLQotCQkJQmlnRGVjaW1hbCByZXMgPSBudWxsOwotCQkJdHJ5IHsKLSAgICAgICAgICAgICAgICBEdXJhdGlvbiB0aGlzRHVyYXRpb24gID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24oc3RyaW5nX3ZhbHVlKCkpOwotCQkJCUR1cmF0aW9uIG1kZHVyYXRpb24gPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEdXJhdGlvbihtZC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkJZG91YmxlIHRoaXN0aW1lID0gdGhpc0R1cmF0aW9uLmdldFRpbWVJbk1pbGxpcyhDYWxlbmRhci5nZXRJbnN0YW5jZSgpKTsKLQkJCQlkb3VibGUgdGhhdHRpbWUgPSBtZGR1cmF0aW9uLmdldFRpbWVJbk1pbGxpcyhDYWxlbmRhci5nZXRJbnN0YW5jZSgpKTsKLQkJCQlyZXMgPSBCaWdEZWNpbWFsLnZhbHVlT2YodGhpc3RpbWUpOwotCQkJCUJpZ0RlY2ltYWwgbCA9IEJpZ0RlY2ltYWwudmFsdWVPZih0aGF0dGltZSk7Ci0JCQkJcmVzID0gcmVzLmRpdmlkZShsLCAxOCwgUm91bmRpbmdNb2RlLkhBTEZfRVZFTik7Ci0JCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXgpIHsKLQkJCQkKLQkJCX0KLQotLy8JCQlkb3VibGUgcmVzID0gdmFsdWUoKSAvIG1kLnZhbHVlKCk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlcykpOwotCQl9IGVsc2UgewotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGVjaW1hbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RlY2ltYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIwN2JkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGVjaW1hbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3Nzc3NCAtIFhTRGVjaW1hbCByZXR1cm5pbmcgd3JvbmcgdmFsdWVzLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gdmFyaW91cyBudW1lcmljIGZvcm1hdHRpbmcgZml4ZXMgYW5kIGNhbGN1bGF0aW9ucwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gQ2FuJ3QgQ2FzdCBFeHBvbmVudGlhbCB2YWx1ZXMgdG8gRGVjaW1hbCB2YWx1ZXMuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBlZGdlIGNhc2Ugd2hlcmUgcm91bmRpbmcgd2FzIG9jY3VyaW5nIHdoZW4gaXQgc2hvdWxkbid0LiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBmaXhlZCBkaXZpc2lvbiBvZiB6ZXJvIChubywgbm90IGJ5KQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTRGVjaW1hbCBleHRlbmRzIE51bWVyaWNUeXBlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19ERUNJTUFMID0gInhzOmRlY2ltYWwiOwotCXByaXZhdGUgQmlnRGVjaW1hbCBfdmFsdWU7Ci0JcHJpdmF0ZSBYUGF0aERlY2ltYWxGb3JtYXQgZm9ybWF0ID0gbmV3IFhQYXRoRGVjaW1hbEZvcm1hdCgiMC4jIyMjIyMjIyMjIyMjIyMjIyMjIyIpOwotCi0JLyoqCi0JICogSW5pdGlhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgMC4wCi0JICovCi0JcHVibGljIFhTRGVjaW1hbCgpIHsKLQkJdGhpcyhCaWdEZWNpbWFsLnZhbHVlT2YoMCkpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBudW1iZXIKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgTnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0RlY2ltYWwoQmlnRGVjaW1hbCB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCQotCXB1YmxpYyBYU0RlY2ltYWwoU3RyaW5nIHgpIHsKLQkJLy9fdmFsdWUgPSBuZXcgQmlnRGVjaW1hbCh4LCBNYXRoQ29udGV4dC5ERUNJTUFMMTI4KTsKLQkJX3ZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoeCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpkZWNpbWFsIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0RFQ0lNQUw7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJkZWNpbWFsIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZGVjaW1hbCI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQkKLQkJaWYgKHplcm8oKSkgewotCQkJcmV0dXJuICIwIjsKLQkJfQotCQkKLQkJLy8gc3RyaXAgdHJhaWxpbmcgemVyb3MKLQkJX3ZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoKF92YWx1ZS50b1N0cmluZygpKS5yZXBsYWNlRmlyc3QoIjAqIiwgIiIpKTsKLQkJCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0RlY2ltYWwgcmVwcmVzZW50cyAwLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB6ZXJvKCkgewotCQlyZXR1cm4gKF92YWx1ZS5jb21wYXJlVG8obmV3IEJpZ0RlY2ltYWwoMC4wKSkgPT0gMCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGVjaW1hbAotCSAqIG51bWJlciBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRlY2ltYWwgbnVtYmVyLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGVjaW1hbCBudW1iZXIgc3VwcGxpZWQuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJaWYgKGFhdC5zdHJpbmdfdmFsdWUoKS5pbmRleE9mKCItSU5GIikgIT0gLTEpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCWlmICghaXNMZXhpY2FsVmFsdWUoYWF0LnN0cmluZ192YWx1ZSgpKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRMZXhpY2FsVmFsdWUoKTsKLQkJfQotCQkKLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQl0cnkgewotCQkJLy8gWFBhdGggZG9lc24ndCBhbGxvdyBmb3IgY29udmVydGluZyBFeHBvbmVudHMgdG8gRGVjaW1hbCB2YWx1ZXMuCi0JCQkKLQkJCVhTRGVjaW1hbCBkZWNpbWFsID0gY2FzdERlY2ltYWwoYWF0KTsKLQkJCQotCQkJcnMuYWRkKGRlY2ltYWwpOwotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNMZXhpY2FsVmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJpbmYiKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlpZiAodmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgiLWluZiIpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueVR5cGUgYWF0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0JCQotCQkKLQkJaWYgKChhYXQuc3RyaW5nX3ZhbHVlKCkuaW5kZXhPZigiRSIpICE9IC0xKSB8fCAKLQkJCShhYXQuc3RyaW5nX3ZhbHVlKCkuaW5kZXhPZigiZSIpICE9IC0xKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyB8fAotCQkJYWF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIFhTRGVjaW1hbCBjYXN0RGVjaW1hbChBbnlUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuKSB7Ci0JCQlpZiAoYWF0LnN0cmluZ192YWx1ZSgpLmVxdWFscygidHJ1ZSIpKSB7Ci0JCQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwobmV3IEJpZ0RlY2ltYWwoIjEiKSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKG5ldyBCaWdEZWNpbWFsKCIwIikpOwotCQkJfQotCQl9Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogQGRlcHJlY2F0ZWQgVXNlIGdldFZhbHVlKCkgaW5zdGVhZC4KLQkgKi8KLQlwdWJsaWMgZG91YmxlIGRvdWJsZV92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5kb3VibGVWYWx1ZSgpOwotCX0KLQkKLQlwdWJsaWMgQmlnRGVjaW1hbCBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBudW1iZXIgc3RvcmVkIHRvIHRoYXQgc3VwcGxpZWQKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgTnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9kb3VibGUoZG91YmxlIHgpIHsKLQkJX3ZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoeCk7Ci0JfQotCi0JLy8gY29tcGFyaXNvbnMKLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4KLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLQkgKiAgICAgICAgICAgIFhTRGVjaW1hbCkKLQkgKiAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb24gcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXQsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RlY2ltYWwgZHQgPSBudWxsOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTRGVjaW1hbCkpIHsgCi0JCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGF0KTsKLQkJCQotCQkJUmVzdWx0U2VxdWVuY2UgY3JzID0gY29uc3RydWN0b3IocnMpOwotCQkJaWYgKGNycy5lbXB0eSgpKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCX0KLQkJCi0JCQlBbnlUeXBlIGNhdCA9IGNycy5maXJzdCgpOwotCi0JCQlkdCA9IChYU0RlY2ltYWwpIGNhdDsKLQkgICAgfSBlbHNlIHsKLQkgICAgCWR0ID0gKFhTRGVjaW1hbCkgYXQ7Ci0JICAgIH0KLQkJcmV0dXJuIChfdmFsdWUuY29tcGFyZVRvKGR0LmdldFZhbHVlKCkpID09IDApOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RlY2ltYWwpCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgc21hbGxlciB0aGFuIHRoaXMKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGd0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQW55VHlwZSBjYXJnID0gY29udmVydEFyZyhhcmcpOwotCQkKLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCQlyZXR1cm4gKF92YWx1ZS5jb21wYXJlVG8odmFsLmdldFZhbHVlKCkpID09IDEpOwotCX0KLQotCXByb3RlY3RlZCBBbnlUeXBlIGNvbnZlcnRBcmcoQW55VHlwZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGFyZyk7Ci0JCXJzID0gY29uc3RydWN0b3IocnMpOwotCQlBbnlUeXBlIGNhcmcgPSBycy5maXJzdCgpOwotCQlyZXR1cm4gY2FyZzsKLQl9Ci0JCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLQkgKiAgICAgICAgICAgIFhTRGVjaW1hbCkKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcwotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQkJcmV0dXJuIChfdmFsdWUuY29tcGFyZVRvKHZhbC5nZXRWYWx1ZSgpKSA9PSAtMSk7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0JICogUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgYWRkaXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJWFNEZWNpbWFsIGR0ID0gKFhTRGVjaW1hbCkgYXQ7Ci0KLQkJLy8gb3duIGl0Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKF92YWx1ZS5hZGQoZHQuZ2V0VmFsdWUoKSkpKTsKLQl9Ci0JCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBhcmc7Ci0JCUl0ZXJhdG9yIGl0ID0gY2FyZy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlBbnlUeXBlIHR5cGUgPSAoQW55VHlwZSkgaXQubmV4dCgpOwotCQkJaWYgKHR5cGUuc3RyaW5nX3R5cGUoKS5lcXVhbHMoInhzOnVudHlwZWRBdG9taWMiKSB8fAotCQkJCXR5cGUuc3RyaW5nX3R5cGUoKS5lcXVhbHMoInhzOnN0cmluZyIpKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCQl9Ci0JCX0KLQkJY2FyZyA9IGNvbnN0cnVjdG9yKGNhcmcpOwotCQlyZXR1cm4gY2FyZzsKLQl9CQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCi0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlBbnlUeXBlIGF0ID0gZ2V0X3NpbmdsZV9hcmcoY2FyZyk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNEZWNpbWFsKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKF92YWx1ZS5zdWJ0cmFjdChkdC5nZXRWYWx1ZSgpKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbXVsdGlwbGljYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0JCUJpZ0RlY2ltYWwgcmVzdWx0ID0gX3ZhbHVlLm11bHRpcGx5KHZhbC5nZXRWYWx1ZSgpKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzdWx0KSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIGRpdmlzaW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBkaXZpc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJCQotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0JCWlmICh2YWwuemVybygpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZGl2X3plcm8obnVsbCk7Ci0JCX0KLQkJQmlnRGVjaW1hbCByZXN1bHQgPSBnZXRWYWx1ZSgpLmRpdmlkZSh2YWwuZ2V0VmFsdWUoKSwgMTgsIEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzdWx0KSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sCi0JICogdGhlIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyCi0JICogICAgICAgICBkaXZpc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaWRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCi0JCWlmICh2YWwuemVybygpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmRpdl96ZXJvKG51bGwpOwotCQlCaWdJbnRlZ2VyIF9pdmFsdWUgPSBfdmFsdWUudG9CaWdJbnRlZ2VyKCk7Ci0JCUJpZ0ludGVnZXIgaXZhbCA9ICB2YWwuZ2V0VmFsdWUoKS50b0JpZ0ludGVnZXIoKTsKLQkJQmlnSW50ZWdlciByZXN1bHQgPSBfaXZhbHVlLmRpdmlkZShpdmFsKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyAKLQkJCQkgICAgICAgICAgIFhTSW50ZWdlcihyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0JICogUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbW9kKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0JCQotCQkvLyBCaWdEZWNpbWFsIHJlc3VsdCA9IF92YWx1ZS5yZW1haW5kZXIodmFsLmdldFZhbHVlKCkpOwotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IHJlbWFpbmRlcihfdmFsdWUsIHZhbC5nZXRWYWx1ZSgpKTsgCi0JCQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChyZXN1bHQpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEJpZ0RlY2ltYWwgcmVtYWluZGVyKEJpZ0RlY2ltYWwgdmFsdWUsIEJpZ0RlY2ltYWwgZGl2aXNvcikgewotCQkvLyByZXR1cm4gdmFsdWUucmVtYWluZGVyKGRpdmlzb3IpOwotCQkKLQkJLy8gYXBweCBhcyBvZiBub3cuIEpESyAxLjQgZG9lc24ndCBzdXBwb3J0IEJpZ0RlY2ltYWwucmVtYWluZGVyKC4uKQotCQlCaWdEZWNpbWFsIGRpdmlkZW5kID0gdmFsdWUuZGl2aWRlKGRpdmlzb3IsIEJpZ0RlY2ltYWwuUk9VTkRfRE9XTik7Ci0JCUJpZ0RlY2ltYWwgY2VpbERpdmlkZW5kID0gbmV3IEJpZ0RlY2ltYWwoZGl2aWRlbmQudG9CaWdJbnRlZ2VyKCkpOwotCQkKLQkJcmV0dXJuIHZhbHVlLnN1YnRyYWN0KGNlaWxEaXZpZGVuZC5tdWx0aXBseShkaXZpc29yKSk7IAotCX0KLQkKLQkvKioKLQkgKiBOZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbAotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB1bmFyeV9taW51cygpIHsKLQkJQmlnRGVjaW1hbCByZXN1bHQgPSBfdmFsdWUubmVnYXRlKCk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlc3VsdCkpOwotCX0KLQotCS8vIGZ1bmN0aW9ucwotCS8qKgotCSAqIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSBhYnMoKSB7Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKF92YWx1ZS5hYnMoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIGNlaWxpbmcoKSB7Ci0JCUJpZ0RlY2ltYWwgY2VpbGluZyA9IF92YWx1ZS5zZXRTY2FsZSgwLCBCaWdEZWNpbWFsLlJPVU5EX0NFSUxJTkcpOwotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChjZWlsaW5nKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIGZsb29yKCkgewotCQlCaWdEZWNpbWFsIGZsb29yID0gX3ZhbHVlLnNldFNjYWxlKDAsIEJpZ0RlY2ltYWwuUk9VTkRfRkxPT1IpOwotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChmbG9vcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kKCkgewotCQlCaWdEZWNpbWFsIHJvdW5kID0gX3ZhbHVlLnNldFNjYWxlKDAsIEJpZ0RlY2ltYWwuUk9VTkRfVVApOwotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChyb3VuZCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbigpIHsKLQkJcmV0dXJuIHJvdW5kX2hhbGZfdG9fZXZlbigwKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcHJlY2lzaW9uIEFuIGludGVnZXIgcHJlY2lzaW9uIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbihpbnQgcHJlY2lzaW9uKSB7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSBfdmFsdWUuc2V0U2NhbGUocHJlY2lzaW9uLCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTik7Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKHJvdW5kKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRG91YmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRG91YmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZTEyOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RvdWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjc3NzcwIC0gZm9ybWF0IG9mIFhTRG91YmxlIGZvciB6ZXJvIHZhbHVlcyBpbmNvcnJlY3QuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3OTQwNiAtIGltcHJvdmVtZW50cyB0byBuZWdhdGl2ZSB6ZXJvIHZhbHVlcyBmb3IgeHM6ZG91YmxlCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSB2YXJpb3VzIG51bWVyaWMgZm9ybWF0dGluZyBmaXhlcyBhbmQgY2FsY3VsYXRpb25zCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCByb3VuZGluZyBlcnJvcnMuICAgICAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIEJ1ZyAyODYwNjIgLSBGaXggaWRpdiBlcnJvciBjYXNlcyBhbmQgaW5jcmVhc2UgcHJlY2lzaW9uICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5Sb3VuZGluZ01vZGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRG91YmxlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RvdWJsZSBleHRlbmRzIE51bWVyaWNUeXBlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19ET1VCTEUgPSAieHM6ZG91YmxlIjsKLQlwcml2YXRlIERvdWJsZSBfdmFsdWU7Ci0JcHJpdmF0ZSBYUGF0aERlY2ltYWxGb3JtYXQgZm9ybWF0ID0gbmV3IFhQYXRoRGVjaW1hbEZvcm1hdCgKLQkJCSIwLiMjIyMjIyMjIyMjIyMjIyNFMCIpOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIE51bWJlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEb3VibGUoZG91YmxlIHgpIHsKLQkJX3ZhbHVlID0gbmV3IERvdWJsZSh4KTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNEb3VibGUoKSB7Ci0JCXRoaXMoMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIGluaXQKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0RvdWJsZShTdHJpbmcgaW5pdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXRyeSB7Ci0JCQlpZiAoaW5pdC5lcXVhbHMoIi1JTkYiKSkgewotCQkJCV92YWx1ZSA9IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsKLQkJCX0gZWxzZSBpZiAoaW5pdC5lcXVhbHMoIklORiIpKSB7Ci0JCQkJX3ZhbHVlID0gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIHsKLQkJCQlfdmFsdWUgPSBuZXcgRG91YmxlKGluaXQpOwotCQkJfQotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFN0cmluZyByZXByZXNlbnRlZCBudW1iZXIKLQkgKiAKLQkgKiBAcGFyYW0gaQotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgdG8gYmUgc3RvcmVkCi0JICogQHJldHVybiBOZXcgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgc3VwcGxpZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRG91YmxlIHBhcnNlX2RvdWJsZShTdHJpbmcgaSkgewotCQl0cnkgewotCQkJRG91YmxlIGQgPSBudWxsOwotCQkJaWYgKGkuZXF1YWxzKCJJTkYiKSkgewotCQkJCWQgPSBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFk7Ci0JCQl9IGVsc2UgaWYgKGkuZXF1YWxzKCItSU5GIikpIHsKLQkJCQlkID0gRG91YmxlLk5FR0FUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIHsKLQkJCQlkID0gbmV3IERvdWJsZShpKTsKLQkJCX0KLQkJCXJldHVybiBuZXcgWFNEb3VibGUoZC5kb3VibGVWYWx1ZSgpKTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZG91YmxlIG51bWJlcgotCSAqIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZG91YmxlIG51bWJlci4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRvdWJsZSBudW1iZXIgc3VwcGxpZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJWFNEb3VibGUgZCA9IGNhc3REb3VibGUoYWF0KTsKLQkJCi0JCWlmIChkID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCi0JCXJzLmFkZChkKTsKLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIFhTRG91YmxlIGNhc3REb3VibGUoQW55VHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbikgewotCQkJaWYgKGFhdC5zdHJpbmdfdmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCXJldHVybiBuZXcgWFNEb3VibGUobmV3IERvdWJsZSgiMS4wRTAiKSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBuZXcgWFNEb3VibGUobmV3IERvdWJsZSgiMC4wRTAiKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHBhcnNlX2RvdWJsZShhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmRvdWJsZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19ET1VCTEU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJkb3VibGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJkb3VibGUiOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJaWYgKHplcm8oKSkgewotCQkJcmV0dXJuICIwIjsKLQkJfQotCi0JCWlmIChuZWdhdGl2ZVplcm8oKSkgewotCQkJcmV0dXJuICItMCI7Ci0JCX0KLQotCQlpZiAobmFuKCkpIHsKLQkJCXJldHVybiAiTmFOIjsKLQkJfQotCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBuYW4oKSB7Ci0JCXJldHVybiBEb3VibGUuaXNOYU4oX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgYW4gaW5maW5pdGUgbnVtYmVyIChuZWdhdGl2ZSBvciBwb3NpdGl2ZSkKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIGluZmluaXR5LiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaW5maW5pdGUoKSB7Ci0JCXJldHVybiBEb3VibGUuaXNJbmZpbml0ZShfdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAwCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAwLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gemVybygpIHsKLQkJcmV0dXJuIChEb3VibGUuY29tcGFyZShfdmFsdWUsIDAuMEUwKSA9PSAwKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAtMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgLTAuIEZhbHNlIG90aGVyd2lzZS4KLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmVaZXJvKCkgewotCQlyZXR1cm4gKERvdWJsZS5jb21wYXJlKF92YWx1ZSwgLTAuMEUwKSA9PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBkb3VibGUgZG91YmxlX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlLmRvdWJsZVZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uCi0JICogQHBhcmFtIGFhCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RvdWJsZSkKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb25zIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlCi0JICogICAgICAgICBvdGhlcndpc2UKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhYSwgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYWEpOwotCQlSZXN1bHRTZXF1ZW5jZSBjcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCQotCQlpZiAoY3JzLmVtcHR5KCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQkJQW55VHlwZSBjYXQgPSBjcnMuZmlyc3QoKTsKLQotCQlYU0RvdWJsZSBkID0gKFhTRG91YmxlKSBjYXQ7Ci0JCWlmIChkLm5hbigpICYmIG5hbigpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCURvdWJsZSB0aGF0dmFsdWUgPSBuZXcgRG91YmxlKGQuZG91YmxlX3ZhbHVlKCkpOwotCQlEb3VibGUgdGhpc3ZhbHVlID0gbmV3IERvdWJsZShkb3VibGVfdmFsdWUoKSk7Ci0JCQotCQlyZXR1cm4gdGhpc3ZhbHVlLmVxdWFscyh0aGF0dmFsdWUpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RvdWJsZSkKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcwotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0JCQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RvdWJsZS5jbGFzcyk7Ci0JCXJldHVybiBkb3VibGVfdmFsdWUoKSA+IHZhbC5kb3VibGVfdmFsdWUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQW55VHlwZSBjb252ZXJ0QXJnKEFueVR5cGUgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhcmcpOwotCQlycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJQW55VHlwZSBjYXJnID0gcnMuZmlyc3QoKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIEN1cnJlbnRseQotCSAqIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gZXhpc3RzIHNvIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiBtdXN0IGJlCi0JICogb2YgdHlwZSBYU0RvdWJsZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RvdWJsZSkKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcwotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0KLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCQlyZXR1cm4gZG91YmxlX3ZhbHVlKCkgPCB2YWwuZG91YmxlX3ZhbHVlKCk7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJQW55VHlwZSBhdCA9IGdldF9zaW5nbGVfYXJnKGNhcmcpOwotCQkKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQkrIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCX0KLQotCQljYXJnID0gY29uc3RydWN0b3IoY2FyZyk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBzdWJ0cmFjdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQkKLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQktIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLAotCSAqIHRoZSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEb3VibGUuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbXVsdGlwbGljYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RvdWJsZS5jbGFzcyk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQkqIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRG91YmxlLmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RvdWJsZShkb3VibGVfdmFsdWUoKQotCQkJCS8gdmFsLmRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyCi0JICogICAgICAgICBkaXZpc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaWRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCi0JCWlmICh0aGlzLm5hbigpIHx8IHZhbC5uYW4oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5udW1lcmljX292ZXJmbG93KCJEaXZpZGVuZCBvciBkaXZpc29yIGlzIE5hTiIpOwotCi0JCWlmICh0aGlzLmluZmluaXRlKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubnVtZXJpY19vdmVyZmxvdygiRGl2aWRlbmQgaXMgaW5maW5pdGUiKTsKLQotCQlpZiAodmFsLnplcm8oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kaXZfemVybyhudWxsKTsKLQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IEJpZ0RlY2ltYWwudmFsdWVPZigoZG91YmxlX3ZhbHVlKCkgLyB2YWwuZG91YmxlX3ZhbHVlKCkpKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIocmVzdWx0LnRvQmlnSW50ZWdlcigpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbW9kKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RvdWJsZS5jbGFzcyk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQklIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhpcyBYU0RlY2ltYWwKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdW5hcnlfbWludXMoKSB7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoLTEKLQkJCQkqIGRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLy8gZnVuY3Rpb25zCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgYWJzKCkgewotCQlyZXR1cm4gbmV3IFhTRG91YmxlKE1hdGguYWJzKGRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgY2VpbGluZygpIHsKLQkJcmV0dXJuIG5ldyBYU0RvdWJsZShNYXRoLmNlaWwoZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgZmxvb3IoKSB7Ci0JCXJldHVybiBuZXcgWFNEb3VibGUoTWF0aC5mbG9vcihkb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kKCkgewotCQlCaWdEZWNpbWFsIHZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoX3ZhbHVlKTsKLQkJQmlnRGVjaW1hbCByb3VuZCA9IHZhbHVlLnNldFNjYWxlKDAsIFJvdW5kaW5nTW9kZS5IQUxGX1VQKTsKLQkJcmV0dXJuIG5ldyBYU0RvdWJsZShyb3VuZC5kb3VibGVWYWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSByb3VuZF9oYWxmX3RvX2V2ZW4oKSB7Ci0KLQkJcmV0dXJuIHJvdW5kX2hhbGZfdG9fZXZlbigwKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQgd2l0aCB0aGUgc3BlY2lmaWVkCi0JICogcHJlY2lzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBwcmVjaXNpb24KLQkgKiAgICAgICAgICAgIEFuIGludGVnZXIgcHJlY2lzaW9uCi0JICogQHJldHVybiBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSByb3VuZF9oYWxmX3RvX2V2ZW4oaW50IHByZWNpc2lvbikgewotCQlCaWdEZWNpbWFsIHZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoX3ZhbHVlKTsKLQkJQmlnRGVjaW1hbCByb3VuZCA9IHZhbHVlLnNldFNjYWxlKHByZWNpc2lvbiwgUm91bmRpbmdNb2RlLkhBTEZfRVZFTik7Ci0JCXJldHVybiBuZXcgWFNEb3VibGUocm91bmQuZG91YmxlVmFsdWUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0R1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiMWRiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIEltcGxlbWVudGVkIFhTRHVyYXRpb24gdHlwZSBmb3IgY2FzdGFibGUgY2hlY2tpbmcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEd0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBMdDsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB4czpkdXJhdGlvbiBkYXRhIHR5cGUuIE90aGVyIGR1cmF0aW9uIGltcGxlbWVudGF0aW9ucwotICogc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzIGltcGxlbWVudGF0aW9uLgotICogCi0gKiBAc2luY2UgMS4xIFRoaXMgdXNlZCB0byBiZSBhbiBhYnN0cmFjdCBjbGFzcyBidXQgd2FzIGluY29ycmVjdGx5IGltcGxlbWVudGVkCi0gKiAgICAgICAgYXMgc3VjaC4KLSAqLwotcHVibGljIGNsYXNzIFhTRHVyYXRpb24gZXh0ZW5kcyBDdHJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LCBDbXBHdCwgQ2xvbmVhYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19EVVJBVElPTiA9ICJ4czpkdXJhdGlvbiI7Ci0JcHJvdGVjdGVkIGludCBfeWVhcjsKLQlwcm90ZWN0ZWQgaW50IF9tb250aDsKLQlwcm90ZWN0ZWQgaW50IF9kYXlzOwotCXByb3RlY3RlZCBpbnQgX2hvdXJzOwotCXByb3RlY3RlZCBpbnQgX21pbnV0ZXM7Ci0JcHJvdGVjdGVkIGRvdWJsZSBfc2Vjb25kczsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBfbmVnYXRpdmU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0JICogc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gVGhlIHNhbWUgb2NjdXJzIGZvcgotCSAqIG1pbnV0ZXMgYW5kIHNlY29uZHMKLQkgKiAKLQkgKiBAcGFyYW0geWVhcnMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiB5ZWFycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUuCi0JICogQHBhcmFtIG1vbnRocwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIG1vbnRocyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUuCi0JICogQHBhcmFtIGRheXMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBkYXlzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBob3VycwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIGhvdXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBtaW51dGVzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgbWludXRlcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gc2Vjb25kcwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIG5lZ2F0aXZlCi0JICogICAgICAgICAgICBUcnVlIGlmIHRoaXMgZHVyYXRpb24gb2YgdGltZSByZXByZXNlbnRzIGEgYmFja3dhcmRzIHBhc3NhZ2UKLQkgKiAgICAgICAgICAgIHRocm91Z2ggdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24oaW50IHllYXJzLCBpbnQgbW9udGhzLCBpbnQgZGF5cywgaW50IGhvdXJzLCBpbnQgbWludXRlcywKLQkJCWRvdWJsZSBzZWNvbmRzLCBib29sZWFuIG5lZ2F0aXZlKSB7Ci0JCV95ZWFyID0geWVhcnM7Ci0JCV9tb250aCA9IG1vbnRoczsKLQkJX2RheXMgPSBkYXlzOwotCQlfaG91cnMgPSBob3VyczsKLQkJX21pbnV0ZXMgPSBtaW51dGVzOwotCQlfc2Vjb25kcyA9IHNlY29uZHM7Ci0JCV9uZWdhdGl2ZSA9IG5lZ2F0aXZlOwotCi0JCWlmIChfbW9udGggPj0gMTIpIHsKLQkJCV95ZWFyICs9IF9tb250aCAvIDEyOwotCQkJX21vbnRoID0gX21vbnRoICUgMTI7Ci0JCX0KLQotCQlpZiAoX3NlY29uZHMgPj0gNjApIHsKLQkJCWludCBpc2VjID0gKGludCkgX3NlY29uZHM7Ci0JCQlkb3VibGUgcmVtID0gX3NlY29uZHMgLSAoaXNlYyk7Ci0KLQkJCV9taW51dGVzICs9IGlzZWMgLyA2MDsKLQkJCV9zZWNvbmRzID0gaXNlYyAlIDYwOwotCQkJX3NlY29uZHMgKz0gcmVtOwotCQl9Ci0JCWlmIChfbWludXRlcyA+PSA2MCkgewotCQkJX2hvdXJzICs9IF9taW51dGVzIC8gNjA7Ci0JCQlfbWludXRlcyA9IF9taW51dGVzICUgNjA7Ci0JCX0KLQkJaWYgKF9ob3VycyA+PSAyNCkgewotCQkJX2RheXMgKz0gX2hvdXJzIC8gMjQ7Ci0JCQlfaG91cnMgPSBfaG91cnMgJSAyNDsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzCi0JICogCi0JICogQHBhcmFtIHNlY3MKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24oZG91YmxlIHNlY3MpIHsKLQkJdGhpcygwLCAwLCAwLCAwLCAwLCBNYXRoLmFicyhzZWNzKSwgc2VjcyA8IDApOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIGEgZHVyYXRpb24gb2Ygbm8gdGltZSAoMGRheXMsIDBob3VycywgMG1pbnV0ZXMsIDBzZWNvbmRzKQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uKCkgewotCQl0aGlzKDAsIDAsIDAsIDAsIDAsIDAuMCwgZmFsc2UpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImR1cmF0aW9uIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfRFVSQVRJT047Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCVN0cmluZyByZXQgPSAiIjsKLQkJYm9vbGVhbiBkaWRfc29tZXRoaW5nID0gZmFsc2U7Ci0JCVN0cmluZyB0cmV0ID0gIiI7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkgJiYgIShkYXlzKCkgPT0gMCAmJiBob3VycygpID09IDAgJiYgc2Vjb25kcygpID09IDApKQotCQkJcmV0ICs9ICItIjsKLQotCQlyZXQgKz0gIlAiOwotCi0JCWludCB5ZWFycyA9IHllYXIoKTsKLQkJaWYgKHllYXJzICE9IDApCi0JCQlyZXQgKz0geWVhcnMgKyAiWSI7Ci0KLQkJaW50IG1vbnRocyA9IG1vbnRoKCk7Ci0JCWlmIChtb250aHMgIT0gMCkgewotCQkJcmV0ICs9IG1vbnRocyArICJNIjsKLQkJfQotCi0JCWlmIChkYXlzKCkgIT0gMCkgewotCQkJcmV0ICs9IGRheXMoKSArICJEIjsKLQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQl9Ci0KLQkJLy8gZG8gdGhlICJ0aW1lIiBiaXQKLQkJaW50IGhvdXJzID0gaG91cnMoKTsKLQkJaW50IG1pbnV0ZXMgPSBtaW51dGVzKCk7Ci0JCWRvdWJsZSBzZWNvbmRzID0gc2Vjb25kcygpOwotCQkKLQkJaWYgKGhvdXJzICE9IDApIHsKLQkJCXRyZXQgKz0gaG91cnMgKyAiSCI7Ci0JCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJfQotCQlpZiAobWludXRlcyAhPSAwKSB7Ci0JCQl0cmV0ICs9IG1pbnV0ZXMgKyAiTSI7Ci0JCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJfQotCQlpZiAoc2Vjb25kcyAhPSAwKSB7Ci0JCQlTdHJpbmcgZG91YlN0ciA9IChEb3VibGUudmFsdWVPZihzZWNvbmRzKS50b1N0cmluZygpKTsKLQkJCWlmIChkb3ViU3RyLmVuZHNXaXRoKCIuMCIpKSB7Ci0JCQkJLy8gc3RyaW5nIHZhbHVlIG9mIHguMCBzZWNvbmRzIGlzIHhTLiBlLmcsIDcuMFMgaXMgY29udmVydGVkIHRvCi0JCQkJLy8gN1MuCi0JCQkJdHJldCArPSBkb3ViU3RyLnN1YnN0cmluZygwLCBkb3ViU3RyLmluZGV4T2YoIi4wIikpICsgIlMiOwotCQkJfSBlbHNlIHsKLQkJCQl0cmV0ICs9IHNlY29uZHMgKyAiUyI7Ci0JCQl9Ci0JCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJfSBlbHNlIGlmICghZGlkX3NvbWV0aGluZykgewotCQkJCXRyZXQgKz0gIjBTIjsKLQkJfQotCQkKLQkJaWYgKCh5ZWFyKCkgPT0gMCAmJiBtb250aCgpID09IDApIHx8IChob3VycyA+IDAgfHwgbWludXRlcyA+IDAgfHwgc2Vjb25kcyA+IDApKSB7Ci0JCQlpZiAodHJldC5sZW5ndGgoKSA+IDApIHsKLQkJCQlyZXQgKz0gIlQiICsgdHJldDsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgZGF5cyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOdW1iZXIgb2YgZGF5cyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBkYXlzKCkgewotCQlyZXR1cm4gX2RheXM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgbWludXRlcyAobWF4IDYwKSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBtaW51dGVzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1pbnV0ZXMoKSB7Ci0JCXJldHVybiBfbWludXRlczsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBob3VycyAobWF4IDI0KSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOdW1iZXIgb2YgaG91cnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgaG91cnMoKSB7Ci0JCXJldHVybiBfaG91cnM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyAobWF4IDYwKSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBzZWNvbmRzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgZG91YmxlIHNlY29uZHMoKSB7Ci0JCXJldHVybiBfc2Vjb25kczsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIGR1cmF0aW9uIG9mIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiB2YWx1ZSgpID09IHZhbC52YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXlUaW1lRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiB2YWx1ZSgpIDwgdmFsLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXlUaW1lRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiB2YWx1ZSgpID4gdmFsLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0JICogdGltZQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5lZ2F0aXZlKCkgewotCQlyZXR1cm4gX25lZ2F0aXZlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQgYXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHdpdGhpbiBpdAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIHNlY29uZHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBkb3VibGUgdmFsdWUoKSB7Ci0JCWRvdWJsZSByZXQgPSBkYXlzKCkgKiAyNCAqIDYwICogNjA7Ci0KLQkJcmV0ICs9IGhvdXJzKCkgKiA2MCAqIDYwOwotCQlyZXQgKz0gbWludXRlcygpICogNjA7Ci0JCXJldCArPSBzZWNvbmRzKCk7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkpCi0JCQlyZXQgKj0gLTE7Ci0JCQotCQkKLQotCQlyZXR1cm4gcmV0OwotCX0KLQkKLQlwdWJsaWMgZG91YmxlIHRpbWVfdmFsdWUoKSB7Ci0JCWRvdWJsZSByZXQgPSAwOwotCQlyZXQgKz0gaG91cnMoKSAqIDYwICogNjA7Ci0JCXJldCArPSBtaW51dGVzKCkgKiA2MDsKLQkJcmV0ICs9IHNlY29uZHMoKTsKLQotCQlpZiAobmVnYXRpdmUoKSkKLQkJCXJldCAqPSAtMTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZHVyYXRpb24KLQkgKiBmcm9tIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghKGlzQ2FzdGFibGUoYWF0KSkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCVhTRHVyYXRpb24gZHVyYXRpb24gPSBjYXN0RHVyYXRpb24oYWF0KTsKLQotCQlpZiAoZHVyYXRpb24gPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKGR1cmF0aW9uKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBYU0R1cmF0aW9uIGNhc3REdXJhdGlvbihBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbikgewotCQkJWFNEdXJhdGlvbiBkdXJhdGlvbiA9IChYU0R1cmF0aW9uKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTRHVyYXRpb24oZHVyYXRpb24ueWVhcigpLCBkdXJhdGlvbi5tb250aCgpLCBkdXJhdGlvbi5kYXlzKCksIGR1cmF0aW9uLmhvdXJzKCksIGR1cmF0aW9uLm1pbnV0ZXMoKSwgZHVyYXRpb24uc2Vjb25kcygpLCBkdXJhdGlvbi5uZWdhdGl2ZSgpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlRFREdXJhdGlvbihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZQotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEdXJhdGlvbiBwYXJzZURURHVyYXRpb24oU3RyaW5nIHN0cikgewotCQlib29sZWFuIG5lZ2F0aXZlID0gZmFsc2U7Ci0JCWludCB5ZWFycyA9IDA7Ci0JCWludCBtb250aHMgPSAwOwotCQlpbnQgZGF5cyA9IDA7Ci0JCWludCBob3VycyA9IDA7Ci0JCWludCBtaW51dGVzID0gMDsKLQkJZG91YmxlIHNlY29uZHMgPSAwOwotCi0JCS8vIHN0cmluZyBmb2xsb3dpbmcgdGhlIFAKLQkJU3RyaW5nIHBzdHIgPSAiIjsKLQkJU3RyaW5nIHRzdHIgPSAiIjsKLQotCQkvLyBnZXQgdGhlIG5lZ2F0aXZlIGFuZCBwc3RyCi0JCWlmIChzdHIuc3RhcnRzV2l0aCgiLVAiKSkgewotCQkJbmVnYXRpdmUgPSB0cnVlOwotCQkJcHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiUCIpKSB7Ci0JCQluZWdhdGl2ZSA9IGZhbHNlOwotCQkJcHN0ciA9IHN0ci5zdWJzdHJpbmcoMSwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gbnVsbDsKLQotCQl0cnkgewotCQkJaW50IGluZGV4ID0gcHN0ci5pbmRleE9mKCdZJyk7Ci0JCQlib29sZWFuIGRpZF9zb21ldGhpbmcgPSBmYWxzZTsKLQotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gcHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCXllYXJzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJcHN0ciA9IHBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0KLQkJCWluZGV4ID0gcHN0ci5pbmRleE9mKCdNJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSBwc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJbW9udGhzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJcHN0ciA9IHBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0KLQkJCS8vIGdldCB0aGUgZGF5cwotCQkJaW5kZXggPSBwc3RyLmluZGV4T2YoJ0QnKTsKLQotCQkJaWYgKGluZGV4ID09IC0xKSB7Ci0JCQkJaWYgKHBzdHIuc3RhcnRzV2l0aCgiVCIpKSB7Ci0JCQkJCXRzdHIgPSBwc3RyLnN1YnN0cmluZygxLCBwc3RyLmxlbmd0aCgpKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVN0cmluZyBkaWdpdCA9IHBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlkYXlzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJdHN0ciA9IHBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgcHN0ci5sZW5ndGgoKSk7Ci0KLQkJCQlpZiAodHN0ci5zdGFydHNXaXRoKCJUIikpIHsKLQkJCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRzdHIgPSAiIjsKLQkJCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBkbyB0aGUgVCBzdHIKLQotCQkJLy8gaG91cgotCQkJaW5kZXggPSB0c3RyLmluZGV4T2YoJ0gnKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHRzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlob3VycyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCQkJLy8gbWludXRlCi0JCQlpbmRleCA9IHRzdHIuaW5kZXhPZignTScpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gdHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCW1pbnV0ZXMgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0KTsKLQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCX0KLQkJCS8vIHNlY29uZHMKLQkJCWluZGV4ID0gdHN0ci5pbmRleE9mKCdTJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSB0c3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJc2Vjb25kcyA9IERvdWJsZS5wYXJzZURvdWJsZShkaWdpdCk7Ci0JCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0JCQlpZiAoIWRpZF9zb21ldGhpbmcpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXJyKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXJldHVybiBuZXcgWFNEdXJhdGlvbih5ZWFycywgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywKLQkJCQluZWdhdGl2ZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBuZXcgWFNEdXJhdGlvbih5ZWFyKCksIG1vbnRoKCksIGRheXMoKSwgaG91cnMoKSwgbWludXRlcygpLAotCQkJCXNlY29uZHMoKSwgbmVnYXRpdmUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIHllYXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IHllYXIoKSB7Ci0JCXJldHVybiBfeWVhcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtb250aCgpIHsKLQkJcmV0dXJuIF9tb250aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCVN0cmluZyB2YWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsgLy8gZ2V0IHRoaXMgb25jZSBzbyB3ZSBkb24ndCByZWNyZWF0ZSBldmVyeXRpbWUuCi0JCVN0cmluZyB0eXBlID0gYWF0LnN0cmluZ190eXBlKCk7Ci0JCWlmICh0eXBlLmVxdWFscygieHM6c3RyaW5nIikgfHwgdHlwZS5lcXVhbHMoInhzOnVudHlwZWRBdG9taWMiKSkgewotCQkJaWYgKGlzRHVyYXRpb25WYWx1ZSh2YWx1ZSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsgIC8vIFdlIG1pZ2h0IGJlIGFibGUgdG8gY2FzdCB0aGlzLgotCQkJfQotCQl9Ci0JCQotCQkvLyBXZSBjYW4gY2FzdCBmcm9tIG91cnNlbGYgb3IgZGVyaXZhdGlvbnMgb2Ygb3Vyc2VsdmVzLgotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbikgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0R1cmF0aW9uVmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0JCXJldHVybiB2YWx1ZS5zdGFydHNXaXRoKCJQIikgfHwgdmFsdWUuc3RhcnRzV2l0aCgiLVAiKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNFbnRpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNFbnRpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiY2E1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRW50aXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSBidWcgMjI4MjIzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMzNDg0MiAtIGltcHJvdmluZyBzdXBwb3J0IGZvciB0aGUgZGF0YSB0eXBlcyBOYW1lLCBOQ05hbWUsIEVOVElUWSwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElELCBJRFJFRiBhbmQgTk1UT0tFTi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQnVpbHQgaW4gRGF0YSBUeXBlIGZvciB4czpFbnRpdHkKLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0VudGl0eSBleHRlbmRzIFhTTkNOYW1lIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfRU5USVRZID0gInhzOkVOVElUWSI7Ci0KLQlwdWJsaWMgWFNFbnRpdHkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCQotCXB1YmxpYyBYU0VudGl0eShTdHJpbmcgdmFsdWUpIHsKLQkJc3VwZXIodmFsdWUpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfRU5USVRZOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJFTlRJVFkiOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgRU5USVRZIHdpdGhpbgotCSAqIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gIFRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCB0aGlzCi0JICogaXMgcmVsYXhlZCBmcm9tIHRoZSBYTUwgU2NoZW1hIHJlcXVpcmVtZW50LiAgVGhlIEVOVElUWSBkb2VzCi0JICogbm90IGhhdmUgdG8gYmUgbG9jYXRlZCBvciBleHBhbmRlZCBkdXJpbmcgY29uc3RydWN0aW9uIGFuZAotCSAqIGV2YWx1YXRpb24gZm9yIGNhc3RpbmcuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgRU5USVRZCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgRU5USVRZIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlTdHJpbmcgc3RyVmFsdWUgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0JCQotCQlpZiAoIWlzQ29uc3RyYWludFNhdGlzZmllZChzdHJWYWx1ZSkpIHsKLQkJCS8vIGludmFsaWQgaW5wdXQKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTRW50aXR5KHN0clZhbHVlKSk7Ci0KLQkJcmV0dXJuIHJzOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0Zsb2F0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRmxvYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5ZjM2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRmxvYXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3OTQwNiAtIGltcHJvdmVtZW50cyB0byBuZWdhdGl2ZSB6ZXJvIHZhbHVlcyBmb3IgeHM6ZmxvYXQKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZml4ZWQgcm91bmRpbmcgZXJyb3JzLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBmaXhlZCBjYXN0aW5nIGVycm9ycy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gQnVnIDI4NjA2MiAtIEZpeCBpZGl2IGVycm9yIGNhc2VzIGFuZCBpbmNyZWFzZSBwcmVjaXNpb24gIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMDI4IC0gQWRkZWQgY29uc3RydWN0b3IgZnJvbSBzdHJpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5Sb3VuZGluZ01vZGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRmxvYXQgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTRmxvYXQgZXh0ZW5kcyBOdW1lcmljVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfRkxPQVQgPSAieHM6ZmxvYXQiOwotCXByaXZhdGUgRmxvYXQgX3ZhbHVlOwotCXByaXZhdGUgWFBhdGhEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBYUGF0aERlY2ltYWxGb3JtYXQoIjAuIyMjIyMjI0UwIik7Ci0JLyoqCi0JICogSW5pdGlhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBUaGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0Zsb2F0KGZsb2F0IHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTRmxvYXQoKSB7Ci0JCXRoaXMoMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIGluaXQKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0Zsb2F0KFN0cmluZyBpbml0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdHJ5IHsKLQkJCWlmIChpbml0LmVxdWFscygiLUlORiIpKSB7Ci0JCQkJX3ZhbHVlID0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JCQl9IGVsc2UgaWYgKGluaXQuZXF1YWxzKCJJTkYiKSkgewotCQkJCV92YWx1ZSA9IEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIHsKLQkJCQlfdmFsdWUgPSBuZXcgRmxvYXQoaW5pdCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JfQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZmxvYXQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfRkxPQVQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJmbG9hdCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImZsb2F0IjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBudW1iZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlpZiAoemVybygpKSB7Ci0JCSAgIHJldHVybiAiMCI7Ci0JCX0KLQkJaWYgKG5lZ2F0aXZlWmVybygpKSB7Ci0JCSAgIHJldHVybiAiLTAiOwkKLQkJfQotCQkKLQkJaWYgKG5hbigpKSB7Ci0JCSAgIHJldHVybiAiTmFOIjsJCi0JCX0KLQkJCQkJCQkJCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOCi0JICogCi0JICogQHJldHVybiBUcnVlIGlzIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5hbigpIHsKLQkJcmV0dXJuIEZsb2F0LmlzTmFOKF92YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIGluZmluaXR5Ci0JICogCi0JICogQHJldHVybiBUcnVlIGlzIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBpbmZpbml0eS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gaW5maW5pdGUoKSB7Ci0JCXJldHVybiBGbG9hdC5pc0luZmluaXRlKF92YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHplcm8oKSB7Ci0JICAgcmV0dXJuIChGbG9hdC5jb21wYXJlKF92YWx1ZSwgMCkgPT0gMCk7Ci0JfQotCQotCS8qCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0Zsb2F0IHJlcHJlc2VudHMgLTAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0Zsb2F0IHJlcHJlc2VudHMgLTAuIEZhbHNlIG90aGVyd2lzZS4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmVaZXJvKCkgewotCSAgIHJldHVybiAoRmxvYXQuY29tcGFyZShfdmFsdWUsIC0wLjBmKSA9PSAwKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0Ci0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZmxvYXQgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQkJCi0JCWlmICghKGFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikgfHwgYWF0IGluc3RhbmNlb2YgTm9kZVR5cGUgfHwKLQkJCWFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpIHx8Ci0JCQlhYXQuc3RyaW5nX3R5cGUoKS5lcXVhbHMoInhzOmJvb2xlYW4iKSB8fAotCQkJYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCi0JCXRyeSB7Ci0JCQlGbG9hdCBmID0gbnVsbDsKLQkJCWlmIChhYXQuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKCJJTkYiKSkgewotCQkJCWYgPSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWTsKLQkJCX0gZWxzZSBpZiAoYWF0LnN0cmluZ192YWx1ZSgpLmVxdWFscygiLUlORiIpKSB7Ci0JCQkJZiA9IEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOwotCQkJfSBlbHNlIGlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCQlpZiAoYWF0LnN0cmluZ192YWx1ZSgpLmVxdWFscygidHJ1ZSIpKSB7Ci0JCQkJCWYgPSBuZXcgRmxvYXQoIjEuMEUwIik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZiA9IG5ldyBGbG9hdCgiMC4wRTAiKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJICAgIGYgPSBuZXcgRmxvYXQoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCX0KLQkJCXJzLmFkZChuZXcgWFNGbG9hdChmLmZsb2F0VmFsdWUoKSkpOwotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZmxvYXQgdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBmbG9hdCBmbG9hdF92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4KLQkgKiBAcGFyYW0gYWEKLQkgKiAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGgKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhYSwgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUFueVR5cGUgY2FyZyA9IGNvbnZlcnRBcmcoYWEpOwotCQlpZiAoIShjYXJnIGluc3RhbmNlb2YgWFNGbG9hdCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCVhTRmxvYXQgZiA9IChYU0Zsb2F0KSBjYXJnOwotCQlpZiAobmFuKCkgJiYgZi5uYW4oKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlGbG9hdCB0aGF0dmFsdWUgPSBuZXcgRmxvYXQoZi5mbG9hdF92YWx1ZSgpKTsKLQkJRmxvYXQgdGhpc3ZhbHVlID0gbmV3IEZsb2F0KGZsb2F0X3ZhbHVlKCkpOwotCi0JCXJldHVybiB0aGlzdmFsdWUuZXF1YWxzKHRoYXR2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIGZsb2F0X3ZhbHVlKCkgPiB2YWwuZmxvYXRfdmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gaXMgYSBncmVhdGVyIG51bWJlciB0aGFuIHRoZQotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUFueVR5cGUgY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCQlyZXR1cm4gZmxvYXRfdmFsdWUoKSA8IHZhbC5mbG9hdF92YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJKyB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnN0cnVjdG9yKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJLSB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtdWx0aXBsaWNhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnN0cnVjdG9yKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KGZsb2F0X3ZhbHVlKCkKLQkJCQkqIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgZGl2aXNpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KGZsb2F0X3ZhbHVlKCkKLQkJCQkvIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLQkgKiAgICAgICAgIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCi0JCWlmICh0aGlzLm5hbigpIHx8IHZhbC5uYW4oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5udW1lcmljX292ZXJmbG93KCJEaXZpZGVuZCBvciBkaXZpc29yIGlzIE5hTiIpOwotCi0JCWlmICh0aGlzLmluZmluaXRlKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubnVtZXJpY19vdmVyZmxvdygiRGl2aWRlbmQgaXMgaW5maW5pdGUiKTsKLQotCQlpZiAodmFsLnplcm8oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kaXZfemVybyhudWxsKTsKLQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IEJpZ0RlY2ltYWwudmFsdWVPZigoZmxvYXRfdmFsdWUoKSAvIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKHJlc3VsdC50b0JpZ0ludGVnZXIoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0JICogUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRmxvYXQuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtb2QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQlYU0Zsb2F0IHZhbCA9IChYU0Zsb2F0KSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNGbG9hdC5jbGFzcyk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJJSB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE5lZ2F0ZXMgdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJLmNyZWF0ZV9uZXcobmV3IFhTRmxvYXQoLTEgKiBmbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSBhYnMoKSB7Ci0JCXJldHVybiBuZXcgWFNGbG9hdChNYXRoLmFicyhmbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBOdW1lcmljVHlwZSBjZWlsaW5nKCkgewotCQlyZXR1cm4gbmV3IFhTRmxvYXQoKGZsb2F0KSBNYXRoLmNlaWwoZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGZsb29yKCkgewotCQlyZXR1cm4gbmV3IFhTRmxvYXQoKGZsb2F0KSBNYXRoLmZsb29yKGZsb2F0X3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kKCkgewotCQlCaWdEZWNpbWFsIHZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoZmxvYXRfdmFsdWUoKSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZSgwLCBSb3VuZGluZ01vZGUuSEFMRl9VUCk7Ci0JCXJldHVybiBuZXcgWFNGbG9hdChyb3VuZC5mbG9hdFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKCkgewotCQlyZXR1cm4gcm91bmRfaGFsZl90b19ldmVuKDApOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBwcmVjaXNpb24gQW4gaW50ZWdlciBwcmVjaXNpb24gCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKGludCBwcmVjaXNpb24pIHsKLQkJQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKF92YWx1ZSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZShwcmVjaXNpb24sIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4pOwotCQlyZXR1cm4gbmV3IFhTRmxvYXQocm91bmQuZmxvYXRWYWx1ZSgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIEFueVR5cGUgY29udmVydEFyZyhBbnlUeXBlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYXJnKTsKLQkJcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCUFueVR5cGUgY2FyZyA9IHJzLmZpcnN0KCk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQkKLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGFyZzsKLQkJSXRlcmF0b3IgaXQgPSBjYXJnLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCUFueVR5cGUgdHlwZSA9IChBbnlUeXBlKSBpdC5uZXh0KCk7Ci0JCQlpZiAodHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpIHx8Ci0JCQkJdHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJfQotCQl9Ci0KLQkJY2FyZyA9IGNvbnN0cnVjdG9yKGNhcmcpOwotCQlyZXR1cm4gY2FyZzsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dEYXkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHRGF5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZDY4NzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dEYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIENvcnJlY3QgcGFyc2luZyBvZiBEYXRlIHRvIGdldCBkYXkgY29ycmVjdGx5LgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gZml4ZWQgaXNzdWUgd2l0aCBjYXN0aW5nLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNHRGF5IGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfREFZID0gInhzOmdEYXkiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXkKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF5Ci0JICovCi0JcHVibGljIFhTR0RheShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCQlpZiAodHogIT0gbnVsbCkgewotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JCQlfdHogPSB0ejsKLQkJfQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF5Ci0JICovCi0JcHVibGljIFhTR0RheSgpIHsKLQkJdGhpcyhuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJnRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ0RheSI7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR0RheQotCSAqIHJlcHJlc2VudGF0aW9uIG9mIGl0LgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gVGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNHRGF5IHBhcnNlX2dEYXkoU3RyaW5nIHN0cikgewotCQkKLQkJU3RyaW5nIHN0YXJ0ZGF0ZSA9ICIxOTcyLTEyLSI7Ci0JCVN0cmluZyBzdGFydHRpbWUgPSAiVDAwOjAwOjAwIjsKLQotCQlpbnQgaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJysnLCBzdHIubGVuZ3RoKCkpOwotCQkKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJy0nKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJ1onLCBzdHIubGVuZ3RoKCkpOwotCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCWludCB6SW5kZXggPSBzdHIubGFzdEluZGV4T2YoJ1onLCBzdHIubGVuZ3RoKCkpOwotCQkJaWYgKHpJbmRleCA9PSAtMSkgewotCQkJCWlmIChpbmRleCA+IDQpCi0JCQkJCXpJbmRleCA9IGluZGV4OwotCQkJfQotCQkJaWYgKHpJbmRleCA9PSAtMSkgewotCQkJCXpJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycpOwotCQkJfQotCQkJCi0JCQlTdHJpbmdbXSBzcGxpdCA9IHN0ci5zcGxpdCgiLSIpOwotCQkJc3RhcnRkYXRlICs9IHNwbGl0WzNdLnJlcGxhY2UoIloiLCAiIik7Ci0JCQkKLQkJCWlmIChzdHIuaW5kZXhPZignVCcpICE9IC0xKSB7Ci0JCQkJaWYgKHNwbGl0Lmxlbmd0aCA+IDQpIHsKLQkJCQkJU3RyaW5nW10gdGltZXNwbGl0ID0gc3BsaXRbNF0uc3BsaXQoIjoiKTsKLQkJCQkJaWYgKHRpbWVzcGxpdC5sZW5ndGggPCAzKSB7Ci0JCQkJCQlzdGFydHRpbWUgPSAiVCI7Ci0JCQkJCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihzdGFydHRpbWUpOwotCQkJCQkJZm9yIChpbnQgY250ID0gMDsgY250IDwgdGltZXNwbGl0Lmxlbmd0aDsgY250KyspIHsKLQkJCQkJCQlidWYuYXBwZW5kKHRpbWVzcGxpdFtjbnRdICsgIjoiKTsKLQkJCQkJCX0KLQkJCQkJCWJ1Zi5hcHBlbmQoIjAwIik7Ci0JCQkJCQlzdGFydHRpbWUgPSBidWYudG9TdHJpbmcoKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXN0YXJ0dGltZSArPSB0aW1lc3BsaXRbMF0gKyAiOiIgKyB0aW1lc3BsaXRbMV0gKyAiOiIgKyB0aW1lc3BsaXRbMl07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlzdGFydGRhdGUgPSBzdGFydGRhdGUudHJpbSgpOwotCQkJc3RhcnRkYXRlICs9IHN0YXJ0dGltZTsKLQotCQkJaWYgKHpJbmRleCAhPSAtMSkgewotCQkJCQotCQkJCXN0YXJ0ZGF0ZSArPSBzdHIuc3Vic3RyaW5nKHpJbmRleCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGFydGRhdGUgKz0gc3RyICsgc3RhcnR0aW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZShzdGFydGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHRGF5KGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdEYXkgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ0RheSBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBkYXkKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCVhTR0RheSB2YWwgPSBjYXN0R0RheShhYXQpOwotCi0JCWlmICh2YWwgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKHZhbCk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTR0RheSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdNb250aCIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXIiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyTW9udGgiKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkKLQlwcml2YXRlIFhTR0RheSBjYXN0R0RheShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHRGF5KSB7Ci0JCQlYU0dEYXkgZ2RheSA9IChYU0dEYXkpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHRGF5KGdkYXkuY2FsZW5kYXIoKSwgZ2RheS50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR0RheShkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHRGF5KGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCXJldHVybiBwYXJzZV9nRGF5KGFhdC5zdHJpbmdfdmFsdWUoKSk7IAotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyCi0JICovCi0JcHVibGljIGludCBkYXkoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gdGltZXpvbmVkKCkgewotCQlyZXR1cm4gX3RpbWV6b25lZDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBkYXkKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIi0tLSI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCQkKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSwgMik7Ci0JCQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCWludCBocnMgPSB0eigpLmhvdXJzKCk7Ci0JCQlpbnQgbWluID0gdHooKS5taW51dGVzKCk7Ci0JCQlkb3VibGUgc2VjcyA9IHR6KCkuc2Vjb25kcygpOwotCQkJaWYgKGhycyA9PSAwICYmIG1pbiA9PSAwICYmIHNlY3MgPT0gMCkgewotCQkJICByZXQgKz0gIloiOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkgIFN0cmluZyB0Wm9uZVN0ciA9ICIiOwotCQkJICBpZiAodHooKS5uZWdhdGl2ZSgpKSB7Ci0JCQkJdFpvbmVTdHIgKz0gIi0iOyAgCi0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJdFpvbmVTdHIgKz0gIisiOyAKLQkJCSAgfQotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQoaHJzLCAyKTsgIAotCQkJICB0Wm9uZVN0ciArPSAiOiI7Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChtaW4sIDIpOwotCQkJICAKLQkJCSAgcmV0ICs9IHRab25lU3RyOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmdEYXkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfR19EQVk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dEYXkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHRGF5IHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgZGF5LiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTR0RheSB2YWwgPSAoWFNHRGF5KSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU0dEYXkuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCQkKLQkJcmV0dXJuIHRoaXNjYWwuZXF1YWxzKHRoYXRjYWwpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR01vbnRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR01vbnRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZDgzYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gRml4ZWQgcGFyc2luZyBvZiBnTW9udGggdmFsdWVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0dNb250aCBleHRlbmRzIENhbGVuZGFyVHlwZSBpbXBsZW1lbnRzIENtcEVxIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19HX01PTlRIID0gInhzOmdNb250aCI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9udGgKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGgoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQkJaWYgKHR6ICE9IG51bGwpIHsKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCQkJX3R6ID0gdHo7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoCi0JICovCi0JcHVibGljIFhTR01vbnRoKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdNb250aCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImdNb250aCI7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHTW9udGgKLQkgKiByZXByZXNlbnRhdGlvbiBvZiBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gVGhlIFhTR01vbnRoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dNb250aCBwYXJzZV9nTW9udGgoU3RyaW5nIHN0cikgewotCi0JCVN0cmluZyBzdGFydGRhdGUgPSAiMTk3Mi0iOwotCQlTdHJpbmcgc3RhcnR0aW1lID0gIlQwMDowMDowMCI7Ci0KLQkJaW50IGluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCcrJywgc3RyLmxlbmd0aCgpKTsKLQkJCi0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCctJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQlpbnQgekluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQlpZiAoaW5kZXggPiAzKSB7Ci0JCQkJCXpJbmRleCA9IGluZGV4OwotCQkJCX0KLQkJCX0KLQkJCQotCQkJU3RyaW5nW10gc3BsaXQgPSBzdHIuc3BsaXQoIi0iKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzcGxpdFsyXS5yZXBsYWNlKCJaIiwgIiIpICsgIi0wMSI7Ci0JCQkKLQkJCWlmIChzdHIuaW5kZXhPZignVCcpICE9IC0xKSB7IAotCQkJCWlmIChzcGxpdC5sZW5ndGggPiAzKSB7Ci0JCQkJCVN0cmluZ1tdIHRpbWVzcGxpdCA9IHNwbGl0WzNdLnNwbGl0KCI6Iik7Ci0JCQkJCWlmICh0aW1lc3BsaXQubGVuZ3RoIDwgMykgewotCQkJCQkJc3RhcnR0aW1lID0gIlQiOwotCQkJCQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoc3RhcnR0aW1lKTsKLQkJCQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHRpbWVzcGxpdC5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJCQkJYnVmLmFwcGVuZCh0aW1lc3BsaXRbY250XSArICI6Iik7Ci0JCQkJCQl9Ci0JCQkJCQlidWYuYXBwZW5kKCIwMCIpOwotCQkJCQkJc3RhcnR0aW1lID0gYnVmLnRvU3RyaW5nKCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdGFydHRpbWUgKz0gdGltZXNwbGl0WzBdICsgIjoiICsgdGltZXNwbGl0WzFdICsgIjoiICsgdGltZXNwbGl0WzJdOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJc3RhcnRkYXRlID0gc3RhcnRkYXRlLnRyaW0oKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzdGFydHRpbWU7Ci0KLQkJCWlmICh6SW5kZXggIT0gLTEpIHsKLQkJCQlzdGFydGRhdGUgKz0gc3RyLnN1YnN0cmluZyh6SW5kZXgpOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RhcnRkYXRlICs9IHN0ciArIHN0YXJ0dGltZTsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSBYU0RhdGVUaW1lLnBhcnNlRGF0ZVRpbWUoc3RhcnRkYXRlKTsKLQkJaWYgKGR0ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gbmV3IFhTR01vbnRoKGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aCBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBtb250aAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQlYU0dNb250aCB2YWwgPSBjYXN0R01vbnRoKGFhdCk7Ci0KLQkJaWYgKHZhbCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQodmFsKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhck1vbnRoIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lIHx8IAotCQkJYWF0IGluc3RhbmNlb2YgWFNHTW9udGgpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgWFNHTW9udGggY2FzdEdNb250aChBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHTW9udGgpIHsKLQkJCVhTR01vbnRoIGdtID0gKFhTR01vbnRoKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoKGdtLmNhbGVuZGFyKCksIGdtLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGgoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gcGFyc2VfZ01vbnRoKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gdGltZXpvbmVkKCkgewotCQlyZXR1cm4gX3RpbWV6b25lZDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGgKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICItLSI7Ci0KLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChtb250aCgpLCAyKTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z01vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfTU9OVEg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLQkgKiByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHTW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHTW9udGggdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBtb250aC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0dNb250aCB2YWwgPSAoWFNHTW9udGgpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNHTW9udGguY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmVxdWFscyh0aGF0Y2FsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aERheS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aERheS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjIzM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHTW9udGhEYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEZpeCBwYXJzaW5nIG9mIGdNb250aERheSB0byB2YWxpZCBkYXRlCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBmaXggdGltZXpvbmUgYWRqdXN0bWVudCBjcmVhdGlvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIGNhc3RpbmcgaXNzdWUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9udGhEYXkgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTR01vbnRoRGF5IGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfTU9OVEhfREFZID0gInhzOmdNb250aERheSI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQkKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGhEYXkoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQkJaWYgKHR6ICE9IG51bGwpIHsKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCQkJX3R6ID0gdHo7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGhEYXkoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZ01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ01vbnRoRGF5IjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb250aCBhbmQgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0JICogWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgaXQuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSAoYW5kIG9wdGlvbmFsCi0JICogICAgICAgICAgICB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dNb250aERheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNHTW9udGhEYXkgcGFyc2VfZ01vbnRoRGF5KFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgc3RhcnRkYXRlID0gIjE5NzItIjsKLQkJU3RyaW5nIHN0YXJ0dGltZSA9ICJUMDA6MDA6MDAiOwotCi0JCWludCBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycsIHN0ci5sZW5ndGgoKSk7Ci0JCQkJCi0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCctJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQlpbnQgekluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQlpZiAoaW5kZXggPiA1KQotCQkJCQl6SW5kZXggPSBpbmRleDsKLQkJCX0KLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQl6SW5kZXggPSBzdHIubGFzdEluZGV4T2YoJysnKTsKLQkJCX0KLQotCQkJCi0JCQlTdHJpbmdbXSBzcGxpdCA9IHN0ci5zcGxpdCgiLSIpOwotCQkJc3RhcnRkYXRlICs9IHNwbGl0WzJdLnJlcGxhY2UoIloiLCAiIikgKyAiLSIgKyBzcGxpdFszXS5yZXBsYWNlKCJaIiwgIiIpLnN1YnN0cmluZygwLCAyKTsKLQkJCQotCQkJaWYgKHNwbGl0Lmxlbmd0aCA+IDQpIHsKLQkJCQlTdHJpbmdbXSB0aW1lc3BsaXQgPSBzcGxpdFs0XS5zcGxpdCgiOiIpOwotCQkJCWlmICh0aW1lc3BsaXQubGVuZ3RoIDwgMykgewotCQkJCQlzdGFydHRpbWUgPSAiVCI7Ci0JCQkJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN0YXJ0dGltZSk7Ci0JCQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHRpbWVzcGxpdC5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJCQlidWYuYXBwZW5kKHRpbWVzcGxpdFtjbnRdICsgIjoiKTsKLQkJCQkJfQotCQkJCQlidWYuYXBwZW5kKCIwMCIpOwotCQkJCQlzdGFydHRpbWUgPSBidWYudG9TdHJpbmcoKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzdGFydHRpbWUgKz0gdGltZXNwbGl0WzBdICsgIjoiICsgdGltZXNwbGl0WzFdICsgIjoiICsgdGltZXNwbGl0WzJdOwotCQkJCX0KLQkJCX0KLQotCQkJc3RhcnRkYXRlID0gc3RhcnRkYXRlLnRyaW0oKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzdGFydHRpbWU7Ci0KLQkJCQotCQkJaWYgKHpJbmRleCAhPSAtMSkgewotCQkJCXN0YXJ0ZGF0ZSArPSBzdHIuc3Vic3RyaW5nKHpJbmRleCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGFydGRhdGUgKz0gc3RhcnR0aW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZShzdGFydGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHTW9udGhEYXkoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnTW9udGhEYXkgaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ01vbnRoRGF5IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTVGltZSB8fCBpc0dEYXRhVHlwZShhYXQpIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCQlYU0dNb250aERheSB2YWwgPSBjYXN0R01vbnRoRGF5KGFhdCk7Ci0KLQkJaWYgKHZhbCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQodmFsKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnTW9udGgiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhck1vbnRoIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lIHx8IAotCQkJYWF0IGluc3RhbmNlb2YgWFNHTW9udGhEYXkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgWFNHTW9udGhEYXkgY2FzdEdNb250aERheShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHTW9udGhEYXkpIHsKLQkJCVhTR01vbnRoRGF5IGdtZCA9IChYU0dNb250aERheSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dNb250aERheShnbWQuY2FsZW5kYXIoKSwgZ21kLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGhEYXkoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoRGF5KGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gcGFyc2VfZ01vbnRoRGF5KGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgaW50IGRheSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICItLSI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCQkKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChtb250aCgpLCAyKTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpLCAyKTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfTU9OVEhfREFZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aERheQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU0dNb250aERheSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoIGFuZCBkYXkuCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHTW9udGhEYXkgdmFsID0gKFhTR01vbnRoRGF5KSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTR01vbnRoRGF5LmNsYXNzKTsKLQotCQlyZXR1cm4gY2FsZW5kYXIoKS5lcXVhbHModmFsLmNhbGVuZGFyKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NmQyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeCBjYXN0aW5nIGlzc3Vlcy4gCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0dZZWFyIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfWUVBUiA9ICJ4czpnWWVhciI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggdG8gYmUgc3RvcmVkCi0JICogQHBhcmFtIHR6Ci0JICogICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aAotCSAqLwotCXB1YmxpYyBYU0dZZWFyKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0eikgewotCQlfY2FsZW5kYXIgPSBjYWw7Ci0JCWlmICh0eiAhPSBudWxsKSB7Ci0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQkJCV90eiA9IHR6OwotCQl9Ci0JCQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhcgotCSAqLwotCXB1YmxpYyBYU0dZZWFyKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdZZWFyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ1llYXIiOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHWWVhcgotCSAqIHJlcHJlc2VudGF0aW9uIG9mIGl0LgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dZZWFyIHBhcnNlX2dZZWFyKFN0cmluZyBzdHIpIHsKLQotCi0JCVN0cmluZyB5ZWFyID0gIiI7Ci0JCVN0cmluZyBtb250aERheXRpbWUgPSAiLTAxLTAxVDAwOjAwOjAwLjAiOwotCQkKLQotCQlpbnQgaW5kZXggPSBzdHIuaW5kZXhPZignKycsIDEpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgMSk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJ1onLCAxKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl5ZWFyID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQl5ZWFyICs9IG1vbnRoRGF5dGltZTsKLQkJCXllYXIgKz0gc3RyLnN1YnN0cmluZyhpbmRleCwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlIHsKLQkJCXllYXIgPSBzdHIgKyBtb250aERheXRpbWU7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHllYXIpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHWWVhcihkdC5jYWxlbmRhcigpLCBkdC50eigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJWFNHWWVhciB2YWwgPSBjYXN0R1llYXIoYWF0KTsKLQotCQlpZiAodmFsID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCi0JCXJzLmFkZCh2YWwpOwotCi0JCXJldHVybiByczsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdNb250aCIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXJNb250aCIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTR1llYXIpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgWFNHWWVhciBjYXN0R1llYXIoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR1llYXIpIHsKLQkJCVhTR1llYXIgZ3kgPSAoWFNHWWVhcikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dZZWFyKGd5LmNhbGVuZGFyKCksIGd5LnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhcihkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhcihkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX2dZZWFyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoeWVhcigpLCA0KTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z1llYXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfR19ZRUFSOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTR1llYXIgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTR1llYXIgdmFsID0gKFhTR1llYXIpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTR1llYXIuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmVxdWFscyh0aGF0Y2FsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXJNb250aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyTW9udGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxMTQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXJNb250aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gZml4ZWQgY2FzdGluZyBpc3N1ZXMuIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFllYXJNb250aCBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNHWWVhck1vbnRoIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfWUVBUl9NT05USCA9ICJ4czpnWWVhck1vbnRoIjsKLQlwcml2YXRlIENhbGVuZGFyIF9jYWxlbmRhcjsKLQlwcml2YXRlIGJvb2xlYW4gX3RpbWV6b25lZDsKLQlwcml2YXRlIFhTRHVyYXRpb24gX3R6OwotCi0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aAotCSAqIAotCSAqIEBwYXJhbSBjYWwKLQkgKiAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHllYXIgYW5kIG1vbnRoCi0JICovCi0JcHVibGljIFhTR1llYXJNb250aChDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCQlpZiAodHogIT0gbnVsbCkgewotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JCQlfdHogPSB0ejsKLQkJfQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhciBhbmQgbW9udGgKLQkgKi8KLQlwdWJsaWMgWFNHWWVhck1vbnRoKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdZZWFyTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJnWWVhck1vbnRoIjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB5ZWFyIGFuZCBtb250aCBhbmQgY29uc3RydWN0cyBhIG5ldwotCSAqIFhTR1llYXJNb250aCByZXByZXNlbnRhdGlvbiBvZiBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCAoYW5kIG9wdGlvbmFsCi0JICogICAgICAgICAgICB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTR1llYXJNb250aCBwYXJzZV9nWWVhck1vbnRoKFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgeWVhck1vbnRoID0gIiI7Ci0JCVN0cmluZyBkYXlUaW1lID0gIi0wMVQwMDowMDowMC4wIjsKLQotCQlpbnQgaW5kZXggPSBzdHIuaW5kZXhPZignKycsIDEpOwotCQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJy0nLCAxKTsKLQkJCWlmIChpbmRleCA9PSAtMSkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJy0nLCBpbmRleCArIDEpOwotCQl9Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJ1onLCAxKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl5ZWFyTW9udGggPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCXllYXJNb250aCArPSBkYXlUaW1lOwotCQkJeWVhck1vbnRoICs9IHN0ci5zdWJzdHJpbmcoaW5kZXgsIHN0ci5sZW5ndGgoKSk7Ci0JCX0gZWxzZSB7Ci0JCQl5ZWFyTW9udGggPSBzdHIgKyBkYXlUaW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZSh5ZWFyTW9udGgpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHWWVhck1vbnRoKGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXJNb250aCBpbgotCSAqIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnWWVhck1vbnRoIGlzIHRvIGJlCi0JICogICAgICAgICAgICBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU1RpbWUgfHwgaXNHRGF0YVR5cGUoYWF0KSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8IGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJWFNHWWVhck1vbnRoIHZhbCA9IGNhc3RHWWVhck1vbnRoKGFhdCk7IAotCi0JCWlmICh2YWwgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKHZhbCk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0dEYXRhVHlwZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlTdHJpbmcgdHlwZSA9IGFhdC5zdHJpbmdfdHlwZSgpOwotCQlpZiAodHlwZS5lcXVhbHMoInhzOmdNb250aERheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z0RheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z01vbnRoIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhciIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR1llYXJNb250aCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCQkKLQl9Ci0JCi0JcHJpdmF0ZSBYU0dZZWFyTW9udGggY2FzdEdZZWFyTW9udGgoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR1llYXJNb250aCkgewotCQkJWFNHWWVhck1vbnRoIGd5bSA9IChYU0dZZWFyTW9udGgpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhck1vbnRoKGd5bS5jYWxlbmRhcigpLCBneW0udHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCVhTRGF0ZSBkYXRlID0gKFhTRGF0ZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dZZWFyTW9udGgoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR1llYXJNb250aChkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX2dZZWFyTW9udGgoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyCi0JICovCi0JcHVibGljIGludCB5ZWFyKCkgewotCQlpbnQgeSA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuWUVBUik7Ci0JCWlmIChfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkVSQSkgPT0gR3JlZ29yaWFuQ2FsZW5kYXIuQkMpCi0JCQl5ICo9IC0xOwotCi0JCXJldHVybiB5OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gdGltZXpvbmVkKCkgewotCQlyZXR1cm4gX3RpbWV6b25lZDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhciBhbmQgbW9udGgKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoeWVhcigpLCA0KTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJCi0JCQlpbnQgaHJzID0gdHooKS5ob3VycygpOwotCQkJaW50IG1pbiA9IHR6KCkubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSB0eigpLnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCSAgcmV0ICs9ICJaIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJICBTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCSAgaWYgKHR6KCkubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpnWWVhck1vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfWUVBUl9NT05USDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyTW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHWWVhck1vbnRoIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhciBhbmQgbW9udGguCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHWWVhck1vbnRoIHZhbCA9IChYU0dZZWFyTW9udGgpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNHWWVhck1vbnRoLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9CQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0hleEJpbmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0hleEJpbmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWIwZTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNIZXhCaW5hcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MTA1NCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjI4MjIzIC0gZml4ZWQgY2FzdGluZyBpc3N1ZS4gIE5lZWRlZCB0byBlbmNvZGUgdGhlIHZhbHVlLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYudXRpbC5CYXNlNjQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi51dGlsLkhleEJpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6aGV4QmluYXJ5IGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0hleEJpbmFyeSBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSEVYX0JJTkFSWSA9ICJ4czpoZXhCaW5hcnkiOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTSGV4QmluYXJ5KFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU0hleEJpbmFyeSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmhleEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19IRVhfQklOQVJZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiaGV4QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiaGV4QmluYXJ5IjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgaGV4QmluYXJ5IHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlLnRvVXBwZXJDYXNlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBoZXhCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotCSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBoZXhCaW5hcnkgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGhleEJpbmFyeSB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBoZXhCaW5hcnkgdmFsdWUgCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIGhleEJpbmFyeSB2YWx1ZSAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8IGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJU3RyaW5nIHN0cl92YWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWlmICghKGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8Ci0JCQkJICBhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fAotCQkJCSAgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljIHx8Ci0JCQkJICBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSkpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyB8fCBhYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgewotCQkJU3RyaW5nW10gbm9uSGV4VmFsdWVzID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJbm9uSGV4VmFsdWVzID0gc3RyX3ZhbHVlLnNwbGl0KCJbMC05YS1mQS1GXSIpOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCX0KLQkJCQotCQkJU3RyaW5nW10gYmluVmFsdWVzID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJYmluVmFsdWVzID0gc3RyX3ZhbHVlLnNwbGl0KCJbMC0xXSIpOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCX0KLQkJCQotCQkJaWYgKG5vbkhleFZhbHVlcy5sZW5ndGggPiAwIHx8IGJpblZhbHVlcy5sZW5ndGggPT0gMCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yKCk7Ci0JCQl9CQkJCi0JCX0KLQotCQkKLQkJYnl0ZVtdIGRlY29kZWRWYWx1ZSA9IG51bGw7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkpIHsKLQkJCWRlY29kZWRWYWx1ZSA9IEJhc2U2NC5kZWNvZGUoc3RyX3ZhbHVlKTsKLQkJCWRlY29kZWRWYWx1ZSA9IEhleEJpbi5lbmNvZGUoZGVjb2RlZFZhbHVlKS5nZXRCeXRlcygpOwotCQl9IGVsc2UgewotCQkJZGVjb2RlZFZhbHVlID0gc3RyX3ZhbHVlLmdldEJ5dGVzKCk7Ci0gCQl9Ci0JCQotCQlpZiAoZGVjb2RlZFZhbHVlICE9IG51bGwpIHsKLQkJICBycy5hZGQobmV3IFhTSGV4QmluYXJ5KG5ldyBTdHJpbmcoZGVjb2RlZFZhbHVlKSkpOwotCQl9Ci0JCWVsc2UgewotCQkgIC8vIGludmFsaWQgaGV4QmluYXJ5IHN0cmluZwotCQkgIHRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7CQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCi0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0JICogbXVzdCBiZSBvZiB0eXBlIGhleEJpbmFyeQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgc2FtZS4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqICAgICAgICAgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0gICAgICBTdHJpbmcgdmFsVG9Db21wYXJlID0gYXJnLnN0cmluZ192YWx1ZSgpOwotICAgICAgCi0gICAgICBieXRlW10gdmFsdWUxID0gSGV4QmluLmRlY29kZShfdmFsdWUpOwotICAgICAgYnl0ZVtdIHZhbHVlMiA9IEhleEJpbi5kZWNvZGUodmFsVG9Db21wYXJlKTsKLSAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkgewotICAgIAlyZXR1cm4gZmFsc2U7ICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgaW50IGxlbiA9IHZhbHVlMS5sZW5ndGg7Ci0gICAgICBpZiAobGVuICE9IHZhbHVlMi5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmICh2YWx1ZTFbaV0gIT0gdmFsdWUyW2ldKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiB0cnVlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0lELmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSUQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThmZDkwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSUQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIGJ1ZyAyMjgyMjMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0ODQyIC0gaW1wcm92aW5nIHN1cHBvcnQgZm9yIHRoZSBkYXRhIHR5cGVzIE5hbWUsIE5DTmFtZSwgRU5USVRZLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQsIElEUkVGIGFuZCBOTVRPS0VOLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qCi0gKiBJbXBsZW1lbnRzIHRoZSB4czpJRCBkYXRhIHR5cGUuCi0gKiAKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFhTSUQgZXh0ZW5kcyBYU05DTmFtZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSUQgPSAieHM6SUQiOwotCi0JcHVibGljIFhTSUQoU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JcHVibGljIFhTSUQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0lEOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJJRCI7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlTdHJpbmcgc3RyVmFsdWUgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0JCQotCQlpZiAoIWlzQ29uc3RyYWludFNhdGlzZmllZChzdHJWYWx1ZSkpIHsKLQkJCS8vIGludmFsaWQgaW5wdXQKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTSUQoc3RyVmFsdWUpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSURSRUYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJRFJFRi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdhN2FiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJRFJFRi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgYnVnIDIyODIyMyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ4NDIgLSBpbXByb3Zpbmcgc3VwcG9ydCBmb3IgdGhlIGRhdGEgdHlwZXMgTmFtZSwgTkNOYW1lLCBFTlRJVFksIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCwgSURSRUYgYW5kIE5NVE9LRU4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoKLSAqIEltcGxlbWVudHMgdGhlIHhzOklEUkVGIGRhdGEgdHlwZS4KLSAqIAotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgWFNJRFJFRiBleHRlbmRzIFhTTkNOYW1lIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19JRFJFRiA9ICJ4czpJRFJFRiI7Ci0KLQlwdWJsaWMgWFNJRFJFRihTdHJpbmcgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0KLQlwdWJsaWMgWFNJRFJFRigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfSURSRUY7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIklEUkVGIjsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCVN0cmluZyBzdHJWYWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWlmICghaXNDb25zdHJhaW50U2F0aXNmaWVkKHN0clZhbHVlKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJzLmFkZChuZXcgWFNJRFJFRihzdHJWYWx1ZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxZmUwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NTEwNSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmludCBkYXRhIHR5cGUNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsNCi0NCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsNCi0NCi1wdWJsaWMgY2xhc3MgWFNJbnQgZXh0ZW5kcyBYU0xvbmcgew0KLQkNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0lOVCA9ICJ4czppbnQiOw0KLQ0KLQkvKioNCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwDQotCSAqLw0KLQlwdWJsaWMgWFNJbnQoKSB7DQotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOw0KLQl9DQotCQ0KLQkvKioNCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50IHZhbHVlDQotCSAqIA0KLQkgKiBAcGFyYW0geA0KLQkgKiAgICAgICAgICAgIEludCB0byBiZSBzdG9yZWQNCi0JICovDQotCXB1YmxpYyBYU0ludChCaWdJbnRlZ2VyIHgpIHsNCi0JCXN1cGVyKHgpOw0KLQl9DQotCQ0KLQkvKioNCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUNCi0JICogDQotCSAqIEByZXR1cm4gInhzOmludCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7DQotCQlyZXR1cm4gWFNfSU5UOw0KLQl9DQotCQ0KLQkvKioNCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUNCi0JICogDQotCSAqIEByZXR1cm4gImludCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgew0KLQkJcmV0dXJuICJpbnQiOw0KLQl9DQotCQ0KLQkvKioNCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAnaW50JyBpbiB0aGUNCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UNCi0JICogDQotCSAqIEBwYXJhbSBhcmcNCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgaW50IGlzIHRvIGJlIGV4dHJhY3RlZA0KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnaW50JyBzdXBwbGllZA0KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcg0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3Igew0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOw0KLQ0KLQkJaWYgKGFyZy5lbXB0eSgpKQ0KLQkJCXJldHVybiByczsNCi0NCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50DQotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhbiBpbnQuDQotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOw0KLQ0KLQkJdHJ5IHsNCi0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7DQotCQkJDQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nDQotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoLTIxNDc0ODM2NDhMKTsNCi0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigyMTQ3NDgzNjQ3TCk7CQkJDQotDQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgew0KLQkJCSAgIC8vIGludmFsaWQgaW5wdXQNCi0JCQkgICBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkNCi0JCQl9DQotCQkJDQotCQkJcnMuYWRkKG5ldyBYU0ludChiaWdJbnQpKTsNCi0JCQkNCi0JCQlyZXR1cm4gcnM7DQotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgew0KLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7DQotCQl9DQotDQotCX0NCi0JDQotfQ0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnRlZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSW50ZWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTkwNmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZS4gVXNpbmcgSmF2YQotICogICAgICAgICAgICAgICAgICAgICAgQmlnSW50ZWdlciBjbGFzcyB0byBlbmhhbmNlIG51bWVyaWNhbCByYW5nZSB0byAtSU5GIC0+ICtJTkYuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXggY29tcGFyaXNpb24gdG8gemVyby4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeCBjYXN0aW5nIGlzc3Vlcy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBBZGRlZCBjb25zdHJ1Y3RvciBmcm9tIHN0cmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5tYXRoLlJvdW5kaW5nTW9kZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBJbnRlZ2VyIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0ludGVnZXIgZXh0ZW5kcyBYU0RlY2ltYWwgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0lOVEVHRVIgPSAieHM6aW50ZWdlciI7Ci0JcHJpdmF0ZSBCaWdJbnRlZ2VyIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU0ludGVnZXIoKSB7Ci0JCXRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKDApKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBpbnRlZ2VyCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIEludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTSW50ZWdlcihCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIobmV3IEJpZ0RlY2ltYWwoeCkpOwotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGludGVnZXIKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgSW50ZWdlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNJbnRlZ2VyKFN0cmluZyB4KSB7Ci0JCXN1cGVyKG5ldyBCaWdEZWNpbWFsKHgpKTsKLQkJX3ZhbHVlID0gbmV3IEJpZ0ludGVnZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czppbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0lOVEVHRVI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJpbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiaW50ZWdlciI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgd2hldGhlciB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwCi0JICogCi0JICogQHJldHVybiBUcnVlIGlzIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGlzIDAuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHplcm8oKSB7Ci0JCXJldHVybiAoX3ZhbHVlLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID09IDApOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgaW50ZWdlciBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGludGVnZXIgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGFuIGludGVnZXIuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24gfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JCQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBjYXN0SW50ZWdlcihhYXQpOwotCQkJcnMuYWRkKG5ldyBYU0ludGVnZXIoYmlnSW50KSk7Ci0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZExleGljYWxWYWx1ZSgpOwotCQl9Ci0KLQl9Ci0JCi0JcHJpdmF0ZSBCaWdJbnRlZ2VyIGNhc3RJbnRlZ2VyKEFueVR5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCWlmIChhYXQuc3RyaW5nX3ZhbHVlKCkuZXF1YWxzKCJ0cnVlIikpIHsKLQkJCQlyZXR1cm4gQmlnSW50ZWdlci5PTkU7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBCaWdJbnRlZ2VyLlpFUk87Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwgfHwgYWF0IGluc3RhbmNlb2YgWFNGbG9hdCB8fAotCQkJCWFhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSB7Ci0JCQkJQmlnRGVjaW1hbCBiaWdEZWMgPSAgbmV3IEJpZ0RlY2ltYWwoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQlyZXR1cm4gYmlnRGVjLnRvQmlnSW50ZWdlcigpOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55VHlwZSBhYXQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJaWYgKGlzTGV4aWNhbFZhbHVlKGFhdC5zdHJpbmdfdmFsdWUoKSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQl9Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNMZXhpY2FsVmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0JCQotCQl0cnkgewotCQkJbmV3IEJpZ0ludGVnZXIodmFsdWUpOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgaW50ZWdlciB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgaW50ZWdlciB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQmlnSW50ZWdlciBpbnRfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgaW50ZWdlciBzdG9yZWQgdG8gdGhhdCBzdXBwbGllZAotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9pbnQoQmlnSW50ZWdlciB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JCXNldF9kb3VibGUoeC5pbnRWYWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBhZGRpdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCUFueVR5cGUgYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0ludGVnZXIpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCi0JCVhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKWF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgCi0JCQkJICAgICAgICAgICAgICAgICAgIFhTSW50ZWdlcihpbnRfdmFsdWUoKS5hZGQodmFsLmludF92YWx1ZSgpKSkpOwotCQkKLQl9Ci0KLQkKLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGFyZzsKLQkJSXRlcmF0b3IgaXQgPSBjYXJnLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCUFueVR5cGUgdHlwZSA9IChBbnlUeXBlKSBpdC5uZXh0KCk7Ci0JCQlpZiAodHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpIHx8Ci0JCQkJdHlwZS5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6c3RyaW5nIikpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJCX0KLQkJfQotCQljYXJnID0gY29uc3RydWN0b3IoY2FyZyk7Ci0JCXJldHVybiBjYXJnOwotCX0JCi0JCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQlYU0ludGVnZXIgdmFsID0gKFhTSW50ZWdlcikgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTSW50ZWdlci5jbGFzcyk7Ci0JCQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IAotCQkJCSAgICAgICAgICAgICAgICAgWFNJbnRlZ2VyKGludF92YWx1ZSgpLnN1YnRyYWN0KHZhbC5pbnRfdmFsdWUoKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG11bHRpcGxpY2F0aW9uLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0aW1lcyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0ludGVnZXIuY2xhc3MpOwotCQkKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyAKLQkJCQkgICAgICAgICAgICAgICAgIFhTSW50ZWdlcihpbnRfdmFsdWUoKS5tdWx0aXBseSh2YWwuaW50X3ZhbHVlKCkpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtb2QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNJbnRlZ2VyLmNsYXNzKTsKLQkJQmlnSW50ZWdlciByZXN1bHQgPSBpbnRfdmFsdWUoKS5yZW1haW5kZXIodmFsLmludF92YWx1ZSgpKTsgCi0JCQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBOZWdhdGVzIHRoZSBpbnRlZ2VyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFhTSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB1bmFyeV9taW51cygpIHsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIoaW50X3ZhbHVlKCkubXVsdGlwbHkoQmlnSW50ZWdlci52YWx1ZU9mKC0xKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBBYnNvbHV0ZXMgdGhlIGludGVnZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgWFNJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE51bWVyaWNUeXBlIGFicygpIHsKLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoaW50X3ZhbHVlKCkuYWJzKCkpOwotCX0KLQkKLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwjZ3Qob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlBbnlUeXBlIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0gICAgICAgIFhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNJbnRlZ2VyLmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gaW50X3ZhbHVlKCkuY29tcGFyZVRvKHZhbC5pbnRfdmFsdWUoKSk7Ci0JCQotCQlyZXR1cm4gY29tcGFyZVJlc3VsdCA+IDA7Ci0JfQotCQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBBbnlUeXBlIGNvbnZlcnRBcmcoQW55VHlwZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGFyZyk7Ci0JCXJzID0gY29uc3RydWN0b3IocnMpOwotCQlBbnlUeXBlIGNhcmcgPSBycy5maXJzdCgpOwotCQlyZXR1cm4gY2FyZzsKLQl9Ci0JCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsI2x0KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQW55VHlwZSBjYXJnID0gY29udmVydEFyZyhhcmcpOwotICAgICAgICBYU0ludGVnZXIgdmFsID0gKFhTSW50ZWdlcikgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTSW50ZWdlci5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICBpbnQgY29tcGFyZVJlc3VsdCA9IGludF92YWx1ZSgpLmNvbXBhcmVUbyh2YWwuaW50X3ZhbHVlKCkpOwotCQkKLQkJcmV0dXJuIGNvbXBhcmVSZXN1bHQgPCAwOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJCi0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQotCQlpZiAodmFsLnplcm8oKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmRpdl96ZXJvKG51bGwpOwotCQl9Ci0JCQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IGdldFZhbHVlKCkuZGl2aWRlKHZhbC5nZXRWYWx1ZSgpLCAxOCwgUm91bmRpbmdNb2RlLkhBTEZfRVZFTik7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlc3VsdCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0xvbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNMb25nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDQ1NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0xvbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0OTUyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLCBvZiB4czpsb25nIGRhdGEgDQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOw0KLQ0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ow0KLQ0KLXB1YmxpYyBjbGFzcyBYU0xvbmcgZXh0ZW5kcyBYU0ludGVnZXIgew0KLQkNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0xPTkcgPSAieHM6bG9uZyI7DQotDQotCS8qKg0KLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDANCi0JICovDQotCXB1YmxpYyBYU0xvbmcoKSB7DQotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOw0KLQl9DQotCQ0KLQkvKioNCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbG9uZyB2YWx1ZQ0KLQkgKiANCi0JICogQHBhcmFtIHgNCi0JICogICAgICAgICAgICBMb25nIHRvIGJlIHN0b3JlZA0KLQkgKi8NCi0JcHVibGljIFhTTG9uZyhCaWdJbnRlZ2VyIHgpIHsNCi0JCXN1cGVyKHgpOw0KLQl9DQotCQ0KLQkvKioNCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUNCi0JICogDQotCSAqIEByZXR1cm4gInhzOmxvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgew0KLQkJcmV0dXJuIFhTX0xPTkc7DQotCX0NCi0JDQotCS8qKg0KLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQ0KLQkgKiANCi0JICogQHJldHVybiAibG9uZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgew0KLQkJcmV0dXJuICJsb25nIjsNCi0JfQ0KLQkNCi0JLyoqDQotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbG9uZyBpbiB0aGUNCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UNCi0JICogDQotCSAqIEBwYXJhbSBhcmcNCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbG9uZyBpcyB0byBiZSBleHRyYWN0ZWQNCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ2xvbmcnIHN1cHBsaWVkDQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7DQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7DQotDQotCQlpZiAoYXJnLmVtcHR5KCkpDQotCQkJcmV0dXJuIHJzOw0KLQ0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQNCi0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgbG9uZy4NCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7DQotDQotCQl0cnkgew0KLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsNCi0JCQkNCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcNCi0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigtOTIyMzM3MjAzNjg1NDc3NTgwOEwpOw0KLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDkyMjMzNzIwMzY4NTQ3NzU4MDdMKTsJCQkNCi0NCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7DQotCQkJICAgLy8gaW52YWxpZCBpbnB1dA0KLQkJCSAgIER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7CQ0KLQkJCX0NCi0JCQkNCi0JCQlycy5hZGQobmV3IFhTTG9uZyhiaWdJbnQpKTsNCi0JCQkNCi0JCQlyZXR1cm4gcnM7DQotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgew0KLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7DQotCQl9DQotDQotCX0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05DTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05DTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmZlNDU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOQ05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0ODQyIC0gaW1wcm92aW5nIHN1cHBvcnQgZm9yIHRoZSBkYXRhIHR5cGVzIE5hbWUsIE5DTmFtZSwgRU5USVRZLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQsIElEUkVGIGFuZCBOTVRPS0VOLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MQ2hhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIE5DTmFtZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNOQ05hbWUgZXh0ZW5kcyBYU05hbWUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OQ19OQU1FID0gInhzOk5DTmFtZSI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFN0cmluZyB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNOQ05hbWUoU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU05DTmFtZSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOk5DTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19OQ19OQU1FOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiTkNOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiTkNOYW1lIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIE5DTmFtZSB3aXRoaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBOQ05hbWUKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOQ05hbWUgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCVN0cmluZyBzdHJWYWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWlmICghaXNDb25zdHJhaW50U2F0aXNmaWVkKHN0clZhbHVlKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJzLmFkZChuZXcgWFNOQ05hbWUoc3RyVmFsdWUpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCS8qCi0JICogQ2hlY2sgaWYgYSBzdHJpbmcgc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50cyBvZiBOQ05hbWUgZGF0YSB0eXBlLgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIGlzQ29uc3RyYWludFNhdGlzZmllZChTdHJpbmcgc3RyVmFsdWUpIHsKLQkJCi0JCWJvb2xlYW4gaXNWYWxpZE5DTmFtZSA9IHRydWU7Ci0JCQotCQlpZiAoIVhNTENoYXIuaXNWYWxpZE5DTmFtZShzdHJWYWx1ZSkpIHsKLQkJCWlzVmFsaWROQ05hbWUgPSBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzVmFsaWROQ05hbWU7Ci0JCQotCX0gLy8gaXNDb25zdHJhaW50U2F0aXNmaWVkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTk1UT0tFTi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05NVE9LRU4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3ODI3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTk1UT0tFTi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ4NDIgLSBpbXByb3Zpbmcgc3VwcG9ydCBmb3IgdGhlIGRhdGEgdHlwZXMgTmFtZSwgTkNOYW1lLCBFTlRJVFksIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCwgSURSRUYgYW5kIE5NVE9LRU4uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxDaGFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTk1UT0tFTiBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNOTVRPS0VOIGV4dGVuZHMgWFNUb2tlbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX05NVE9LRU4gPSAieHM6Tk1UT0tFTiI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFN0cmluZyB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNOTVRPS0VOKFN0cmluZyB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNOTVRPS0VOKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Tk1UT0tFTiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19OTVRPS0VOOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiTk1UT0tFTiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIk5NVE9LRU4iOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgTk1UT0tFTiB3aXRoaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBOTVRPS0VOCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgTk1UT0tFTiBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCVN0cmluZyBzdHJWYWx1ZSA9IGFhdC5zdHJpbmdfdmFsdWUoKTsKLQkJCi0JCWlmICghWE1MQ2hhci5pc1ZhbGlkTm10b2tlbihzdHJWYWx1ZSkpIHsKLQkJCS8vIGludmFsaWQgaW5wdXQKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlycy5hZGQobmV3IFhTTk1UT0tFTihzdHJWYWx1ZSkpOwotCi0JCXJldHVybiByczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyMWE2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ4NDIgLSBpbXByb3Zpbmcgc3VwcG9ydCBmb3IgdGhlIGRhdGEgdHlwZXMgTmFtZSwgTkNOYW1lLCBFTlRJVFksIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCwgSURSRUYgYW5kIE5NVE9LRU4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTENoYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOYW1lIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU05hbWUgZXh0ZW5kcyBYU1Rva2VuIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTkFNRSA9ICJ4czpOYW1lIjsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgU3RyaW5nIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU05hbWUoU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU05hbWUoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05BTUU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiTmFtZSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBOYW1lIHdpdGhpbgotCSAqIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIE5hbWUKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOYW1lIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJU3RyaW5nIHN0clZhbHVlID0gYWF0LnN0cmluZ192YWx1ZSgpOwotCQkKLQkJaWYgKCFYTUxDaGFyLmlzVmFsaWROYW1lKHN0clZhbHVlKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJzLmFkZChuZXcgWFNOYW1lKHN0clZhbHVlKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOZWdhdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOZWdhdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ4ODc0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTmVnYXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOm5lZ2F0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU05lZ2F0aXZlSW50ZWdlciBleHRlbmRzIFhTTm9uUG9zaXRpdmVJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTkVHQVRJVkVfSU5URUdFUiA9ICJ4czpuZWdhdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAtMQotCSAqLwotCXB1YmxpYyBYU05lZ2F0aXZlSW50ZWdlcigpIHsKLQkgIHRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKC0xKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5lZ2F0aXZlSW50ZWdlciB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBuZWdhdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTTmVnYXRpdmVJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpuZWdhdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTkVHQVRJVkVfSU5URUdFUjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJuZWdhdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJuZWdhdGl2ZUludGVnZXIiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIG5lZ2F0aXZlSW50ZWdlcgotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBuZWdhdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ25lZ2F0aXZlSW50ZWdlcicgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgbm9uUG9zaXRpdmVJbnRlZ2VyLgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJLy8gbWluIHZhbHVlIGlzLCAtSU5GCi0JCQkvLyBtYXggdmFsdWUgaXMgLTEKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKC0xTCk7CQkJCi0KLQkJCWlmIChiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU05lZ2F0aXZlSW50ZWdlcihiaWdJbnQpKTsKLQkJCQotCQkJcmV0dXJuIHJzOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uTmVnYXRpdmVJbnRlZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uTmVnYXRpdmVJbnRlZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Y2UwZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vbk5lZ2F0aXZlSW50ZWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjA5IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLCBvZiB4czpub25OZWdhdGl2ZUludGVnZXIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgWFNOb25OZWdhdGl2ZUludGVnZXIgZXh0ZW5kcyBYU0ludGVnZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OT05fTkVHQVRJVkVfSU5URUdFUiA9ICJ4czpub25OZWdhdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTTm9uTmVnYXRpdmVJbnRlZ2VyKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBub25OZWdhdGl2ZUludGVnZXIgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgbm9uTmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU05vbk5lZ2F0aXZlSW50ZWdlcihCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05PTl9ORUdBVElWRV9JTlRFR0VSOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIm5vbk5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIm5vbk5lZ2F0aXZlSW50ZWdlciI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uTmVnYXRpdmVJbnRlZ2VyCi0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbm9uTmVnYXRpdmVJbnRlZ2VyJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBub25OZWdhdGl2ZUludGVnZXIuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMsIDAKLQkJCS8vIG1heCB2YWx1ZSBpcyBJTkYKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDBMKTsJCQkKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTTm9uTmVnYXRpdmVJbnRlZ2VyKGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb25Qb3NpdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb25Qb3NpdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0MTJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uUG9zaXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc1OTkgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOm5vblBvc2l0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU05vblBvc2l0aXZlSW50ZWdlciBleHRlbmRzIFhTSW50ZWdlciB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX05PTl9QT1NJVElWRV9JTlRFR0VSID0gInhzOm5vblBvc2l0aXZlSW50ZWdlciI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNOb25Qb3NpdGl2ZUludGVnZXIoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vblBvc2l0aXZlSW50ZWdlciB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBub25Qb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTTm9uUG9zaXRpdmVJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpub25Qb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTk9OX1BPU0lUSVZFX0lOVEVHRVI7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAibm9uUG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAibm9uUG9zaXRpdmVJbnRlZ2VyIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25Qb3NpdGl2ZUludGVnZXIKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uUG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdub25Qb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIG5vblBvc2l0aXZlSW50ZWdlci4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcywgLUlORgotCQkJLy8gbWF4IHZhbHVlIGlzIDAKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDBMKTsJCQkKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWF4KSA+IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTTm9uUG9zaXRpdmVJbnRlZ2VyKGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb3JtYWxpemVkU3RyaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9ybWFsaXplZFN0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTQ1M2NjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb3JtYWxpemVkU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMDk1ODUgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpub3JtYWxpemVkU3RyaW5nIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ0NzggLSByZWZhY3RvcmluZyBjb2RlIHRvIGNhdGVyIHRvIHhzOnRva2VuIGRhdGEgdHlwZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB4czpub3JtYWxpemVkU3RyaW5nIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU05vcm1hbGl6ZWRTdHJpbmcgZXh0ZW5kcyBYU1N0cmluZyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTk9STUFMSVpFRFNUUklORyA9ICJ4czpub3JtYWxpemVkU3RyaW5nIjsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTTm9ybWFsaXplZFN0cmluZyhTdHJpbmcgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBudWxsCi0JICovCi0JcHVibGljIFhTTm9ybWFsaXplZFN0cmluZygpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOm5vcm1hbGl6ZWRTdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTk9STUFMSVpFRFNUUklORzsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIm5vcm1hbGl6ZWRTdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJub3JtYWxpemVkU3RyaW5nIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFN0cmluZyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFN0cmluZwotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCSAgIHJldHVybiByczsKLQotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCVN0cmluZyBzcmNTdHJpbmcgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0JCWlmICghaXNTYXRpc2ZpZXNDb25zdHJhaW50cyhzcmNTdHJpbmcpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0JCQotCQlycy5hZGQobmV3IFhTTm9ybWFsaXplZFN0cmluZyhzcmNTdHJpbmcpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCS8qCi0JICogRG9lcyB0aGUgc3RyaW5nIGluIGNvbnRleHQgc2F0aXNmaWVzIGNvbnN0cmFpbnRzIG9mIHRoZSBkYXRhdHlwZSwgeHM6bm9ybWFsaXplZFN0cmluZy4gCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNTYXRpc2ZpZXNDb25zdHJhaW50cyhTdHJpbmcgc3JjU3RyaW5nKSB7Ci0JICAgCi0JCWJvb2xlYW4gaXNOb3JtYWxpemVkU3RyID0gdHJ1ZTsKLQkJCi0JCS8vIHRoZSB4czpub3JtYWxpemVkU3RyaW5nIHZhbHVlIGNhbm5vdCBjb250YWluLCAnY2FycmlhZ2UgcmV0dXJuJywgJ2xpbmUgZmVlZCcgYW5kICd0YWInIGNoYXJhY3RlcnMuCi0JCWlmICgoc3JjU3RyaW5nLmluZGV4T2YoIlxyIikgIT0gLTEpIHx8IChzcmNTdHJpbmcuaW5kZXhPZigiXG4iKSAhPSAtMSkgfHwgKHNyY1N0cmluZy5pbmRleE9mKCJcdCIpICE9IC0xKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJaXNOb3JtYWxpemVkU3RyID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBpc05vcm1hbGl6ZWRTdHI7Ci0JCSAgCi0JfSAvLyBpc1NhdGlzZmllc0NvbnN0cmFpbnRzCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb3RhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vdGF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYTRhMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vdGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSBidWcgMjgyMjIzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBYU05vdGF0aW9uIGV4dGVuZHMgQ3RyVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTk9UQVRJT04gPSAieHM6Tk9UQVRJT04iOwotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05PVEFUSU9OOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiWFBTVDAwODAiLCAiQ2FuJ3QgQ2FzdCB0byBOT1RBVElPTiIpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIk5PVEFUSU9OIjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNQb3NpdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNQb3NpdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2NWZhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTUG9zaXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnBvc2l0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Bvc2l0aXZlSW50ZWdlciBleHRlbmRzIFhTTm9uTmVnYXRpdmVJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfUE9TSVRJVkVfSU5URUdFUiA9ICJ4czpwb3NpdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAxCi0JICovCi0JcHVibGljIFhTUG9zaXRpdmVJbnRlZ2VyKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMSkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBwb3NpdGl2ZUludGVnZXIgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgcG9zaXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU1Bvc2l0aXZlSW50ZWdlcihCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6cG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1BPU0lUSVZFX0lOVEVHRVI7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAicG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAicG9zaXRpdmVJbnRlZ2VyIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBwb3NpdGl2ZUludGVnZXIKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgcG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdwb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHBvc2l0aXZlSW50ZWdlci4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcyAxCi0JCQkvLyBtYXggdmFsdWUgaXMgSU5GCi0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigxKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlycy5hZGQobmV3IFhTUG9zaXRpdmVJbnRlZ2VyKGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTaG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Nob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ODdjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Nob3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDggLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpzaG9ydCBkYXRhIHR5cGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIFhTU2hvcnQgZXh0ZW5kcyBYU0ludCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1NIT1JUID0gInhzOnNob3J0IjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Nob3J0KCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBzaG9ydCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBTaG9ydCB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNTaG9ydChCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6c2hvcnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfU0hPUlQ7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAic2hvcnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJzaG9ydCI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJ3Nob3J0JyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBzaG9ydCBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnc2hvcnQnIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHNob3J0LgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoLTMyNzY4TCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigzMjc2N0wpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU1Nob3J0KGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlYTFkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZWQgY29tcGFyaXNvbiBvZiB4czpzdHJpbmcgd2l0aCBvdGhlciBYRE0gdHlwZXMKLSAqICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotICogIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GbkNvbXBhcmU7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU1N0cmluZyBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSwgQ21wR3QsIENtcEx0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19TVFJJTkcgPSAieHM6c3RyaW5nIjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bwotCSAqLwotCXB1YmxpYyBYU1N0cmluZyhTdHJpbmcgeCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNTdHJpbmcoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpzdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfU1RSSU5HOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAic3RyaW5nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAic3RyaW5nIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgU3RyaW5nIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgU3RyaW5nIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdmFsdWUoKSB7Ci0JCXJldHVybiBzdHJpbmdfdmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFN0cmluZyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFN0cmluZwotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy9BbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTU3RyaW5nKGFhdC5zdHJpbmdfdmFsdWUoKSkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCi0JLy8gNjY2IGluZGljYXRlcyBkZWF0aCBbY29tcGFyZSByZXR1cm5lZCBlbXB0eSBzZXFdCi0JcHJpdmF0ZSBpbnQgZG9fY29tcGFyZShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIFhYWDogVGhpcyBjYW4ndCBoYXBwZW4sIEkgZ3Vlc3MKLQkJaWYgKGFyZyA9PSBudWxsKSByZXR1cm4gNjY2OwotCi0JCVhTU3RyaW5nIGNvbXBhcmFuZCA9IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nID8gKFhTU3RyaW5nKWFyZyA6IG5ldyBYU1N0cmluZyhhcmcuc3RyaW5nX3ZhbHVlKCkpOwotCQkKLQkJQmlnSW50ZWdlciByZXN1bHQgPSBGbkNvbXBhcmUuY29tcGFyZV9zdHJpbmcoZGMuZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpLCB0aGlzLCBjb21wYXJhbmQsIGRjKTsKLQotCQlyZXR1cm4gcmVzdWx0LmludFZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotCSAqIG11c3QgYmUgb2YgdHlwZSBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgY21wID0gZG9fY29tcGFyZShhcmcsIGNvbnRleHQpOwotCi0JCS8vIFhYWCBpbSBub3Qgc3VyZSB3aGF0IHRvIGRvIGhlcmUhISEgYmVjYXVzZSBlcSBoYXMgdG8gcmV0dXJuCi0JCS8vIHNvbWV0aGluZyBpIGZpbmsuLi4uCi0JCWlmIChjbXAgPT0gNjY2KQotCQkJYXNzZXJ0IGZhbHNlOwotCi0JCXJldHVybiBjbXAgPT0gMDsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoIG11c3QgYmUgb2YKLQkgKiB0eXBlIFN0cmluZwotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGF0Ci0JICogICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWludCBjbXAgPSBkb19jb21wYXJlKGFyZywgY29udGV4dCk7Ci0KLQkJYXNzZXJ0IGNtcCAhPSA2NjY7Ci0KLQkJcmV0dXJuIGNtcCA+IDA7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0JICogdHlwZSBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBsZXNzIHRoYW4gdGhhdCBzdXBwbGllZC4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgY21wID0gZG9fY29tcGFyZShhcmcsIGNvbnRleHQpOwotCi0JCWFzc2VydCBjbXAgIT0gNjY2OwotCi0JCXJldHVybiBjbXAgPCAwOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1RpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOGJlNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1RpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0aW9uIG9mIGNhc3RpbmcgdG8gdGltZS4gCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGltZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNUaW1lIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LCBDbXBHdCwKLQotTWF0aE1pbnVzLCBNYXRoUGx1cywKLQotQ2xvbmVhYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19USU1FID0gInhzOnRpbWUiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgdGltZSBhbmQgdGltZXpvbmUKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRoZSB0aW1lem9uZSAocG9zc2libHkgbnVsbCkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGltZQotCSAqLwotCXB1YmxpYyBYU1RpbWUoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQotCQlfdHogPSB0ejsKLQkJaWYgKHR6ID09IG51bGwpCi0JCQlfdGltZXpvbmVkID0gZmFsc2U7Ci0JCWVsc2UKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBjdXJyZW50IHRpbWUKLQkgKi8KLQlwdWJsaWMgWFNUaW1lKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIHRpbWUgKGFuZCB0aW1lem9uZSkgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgY29weSBvZiB0aGUgdGltZSBhbmQgdGltZXpvbmUKLQkgKiBAdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0JCUNhbGVuZGFyIGMgPSAoQ2FsZW5kYXIpIGNhbGVuZGFyKCkuY2xvbmUoKTsKLQkJWFNEdXJhdGlvbiB0ID0gdHooKTsKLQotCQlpZiAodCAhPSBudWxsKQotCQkJdCA9IChYU0R1cmF0aW9uKSB0LmNsb25lKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU1RpbWUoYywgdCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ0aW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidGltZSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgc3VwcGxpZWQgdGltZQotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRlZCB0aW1lIGFuZCB0aW1lem9uZSB0byBiZSBzdG9yZWQKLQkgKiBAcmV0dXJuIE5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBzdXBwbGllZCB0aW1lCi0JICovCi0JcHVibGljIHN0YXRpYyBDYWxlbmRhclR5cGUgcGFyc2VfdGltZShTdHJpbmcgc3RyKSB7Ci0KLQkJU3RyaW5nIHN0YXJ0ZGF0ZSA9ICIxOTgzLTExLTI5VCI7Ci0JCQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHN0YXJ0ZGF0ZSArIHN0cik7Ci0JCWlmIChkdCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIG5ldyBYU1RpbWUoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGZyb20gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSB0aW1lCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgdGltZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCQotCQlDYWxlbmRhclR5cGUgdCA9IGNhc3RUaW1lKGFhdCk7Ci0KLQkJaWYgKHQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcnMuYWRkKHQpOwotCi0JCXJldHVybiByczsKLQl9IAotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIENhbGVuZGFyVHlwZSBjYXN0VGltZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlYU1RpbWUgdGltZSA9IChYU1RpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNUaW1lKHRpbWUuY2FsZW5kYXIoKSwgdGltZS50eigpKTsKLQkJfQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTVGltZShkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX3RpbWUoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBob3VyIHN0b3JlZCBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgaG91ciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IGhvdXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG1pbnV0ZSBzdG9yZWQgYXMgYW4gaW50ZWdlcgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG1pbnV0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1pbnV0ZSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNlY29uZHMgc3RvcmVkIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzZWNvbmQgc3RvcmVkCi0JICovCi0JcHVibGljIGRvdWJsZSBzZWNvbmQoKSB7Ci0JCWRvdWJsZSBzID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5TRUNPTkQpOwotCi0JCWRvdWJsZSBtcyA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpOwotCi0JCW1zIC89IDEwMDA7Ci0KLQkJcyArPSBtczsKLQkJcmV0dXJuIHM7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhlIHRpbWUgc3RvcmVkIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdGltZSBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCQkKLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSksIDIpOwotCQkKLQkJcmV0ICs9ICI6IjsKLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuTUlOVVRFKSwgMik7Ci0JCQotCi0JCXJldCArPSAiOiI7Ci0JCWludCBpc2Vjb25kID0gKGludCkgc2Vjb25kKCk7Ci0JCWRvdWJsZSBzZWMgPSBzZWNvbmQoKTsKLQotCQlpZiAoKHNlYyAtIChpc2Vjb25kKSkgPT0gMC4wKQotCQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChpc2Vjb25kLCAyKTsKLQkJZWxzZSB7Ci0JCQlpZiAoc2VjIDwgMTAuMCkKLQkJCQlyZXQgKz0gIjAiICsgc2VjOwotCQkJZWxzZQotCQkJCXJldCArPSBzZWM7Ci0JCX0KLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCWludCBocnMgPSBfdHouaG91cnMoKTsKLQkJCWludCBtaW4gPSBfdHoubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSBfdHouc2Vjb25kcygpOwotCQkJaWYgKGhycyA9PSAwICYmIG1pbiA9PSAwICYmIHNlY3MgPT0gMCkgewotCQkJICByZXQgKz0gIloiOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkgIFN0cmluZyB0Wm9uZVN0ciA9ICIiOwotCQkJICBpZiAoX3R6Lm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dGltZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19USU1FOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbWUgc3RvcmVkIGFzIGEgZHVyYXRpb24gb2YKLQkgKiB0aW1lCi0JICogCi0JICogQHJldHVybiBUaGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZSB0aW1lIHN0b3JlZCBhbmQgdGhlIGFjdHVhbCB0aW1lCi0JICogICAgICAgICBhZnRlciB0aGUgdGltZXpvbmUgaXMgdGFrZW4gaW50byBhY2NvdW50Ci0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gKLQkgKiAKLQkgKiBAcmV0dXJuIHRpbWUgc3RvcmVkIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gKLQkgKi8KLQlwdWJsaWMgZG91YmxlIHZhbHVlKCkgewotCQlyZXR1cm4gY2FsZW5kYXIoKS5nZXRUaW1lSW5NaWxsaXMoKSAvIDEwMDAuMDsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIGJvdGggWFNUaW1lJ3MgcmVwcmVzZW50IHRoZSBzYW1lIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGFmdGVyIHRoYXQKLQkgKiAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQkJcmV0dXJuIHRoaXNjYWwuYmVmb3JlKHRoYXRjYWwpOwotCX0KLQkKLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc250cyBhIHBvaW50IGluIHRpbWUgYmVmb3JlIHRoYXQKLQkgKiAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTVGltZSB2YWwgPSAoWFNUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1RpbWUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmFmdGVyKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIHJlcHJlc2VudGF0aW9uLiBUaGlzIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgZWl0aGVyIHR5cGUKLQkgKiBYU1RpbWUgKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlCi0JICogdHdvIHRpbWVzKSBvciBhIFhTRGF5VGltZUR1cmF0aW9uIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIHRpbWUKLQkgKiB3aGVuIHRoaXMgZHVyYXRpb24gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSB0aW1lIHN0b3JlZCkuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIHN1YnRyYWN0IChlaXRoZXIgWFNUaW0gb3IKLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbikKLQkgKiBAcmV0dXJuIEEgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNUaW1lKSAmJiAhKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gbWludXNYU1RpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNEYXlUaW1lRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBhdDsKLQotCQlYU1RpbWUgcmVzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlcyA9IChYU1RpbWUpIGNsb25lKCk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQl0cnkgewotCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWNhbGVuZGFyKCkpOwotCQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0R1cmF0aW9uKHZhbC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQl4bWxDYWwuYWRkKGR0ZHVyYXRpb24ubmVnYXRlKCkpOwotCQkJcmVzID0gbmV3IFhTVGltZSh4bWxDYWwudG9HcmVnb3JpYW5DYWxlbmRhcigpLCByZXMudHooKSk7Ci0JCX0gY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgewotCQkJCi0JCX0KLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNUaW1lRHVyYXRpb24oQW55VHlwZSBhdCkgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgYXQ7Ci0JCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJQ2FsZW5kYXIgdGhpc0NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQkJQ2FsZW5kYXIgdGhhdENhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCQlsb25nIGR1cmF0aW9uID0gdGhpc0NhbC5nZXRUaW1lSW5NaWxsaXMoKSAtIHRoYXRDYWwuZ2V0VGltZUluTWlsbGlzKCk7Ci0JCQlkdGR1cmF0aW9uID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24oZHVyYXRpb24pOwotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KFhTRGF5VGltZUR1cmF0aW9uLnBhcnNlRFREdXJhdGlvbihkdGR1cmF0aW9uLnRvU3RyaW5nKCkpKTsKLQkJfSBjYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZCB0aW1lCi0JICogZHVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgQSBYRFREYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8KLQkgKiAgICAgICAgICAgIGFkZAotCSAqIEByZXR1cm4gQSBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhpcyBhZGRpdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQotCQl0cnkgewotCQkJZG91YmxlIG1zID0gdmFsLnRpbWVfdmFsdWUoKSAqIDEwMDAuMDsKLQotCQkJWFNUaW1lIHJlcyA9IChYU1RpbWUpIGNsb25lKCk7Ci0KLQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NSUxMSVNFQ09ORCwgKGludCkgbXMpOwotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNUb2tlbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Rva2VuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzk3ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Rva2VuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ0NzggLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp0b2tlbiBkYXRhIHR5cGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6dG9rZW4gZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTVG9rZW4gZXh0ZW5kcyBYU05vcm1hbGl6ZWRTdHJpbmcgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1RPS0VOID0gInhzOnRva2VuIjsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTVG9rZW4oU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU1Rva2VuKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dG9rZW4iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVE9LRU47Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ0b2tlbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gInRva2VuIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFN0cmluZyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFN0cmluZwotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCSAgIHJldHVybiByczsKLQotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCVN0cmluZyBzcmNTdHJpbmcgPSBhYXQuc3RyaW5nX3ZhbHVlKCk7Ci0JCWlmICghaXNTYXRpc2ZpZXNDb25zdHJhaW50cyhzcmNTdHJpbmcpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0JCQotCQlycy5hZGQobmV3IFhTVG9rZW4oc3JjU3RyaW5nKSk7Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQkKLQkvKgotCSAqIERvZXMgdGhlIHN0cmluZyBpbiBjb250ZXh0IHNhdGlzZmllcyBjb25zdHJhaW50cyBvZiB0aGUgZGF0YXR5cGUsIHhzOnRva2VuLiAKLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1NhdGlzZmllc0NvbnN0cmFpbnRzKFN0cmluZyBzcmNTdHJpbmcpIHsKLQkgICAKLQkJYm9vbGVhbiBpc1Rva2VuID0gdHJ1ZTsKLQkJCi0JCS8vIHNhdGlzZmllcyBjb25zdHJhaW50cyBvZiB4czpub3JtYWxpemVkU3RyaW5nIGFuZCBhZGRpdGlvbmFsbHkgbXVzdCBzYXRpc2Z5IHRoZSBjb25kaXRpb24sCi0JCS8vIHRoZSBzdHJpbmcgbXVzdCBub3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyBhbmQgdGhhdCBoYXZlIG5vIGludGVybmFsIHNlcXVlbmNlcyBvZiB0d28gb3IgbW9yZSBzcGFjZXMuCi0JCWlmICghc3VwZXIuaXNTYXRpc2ZpZXNDb25zdHJhaW50cyhzcmNTdHJpbmcpIHx8IHNyY1N0cmluZy5zdGFydHNXaXRoKCIgIikgfHwgCi0JCQkgc3JjU3RyaW5nLmVuZHNXaXRoKCIgIikgfHwgc3JjU3RyaW5nLmluZGV4T2YoIiAgIikgIT0gLTEpIHsKLQkJCWlzVG9rZW4gPSBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzVG9rZW47Ci0JCSAgCi0JfSAvLyBpc1NhdGlzZmllc0NvbnN0cmFpbnRzCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZEJ5dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZEJ5dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiOWE1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRCeXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NTAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnVuc2lnbmVkQnl0ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkQnl0ZSBleHRlbmRzIFhTVW5zaWduZWRTaG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1VOU0lHTkVEX0JZVEUgPSAieHM6dW5zaWduZWRCeXRlIjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkQnl0ZSgpIHsKLQkgIHRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKDApKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRCeXRlIHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIHVuc2lnbmVkQnl0ZSB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZEJ5dGUoQmlnSW50ZWdlciB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnVuc2lnbmVkQnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19VTlNJR05FRF9CWVRFOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInVuc2lnbmVkQnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gInVuc2lnbmVkQnl0ZSI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRCeXRlCi0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkQnl0ZSBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAndW5zaWduZWRCeXRlJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSB1bnNpZ25lZEJ5dGUuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMAotCQkJLy8gbWF4IHZhbHVlIGlzIDI1NQotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigyNTVMKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJzLmFkZChuZXcgWFNVbnNpZ25lZEJ5dGUoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkSW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRJbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyYTZmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRJbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0MiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRJbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgWFNVbnNpZ25lZEludCBleHRlbmRzIFhTVW5zaWduZWRMb25nIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfVU5TSUdORURfSU5UID0gInhzOnVuc2lnbmVkSW50IjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkSW50KCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZEludCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICB1bnNpZ25lZEludCB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZEludChCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW5zaWduZWRJbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVU5TSUdORURfSU5UOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInVuc2lnbmVkSW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW5zaWduZWRJbnQiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkSW50Ci0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkSW50IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZEludCcgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgdW5zaWduZWRJbnQuCi0JCUFueVR5cGUgYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LnN0cmluZ192YWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMAotCQkJLy8gbWF4IHZhbHVlIGlzIDQyOTQ5NjcyOTUKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDApOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoNDI5NDk2NzI5NUwpOwotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU1Vuc2lnbmVkSW50KGJpZ0ludCkpOwotCQkJCi0JCQlyZXR1cm4gcnM7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZExvbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZExvbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2NzAyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRMb25nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MjkgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnVuc2lnbmVkTG9uZwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkTG9uZyBleHRlbmRzIFhTTm9uTmVnYXRpdmVJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfVU5TSUdORURfTE9ORyA9ICJ4czp1bnNpZ25lZExvbmciOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRMb25nKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZExvbmcgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgdW5zaWduZWRMb25nIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkTG9uZyhCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW5zaWduZWRMb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1VOU0lHTkVEX0xPTkc7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAidW5zaWduZWRMb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW5zaWduZWRMb25nIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZExvbmcKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRMb25nIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZExvbmcnIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHVuc2lnbmVkTG9uZy4KLQkJQW55VHlwZSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcyAwCi0JCQkvLyBtYXggdmFsdWUgaXMgMTg0NDY3NDQwNzM3MDk1NTE2MTUKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDApOwotCQkJQmlnSW50ZWdlciBtYXggPSBuZXcgQmlnSW50ZWdlcigiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJzLmFkZChuZXcgWFNVbnNpZ25lZExvbmcoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkU2hvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZFNob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MzNlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkU2hvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0NSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRTaG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkU2hvcnQgZXh0ZW5kcyBYU1Vuc2lnbmVkSW50IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfVU5TSUdORURfU0hPUlQgPSAieHM6dW5zaWduZWRTaG9ydCI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZFNob3J0KCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZFNob3J0IHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIHVuc2lnbmVkU2hvcnQgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRTaG9ydChCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW5zaWduZWRTaG9ydCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19VTlNJR05FRF9TSE9SVDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ1bnNpZ25lZFNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW5zaWduZWRTaG9ydCI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRTaG9ydAotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZFNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZFNob3J0JyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSB1bnNpZ25lZFNob3J0LgotCQlBbnlUeXBlIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5zdHJpbmdfdmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJLy8gbWluIHZhbHVlIGlzIDAKLQkJCS8vIG1heCB2YWx1ZSBpcyA2NTUzNQotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZig2NTUzNUwpOwotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcnMuYWRkKG5ldyBYU1Vuc2lnbmVkU2hvcnQoYmlnSW50KSk7Ci0JCQkKLQkJCXJldHVybiByczsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1VudHlwZWRBdG9taWMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnR5cGVkQXRvbWljLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjgxZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1VudHlwZWRBdG9taWMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBjb3JyZWN0ZWQgaW1wbGVtZW50YXRpb24gb2YgWFNVbnR5cGVkQXRvbWljIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbnR5cGVkQXRvbWljIGRhdGF0eXBlIHdoaWNoIGlzIHVzZWQgdG8gcmVwcmVzZW50Ci0gKiB1bnR5cGVkIGF0b21pYyBub2Rlcy4KLSAqLwotcHVibGljIGNsYXNzIFhTVW50eXBlZEF0b21pYyBleHRlbmRzIEN0clR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19VTlRZUEVEX0FUT01JQyA9ICJ4czp1bnR5cGVkQXRvbWljIjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkKLQlwdWJsaWMgWFNVbnR5cGVkQXRvbWljKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSB1bnR5cGVkIGF0b21pYwotCSAqICAgICAgICAgICAgbm9kZQotCSAqLwotCXB1YmxpYyBYU1VudHlwZWRBdG9taWMoU3RyaW5nIHgpIHsKLQkJX3ZhbHVlID0geDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnVudHlwZWRBdG9taWMiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVU5UWVBFRF9BVE9NSUM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljCi0JICogbm9kZQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljIG5vZGUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiByczsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQotCQlycy5hZGQobmV3IFhTVW50eXBlZEF0b21pYyhhYXQuc3RyaW5nX3ZhbHVlKCkpKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAidW50eXBlZEF0b21pYyI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1llYXJNb250aER1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTWWVhck1vbnRoRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzMjlkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTWWVhck1vbnRoRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc5MzczIC0gaW1wcm92ZW1lbnRzIHRvIG11bHRpcGx5IG9wZXJhdGlvbiBvbiB4czp5ZWFyTW9udGhEdXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgWWVhck1vbnRoRHVyYXRpb24gZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTWWVhck1vbnRoRHVyYXRpb24gZXh0ZW5kcyBYU0R1cmF0aW9uIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LAotCQlDbXBHdCwgTWF0aFBsdXMsIE1hdGhNaW51cywgTWF0aFRpbWVzLCBNYXRoRGl2IHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1lFQVJfTU9OVEhfRFVSQVRJT04gPSAieHM6eWVhck1vbnRoRHVyYXRpb24iOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIHRoZSBudW1iZXIgb2YgbW9udGhzCi0JICogc3VwcGxpZWQgaXMgbW9yZSB0aGFuIDEyLCB0aGUgbnVtYmVyIG9mIHllYXJzIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgotCSAqIAotCSAqIEBwYXJhbSB5ZWFyCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIG1vbnRoCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgbW9udGhzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBuZWdhdGl2ZQotCSAqICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0JICogICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBYU1llYXJNb250aER1cmF0aW9uKGludCB5ZWFyLCBpbnQgbW9udGgsIGJvb2xlYW4gbmVnYXRpdmUpIHsKLQkJc3VwZXIoeWVhciwgbW9udGgsIDAsIDAsIDAsIDAsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1vbnRocwotCSAqIAotCSAqIEBwYXJhbSBtb250aHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKi8KLQlwdWJsaWMgWFNZZWFyTW9udGhEdXJhdGlvbihpbnQgbW9udGhzKSB7Ci0JCXRoaXMoMCwgTWF0aC5hYnMobW9udGhzKSwgbW9udGhzIDwgMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgweWVhcnMgYW5kIDBtb250aHMpCi0JICovCi0JcHVibGljIFhTWWVhck1vbnRoRHVyYXRpb24oKSB7Ci0JCXRoaXMoMCwgMCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgWFNZZWFyTW9udGhEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcmV0dXJuIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRHVyYXRpb24gcGFyc2VZTUR1cmF0aW9uKFN0cmluZyBzdHIpIHsKLQkJYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOwotCQlpbnQgeWVhciA9IDA7Ci0JCWludCBtb250aCA9IDA7Ci0KLQkJaW50IHN0YXRlID0gMDsgLy8gMCBiZWdpbm5pbmcKLQkJLy8gMSB5ZWFyCi0JCS8vIDIgbW9udGgKLQkJLy8gMyBkb25lCi0JCS8vIDQgZXhwZWN0aW5nIFAKLQkJLy8gNSBleHBlY3RpbmcgWSBvciBNCi0JCS8vIDYgZXhwZWN0aW5nIE0gb3IgZW5kCi0JCS8vIDcgZXhwZWN0aW5nIGVuZAotCi0JCVN0cmluZyBkaWdpdHMgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgewotCQkJY2hhciB4ID0gc3RyLmNoYXJBdChpKTsKLQotCQkJc3dpdGNoIChzdGF0ZSkgewotCQkJLy8gYmVnaW5uaW5nCi0JCQljYXNlIDA6Ci0JCQkJaWYgKHggPT0gJy0nKSB7Ci0JCQkJCW5lZ2F0aXZlID0gdHJ1ZTsKLQkJCQkJc3RhdGUgPSA0OwotCQkJCX0gZWxzZSBpZiAoeCA9PSAnUCcpCi0JCQkJCXN0YXRlID0gNTsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDQ6Ci0JCQkJaWYgKHggPT0gJ1AnKQotCQkJCQlzdGF0ZSA9IDU7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA1OgotCQkJCWlmICgnMCcgPD0geCAmJiB4IDw9ICc5JykKLQkJCQkJZGlnaXRzICs9IHg7Ci0JCQkJZWxzZSBpZiAoeCA9PSAnWScpIHsKLQkJCQkJaWYgKGRpZ2l0cy5sZW5ndGgoKSA9PSAwKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCXllYXIgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0cyk7Ci0JCQkJCWRpZ2l0cyA9ICIiOwotCQkJCQlzdGF0ZSA9IDY7Ci0JCQkJfSBlbHNlIGlmICh4ID09ICdNJykgewotCQkJCQlpZiAoZGlnaXRzLmxlbmd0aCgpID09IDApCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJbW9udGggPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0cyk7Ci0JCQkJCXN0YXRlID0gNzsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNjoKLQkJCQlpZiAoJzAnIDw9IHggJiYgeCA8PSAnOScpCi0JCQkJCWRpZ2l0cyArPSB4OwotCQkJCWVsc2UgaWYgKHggPT0gJ00nKSB7Ci0JCQkJCWlmIChkaWdpdHMubGVuZ3RoKCkgPT0gMCkKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQltb250aCA9IEludGVnZXIucGFyc2VJbnQoZGlnaXRzKTsKLQkJCQkJc3RhdGUgPSA3OwotCi0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDc6Ci0JCQkJcmV0dXJuIG51bGw7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJCXJldHVybiBudWxsOwotCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTWWVhck1vbnRoRHVyYXRpb24oeWVhciwgbW9udGgsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAieWVhck1vbnRoRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ5ZWFyTW9udGhEdXJhdGlvbiI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0JICogZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0Ci0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIHJzOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJCi0JCVhTRHVyYXRpb24geW1kID0gY2FzdFllYXJNb250aER1cmF0aW9uKGFhdCk7Ci0KLQkJaWYgKHltZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlycy5hZGQoeW1kKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgWFNEdXJhdGlvbiBjYXN0WWVhck1vbnRoRHVyYXRpb24oQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24pIHsKLQkJCVhTRHVyYXRpb24gZHVyYXRpb24gPSAoWFNEdXJhdGlvbikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU1llYXJNb250aER1cmF0aW9uKGR1cmF0aW9uLnllYXIoKSwgZHVyYXRpb24ubW9udGgoKSwgZHVyYXRpb24ubmVnYXRpdmUoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZVlNRHVyYXRpb24oYWF0LnN0cmluZ192YWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2gKLQkgKiB0aW1lCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaCB0aW1lLgotCSAqICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmUoKSB7Ci0JCXJldHVybiBfbmVnYXRpdmU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3ZhbHVlKCkgewotCQlTdHJpbmcgc3RydmFsID0gIiI7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkpCi0JCQlzdHJ2YWwgKz0gIi0iOwotCi0JCXN0cnZhbCArPSAiUCI7Ci0KLQkJaW50IHllYXJzID0geWVhcigpOwotCQlpZiAoeWVhcnMgIT0gMCkKLQkJCXN0cnZhbCArPSB5ZWFycyArICJZIjsKLQotCQlpbnQgbW9udGhzID0gbW9udGgoKTsKLQkJaWYgKG1vbnRocyA9PSAwKSB7Ci0JCQlpZiAoeWVhcnMgPT0gMCkKLQkJCQlzdHJ2YWwgKz0gbW9udGhzICsgIk0iOwotCQl9IGVsc2UKLQkJCXN0cnZhbCArPSBtb250aHMgKyAiTSI7Ci0KLQkJcmV0dXJuIHN0cnZhbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnllYXJNb250aER1cmF0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1lFQVJfTU9OVEhfRFVSQVRJT047Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gaXQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBtb250aHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBpbnQgbW9udGhWYWx1ZSgpIHsKLQkJaW50IHJldCA9IHllYXIoKSAqIDEyICsgbW9udGgoKTsKLQotCQlpZiAobmVnYXRpdmUoKSkKLQkJCXJldCAqPSAtMTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikgewotCQkJWFNEYXlUaW1lRHVyYXRpb24gZGF5VGltZUR1cmF0aW9uID0gKFhTRGF5VGltZUR1cmF0aW9uKWFyZzsKLQkJCXJldHVybiAobW9udGhWYWx1ZSgpID09IDAgJiYgZGF5VGltZUR1cmF0aW9uLnZhbHVlKCkgPT0gMC4wKTsKLQkJfSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQlYU1llYXJNb250aER1cmF0aW9uIHllYXJNb250aER1cmF0aW9uID0gKFhTWWVhck1vbnRoRHVyYXRpb24pYXJnOwotCQkJcmV0dXJuIG1vbnRoVmFsdWUoKSA9PSB5ZWFyTW9udGhEdXJhdGlvbi5tb250aFZhbHVlKCk7Ci0JCX0KLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEdXJhdGlvbi5jbGFzcyk7Ci0JCXJldHVybiBzdXBlci5lcSh2YWwsIGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiBtb250aFZhbHVlKCkgPCB2YWwubW9udGhWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0JICogICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1llYXJNb250aER1cmF0aW9uLmNsYXNzKTsKLQotCQlyZXR1cm4gbW9udGhWYWx1ZSgpID4gdmFsLm1vbnRoVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0JICogZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGFkZAotCSAqIEByZXR1cm4gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLQkgKiAgICAgICAgIGFmdGVyIHRoZSBhZGRpdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNZZWFyTW9udGhEdXJhdGlvbi5jbGFzcyk7Ci0KLQkJaW50IHJlcyA9IG1vbnRoVmFsdWUoKSArIHZhbC5tb250aFZhbHVlKCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU1llYXJNb250aER1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3QKLQkgKiBAcmV0dXJuIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uCi0JICogICAgICAgICBhZnRlciB0aGUgc3VidHJhY3Rpb24KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1llYXJNb250aER1cmF0aW9uLmNsYXNzKTsKLQotCQlpbnQgcmVzID0gbW9udGhWYWx1ZSgpIC0gdmFsLm1vbnRoVmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTWWVhck1vbnRoRHVyYXRpb24ocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbikKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBtdWx0aXBseSBieQotCSAqIEByZXR1cm4gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLQkgKiAgICAgICAgIGFmdGVyIHRoZSBtdWx0aXBsaWNhdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZFJTID0gYXJnOwkJCi0JCWlmIChhcmcuc2l6ZSgpID09IDEpIHsKLQkJCUFueVR5cGUgYXJnVmFsdWUgPSBhcmcuZmlyc3QoKTsKLSAgICAgICAgICAgIGlmIChhcmdWYWx1ZSBpbnN0YW5jZW9mIFhTRGVjaW1hbCkgewotICAgICAgICAgICAgCWNvbnZlcnRlZFJTID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRG91YmxlKGFyZ1ZhbHVlLnN0cmluZ192YWx1ZSgpKSk7CQotICAgICAgICAgICAgfQotCQl9Ci0JCQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShjb252ZXJ0ZWRSUywKLQkJCQlYU0RvdWJsZS5jbGFzcyk7Ci0KLQkJaWYgKHZhbC5uYW4oKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLm5hbigpOwotCQl9Ci0JCQotCQlpZiAodmFsLmluZmluaXRlKCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5vdmVyZmxvd0RhdGVUaW1lKCk7Ci0JCX0KLQkJCi0JCWludCByZXMgPSAoaW50KSBNYXRoLnJvdW5kKG1vbnRoVmFsdWUoKSAqIHZhbC5kb3VibGVfdmFsdWUoKSk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU1llYXJNb250aER1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gZGl2aWRlIGJ5Ci0JICogQHJldHVybiBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotCSAqICAgICAgICAgYWZ0ZXIgdGhlIGRpdmlzaW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueVR5cGUgYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgewotCQkJWFNEb3VibGUgZHQgPSAoWFNEb3VibGUpIGF0OwotCi0JCQlpbnQgcmV0ID0gMDsKLQotCQkJaWYgKCFkdC56ZXJvKCkpCi0JCQkJcmV0ID0gKGludCkgTWF0aC5yb3VuZChtb250aFZhbHVlKCkgLyBkdC5kb3VibGVfdmFsdWUoKSk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNZZWFyTW9udGhEdXJhdGlvbigKLQkJCQkJcmV0KSk7Ci0JCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpIHsKLQkJCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCQkJCi0JCQlpbnQgcmV0ID0gMDsKLQkJCQotCQkJaWYgKCFkdC56ZXJvKCkpCi0JCQkJcmV0ID0gKGludCkgTWF0aC5yb3VuZChtb250aFZhbHVlKCkgLyBkdC5nZXRWYWx1ZSgpLmRvdWJsZVZhbHVlKCkpOwotCQkJCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTWWVhck1vbnRoRHVyYXRpb24oCi0JCQkJCXJldCkpOwkKLQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTWWVhck1vbnRoRHVyYXRpb24pIHsKLQkJCVhTWWVhck1vbnRoRHVyYXRpb24gbWQgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgYXQ7Ci0KLQkJCWRvdWJsZSByZXMgPSAoZG91YmxlKSBtb250aFZhbHVlKCkgLyBtZC5tb250aFZhbHVlKCk7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKEJpZ0RlY2ltYWwudmFsdWVPZihyZXMpKSk7Ci0JCX0gZWxzZSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3VzZXJkZWZpbmVkL1VzZXJEZWZpbmVkQ3RyTGlicmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy91c2VyZGVmaW5lZC9Vc2VyRGVmaW5lZEN0ckxpYnJhcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4MDY1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3VzZXJkZWZpbmVkL1VzZXJEZWZpbmVkQ3RyTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ29uc3RydWN0b3JGTDsKLQotcHVibGljIGNsYXNzIFVzZXJEZWZpbmVkQ3RyTGlicmFyeSBleHRlbmRzIENvbnN0cnVjdG9yRkwgewotCi0JcHVibGljIFVzZXJEZWZpbmVkQ3RyTGlicmFyeShTdHJpbmcgbnMpIHsKLQkJc3VwZXIobnMpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db2RlUG9pbnRJdGVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db2RlUG9pbnRJdGVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNjZTg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29kZVBvaW50SXRlcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzOwotCi1wdWJsaWMgaW50ZXJmYWNlIENvZGVQb2ludEl0ZXJhdG9yIGV4dGVuZHMgQ2xvbmVhYmxlCi17Ci0gICAgLyoqCi0gICAgICogU2VudGluZWwgdmFsdWUgcmV0dXJuZWQgZnJvbSBpdGVyYXRvciB3aGVuIHRoZSBlbmQgaXMgcmVhY2hlZC4KLSAgICAgKiBUaGUgdmFsdWUgaXMgLTEgd2hpY2ggd2lsbCBuZXZlciBiZSBhIHZhbGlkIGNvZGVwb2ludC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET05FID0gLTE7Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldHMgdGhlIHBvc2l0aW9uIHRvIDAgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNvZGUgcG9pbnQuCi0gICAgICogQHJldHVybiB0aGUgZmlyc3QgY29kZSBwb2ludCBpbiB0aGUgdGV4dCwgb3IgRE9ORSBpZiB0aGUgdGV4dCBpcyBlbXB0eQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZmlyc3QoKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIHRvIHRoZSBsYXN0IHBvc3NpYmxlIHBvc2l0aW9uIChvciAwIGlmIHRoZSB0ZXh0IGlzIGVtcHR5KQotICAgICAqIGFuZCByZXR1cm5zIHRoZSBjb2RlIHBvaW50IGF0IHRoYXQgcG9zaXRpb24uCi0gICAgICogQHJldHVybiB0aGUgbGFzdCBjb2RlIHBvaW50IGluIHRoZSB0ZXh0LCBvciBET05FIGlmIHRoZSB0ZXh0IGlzIGVtcHR5Ci0gICAgICogQHNlZSAjZ2V0RW5kSW5kZXgoKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbGFzdCgpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgY29kZSBwb2ludCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgZ2V0SW5kZXgoKSkuCi0gICAgICogQHJldHVybiB0aGUgY29kZSBwb2ludCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBjdXJyZW50Ci0gICAgICogcG9zaXRpb24gaXMgb2ZmIHRoZSBlbmQgb2YgdGhlIHRleHQuCi0gICAgICogQHNlZSAjZ2V0SW5kZXgoKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgY3VycmVudCgpOwotCi0gICAgLyoqCi0gICAgICogSW5jcmVtZW50cyB0aGUgaXRlcmF0b3IncyBjb2RlIHBvaW50IGluZGV4IGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgY29kZSBwb2ludAotICAgICAqIGF0IHRoZSBuZXcgaW5kZXguICBJZiB0aGUgcmVzdWx0aW5nIGluZGV4IGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgdGhlCi0gICAgICogaW5kZXggaXMgbm90IGluY3JlbWVudGVkLCBhbmQgRE9ORSBpcyByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBuZXcgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgbmV3Ci0gICAgICogcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIHRleHQgcmFuZ2UuCi0gICAgICovCi0gICAgcHVibGljIGludCBuZXh0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBEZWNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGluZGV4IGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgY2hhcmFjdGVyCi0gICAgICogYXQgdGhlIG5ldyBpbmRleC4gSWYgdGhlIGN1cnJlbnQgaW5kZXggaXMgMCwgdGhlIGluZGV4Ci0gICAgICogcmVtYWlucyBhdCAwIGFuZCBhIHZhbHVlIG9mIERPTkUgaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBuZXcgcG9zaXRpb24gKG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBwb3NpdGlvbiBpcyAwKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgcHJldmlvdXMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW5kZXggKGFzIGEgY29kZXBvaW50LCBub3QgYSBzdHJpbmcgaW5kZXgpLgotICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRJbmRleCgpOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgY29weSBvZiB0aGlzIGNvZGUgcG9pbnQgaXRlcmF0b3IKLSAgICAgKiBAcmV0dXJuIEEgY29weSBvZiB0aGlzCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCBjbG9uZSgpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL0NvbXBhcmFibGVUeXBlUHJvbW90ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29tcGFyYWJsZVR5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzczNDg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29tcGFyYWJsZVR5cGVQcm9tb3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTsKLQotcHVibGljIGNsYXNzIENvbXBhcmFibGVUeXBlUHJvbW90ZXIgZXh0ZW5kcyBTY2FsYXJUeXBlUHJvbW90ZXIgewotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tDb21iaW5hdGlvbihDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gbmV3VHlwZSkgewotCi0JCUNsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0YXJnZXRUeXBlID0gZ2V0VGFyZ2V0VHlwZSgpOwotCQlpZiAobmV3VHlwZSA9PSBYU1N0cmluZy5jbGFzcyB8fCBuZXdUeXBlID09IFhTVGltZS5jbGFzcyB8fCB0YXJnZXRUeXBlID09IFhTU3RyaW5nLmNsYXNzIHx8IHRhcmdldFR5cGUgPT0gWFNUaW1lLmNsYXNzKSB7Ci0JCQlyZXR1cm4gdGFyZ2V0VHlwZSA9PSBuZXdUeXBlOwkKLQkJfQotCQlpZiAobmV3VHlwZSA9PSBYU0RhdGUuY2xhc3MgJiYgdGFyZ2V0VHlwZSA9PSBYU0RhdGVUaW1lLmNsYXNzKSByZXR1cm4gdHJ1ZTsgLy8gbGVhdmUgYWxvbmUKLQkJaWYgKG5ld1R5cGUgPT0gWFNEYXRlVGltZS5jbGFzcyAmJiB0YXJnZXRUeXBlICE9IFhTRGF0ZVRpbWUuY2xhc3MpIHsKLQkJCWlmICh0YXJnZXRUeXBlID09IFhTRGF0ZS5jbGFzcykgewotCQkJCXNldFRhcmdldFR5cGUoWFNEYXRlVGltZS5jbGFzcyk7Ci0JCQl9IGVsc2UgcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcmV0dXJuIHN1cGVyLmNoZWNrQ29tYmluYXRpb24obmV3VHlwZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBzdWJzdGl0dXRlKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0eXBlVG9Db25zaWRlcikgewotCQlpZiAodHlwZVRvQ29uc2lkZXIgPT0gWFNBbnlVUkkuY2xhc3MgfHwgdHlwZVRvQ29uc2lkZXIgPT0gWFNTdHJpbmcuY2xhc3MpIHsKLQkJCXJldHVybiBYU1N0cmluZy5jbGFzczsKLQkJfQotCQlpZiAodHlwZVRvQ29uc2lkZXIgPT0gWFNEYXRlVGltZS5jbGFzcyB8fCB0eXBlVG9Db25zaWRlciA9PSBYU0RhdGUuY2xhc3MgfHwgdHlwZVRvQ29uc2lkZXIgPT0gWFNUaW1lLmNsYXNzKSB7Ci0JCQlyZXR1cm4gdHlwZVRvQ29uc2lkZXI7Ci0JCX0KLQotCQlyZXR1cm4gc3VwZXIuc3Vic3RpdHV0ZSh0eXBlVG9Db25zaWRlcik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9MaXRlcmFsVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvTGl0ZXJhbFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZjc1ZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9MaXRlcmFsVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE3vv71sbGVyIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzOwotCi0vKioKLSAqIFN0cmluZyBsaXRlcmFsIHV0aWxpdGllcwotICogCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTGl0ZXJhbFV0aWxzIHsKLQkKLQkvKioKLQkgKiBVbnF1b3RlcyBhIHF1b3RlZCBzdHJpbmcsIGNoYW5naW5nIGRvdWJsZSBxdW90ZXMgaW50byBzaW5nbGUgcXVvdGVzIGFzIHdlbGwuCi0gICAgICogRXhhbXBsZXMgKHN0cmluZyBkZWxpbWl0ZWQgYnkgPiBhbmQgPCk6Ci0gICAgICogID4iQSI8IGJlY29tZXMgPkE8IAotICAgICAqICA+J0InPCBiZWNvbWVzID5CPCAKLQkgKiAgPiJBIiJCIjwgYmVjb21lcyA+QSJCPAotCSAqICA+IkEiIkIiPCBiZWNvbWVzID5BIkI8Ci0JICogID4nQScnJydCJzwgYmVjb21lcyA+QScnQjwKLQkgKiAgPiJBJycnJ0IiPCBiZWNvbWVzID5BJycnJ0I8Ci0JICogQHBhcmFtIHF1b3RlZFN0cmluZyBBIHF1b3RlZCBzdHJpbmcgcG9zc2libHkgY29udGFpbmluZyBlc2NhcGVkIHF1b3RlcwotCSAqIEByZXR1cm4gdW5xdW90ZWQgYW5kIHVuZXNjYXBlZCBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB1bnF1b3RlKFN0cmluZyBxdW90ZWRTdHJpbmcpIHsKLQkJaW50IGlucHV0TGVuZ3RoID0gcXVvdGVkU3RyaW5nLmxlbmd0aCgpOwotCQljaGFyIHF1b3RlQ2hhciA9IHF1b3RlZFN0cmluZy5jaGFyQXQoMCk7Ci0JCWlmIChxdW90ZWRTdHJpbmcuaW5kZXhPZihxdW90ZUNoYXIsIDEpID09IGlucHV0TGVuZ3RoLTEpIHsKLQkJCS8vIFRoZSB0cml2aWFsIGNhc2Ugd2hlcmUgdGhlcmUncyBubyBxdW90ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3RyaW5nLgotCQkJcmV0dXJuIHF1b3RlZFN0cmluZy5zdWJzdHJpbmcoMSwgaW5wdXRMZW5ndGgtMSk7Ci0JCX0KLQkJCi0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQlmb3IgKGludCBpID0gMTsgaSA8IGlucHV0TGVuZ3RoLTE7ICsraSkgewotCQkJY2hhciBjaCA9IHF1b3RlZFN0cmluZy5jaGFyQXQoaSk7Ci0JCQlzYi5hcHBlbmQoY2gpOwotCQkJaWYgKGNoID09IHF1b3RlQ2hhcikgKytpOyAvLyBTa2lwIHBhc3Qgc2Vjb25kIHF1b3RlIGNoYXIgKGVuc3VyZWQgYnkgdGhlIGxleGVyKQotCQl9Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvTnVtZXJpY1R5cGVQcm9tb3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9OdW1lcmljVHlwZVByb21vdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MjQ4ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9OdW1lcmljVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGF2Zy9taW4vbWF4L3N1bSB3b3JrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljOwotCi1wdWJsaWMgY2xhc3MgTnVtZXJpY1R5cGVQcm9tb3RlciBleHRlbmRzIFR5cGVQcm9tb3RlciB7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0NvbWJpbmF0aW9uKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBuZXdUeXBlKSB7Ci0JCS8vIE5vdGU6IERvdWJsZSBvciBmbG9hdCB3aWxsIG92ZXJyaWRlIGV2ZXJ5dGhpbmcKLQkJaWYgKG5ld1R5cGUgPT0gWFNEb3VibGUuY2xhc3MgfHwgZ2V0VGFyZ2V0VHlwZSgpID09IFhTRG91YmxlLmNsYXNzKSB7Ci0JCQlzZXRUYXJnZXRUeXBlKFhTRG91YmxlLmNsYXNzKTsKLQkJfSBlbHNlIGlmIChuZXdUeXBlID09IFhTRmxvYXQuY2xhc3MgfHwgZ2V0VGFyZ2V0VHlwZSgpID09IFhTRmxvYXQuY2xhc3MpIHsKLQkJCXNldFRhcmdldFR5cGUoWFNGbG9hdC5jbGFzcyk7Ci0JCS8vIElmIHdlJ3JlIHN0aWxsIHdpdGggaW50ZWdlcnMsIHN0aWNrIHdpdGggaXQKLQkJfSBlbHNlIGlmIChuZXdUeXBlID09IFhTSW50ZWdlci5jbGFzcyAmJiBnZXRUYXJnZXRUeXBlKCkgPT0gWFNJbnRlZ2VyLmNsYXNzKSB7Ci0JCQlzZXRUYXJnZXRUeXBlKFhTSW50ZWdlci5jbGFzcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBPdGhlcndpc2UsIHN3aXRjaCB0byBkZWNpbWFscwotCQkJc2V0VGFyZ2V0VHlwZShYU0RlY2ltYWwuY2xhc3MpOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBBbnlBdG9taWNUeXBlIGRvUHJvbW90ZShBbnlBdG9taWNUeXBlIHZhbHVlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0Zsb2F0LmNsYXNzKSB7Ci0JCQlyZXR1cm4gbmV3IFhTRmxvYXQodmFsdWUuc3RyaW5nX3ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0RvdWJsZS5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBYU0RvdWJsZSh2YWx1ZS5zdHJpbmdfdmFsdWUoKSk7Ci0JCX0gZWxzZSBpZiAoZ2V0VGFyZ2V0VHlwZSgpID09IFhTSW50ZWdlci5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBYU0ludGVnZXIodmFsdWUuc3RyaW5nX3ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0RlY2ltYWwuY2xhc3MpIHsKLQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKHZhbHVlLnN0cmluZ192YWx1ZSgpKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHN1YnN0aXR1dGUoQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHR5cGVUb0NvbnNpZGVyKSB7Ci0JCWlmICh0eXBlVG9Db25zaWRlciA9PSBYU1VudHlwZWRBdG9taWMuY2xhc3MpIHJldHVybiBYU0RvdWJsZS5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRmxvYXQuY2xhc3MpKSByZXR1cm4gWFNGbG9hdC5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRG91YmxlLmNsYXNzKSkgcmV0dXJuIFhTRG91YmxlLmNsYXNzOwotCQlpZiAoaXNEZXJpdmVkRnJvbSh0eXBlVG9Db25zaWRlciwgWFNJbnRlZ2VyLmNsYXNzKSkgcmV0dXJuIFhTSW50ZWdlci5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRGVjaW1hbC5jbGFzcykpIHJldHVybiBYU0RlY2ltYWwuY2xhc3M7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Rlcml2ZWRGcm9tKENsYXNzPD8gZXh0ZW5kcyBBbnlUeXBlPiB0eXBlVG9Db25zaWRlciwgQ2xhc3M8PyBleHRlbmRzIEFueVR5cGU+IHN1cGVyVHlwZSkgewotCQlyZXR1cm4gc3VwZXJUeXBlLmlzQXNzaWduYWJsZUZyb20odHlwZVRvQ29uc2lkZXIpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvU2NhbGFyVHlwZVByb21vdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1NjYWxhclR5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTc3ZDgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvU2NhbGFyVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFNjYWxhclR5cGVQcm9tb3RlciBleHRlbmRzIE51bWVyaWNUeXBlUHJvbW90ZXIgewotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tDb21iaW5hdGlvbihDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gbmV3VHlwZSkgewotCi0JCUNsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0YXJnZXRUeXBlID0gZ2V0VGFyZ2V0VHlwZSgpOwotCQlpZiAodGFyZ2V0VHlwZSA9PSBYU0RheVRpbWVEdXJhdGlvbi5jbGFzcyB8fCB0YXJnZXRUeXBlID09IFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpIHsKLQkJCXJldHVybiB0YXJnZXRUeXBlID09IG5ld1R5cGU7CQotCQl9Ci0JCXJldHVybiBzdXBlci5jaGVja0NvbWJpbmF0aW9uKG5ld1R5cGUpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gc3Vic3RpdHV0ZShDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gdHlwZVRvQ29uc2lkZXIpIHsKLQkJaWYgKHR5cGVUb0NvbnNpZGVyID09IFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzIHx8IHR5cGVUb0NvbnNpZGVyID09IFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpIHsKLQkJCXJldHVybiB0eXBlVG9Db25zaWRlcjsKLQkJfQotCi0JCXJldHVybiBzdXBlci5zdWJzdGl0dXRlKHR5cGVUb0NvbnNpZGVyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1N0cmluZ0NvZGVQb2ludEl0ZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1N0cmluZ0NvZGVQb2ludEl0ZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MDliM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9TdHJpbmdDb2RlUG9pbnRJdGVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIGltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IKLXsKLSAgICBwcml2YXRlIFN0cmluZyB0ZXh0OwotICAgIHByaXZhdGUgaW50IGVuZDsKLSAgICAvLyBpbnZhcmlhbnQ6IDAgPD0gcG9zIDw9IGVuZAotICAgIHByaXZhdGUgaW50IHBvczsKLQlwcml2YXRlIGludCBjcFBvczsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gaXRlcmF0b3Igd2l0aCBhbiBpbml0aWFsIGluZGV4IG9mIDAuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKFN0cmluZyB0ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOwotICAgICAgICAKLSAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgICAgdGhpcy5lbmQgPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICBpZiAoZW5kID4gMCAmJiBDaGFyYWN0ZXIuaXNIaWdoU3Vycm9nYXRlKHRleHQuY2hhckF0KGVuZC0xKSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIFVURi0xNiBzZXF1ZW5jZSBlbmRpbmcgd2l0aCBhIGhpZ2ggc3Vycm9nYXRlIik7Ci0gICAgICAgCi0gICAgICAgIHRoaXMucG9zID0gMDsKLSAgICAgICAgdGhpcy5jcFBvcyA9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgdGhpcyBpdGVyYXRvciB0byBwb2ludCB0byBhIG5ldyBzdHJpbmcuICBUaGlzIHBhY2thZ2UtdmlzaWJsZQotICAgICAqIG1ldGhvZCBpcyB1c2VkIGJ5IG90aGVyIGphdmEudGV4dCBjbGFzc2VzIHRoYXQgd2FudCB0byBhdm9pZCBhbGxvY2F0aW5nCi0gICAgICogbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIG9iamVjdHMgZXZlcnkgdGltZSB0aGVpciBzZXRUZXh0IG1ldGhvZAotICAgICAqIGlzIGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSAgdGV4dCAgIFRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlcgotICAgICAqIEBzaW5jZSAxLjIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7Ci0gICAgICAgIGlmICh0ZXh0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgICAgdGhpcy5lbmQgPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICB0aGlzLnBvcyA9IDA7Ci0gICAgICAgIHRoaXMuY3BQb3MgPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IuZmlyc3QoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjZmlyc3QKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGZpcnN0KCkKLSAgICB7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIGNwUG9zID0gMDsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmxhc3QoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjbGFzdAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbGFzdCgpCi0gICAgewotICAgICAgICBwb3MgPSBlbmQ7Ci0gICAgICAgIGNwUG9zID0gQ2hhcmFjdGVyLmNvZGVQb2ludENvdW50KHRleHQsIDAsIHBvcyk7Ci0gICAgICAgIHJldHVybiBwcmV2aW91cygpOwotICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmN1cnJlbnQoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjY3VycmVudAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgY3VycmVudCgpCi0gICAgewotICAgICAgICBpZiAocG9zIDwgZW5kKSB7Ci0gICAgICAgICAgICBjaGFyIGNoMSA9ICB0ZXh0LmNoYXJBdChwb3MpOwotICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc0hpZ2hTdXJyb2dhdGUoY2gxKSkgcmV0dXJuIENoYXJhY3Rlci50b0NvZGVQb2ludChjaDEsIHRleHQuY2hhckF0KHBvcysxKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2gxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIERPTkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLm5leHQoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjbmV4dAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbmV4dCgpCi0gICAgewotICAgICAgICBpZiAocG9zIDwgZW5kIC0gMSkgewotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzTG93U3Vycm9nYXRlKHRleHQuY2hhckF0KHBvcykpKSBwb3MrKzsKLSAgICAgICAgICAgIGNwUG9zKys7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAJcG9zID0gZW5kOwotICAgICAgICAgICAgcmV0dXJuIERPTkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLnByZXZpb3VzKCkgZm9yIFN0cmluZy4KLSAgICAgKiBAc2VlIENvZGVQb2ludEl0ZXJhdG9yI3ByZXZpb3VzCi0gICAgICovCi0gICAgcHVibGljIGludCBwcmV2aW91cygpCi0gICAgewotICAgICAgICBpZiAocG9zID4gMCkgewotICAgICAgICAgICAgcG9zLS07Ci0gICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzTG93U3Vycm9nYXRlKHRleHQuY2hhckF0KHBvcykpKSBwb3MtLTsgCi0gICAgICAgICAgICBjcFBvcy0tOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBET05FOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuCi0gICAgICogQHNlZSBDb2RlUG9pbnRJdGVyYXRvciNnZXRJbmRleAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNwUG9zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cy4KLSAgICAgKiBAcGFyYW0gb2JqIHRoZSBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aC4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG9iaiBpcyB0aGUgc2FtZSBhcyB0aGlzCi0gICAgICogU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0OyBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSBvYmopCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIHRoYXQgPSAoU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpIG9iajsKLQotICAgICAgICBpZiAoaGFzaENvZGUoKSAhPSB0aGF0Lmhhc2hDb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdGV4dC5lcXVhbHModGhhdC50ZXh0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHBvcyAhPSB0aGF0LnBvcyB8fCBlbmQgIT0gdGhhdC5lbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXB1dGVzIGEgaGFzaGNvZGUgZm9yIHRoaXMgaXRlcmF0b3IuCi0gICAgICogQHJldHVybiBBIGhhc2ggY29kZQotICAgICAqLwotICAgIEBPdmVycmlkZQotCXB1YmxpYyBpbnQgaGFzaENvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRleHQuaGFzaENvZGUoKSBeIHBvcyBeIGVuZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLgotICAgICAqIEByZXR1cm4gQSBjb3B5IG9mIHRoaXMKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvdGhlcgotICAgICAgICAgICAgPSAoU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpIHN1cGVyLmNsb25lKCk7Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvVHlwZVByb21vdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1R5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQ3NDNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGF2Zy9taW4vbWF4L3N1bSB3b3JrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLQotLyoqCi0gKiBHZW5lcmljIHR5cGUgcHJvbW90ZXIgZm9yIGhhbmRsaW5nIHN1YnR5cGUgc3Vic3RpdHV0aW9uIGFuZCB0eXBlIHByb21vdGlvbnMgZm9yIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZVByb21vdGVyIHsKLQlwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0YXJnZXRUeXBlID0gbnVsbDsKLQotCWFic3RyYWN0IHB1YmxpYyBBbnlBdG9taWNUeXBlIGRvUHJvbW90ZShBbnlBdG9taWNUeXBlIHZhbHVlKSB0aHJvd3MgRHluYW1pY0Vycm9yOwkKLQotCXB1YmxpYyBmaW5hbCBBbnlBdG9taWNUeXBlIHByb21vdGUoQW55VHlwZSB2YWx1ZSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIFRoaXMgaXMgYSBzaG9ydCBjdXQsIHJlYWxseQotCQlpZiAodmFsdWUuZ2V0Q2xhc3MoKSA9PSBnZXRUYXJnZXRUeXBlKCkpIHJldHVybiAoQW55QXRvbWljVHlwZSl2YWx1ZTsKLQotCQlyZXR1cm4gZG9Qcm9tb3RlKGF0b21pemUodmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdHlwZVRvQ29uc2lkZXIgVGhlIAotCSAqIEByZXR1cm4gVGhlIHN1cGVydHlwZSB0byB0cmVhdCBpdCBhcyAoaS5lLiBpZiBhIHhzOm5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0cmVhdGVkIGFzIHhzOm51bWJlcikKLQkgKi8KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHN1YnN0aXR1dGUoQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IHR5cGVUb0NvbnNpZGVyKTsJCi0KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0NvbWJpbmF0aW9uKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBuZXdUeXBlKTsKLQkJCi0JcHVibGljIHZvaWQgY29uc2lkZXJUeXBlKENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiB0eXBlVG9Db25zaWRlcikgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPiBiYXNlVHlwZSA9IHN1YnN0aXR1dGUodHlwZVRvQ29uc2lkZXIpOwotCQkKLQkJaWYgKGJhc2VUeXBlID09IG51bGwpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5hcmd1bWVudF90eXBlX2Vycm9yKHR5cGVUb0NvbnNpZGVyKTsKLQkJfQotCQkKLQkJaWYgKHRhcmdldFR5cGUgPT0gbnVsbCkgewotCQkJdGFyZ2V0VHlwZSA9IGJhc2VUeXBlOwotCQl9IGVsc2UgewotCQkJaWYgKCEgY2hlY2tDb21iaW5hdGlvbihiYXNlVHlwZSkpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuYXJndW1lbnRfdHlwZV9lcnJvcih0eXBlVG9Db25zaWRlcik7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgY29uc2lkZXJUeXBlcyhDb2xsZWN0aW9uPENsYXNzPD8gZXh0ZW5kcyBBbnlBdG9taWNUeXBlPj4gdHlwZXNUb0NvbnNpZGVyKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJZm9yIChDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gdHlwZSA6IHR5cGVzVG9Db25zaWRlcikgewotCQkJY29uc2lkZXJUeXBlKHR5cGUpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNvbnNpZGVyU2VxdWVuY2UoUmVzdWx0U2VxdWVuY2Ugc2VxdWVuY2VUb0NvbnNpZGVyKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXF1ZW5jZVRvQ29uc2lkZXIuc2l6ZSgpOyArK2kpIHsKLQkJCUFueVR5cGUgaXRlbSA9IHNlcXVlbmNlVG9Db25zaWRlci5nZXQoaSk7Ci0JCQljb25zaWRlclZhbHVlKGl0ZW0pOwotCQl9Ci0JfQotCQotCXB1YmxpYyBDbGFzczw/IGV4dGVuZHMgQW55QXRvbWljVHlwZT4gZ2V0VGFyZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIHRhcmdldFR5cGU7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldFR5cGUoQ2xhc3M8PyBleHRlbmRzIEFueUF0b21pY1R5cGU+IGNsYXNzMSkgewotCQl0aGlzLnRhcmdldFR5cGUgPSBjbGFzczE7Ci0JfQotCi0JcHVibGljIEFueUF0b21pY1R5cGUgYXRvbWl6ZShBbnlUeXBlIGF0KSB7Ci0JCWlmIChhdCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlyZXR1cm4gKEFueUF0b21pY1R5cGUpKChOb2RlVHlwZSlhdCkudHlwZWRfdmFsdWUoKS5maXJzdCgpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIChBbnlBdG9taWNUeXBlKWF0OwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNvbnNpZGVyVmFsdWUoQW55VHlwZSBhdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWNvbnNpZGVyVHlwZShhdG9taXplKGF0KS5nZXRDbGFzcygpKTsKLQl9Ci0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDE1NTU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDE4ZjI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMgotQnVuZGxlLVZlcnNpb246IDEuMS4wLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0LmluaSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDkwYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9aWNvbnMvV1RQX2ljb25feDMyX3YyLnBuZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5tYXBwaW5ncyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncwotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcwotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0wPUBidWlsZEAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmMzJhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1FY2xpcHNlIFhTTCBEZXZlbG9wZXIgVG9vbHNcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0XG5cCi0gIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCksXG5cCi0gIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKVxuXAotICBhbmQgb3RoZXJzIDIwMDguIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjY4NTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaW5pLFwKLSAgICAgICAgICAgICAgIGFib3V0Lm1hcHBpbmdzLFwKLSAgICAgICAgICAgICAgIGFib3V0LnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2ljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL2ljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDljMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OGU4MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBFY2xpcHNlIFhQYXRoIDIgRGV2ZWxvcGVycyBUb29scwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvcG9tLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkNGJiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gICAgICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICAgICAgPHBhcmVudD4KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDI8L2dyb3VwSWQ+Ci0gICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotICAgICAgICA8L3BhcmVudD4KLQotICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+MS4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICAgIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KLSAgICAgICAgPG5hbWU+UHN5Y2hvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yOiBCcmFuZGluZyBQbHVnLWluPC9uYW1lPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLmNsYXNzcGF0aCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNTQ1ZWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1MzVmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGVzdC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMTA2MWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiN2Y5OGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jU2F0IEF1ZyAxNSAwMjoyNDozNiBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMzA2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlcjtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICV2ZW5kb3JOYW1lCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4ZTczOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBodG1sLyxcCi0gICAgICAgICAgICAgICB0b2MueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkRG9jLnhtbCxcCi0gICAgICAgICAgICAgICBkb2Nib29rLyxcCi0gICAgICAgICAgICAgICBodG1sLyxcCi0gICAgICAgICAgICAgICB0b2MueG1sLFwKLSAgICAgICAgICAgICAgIG1lZGlhd2lraS8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYnVpbGREb2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvYnVpbGREb2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ5ZmUwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2J1aWxkRG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgIEF1ZyAxNSwgMjAwOSAyOjI3OjA1IEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICBYUGF0aCAyLjAgUHJvY2Vzc29yIERvY3VtZW50YXRpb24gR2VuZXJhdG9yICAgIAotICAgICBUaGlzIHdpbGwgdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBmaWxlcyBvbiB0aGUgd2lraSwgdGhhdCBhcmUgaW4gd2lraSB0ZXh0IGFuZCBnZW5lcmF0ZSB0aGUKLSAgICAgZG9jYm9vayBkb2N1bWVudHMgCi0gICAgICAgICAgICAgICAgICAgCi0gICAgIGRjYXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08cHJvamVjdCBuYW1lPSJYUGF0aCAyLjAgUHJvY2Vzc29yIERvY3VtZW50YXRpb24gR2VuZXJhdG9yIiBkZWZhdWx0PSJnZXR3aWtpdGV4dCI+Ci0JPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgVGhpcyB3aWxsIHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgZmlsZXMgb24gdGhlIHdpa2ksIHRoYXQgYXJlIGluIHdpa2kgdGV4dCBhbmQgZ2VuZXJhdGUgdGhlIAotICAgIDwvZGVzY3JpcHRpb24+Ci0JCi0JPHByb3BlcnR5IG5hbWU9ImN1cnJlbnQtbG9jIiBsb2NhdGlvbj0iLiIgLz4KLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiBsb2NhdGlvbj0iLi4iIC8+Ci0JPHByb3BlcnR5IG5hbWU9Imh0bWxkaXIiIHZhbHVlPSIke2N1cnJlbnQtbG9jfS9odG1sIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJkb2Nib29rZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9L0RvY0Jvb2tYU0wvZWNsaXBzZSIgLz4KLQk8cHJvcGVydHkgbmFtZT0iZG9jYm9va3NvdXJjZSIgdmFsdWU9IiR7Y3VycmVudC1sb2N9L2RvY2Jvb2siLz4KLQk8cHJvcGVydHkgbmFtZT0ieGFsYW4iIHZhbHVlPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIiAvPgotCi0JPCEtLSBYU0xUIENodW5raW5nIFByb3BlcnRpZXMgLS0+Ci0JPHByb3BlcnR5IG5hbWU9ImJhc2UuZGlyIiB2YWx1ZT0iJHtodG1sZGlyfSIvPgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICAgdGFyZ2V0OiBkZWZhdWx0ICAgICAgICAgICAgICAKLSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImdldHdpa2l0ZXh0Ij4KLQkJPGdldCBkZXN0PSJtZWRpYXdpa2kvdXNlcm1hbnVhbC91c2VybWFudWFsLm1lZGlhd2lraSIgc3JjPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHA/dGl0bGU9UHN5Y2hvUGF0aFhQYXRoUHJvY2Vzc29yL1VzZXJNYW51YWwmYW1wO2FjdGlvbj1yYXciIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSAgICAgICAgICB0YXJnZXQ6IGRlcGVuZHMgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLS0+Ci0JPHRhcmdldCBuYW1lPSJjb252ZXJ0IiBkZXBlbmRzPSJnZXR3aWtpdGV4dCI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ3aWtpdGV4dC5zdGFuZGFsb25lIiBsb2NhdGlvbj0ibGliL3BsdWdpbnMiIC8+Ci0JCTwhLS0gcGF0aCB0byB3aWtpdGV4dCBzdGFuZGFsb25lIHBhY2thZ2UgLS0+Ci0KLQkJPHBhdGggaWQ9Indpa2l0ZXh0LmNsYXNzcGF0aCI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7d2lraXRleHQuc3RhbmRhbG9uZX0iPgotCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0Lipjb3JlKi5qYXIiIC8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvcGF0aD4KLQotCQk8dGFza2RlZiBjbGFzc3BhdGhyZWY9Indpa2l0ZXh0LmNsYXNzcGF0aCIgcmVzb3VyY2U9Im9yZy9lY2xpcHNlL215bHluL3dpa2l0ZXh0L2NvcmUvdXRpbC9hbnR0YXNrL3dpa2l0ZXh0LXRhc2tzLnByb3BlcnRpZXMiIC8+Ci0KLQkJPHdpa2l0ZXh0LXRvLWRvY2Jvb2sgbWFya3VwTGFuZ3VhZ2U9Ik1lZGlhV2lraSI+Ci0JCQk8ZmlsZXNldCBkaXI9Im1lZGlhd2lraSI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5tZWRpYXdpa2kiIC8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvd2lraXRleHQtdG8tZG9jYm9vaz4KLQotPCEtLQkJPHdpa2l0ZXh0LXRvLWVjbGlwc2UtaGVscCBtYXJrdXBMYW5ndWFnZT0iTWVkaWFXaWtpIiAKLQkJCW11bHRpcGxlT3V0cHV0RmlsZXM9InRydWUiCi0JCQluYXZpZ2F0aW9uSW1hZ2VzPSJ0cnVlIgotCQkJaGVscFByZWZpeD0iaHRtbCI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iPgotICAgIAkJCQk8aW5jbHVkZSBuYW1lPSJtZWRpYXdpa2kvKiovKi5tZWRpYXdpa2kiLz4KLQkJCTwvZmlsZXNldD4KLQkJCTxzdHlsZXNoZWV0IHVybD0ic3R5bGVzL2hlbHAuY3NzIi8+Ci0JCQk8c3R5bGVzaGVldCB1cmw9InN0eWxlcy9tYWluLmNzcyIvPgotCQk8L3dpa2l0ZXh0LXRvLWVjbGlwc2UtaGVscD4KLS0tPgkJCi0KLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLWRvYyI+Ci0KLQkJPHhzbHQgZm9yY2U9InRydWUiIHN0eWxlPSIke2RvY2Jvb2tkaXJ9L2VjbGlwc2UzMy54c2wiIGluPSIke2RvY2Jvb2tzb3VyY2V9L3VzZXJtYW51YWwueG1sIiBvdXQ9InRlc3QueG1sIj4KLQkJCTxmYWN0b3J5IG5hbWU9IiR7eGFsYW59IiAvPgotCQkJPHBhcmFtIG5hbWU9Im1hbmlmZXN0IiBleHByZXNzaW9uPSIxIi8+Ci0JCQk8cGFyYW0gbmFtZT0iYmFzZS5kaXIiIGV4cHJlc3Npb249IiR7aHRtbGRpcn0vIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIGV4cHJlc3Npb249IjAiLz4KLQkJCTxwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIGV4cHJlc3Npb249InllcyIvPgotCQkJPHBhcmFtIG5hbWU9Im5hdmlnLnNob3d0aXRsZXMiIGV4cHJlc3Npb249IjAiLz4KLQkJCTxwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBleHByZXNzaW9uPSIxIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBleHByZXNzaW9uPSJib29rICAgICAgdG9jLHRpdGxlCi1jaGFwdGVyICAgdG9jLHRpdGxlCi1zZWN0aW9uICAgdGl0bGUiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIGV4cHJlc3Npb249IjAiLz4KLQkJCTxwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgZXhwcmVzc2lvbj0iMCIvPgotCQkJPHBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgZXhwcmVzc2lvbj0iYm9vay5jc3MgLi4vYm9vay5jc3MiLz4KLQkJCTxwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBleHByZXNzaW9uPSIzIi8+Ci0JCQk8cGFyYW0gbmFtZT0idG9jLnNlY3Rpb24uZGVwdGgiIGV4cHJlc3Npb249IjUiLz4KLQkJCTxwYXJhbSBuYW1lPSJ0b2MubGlzdC50eXBlIiBleHByZXNzaW9uPSJ1bCIvPgotCQk8L3hzbHQ+Ci0JCQotCQk8cmVwbGFjZSBmaWxlPSIke2N1cnJlbnQtbG9jfS90b2MueG1sIiB0b2tlbj0iJHtjdXJyZW50LWxvY30vIiB2YWx1ZT0iIi8+Ci0JPC90YXJnZXQ+Ci0JCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9kb2Nib29rL3VzZXJtYW51YWwueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvZG9jYm9vay91c2VybWFudWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNhZjU3OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9kb2Nib29rL3VzZXJtYW51YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L2RvY2Jvb2t4LmR0ZCI+Ci08Ym9vaz4KLSAgPHRpdGxlPlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWw8L3RpdGxlPgotCi0gIDxjaGFwdGVyIGlkPSJJbnRyb2R1Y3Rpb24iPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi0gICAgPHBhcmE+V2hhdCBpcyBQc3ljaG9oUGF0aD8gUHN5Y2hvUGF0aCBpcyBhIFhQYXRoIDIuMCBYTUwgU2NoZW1hIEF3YXJlCi0gICAgcHJvY2Vzc29yLiBJdCBpcyBuZWFybHkgZnVsbHkgY29tcGxpYW50IHRvIHRoZSBYUGF0aCAyLjAgdGVzdCBzdWl0ZS4gSXQgaXMKLSAgICBhIGxpYnJhcnkgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGVjbGlwc2UgdG8gYmUgdXNlZC4gS25vd24gYWRvcHRlcnMgb2YKLSAgICBQc3ljaG9QYXRoIGluY2x1ZGUgdGhlIFhlcmNlcy1KIHByb2plY3QgZm9yIFhNTCBTY2hlbWFzIDEuMSBhc3NlcnRpb24KLSAgICBzdXBwb3J0LjwvcGFyYT4KLQotICAgIDxwYXJhPlBzeWNob1BhdGggaXMgdGhlIG9ubHkga25vd24gb3Blbi1zb3VyY2UgamF2YSBYUGF0aCAyLjAgcHJvY2Vzc29yCi0gICAgdGhhdCBpcyBmdWxseSBzY2hlbWEgYXdhcmUuIFNBWE9OIEhFIG9ubHkgc3VwcG9ydHMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KLSAgICBYTUwgU2NoZW1hIGF3YXJuZXNzIHByb3ZpZGVzIHRpZ2h0ZXIgc3RhdGljIGNoZWNraW5nLCBhbmQgY2FuIGJlIHVzZWQgdG8KLSAgICBoZWxwIGRldGVybWluZSBpZiBjZXJ0YWluIG9wZXJhdGlvbnMgY2FuIG9yIHNob3VsZCBvY2N1ciBvbiBhbiBYTUwgbm9kZS4KLSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgUHN5Y2hvUGF0aCdzIGRlc2lnbiBwbGVhc2Ugc2VlIHRoZQotICAgIDx1bGluayB1cmw9Ii9Qc3ljaG9QYXRoWFBhdGhQcm9jZXNzb3IvRGVzaWduIj5kZXNpZ248L3VsaW5rPgotICAgIGRvY3VtZW50LjwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSJHZXR0aW5nX1BzeWNob1BhdGgiPgotICAgICAgPHRpdGxlPkdldHRpbmcgUHN5Y2hvUGF0aDwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPkN1cnJlbnRseSB0aGVyZSBpcyBubyBzdGFuZGFsb25lIGJ1aWxkIG9mIFBzeWNob1BhdGguIEhvd2V2ZXIsIHlvdQotICAgICAgY2FuIGRvd25sb2FkIHRoZSA8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL2Rvd25sb2Fkcy9kcm9wcy9SMy4xL1ItMy4xLTIwMDkwNjE2MDM1MTA1LyI+V1RQCi0gICAgICBXU1QgMy4xPC91bGluaz4gemlwIGZpbGUsIGFuZCB1c2UgdGhlCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuamFyIGZpbGUuIFRoaXMgamFyIGhhcyBubwotICAgICAgZGVwZW5kZW5jaWVzIG9uIGVjbGlwc2UsIGFuZCB3aWxsIHdvcmsgYXMgYSBzdGFuZGFyZCBqYXIgZmlsZS4gSWYgeW91Ci0gICAgICBhcmUgdXNpbmcgYW4gT1NHSSBjb250YWluZXIsIHRoZW4gdGhpcyBpcyB0cmVhdGVkIGFzIGEgc3RhbmRhcmQgT1NHSQotICAgICAgYnVuZGxlLjwvcGFyYT4KLQotICAgICAgPHRpcD4KLSAgICAgICAgPHRpdGxlPlBzeWNob1BhdGggMS4xTTE8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPlBzeWNob1BhdGggMS4xTTEgaXMgYWxzbyBhdmFpbGFibGUgdG8gPHVsaW5rCi0gICAgICAgIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL2Rvd25sb2Fkcy9kcm9wcy9SMy4yL1MtMy4yTTFiLTIwMDkwODE0MTQzNTE5LyI+ZG93bmxvYWQ8L3VsaW5rPi4KLSAgICAgICAgMS4xTTEgcGFzc2VzIDk2JSBvZiB0aGUgWFBhdGggMi4wIHRlc3Qgc3VpdGUuPC9wYXJhPgotICAgICAgPC90aXA+Ci0KLSAgICAgIDxwYXJhPkFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHlvdSBjdXJyZW50bHkgbmVlZCBhcmU6PC9wYXJhPgotCi0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+SUJNIElDVSA0LjAgb3IgZ3JlYXRlcjwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+WGVyY2VzIDIuOC4wIG9yIGdyZWF0ZXI8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPkphdmFDdXAgMC4xMCBvciBncmVhdGVyLjwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotCi0gICAgICA8cGFyYT5JZiB1c2luZyBlY2xpcHNlLCB0aGVzZSBhcmUgYWxsIGF2YWlsYWJsZSBmcm9tIHRoZSBPcmJpdCBwcm9qZWN0LgotICAgICAgT3RoZXJzIGNhbiBmaW5kIHRoZSBuZWNlc3NhcnkgamFycyBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgcHJvamVjdAotICAgICAgcGFnZXMuPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJIb3dfdG9fZmVlZF9Qc3ljaG9wYXRoX1hQYXRoX2V4cHJlc3Npb25zIj4KLSAgICA8dGl0bGU+VXNpbmcgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgQVBJPC90aXRsZT4KLQotICAgIDxwYXJhPlNpbmNlIFBzeWNob1BhdGggaGFzIGJlZW4gaW1wbGVtZW50ZWQgYXMgYW4gZXh0ZXJuYWwgbGlicmFyeSBhbmQgbm90Ci0gICAgYXMgYSBjb21wbGV0ZSBwcm9ncmFtLCBpbiBvcmRlciB0byB1c2UgaXQsIGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIGZyb20KLSAgICBpbnNpZGUgYW5vdGhlciBwcm9ncmFtLiBUbyBwcm9jZXNzIFhQYXRoIDIuMCBleHByZXNzaW9ucyB1c2luZyBQc3ljaG9QYXRoCi0gICAgZnJvbSBhbm90aGVyIHByb2dyYW1zIG9uZSBuZWVkcyB0byBnbyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcKLSAgICBwcm9jZXNzOjwvcGFyYT4KLQotICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+TG9hZCB0aGUgWE1MIGRvY3VtZW50PC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT5PcHRpb25hbGx5IHZhbGlkYXRlIHRoZSBYTUwgZG9jdW1lbnQ8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotCi0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPkluaXRpYWxpemUgc3RhdGljIGFuZCBkeW5hbWljIGNvbnRleHQgaW4gcmVzcGVjdCB0byB0aGUgZG9jdW1lbnQKLSAgICAgICAgcm9vdDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+UGFyc2UgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT5TdGF0aWNhbGx5IHZlcmlmeSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb248L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotCi0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPkV2YWx1YXRlIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiBpbiByZXNwZWN0IHRvIHRoZSBYTUwKLSAgICAgICAgZG9jdW1lbnQ8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICA8cGFyYT5UbyBnaXZlIGEgYmV0dGVyIGlkZWEgb2YgaG93IHRoaXMgcHJvY2VzcyBhY3R1YWxseSB3b3Jrcywgd2XigJlsbCBnbwotICAgIHRocm91Z2ggYW4gZXhhbXBsZSBvZiBwcm9jZXNzaW5nIGFuZCBldmFsdWF0aW5nIHRoZSBzdHJpbmcgZXhwcmVzc2lvbgotICAgIOKAnEhlbGxvIFdvcmxkIeKAnS4gSW4gdGhpcyBleGFtcGxlIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCB3ZSBsb2FkIGlzIGNhbGxlZAotICAgIOKAnFhQZXhhbXBsZS54bWzigJ0uPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9Ik5vbi1TY2hlbWFfQXdhcmUiPgotICAgICAgPHRpdGxlPk5vbi1TY2hlbWEgQXdhcmU8L3RpdGxlPgotCi0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+LyoqCi0gKiBGaXJzdCBsb2FkIGFuZCBvcHRpb25hbGx5IHZhbGlkYXRlIHRoZSBYTUwgZG9jdW1lbnQgCi0qLwotLy8gQ3JlYXRlIGFuIElucHV0U3RyZWFtIGZyb20gdGhlIFhNTCBkb2N1bWVudAotSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKOKAnFhQZXhhbXBsZS54bWzigJ0pOwotCi0vLyBJbml0aWFsaXppbmcgdGhlIFhlcmNlcyBET00gbG9hZGVyLgotRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoKTsKLQotLy8gT3B0aW9uYWxseSBzZXQgZmxhZyB0byB2YWxpZGF0ZSBYTUwgZG9jdW1lbnQgbG9hZGVyLnNldHZhbGlkYXRpbmcodmFsaWRhdGUpOwotLy8gTG9hZHMgdGhlIFhNTCBkb2N1bWVudCBhbmQgc3RvcmVzIHRoZSBET00gcm9vdAotRG9jdW1lbnQgZG9jID0gbG9hZGVyLmxvYWQoaXMpOwotCi0vKioKLSAqIER5bmFtaWMgY29udGV4dHMgbXVzdCBiZSBpbml0aWFsaXNlZCB0byBkZWZhdWx0cwotICogZGVwZW5kZW50IG9uIHRoZSBYTUwgU2NoZW1hLgotKi8KLQotLy8gRXh0cmFjdGluZyB0aGUgc2NoZW1hIGZyb20gRE9NIHJvb3Qgb2YgWHBleHByZXNzaW9uLnhtbC4KLUVsZW1lbnRQU1ZJIHJvb3RQU1ZJID0gKEVsZW1lbnRQU1ZJKWRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLVhTTW9kZWwgc2NoZW1hID0gcm9vdFBTVkkuZ2V0U2NoZW1hSW5mb3JtYXRpb24oKTsKLQotLy8gSW5pdGlhbGlzaW5nIHRoZSBEeW5hbWljQ29udGV4dC4KLUR5bmFtaWNDb250ZXh0IGRjID0gbmV3IERlZmF1bHREeW5hbWljQ29udGV4dChzY2hlbWEsIGRvYyk7Ci0KLS8vIFJlZ2lzdGVyIHRoZSBuYW1lc3BhY2VzIG9mIHRoZSBYUGF0aCAyLjAgcHJlZGVmaW5lZCBkYXRhdHlwZXMKLWRjLmFkZG5hbWVzcGFjZSjigJx4c+KAnSzigJ1baHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFd4oCdKTsKLQotLy8gUmVnaXN0ZXIgdGhlIFhQYXRoIDIuMCBzdGFuZGFyZCBmdW5jdGlvbnMKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgRm5GdW5jdGlvbkxpYnJhcnkoKSk7Ci1kYy5hZGRmdW5jdGlvbmxpYnJhcnkobmV3IFhTQ3RyTGlicmFyeSgpKTsKLQotLyoqCi0gKiBQYXJzaW5nIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiBpbnRvIGFuIEFTVCByZXByZXNlbnRhdGlvbgotICovCi0vLyBJbml0aWFsaXNlcyBQc3ljaG9QYXRo4oCZcyBzdXBwbGllZCBwYXJzZXIuCi1YUGF0aFBhcnNlciB4cHAgPSBuZXcgSmZsZXhDdXBQYXJzZXIoKTsKLQotLy8gUGFyc2VzIHRoZSBYUGF0aCBleHByZXNzaW9uLgotWFBhdGggeHAgPSB4cHAucGFyc2UoeHBhdGgpOwotLyoqCi0gKiBTdGF0aWMgY2hlY2sgdGhlIEFTVCB0byB2ZXJpZnQgc3RydWN0dXJhbCB2YWxpZGl0eSBvZiAgCi0gKiBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0KLS8vIEluaXRpYWxpemluZyBTdGF0aWNDaGVja2VyLgotU3RhdGljQ2hlY2tlciBuYW1lY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKHNjKTsKLQotLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uIOKAmUhlbGxvIFdvcmxkIeKAmSBuYW1lY2hlY2suY2hlY2soeHApOwotLyoqCi0gKiBFdmFsdWF0ZSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24KLSAqLwotIAotLy8gSW5pdGlhbGl6aW5nIHRoZSBldmFsdWF0b3Igd2l0aCBEeW5hbWljQ29udGV4dCBhbmQgdGhlIG5hbWUKLS8vIG9mIHRoZSBYTUwgZG9jdW1lbnQgWFBleGFtcGxlLnhtbCBhcyBwYXJhbWV0ZXJzLgotRXZhbHVhdG9yIGV2YWwgPSBuZXcgRGVmYXVsdEV2YWx1YXRvcihkYywgZG9jKTsKLSAKLS8vIEV2YWx1YXRlcyB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24sIHN0b3JpbmcgdGhlIHJlc3VsdAotLy8gaW4gdGhlIFJlc3VsdFNlcXVlbmNlCi1SZXN1bHRTZXF1ZW5jZSBycyA9IGV2YWwuZXZhbHVhdGUoeHApOyAKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IlNjaGVtYV9Bd2FyZSI+Ci0gICAgICA8dGl0bGU+U2NoZW1hIEF3YXJlPC90aXRsZT4KLQotICAgICAgPHBhcmE+PC9wYXJhPgotCi0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+LyoqCi0gKiBGaXJzdCBsb2FkIGFuZCBvcHRpb25hbGx5IHZhbGlkYXRlIHRoZSBYTUwgZG9jdW1lbnQgCi0qLwotCi0gU2NoZW1hRmFjdG9yeSBzY2hlbWFGYWN0b3J5ID0gbmV3IFhNTFNjaGVtYUZhY3RvcnkoKTsKLSBVUkwgc2NoZW1hVVJMID0gbmV3IEZpbGUoIlhQZXhhbXBsZS54c2QiKS50b1VSTCgpOwotIFNjaGVtYSBqYXhwc2NoZW1hID0gc2NoZW1hRmFjdG9yeS5uZXdTY2hlbWEoc2NoZW1hVVJMKTsKLQotLy8gQ3JlYXRlIGFuIElucHV0U3RyZWFtIGZyb20gdGhlIFhNTCBkb2N1bWVudAotSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKOKAnFhQZXhhbXBsZS54bWzigJ0pOwotCi0vLyBJbml0aWFsaXppbmcgdGhlIFhlcmNlcyBET00gbG9hZGVyLgotRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoamF4cHNjaGVtYSk7Ci0KLS8vIE9wdGlvbmFsbHkgc2V0IGZsYWcgdG8gdmFsaWRhdGUgWE1MIGRvY3VtZW50IGxvYWRlci5zZXR2YWxpZGF0aW5nKHZhbGlkYXRlKTsKLS8vIExvYWRzIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHN0b3JlcyB0aGUgRE9NIHJvb3QKLURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKGlzKTsKLQotLyoqCi0gKiBEeW5hbWljIGNvbnRleHRzIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gZGVmYXVsdHMKLSAqIGRlcGVuZGVudCBvbiB0aGUgWE1MIFNjaGVtYS4KLSovCi0KLS8vIEluaXRpYWxpc2luZyB0aGUgRHluYW1pY0NvbnRleHQuCi1EeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQoamF4cHNjaGVtYSwgZG9jKTsKLQotLy8gUmVnaXN0ZXIgdGhlIG5hbWVzcGFjZXMgb2YgdGhlIFhQYXRoIDIuMCBwcmVkZWZpbmVkIGRhdGF0eXBlcwotZGMuYWRkbmFtZXNwYWNlKOKAnHhz4oCdLOKAnVtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYV3igJ0pOwotCi0vLyBSZWdpc3RlciB0aGUgWFBhdGggMi4wIHN0YW5kYXJkIGZ1bmN0aW9ucwotZGMuYWRkZnVuY3Rpb25saWJyYXJ5KG5ldyBGbkZ1bmN0aW9uTGlicmFyeSgpKTsKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgWFNDdHJMaWJyYXJ5KCkpOwotCi0vKioKLSAqIFBhcnNpbmcgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uIGludG8gYW4gQVNUIHJlcHJlc2VudGF0aW9uCi0gKi8KLS8vIEluaXRpYWxpc2VzIFBzeWNob1BhdGjigJlzIHN1cHBsaWVkIHBhcnNlci4KLVhQYXRoUGFyc2VyIHhwcCA9IG5ldyBKZmxleEN1cFBhcnNlcigpOwotCi0vLyBQYXJzZXMgdGhlIFhQYXRoIGV4cHJlc3Npb24uCi1YUGF0aCB4cCA9IHhwcC5wYXJzZSh4cGF0aCk7Ci0KLS8qKgotICogU3RhdGljIGNoZWNrIHRoZSBBU1QgdG8gdmVyaWZ0IHN0cnVjdHVyYWwgdmFsaWRpdHkgb2YgIAotICogWFBhdGggMi4wIGV4cHJlc3Npb24KLSAqLwotCi0vLyBJbml0aWxpc2luZyBTdGF0aWNDaGVja2VyLgotU3RhdGljQ2hlY2tlciBuYW1lY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKHNjKTsKLQotLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uIOKAmUhlbGxvIFdvcmxkIeKAmSBuYW1lY2hlY2suY2hlY2soeHApOwotLyoqCi0gKiBFdmFsdWF0ZSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24KLSAqLwotCi0vLyBJbml0aWFsaXNpbmcgdGhlIGV2YWx1YXRvciB3aXRoIER5bmFtaWNDb250ZXh0IGFuZCB0aGUgbmFtZQotLy8gb2YgdGhlIFhNTCBkb2N1bWVudCBYUGV4YW1wbGUueG1sIGFzIHBhcmFtZXRlcnMuCi1FdmFsdWF0b3IgZXZhbCA9IG5ldyBEZWZhdWx0RXZhbHVhdG9yKGRjLCBkb2MpOyAKLQotLy8gRXZhbHVhdGVzIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiwgc3RvcmluZyB0aGUgcmVzdWx0Ci0vLyBpbiB0aGUgUmVzdWx0U2VxdWVuY2UKLVJlc3VsdFNlcXVlbmNlIHJzID0gZXZhbC5ldmFsdWF0ZSh4cCk7IAotPC9wcm9ncmFtbGlzdGluZz4KLQotICAgICAgPHBhcmE+WFBhdGggMi4wIGRlZmluZXMgZXZlcnl0aGluZyB0byBiZSBhIHNlcXVlbmNlIG9mIGl0ZW1zLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBhcmd1bWVudHMgdG8gZXhwcmVzc2lvbnMgYW5kIHRoZSByZXN1bHQgb2Ygb3BlcmF0aW9ucy4gVGh1cywgdGhlCi0gICAgICBvdmVyYWxsIHJlc3VsdCBvZiBhbiBYUGF0aCBleHByZXNzaW9uIGV2YWx1YXRpb24gaXMgYWxzbyBhIHNlcXVlbmNlIG9mCi0gICAgICBpdGVtcy4gUHN5Y2hvUGF0aCB1c2VzIHRoZSBjbGFzcyBSZXN1bHRTZXF1ZW5jZSBhcyBhIENvbGxlY3Rpb25zIHdyYXBwZXIKLSAgICAgIHRvIHN0b3JlIHRoZXNlIHNlcXVlbmNlcyBhbmQgdGhlcmVmb3JlLCB0aGUgcmVzdWx0IG9mIGFuIGV2YWx1YXRpb24gaXMKLSAgICAgIG9mIHRoaXMgdHlwZSBhbHNvLiBUaGUgUmVzdWx0U2VxdWVuY2UgY29uc2lzdHMgb2YgemVybyBvciBtb3JlIGl0ZW1zOyBhbgotICAgICAgaXRlbSBtYXkgYmUgYSBub2RlIG9yIGEgc2ltcGxlLXZhbHVlLiDigJxIZWxsbyBXb3JsZCHigJ0gaXMgYW4gZXhhbXBsZSBvZiBhCi0gICAgICBzaW5nbGUgdmFsdWUgd2l0aCBsZW5ndGggMS4gQSBnZW5lcmFsIHNlcXVlbmNlIGNvdWxkIGJlIHdyaXR0ZW4gYXMgKOKAnGHigJ0sCi0gICAgICDigJxz4oCdLCDigJxk4oCdLCDigJxm4oCdKS48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPkV4dHJhY3Rpb24gb2YgY2VydGFpbiBpdGVtcyBmcm9tIHRoZSBSZXN1bHRTZXF1ZW5jZSBjbGFzcyBpcwotICAgICAgZGVzY3JpYmVkIGJlbG93LCB3aXRoIGRldGFpbHMgb2YgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zIHRoYXQgb25lIG1pZ2h0Ci0gICAgICBhcHBseSBvbiB0aGUgUmVzdWx0U2VxdWVuY2UuIENvbnNpZGVyIHRoYXQg4oCZcnPigJkgaXMgdGhlIFJlc3VsdFNlcXVlbmNlLAotICAgICAgdGhlbjo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjwvcGFyYT4KLQotICAgICAgPHByb2dyYW1saXN0aW5nPi8vIFdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNlcXVlbmNlLCBpbiB0aGlzCi0vLyBjYXNlIG9mIOKAmUhlbGxvIFdvcmxkIeKAmSBleHByZXNzaW9uIHNpemUgPSAxLgotcnMuc2l6ZSgpOyAKLQotLy8gV2lsbCByZXR1cm4gdGhlIG7igJl0aCBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSwgaW4gdGhpcyBjYXNlIG9mCi0vLyDigJlIZWxsbyBXb3JsZCHigJksIGlmIG4gPSAxLCB0aGVuIGl0IHdpbGwgcmV0dXJuCi0vLyBYU1N0cmluZyBvZiDigJxIZWxsbyBXb3JsZCHigJ0sIGJ1dCBpZiBuID0gMiwgaXQgd2lsbCByZXR1cm4KLS8vIEVtcHR5IFJlc3VsdC4KLXJzLmdldChuKTsKLQotLy9XaWxsIHJldHVybiB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eS4KLXJzLmVtcHR5KCk7IAotCi0vLyBXaWxsIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2VxdWVuY2UsIAotLy8gaW4gdGhpcyBleGFtcGxlIGl0IHdpbGwgcmV0dXJuIFhTU3RyaW5nIG9mIOKAnEhlbGxvIFdvcmxkIeKAnSAKLXJzLmZpcnN0KCkgCi08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICA8cGFyYT5Ib3dldmVyLCBhbGwgdGhlIGl0ZW1zIGV4dHJhY3RlZCB3aWxsIGJlIG9mIHRoZSB0eXBl4oCZcyBiYXNlIGNsYXNzCi0gICAgICBBbnlUeXBlIGFuZCBuZWVkIHRvIGJlIGNhc3RlZCBpbnRvIGl0cyBhY3R1YWwgc3VidHlwZS48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPkNlcnRhaW4gb3BlcmF0aW9ucyBhbHdheXMgcmV0dXJuIGEgcGFydGljdWxhciB0eXBlIGFuZCB1c2luZyB0aGlzCi0gICAgICBrbm93bGVkZ2UsIHRoZSBleHRyYWN0ZWQgaXRlbSBjYW4gYmUgaW1tZWRpYXRlbHkgY2FzdGVkLiBJbiBvdXIgZXhhbXBsZQotICAgICAg4oCcSGVsbG8gV29ybGQh4oCdIHJldHVybnMgYSBzdHJpbmcgKGVhc2lseSBrbm93biBhcyBpdCBpcyBpbnNpZGUgdGhlIHF1b3RlcwotICAgICAg4oCZIOKAmSApLCBzbyB0aGlzIGNhbiBzYWZlbHkgYmUgY2FzdGVkIGFzIHN1Y2g6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+WFNTdHJpbmcgeHNzdHJpbmcgPSBYU1N0cmluZykocnMuZmlyc3QoKSk7PC9wcm9ncmFtbGlzdGluZz5UaGUKLSAgICAgIGFjdHVhbCByZXN1bHQgY2FuIG5vdyBiZSBleHRyYWN0ZWQgZnJvbSB0aGlzIFhTU3RyaW5nIGluIHRoZSBmb2xsb3dpbmcKLSAgICAgIG1hbm5lcjogPHByb2dyYW1saXN0aW5nPlN0cmluZyBzdHIgPSB4c3N0cmluZy52YWx1ZSgpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgZGV0YWlscyBvZiBob3cgdG8gY2FzdCBleHRyYWN0ZWQgaXRlbXMgZnJvbSBBbnlUeXBlIGludG8gdGhlaXIKLSAgICAgIGFjdHVhbCBzdWJ0eXBlcyB3aXRoIGV4YW1wbGVzIGlzIGluIHRoZSBuZXh0IHNlY3Rpb24gb24gSG93IHRvIHVzZSBlYWNoCi0gICAgICBwcm9kdWN0aW9uIGluIHRoZSBncmFtbWFyLjwvcGFyYT4KLQotICAgICAgPHBhcmE+SG93ZXZlciwgaWYgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIGlzIHVua25vd24gb3IgbXVsdGlwbGUgdHlwZXMKLSAgICAgIGFyZSBwb3NzaWJsZSwgdGhlIHR5cGVzIGhpZXJhcmNoeSBjYW4gYmUgdHJhdmVyc2VkIGluIGEgYnJlYWR0aCBmaXJzdAotICAgICAgbWFubmVyIG1ha2luZyB1c2Ugb2YgdGhlIEphdmEgaW5zdGFuY2VvZiBvcGVyYXRvciB0byBhc2NlcnRhaW4gdGhlCi0gICAgICBhY3R1YWwgdHlwZS7CoDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iSG93X3RvX3VzZV90aGVfWFBhdGhfMi4wX2dyYW1tYXJfd2l0aF9Qc3ljaG9QYXRoIj4KLSAgICAgIDx0aXRsZT5Ib3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGg8L3RpdGxlPgotCi0gICAgICA8cGFyYT5JbiB0aGlzIHNlY3Rpb24gd2Ugd2lsbCB0cnkgdG8gZ2l2ZSB5b3UgYW4gb3ZlcnZpZXcgb2YgdGhlIFhQYXRoCi0gICAgICAyLjAgZ3JhbW1hciBpbiBnZW5lcmFsIGFuZCBob3cgZWFjaCBwcm9kdWN0aW9uIGluIHRoZSBncmFtbWFyIHNob3VsZCBiZQotICAgICAgdXNlZCB3aXRoIFBzeWNob1BhdGguIEZvciB0aGUgZm9ybWFsIHNwZWNpZmljYXRpb25zLCBzZWUgdGhlIFczQwotICAgICAgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9uIDx1bGluawotICAgICAgdXJsPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDIwIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDIwPC91bGluaz4uPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iQ29uc3RhbnRzIj4KLSAgICAgICAgPHRpdGxlPkNvbnN0YW50czwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+U3RyaW5nIGxpdGVyYWxzIGFyZSB3cml0dGVuIGFzIOKAnEhlbGxv4oCdIG9yIOKAmEhlbGxv4oCZLiBJbiBlYWNoIGNhc2UKLSAgICAgICAgdGhlIG9wcG9zaXRlIGtpbmQgb2YgcXVvdGF0aW9uIG1hcmsgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBzdHJpbmc6IOKAmEhlCi0gICAgICAgIHNhaWQg4oCcSGVsbG/igJ0g4oCZIG9yIOKAnExvbmRvbiBpcyBhIGJpZyBjaXR54oCdLiBUbyBmZWVkIFBzeWNob1BhdGgsIOKAnCDigJhIZWxsbwotICAgICAgICBXb3JsZCHigJkg4oCdb3Ig4oCcIOKAnEhlbGxvIFdvcmxkIeKAnSDigJ0gY2FuIGJlIHVzZWQgdG8gZmVlZCBpdCB3aXRoIHN0cmluZ3MuCi0gICAgICAgIFJlbWVtYmVyIHRoYXQgdGhlIFJlc3VsdFNlcXVlbmNlIHJldHVybnMgQW55VHlwZSBzbyBzaW5jZSBhIHN0cmluZyBpcwotICAgICAgICBiZWluZyBleHBlY3RlZCBhcyB0aGUgcmVzdWx0LCBmaXJzdCBpdCBoYXMgdG8gYmUgY2FzdGVkIGluIHRoZSBjb2RlCi0gICAgICAgIGxpa2UgdGhpczogPHByb2dyYW1saXN0aW5nPlhTU3RyaW5nIHhzc3RyaW5nID0gKFhTU3RyaW5nKShycy5maXJzdCgpKTs8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICBOdW1lcmljIGNvbnN0YW50cyBmb2xsb3cgdGhlIEphdmEgcnVsZXMgZm9yIGRlY2ltYWwgbGl0ZXJhbHM6IGZvcgotICAgICAgICBleGFtcGxlLCA0IG9yIDQuNjc7IGEgbmVnYXRpdmUgbnVtYmVyIGNhbiBiZSB3cml0dGVuIGFzIC0zLjA1LiBUaGUKLSAgICAgICAgbnVtZXJpYyBsaXRlcmFsIGlzIHRha2VuIGFzIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIKLSAgICAgICAgaWYgaXQgdXNlcyBzY2llbnRpZmljIG5vdGF0aW9uIChlLmcuIDEuMGU3KSwgYXMgYSBmaXhlZCBwb2ludCBkZWNpbWFsCi0gICAgICAgIGlmIGl0IGluY2x1ZGVzIGEgZGVjaW1hbCBwb2ludCwgb3IgYXMgYW4gaW50ZWdlciBvdGhlcndpc2UuIFdoZW4KLSAgICAgICAgZXh0cmFjdGluZyBudW1iZXIgbGl0ZXJhbHMgZnJvbSB0aGUgUmVzdWx0U2VxdWVuY2UsIHBvc3NpYmxlIHR5cGVzIHRvCi0gICAgICAgIGJlIHJldHVybmVkIGluY2x1ZGUgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+WFNEZWNpbWEnJ2wgKGUuZy7CoDoKLSAgICAgICAgeHM6ZGVjaW1hbDogNC42NyksJydYU0ludGVnZXIgJycoZS5nLsKgOiB4czppbnRlZ2VyOiA0KSBvcgotICAgICAgICAnJ1hTRG91YmxlPC9lbXBoYXNpcz4gKGUuZy7CoDogeHM6ZG91YmxlIDFlMCkuIEFsbCBvZiB3aGljaCBuZWVkIHRvIGJlCi0gICAgICAgIGNhc3QgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHN0YXRlZCBiZWZvcmU6IGZyb20gQW55VHlwZSB0byB0aGVpcgotICAgICAgICBjb3JyZXNwb25kaW5nIHR5cGVzLjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5UaGVyZSBhcmUgbm8gYm9vbGVhbiBjb25zdGFudHMgYXMgc3VjaDogPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9Iml0YWxpYyI+dHJ1ZSwgZmFsc2U8L2VtcGhhc2lzPiBpbnN0ZWFkIHRoZSBmdW5jdGlvbiBjYWxscwotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+dHJ1ZSgpPC9lbXBoYXNpcz4gYW5kIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj5mYWxzZSgpPC9lbXBoYXNpcz4gYXJlIHVzZWQuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPkNvbnN0YW50cyBvZiBvdGhlciBkYXRhIHR5cGVzIGNhbiBiZSB3cml0dGVuIHVzaW5nIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgVGhlc2UgbG9vayBsaWtlIGZ1bmN0aW9uIGNhbGxzIGJ1dCByZXF1aXJlIGEgc3RyaW5nIGxpdGVyYWwgYXMgdGhlaXIKLSAgICAgICAgYXJndW1lbnQuIEZvciBleGFtcGxlLCA8ZW1waGFzaXMKLSAgICAgICAgcm9sZT0iYm9sZCI+eHM6ZmxvYXQo4oCcMTAuN+KAnSk8L2VtcGhhc2lzPiBwcm9kdWNlcyBhIHNpbmdsZS1wcmVjaXNpb24KLSAgICAgICAgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLjwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IlBhdGhfZXhwcmVzc2lvbnMiPgotICAgICAgICA8dGl0bGU+UGF0aCBleHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+QSBwYXRoIGV4cHJlc3Npb24gaXMgYSBzZXF1ZW5jZSBvZiBzdGVwcyBzZXBhcmF0ZWQgYnkgdGhlCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj4vJycnIG9yICcnJy8vPC9lbXBoYXNpcz4gb3BlcmF0b3IuIEZvciBleGFtcGxlLAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Li4vQGRlc2M8L2VtcGhhc2lzPiBzZWxlY3RzIHRoZSBkZXNjIGF0dHJpYnV0ZQotICAgICAgICBvZiB0aGUgcGFyZW50IG9mIHRoZSBjb250ZXh0IG5vZGUuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPkluIFhQYXRoIDIuMCwgcGF0aCBleHByZXNzaW9ucyBoYXZlIGJlZW4gZ2VuZXJhbGl6ZWQgc28gdGhhdCBhbnkKLSAgICAgICAgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcGVyYW5kIG9mIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj4vPC9lbXBoYXNpcz4sIChib3RoIG9uIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQpLCBhcyBsb25nIGFzCi0gICAgICAgIGl0cyB2YWx1ZSBpcyBhIHNlcXVlbmNlIG9mIG5vZGVzLiBGb3IgZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIGEKLSAgICAgICAgdW5pb24gZXhwcmVzc2lvbiAoaW4gcGFyZW50aGVzZXMpIG9yIGEgY2FsbCB0byB0aGUgaWQoKQotICAgICAgICBmdW5jdGlvbi48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+SW4gcHJhY3RpY2UsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gdXNlIGV4cHJlc3Npb25zIG9uIHRoZSByaWdodAotICAgICAgICBvZiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Ii8iPC9lbXBoYXNpcz4gaWYgdGhleSBkZXBlbmQgb24gdGhlIGNvbnRleHQKLSAgICAgICAgaXRlbS4gSXQgaXMgbGVnYWwgdG8gd3JpdGUgJHgvJHkgcHJvdmlkZWQgYm90aCAkeCBhbmQgJHkgYXJlIHNlcXVlbmNlcwotICAgICAgICBvZiBub2RlcywgYnV0IHRoZSByZXN1bHQgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB3cml0aW5nIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj4gPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+Li8keTwvZW1waGFzaXM+Ci0gICAgICAgIDwvZW1waGFzaXM+LjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5Ob3RlIHRoYXQgdGhlIGV4cHJlc3Npb25zIDxlbXBoYXNpcyByb2xlPSJib2xkIj4uLyRYPC9lbXBoYXNpcz4KLSAgICAgICAgb3IgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPiRYLy48L2VtcGhhc2lzPiBjYW4gYmUgdXNlZCB0byByZW1vdmUKLSAgICAgICAgZHVwbGljYXRlcyBmcm9tIDxlbXBoYXNpcyByb2xlPSJib2xkIj4kWDwvZW1waGFzaXM+IGFuZCBzb3J0IHRoZQotICAgICAgICByZXN1bHRzIGludG8gZG9jdW1lbnQgb3JkZXIuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPlRoZSBvcGVyYXRvciA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Ly88L2VtcGhhc2lzPiBpcyBhbgotICAgICAgICBhYmJyZXZpYXRpb24gZm9yIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj4vZGVzY2VuZGFudC1vci1zZWxmOjpub2RlKCk8L2VtcGhhc2lzPi4gQW4gZXhwcmVzc2lvbiBvZgotICAgICAgICB0aGUgZm9ybSA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+L0U8L2VtcGhhc2lzPiBpcyBzaG9ydGhhbmQgZm9yCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj5yb290KC4pL0U8L2VtcGhhc2lzPiwgYW5kIHRoZSBleHByZXNzaW9uCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj4vJycnIG9uIGl0cyBvd24gaXMgc2hvcnRoYW5kIGZvcgotICAgICAgICAnJydyb290KC4pPC9lbXBoYXNpcz4uPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iQXhpc19zdGVwcyI+Ci0gICAgICAgIDx0aXRsZT5BeGlzIHN0ZXBzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT5UaGUgYmFzaWMgcHJpbWl0aXZlIGZvciBhY2Nlc3NpbmcgYSBzb3VyY2UgZG9jdW1lbnQgaXMgdGhlIGF4aXMKLSAgICAgICAgc3RlcC4gQXhpcyBzdGVwcyBtYXkgYmUgY29tYmluZWQgaW50byBwYXRoIGV4cHJlc3Npb25zIHVzaW5nIHRoZSBwYXRoCi0gICAgICAgIG9wZXJhdG9ycyAiLyIgYW5kICIvLyIsIGFuZCB0aGV5IG1heSBiZSBmaWx0ZXJlZCB1c2luZyBmaWx0ZXIKLSAgICAgICAgZXhwcmVzc2lvbnMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSByZXN1bHQgb2YgYW55IG90aGVyCi0gICAgICAgIGV4cHJlc3Npb24uPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPkFuIGF4aXMgc3RlcCBoYXMgdGhlIGJhc2ljIGZvcm0gYXhpczo6bm9kZS10ZXN0LCBhbmQgc2VsZWN0cwotICAgICAgICBub2RlcyBvbiBhIGdpdmVuIGF4aXMgdGhhdCBzYXRpc2Z5IHRoZSBub2RlLXRlc3QuIFRoZSBheGVzIGF2YWlsYWJsZQotICAgICAgICBhcmU6PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5lbGVtZW50OiBhZ2U8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPmVsZW1lbnQ6IGFnZTwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPlRoZSByZXN0IG9mIHRoZSBheGVzIGFjdCBpbiB0aGUgc2FtZSBtYW5uZXIuPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iU2V0X2RpZmZlcmVuY2UuMkNfaW50ZXJzZWN0aW9uX2FuZF9VbmlvbiI+Ci0gICAgICAgIDx0aXRsZT5TZXQgZGlmZmVyZW5jZSwgaW50ZXJzZWN0aW9uIGFuZCBVbmlvbjwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+VGhlIGV4cHJlc3Npb24gRTEgZXhjZXB0IEUyIHNlbGVjdHMgYWxsIG5vZGVzIHRoYXQgYXJlIGluIEUxCi0gICAgICAgIHVubGVzcyB0aGV5IGFyZSBhbHNvIGluIEUyLiBCb3RoIGV4cHJlc3Npb25zIG11c3QgcmV0dXJuIHNlcXVlbmNlcyBvZgotICAgICAgICBub2Rlcy4gVGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLiBGb3IgZXhhbXBsZSwgQCoKLSAgICAgICAgZXhjZXB0IEBub3RlIHJldHVybnMgYWxsIGF0dHJpYnV0ZXMgZXhjZXB0IHRoZSBub3RlIGF0dHJpYnV0ZS4gVGhlCi0gICAgICAgIGV4cHJlc3Npb24gRTEgaW50ZXJzZWN0IEUyIHNlbGVjdHMgYWxsIG5vZGVzIHRoYXQgYXJlIGluIGJvdGggRTEgYW5kCi0gICAgICAgIEUyLiBCb3RoIGV4cHJlc3Npb25zIG11c3QgcmV0dXJuIHNlcXVlbmNlcyBvZiBub2Rlcy4gVGhlIHJlc3VsdHMgYXJlCi0gICAgICAgIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLiBUaGUgZXhwcmVzc2lvbiBFMSB1bmlvbiBFMiBzZWxlY3RzIGFsbAotICAgICAgICBub2RlcyB0aGF0IGFyZSBpbiBlaXRoZXIgRTEgb3IgRTIgb3IgYm90aC4gQm90aCBleHByZXNzaW9ucyBtdXN0Ci0gICAgICAgIHJldHVybiBzZXF1ZW5jZXMgb2Ygbm9kZXMuIFRoZSByZXN1bHRzIGFyZSByZXR1cm5lZCBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAgICAgQSBjb21wbGV0ZSBleGFtcGxlIG9mIHRoZSBhYm92ZSBleHByZXNzaW9uIHdvdWxkIGJlIGFzIGZvbGxvd3MuCi0gICAgICAgIENvbnNpZGVyIGFuIFhNTCBkb2N1bWVudCB3aGljaCBsb29rcyBsaWtlIHRoaXM6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4mbHQ7bm9kZXMmZ3Q7Ci0gICZsdDthJmd0OwotICAgICZsdDtjb25uZWN0ZWRhJmd0O0EmbHQ7L2Nvbm5lY3RlZGEmZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGEmZ3Q7QiZsdDsvY29ubmVjdGVkYSZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYSZndDtDJmx0Oy9jb25uZWN0ZWRhJmd0OwotICAmbHQ7L2EmZ3Q7Ci0gICZsdDtiJmd0OwotICAgICZsdDtjb25uZWN0ZWRiJmd0O0ImbHQ7L2Nvbm5lY3RlZGImZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGImZ3Q7QyZsdDsvY29ubmVjdGVkYiZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYiZndDtEJmx0Oy9jb25uZWN0ZWRiJmd0OwotICAmbHQ7L2ImZ3Q7Ci0mbHQ7L25vZGVzJmd0OwotPC9wcm9ncmFtbGlzdGluZz4KLQotICAgICAgICA8cGFyYT5UaGVuIGFuIGV4YW1wbGUgb2YgZWFjaCBvZiB0aGUgZXhwcmVzc2lvbnMgd291bGQgYmU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5kYXRhKC9hLyopIHVuaW9uIGRhdGEoL2IvKik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6c3RyaW5nOiBBPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpzdHJpbmc6IEI8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOnN0cmluZzogQzwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotCi0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6c3RyaW5nOiBEPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmRhdGEoL2EvKikgaW50ZXJzZWN0IGRhdGEoL2IvKik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6c3RyaW5nOiBCPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpzdHJpbmc6IEM8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+ZGF0YSgvYS8qKSBleGNlcHQgZGF0YSgvYi8qKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpzdHJpbmc6IEQ8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkFyaXRobWV0aWNfRXhwcmVzc2lvbnMiPgotICAgICAgICA8dGl0bGU+QXJpdGhtZXRpYyBFeHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9IlVuYXJ5Ij4KLSAgICAgICAgICA8dGl0bGU+VW5hcnk8L3RpdGxlPgotCi0gICAgICAgICAgPHBhcmE+bWludXMgYW5kIHBsdXM6IFRoZSB1bmFyeSBtaW51cyBvcGVyYXRvciBjaGFuZ2VzIHRoZSBzaWduIG9mIGEKLSAgICAgICAgICBudW1iZXIuIEZvciBleGFtcGxlIC0xIGlzIG1pbnVzIG9uZSwgYW5kIC0xZTAgaXMgdGhlIGRvdWJsZSB2YWx1ZQotICAgICAgICAgIG5lZ2F0aXZlIC0xLjwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSJNdWx0aXBsaWNhdGlvbl9hbmRfRGl2aXNpb246Ij4KLSAgICAgICAgICA8dGl0bGU+TXVsdGlwbGljYXRpb24gYW5kIERpdmlzaW9uOjwvdGl0bGU+Ci0KLSAgICAgICAgICA8cGFyYT5UaGUgb3BlcmF0b3IgKiBtdWx0aXBsaWVzIHR3byBudW1iZXJzLiBJZiB0aGUgb3BlcmFuZHMgYXJlIG9mCi0gICAgICAgICAgZGlmZmVyZW50IHR5cGVzLCBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbnMgc2F5IHRoYXQgb25lIG9mIHRoZW0gaXMKLSAgICAgICAgICBwcm9tb3RlZCB0byB0aGUgdHlwZSBvZiB0aGUgb3RoZXIuwqBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIHR5cGUgYXMKLSAgICAgICAgICB0aGUgb3BlcmFuZHMgYWZ0ZXIgcHJvbW90aW9uLjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPlRoZSBvcGVyYXRvciBkaXYgZGl2aWRlcyB0d28gbnVtYmVycy4gRGl2aWRpbmcgdHdvIGludGVnZXJzCi0gICAgICAgICAgcHJvZHVjZXMgYSBkb3VibGU7IGluIG90aGVyIGNhc2VzIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUKLSAgICAgICAgICBvcGVyYW5kcy48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT5UaGUgb3BlcmF0b3IgaWRpdiBwZXJmb3JtcyBpbnRlZ2VyIGRpdmlzaW9uLiBGb3IgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgcmVzdWx0IG9mIDEwIGlkaXYgMyBpcyAzLjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPlRoZSBtb2Qgb3BlcmF0b3IgcmV0dXJucyB0aGUgbW9kdWx1cyAob3IgcmVtYWluZGVyKSBhZnRlcgotICAgICAgICAgIGRpdmlzaW9uLjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPlRoZSBvcGVyYXRvcnMgKiBhbmQgZGl2IG1heSBhbHNvIGJlIHVzZWQgdG8gbXVsdGlwbHkgb3IgZGl2aWRlCi0gICAgICAgICAgYSByYW5nZSBieSBhIG51bWJlci48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT5Gb3IgZXhhbXBsZSwgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+KDEgaWRpdiAxIHRvCi0gICAgICAgICAgMyk8L2VtcGhhc2lzPiByZXR1cm5zIHRoZSByZXN1bHQ6IDxlbXBoYXNpcwotICAgICAgICAgIHJvbGU9Iml0YWxpYyI+eHM6aW50ZWdlcjogMSwgeHM6aW50ZWdlcjogMiwgeHM6aW50ZWdlcjoKLSAgICAgICAgICAzPC9lbXBoYXNpcz48L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0iQWRkaXRpb25fYW5kX1N1YnRyYWN0aW9uOiI+Ci0gICAgICAgICAgPHRpdGxlPkFkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbjo8L3RpdGxlPgotCi0gICAgICAgICAgPHBhcmE+VGhlIG9wZXJhdG9ycyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+KzwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXMKLSAgICAgICAgICByb2xlPSJpdGFsaWMiPictJzwvZW1waGFzaXM+IHBlcmZvcm0gYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIG9mCi0gICAgICAgICAgbnVtYmVycywgaW4gdGhlIHVzdWFsIHdheS4gT25jZSBhZ2FpbiwgaWYgdGhlIG9wZXJhbmRzIGFyZSBvZgotICAgICAgICAgIGRpZmZlcmVudCB0eXBlcywgWFBhdGggMi4wIHNwZWNpZmljYXRpb25zIHNheSBvbmUgb2YgdGhlbSBpcwotICAgICAgICAgIHByb21vdGVkIGJ1dCBudW1lcmljIHR5cGUgcHJvbW90aW9uIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBieQotICAgICAgICAgIFBzeWNob1BhdGguIFRoZSByZXN1bHQgaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3BlcmFuZHMuPC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+RXhhbXBsZXMgb2YgYWJvdmUgd291bGQgYmU6PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPiAtKDUgKyA3KTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPnhzOmludGVnZXI6IC0xMjwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4teHM6ZmxvYXQo4oCZMS4yM+KAmSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICA8cGFyYT54czpmbG9hdDogLTEuMjM8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+LXhzOmRvdWJsZSjigJkxLjIz4oCZKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPnhzOmRvdWJsZTogLTEuMjM8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KCs1IC0gKzcpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+eHM6aW50ZWdlcjogLTI8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KDEgdG8gNSBkaXYgMCApPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPkZBSUwgKGRpdmlzaW9uIGJ5IHplcm8hKTwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+NSo2KjEwKjUqOTYgZGl2IDIwIGRpdiAzIGRpdiAxPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgICA8cGFyYT4gPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+eHM6ZGVjaW1hbDogMjQwMC4wPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPjMxIG1vZCAxNTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPnhzOmludGVnZXI6IDE8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IlJhbmdlX2V4cHJlc3Npb25zIj4KLSAgICAgICAgPHRpdGxlPlJhbmdlIGV4cHJlc3Npb25zPC90aXRsZT4KLQotICAgICAgICA8cGFyYT5UaGUgZXhwcmVzc2lvbiBFMSB0byBFMiByZXR1cm5zIGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMuIEZvcgotICAgICAgICBleGFtcGxlLCAxIHRvIDUgcmV0dXJucyB0aGUgc2VxdWVuY2UgMSwgMiwgMywgNCwgNS4gVGhpcyBpcyB1c2VmdWwgaW4KLSAgICAgICAgZm9yIGV4cHJlc3Npb25zLCBmb3IgZXhhbXBsZSB0aGUgZmlyc3QgZml2ZSBub2RlcyBvZiBhIG5vZGUgc2VxdWVuY2UKLSAgICAgICAgY2FuIGJlIHByb2Nlc3NlZCBieSB3cml0aW5nIGZvciAkaSBpbiAxIHRvIDUgcmV0dXJuICgvL3gpIDx1bGluawotICAgICAgICB1cmw9IiRpIj4kaTwvdWxpbms+LiBBbm90aGVyIGV4YW1wbGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4oMSsxIHRvIDEwKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiAyPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiAzPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA0PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA1PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA2PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA3PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA4PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiA5PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czppbnRlZ2VyOiAxMDwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iQ29tcGFyaXNvbnMiPgotICAgICAgICA8dGl0bGU+Q29tcGFyaXNvbnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPlRoZSBzaW1wbGVzdCBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9ImJvbGQiPmVxPC9lbXBoYXNpcz4sIDxlbXBoYXNpcyByb2xlPSJib2xkIj5uZTwvZW1waGFzaXM+LAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+bHQ8L2VtcGhhc2lzPiwgPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9ImJvbGQiPmxlPC9lbXBoYXNpcz4sIDxlbXBoYXNpcyByb2xlPSJib2xkIj5ndDwvZW1waGFzaXM+LAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Z2U8L2VtcGhhc2lzPi4gVGhlc2UgY29tcGFyZSB0d28gYXRvbWljIHZhbHVlcwotICAgICAgICBvZiB0aGUgc2FtZSB0eXBlLCBmb3IgZXhhbXBsZSB0d28gaW50ZWdlcnMsIHR3byBkYXRlcywgb3IgdHdvIHN0cmluZ3MuCi0gICAgICAgIChDb2xsYXRpb24gaGFzbuKAmXQgYmVlbiBpbXBsZW1lbnRlZCBpbiBjdXJyZW50IHZlcnNpb24gb2YgUHN5Y2hvUGF0aCkuCi0gICAgICAgIElmIHRoZSBvcGVyYW5kcyBhcmUgbm90IGF0b21pYyB2YWx1ZXMsIGFuIGVycm9yIGlzIHJhaXNlZC48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+VGhlIG9wZXJhdG9ycyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+PScnJyzCoDwvZW1waGFzaXM+IT0nCi0gICAgICAgIDxlbXBoYXNpcyByb2xlPSJpdGFsaWMiPiwgJzwvZW1waGFzaXM+Jmx0Oz0nIDxlbXBoYXNpcyByb2xlPSJpdGFsaWMiPiwKLSAgICAgICAgJzwvZW1waGFzaXM+Jmd0OyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+LCAnJycmbHQ7PC9lbXBoYXNpcz4sIGFuZAotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Jmd0Oz08L2VtcGhhc2lzPiBjYW4gY29tcGFyZSBhcmJpdHJhcnkKLSAgICAgICAgc2VxdWVuY2VzLiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYW55IHBhaXIgb2YgaXRlbXMgZnJvbSB0aGUgdHdvCi0gICAgICAgIHNlcXVlbmNlcyBoYXMgdGhlIHNwZWNpZmllZCByZWxhdGlvbnNoaXAsIGZvciBleGFtcGxlIDxlbXBoYXNpcwotICAgICAgICByb2xlPSJpdGFsaWMiPiRBID0gJEI8L2VtcGhhc2lzPiBpcyB0cnVlIGlmIHRoZXJlIGlzIGFuIGl0ZW0gaW4KLSAgICAgICAgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+JEE8L2VtcGhhc2lzPiB0aGF0IGlzIGVxdWFsIHRvIHNvbWUgaXRlbSBpbgotICAgICAgICA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj4kQjwvZW1waGFzaXM+LjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5UaGUgb3BlcmF0b3JzIDxlbXBoYXNpcyByb2xlPSJib2xkIj5pczwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXMKLSAgICAgICAgcm9sZT0iYm9sZCI+aXNub3Q8L2VtcGhhc2lzPiB0ZXN0IHdoZXRoZXIgdGhlIG9wZXJhbmRzIHJlcHJlc2VudCB0aGUKLSAgICAgICAgc2FtZSAoaWRlbnRpY2FsKSBub2RlLiBGb3IgZXhhbXBsZSwgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+dGl0bGUKLSAgICAgICAgPHVsaW5rIHVybD0iMSI+MTwvdWxpbms+IGlzICogPHVsaW5rIHVybD0iQG5vdGUiPkBub3RlPC91bGluaz4gPHVsaW5rCi0gICAgICAgIHVybD0iMSI+MTwvdWxpbms+IDwvZW1waGFzaXM+IGlzIHRydWUgaWYgdGhlIGZpcnN0IHRpdGxlIGNoaWxkIGlzIHRoZQotICAgICAgICBmaXJzdCBjaGlsZCBlbGVtZW50IHRoYXQgaGFzIGEgPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9Iml0YWxpYyI+QG5vdGU8L2VtcGhhc2lzPiBhdHRyaWJ1dGUuIElmIGVpdGhlciBvcGVyYW5kIGlzIGFuCi0gICAgICAgIGVtcHR5IHNlcXVlbmNlIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgc2VxdWVuY2UgKHdoaWNoIHdpbGwgdXN1YWxseSBiZQotICAgICAgICB0cmVhdGVkIGFzIGZhbHNlKS48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+VGhlIG9wZXJhdG9ycyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Jmx0OyZsdDs8L2VtcGhhc2lzPiBhbmQKLSAgICAgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPiZndDsmZ3Q7PC9lbXBoYXNpcz4gdGVzdCB3aGV0aGVyIG9uZSBub2RlCi0gICAgICAgIHByZWNlZGVzIG9yIGZvbGxvd3MgYW5vdGhlciBpbiBkb2N1bWVudCBvcmRlci4gQ29uc2lkZXIgdGhpcyBYTUwKLSAgICAgICAgZG9jdW1lbnQ6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4mbHQ7Ym9vayZndDsKLSAmbHQ7dGl0bGUmZ3Q7QmVpbmcgYSBEb2cgSXMgYSBGdWxsLVRpbWUgSm9iJmx0Oy90aXRsZSZndDsKLSAmbHQ7YXV0aG9yJmd0O0NoYXJsZXMgTS4gU2NodWx6Jmx0Oy9hdXRob3ImZ3Q7Ci0gJmx0O2NoYXJhY3RlciZndDsKLSAgICZsdDtuYW1lJmd0O1Nub29weSZsdDsvbmFtZSZndDsKLSAgICZsdDtmcmllbmQtb2YmZ3Q7UGVwcGVybWludCBQYXR0eSZsdDsvZnJpZW5kLW9mJmd0OwotICAgJmx0O3NpbmNlJmd0OzE5NTAtMTAtMDQmbHQ7L3NpbmNlJmd0OwotICAgJmx0O2FnZSZndDsyJmx0Oy9hZ2UmZ3Q7Ci0gICAmbHQ7cXVhbGlmaWNhdGlvbiZndDtleHRyb3ZlcnRlZCBiZWFnbGUmbHQ7L3F1YWxpZmljYXRpb24mZ3Q7Ci0gJmx0Oy9jaGFyYWN0ZXImZ3Q7Ci0gJmx0O2NoYXJhY3RlciZndDsKLSAgICZsdDtuYW1lJmd0O1BlcHBlcm1pbnQgUGF0dHkmbHQ7L25hbWUmZ3Q7Ci0gICAmbHQ7c2luY2UmZ3Q7MTk2Ni0wOC0yMiZndDsvc2luY2UmZ3Q7Ci0gICAmbHQ7YWdlJmd0OzQmbHQ7L2FnZSZndDsKLSAgICZsdDtxdWFsaWZpY2F0aW9uJmd0O2JvbGQsIGJyYXNoIGFuZCB0b21ib3lpc2gmbHQ7L3F1YWxpZmljYXRpb24mZ3Q7Ci0gJmx0Oy9jaGFyYWN0ZXImZ3Q7Ci0mbHQ7L2Jvb2smZ3Q7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPkV4YW1wbGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29rL2NoYXJhY3RlciBuYW1lPSJTbm9vcHkiICZsdDsmbHQ7IGJvb2svY2hhcmFjdGVyIFBhdHR5IiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpib29sZWFuOiB0cnVlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+Ym9vay9jaGFyYWN0ZXIgPHVsaW5rIHVybD0ibmFtZT0mcXVvdDtQZXBwZXJtaW50Ij5QYXR0eSI8L3VsaW5rPgotICAgICAgICAmbHQ7Jmx0OyBib29rL2NoYXJhY3RlciA8dWxpbmsKLSAgICAgICAgdXJsPSJuYW1lPSZxdW90O1Nub29weSZxdW90OyI+bmFtZT0iU25vb3B5IjwvdWxpbms+IDxlbXBoYXNpcwotICAgICAgICByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOmJvb2xlYW46IGZhbHNlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJDb25kaXRpb25hbF9FeHByZXNzaW9ucyI+Ci0gICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBFeHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+WFBhdGggMi4wIGFsbG93cyBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gPGVtcGhhc2lzCi0gICAgICAgIHJvbGU9Iml0YWxpYyI+aWYgKCBFMSApIHRoZW4gRTIgZWxzZSBFMzwvZW1waGFzaXM+LiBGb3IgZXhhbXBsZSwKLSAgICAgICAgPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+aWYgKEBkaXNjb3VudCkgdGhlbiBAZGlzY291bnQgZWxzZQotICAgICAgICAwPC9lbXBoYXNpcz4gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRpc2NvdW50IGF0dHJpYnV0ZSBpZiBpdCBpcwotICAgICAgICBwcmVzZW50LCBvciB6ZXJvIG90aGVyd2lzZS48L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJRdWFudGlmaWVkX0V4cHJlc3Npb25zIj4KLSAgICAgICAgPHRpdGxlPlF1YW50aWZpZWQgRXhwcmVzc2lvbnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPlRoZSBleHByZXNzaW9uIDxlbXBoYXNpcyByb2xlPSJpdGFsaWMiPnNvbWUgJHggaW4gRTEgc2F0aXNmaWVzCi0gICAgICAgIEUyPC9lbXBoYXNpcz4gcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIEUxIGZvcgotICAgICAgICB3aGljaCB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUgb2YgRTIgaXMgdHJ1ZS4gTm90ZSB0aGF0IEUyIG11c3QgdXNlCi0gICAgICAgIHRoZSByYW5nZSB2YXJpYWJsZSA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj4keDwvZW1waGFzaXM+IHRvIHJlZmVyIHRvCi0gICAgICAgIHRoZSBpdGVtIGJlaW5nIHRlc3RlZDsgaXQgZG9lcyBub3QgYmVjb21lIHRoZSBjb250ZXh0IGl0ZW0uIEZvcgotICAgICAgICBleGFtcGxlLCA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj5zb21lICR4IGluIEAqIHNhdGlzZmllcyAkeCBlcQotICAgICAgICAiIjwvZW1waGFzaXM+IGlzIHRydWUgaWYgdGhlIGNvbnRleHQgaXRlbSBpcyBhbiBlbGVtZW50IHRoYXQgaGFzIGF0Ci0gICAgICAgIGxlYXN0IG9uZSB6ZXJvLWxlbmd0aCBhdHRyaWJ1dGUgdmFsdWUuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPlNpbWlsYXJseSwgdGhlIGV4cHJlc3Npb24gPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+ZXZlcnkgJHggaW4gRTEKLSAgICAgICAgc2F0aXNmaWVzIEUyPC9lbXBoYXNpcz4gcmV0dXJucyB0cnVlIGlmIGV2ZXJ5IGl0ZW0gaW4gdGhlIHNlcXVlbmNlCi0gICAgICAgIGdpdmVuIGJ5IEUxIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uLjwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkFuZC4yQ19Pcl9FeHByZXNzaW9ucyI+Ci0gICAgICAgIDx0aXRsZT5BbmQsIE9yIEV4cHJlc3Npb25zPC90aXRsZT4KLQotICAgICAgICA8cGFyYT5UaGUgZXhwcmVzc2lvbiA8ZW1waGFzaXMgcm9sZT0iaXRhbGljIj5FMSBhbmQgRTI8L2VtcGhhc2lzPgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyBvZiBFMSBhbmQgRTIgYXJlIGJvdGgKLSAgICAgICAgdHJ1ZS4gVGhlIGV4cHJlc3Npb24gPGVtcGhhc2lzIHJvbGU9Iml0YWxpYyI+RTEgb3IgRTI8L2VtcGhhc2lzPgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyBvZiBlaXRoZXIgb3IgYm90aCBvZiBFMQotICAgICAgICBhbmQgRTIgYXJlIHRydWUuPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4gKGZvciBhIHRydXRoIHRhYmxlKSAxIGFuZCAxPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+eHM6Ym9vbGVhbjogdHJ1ZTwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz4xIGFuZCAwPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOmJvb2xlYW46IGZhbHNlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPjEgb3IgMDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpib29sZWFuOiB0cnVlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPjAgb3IgMTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT54czpib29sZWFuOiB0cnVlPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iU2VxdWVuY2VUeXBlX01hdGNoaW5nX0V4cHJlc3Npb25zIj4KLSAgICAgICAgPHRpdGxlPlNlcXVlbmNlVHlwZSBNYXRjaGluZyBFeHByZXNzaW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+VGhlIHJ1bGVzIGZvciBTZXF1ZW5jZVR5cGUgbWF0Y2hpbmcgY29tcGFyZSB0aGUgYWN0dWFsIHR5cGUgb2YgYQotICAgICAgICB2YWx1ZSB3aXRoIGFuIGV4cGVjdGVkIHR5cGUuIFRoZXNlIHJ1bGVzIGFyZSBhIHN1YnNldCBvZiB0aGUgZm9ybWFsCi0gICAgICAgIHJ1bGVzIHRoYXQgbWF0Y2ggYSB2YWx1ZSB3aXRoIGFuIGV4cGVjdGVkIHR5cGUgZGVmaW5lZCBpbiBYUXVlcnkgMS4wCi0gICAgICAgIGFuZCBYUGF0aCAyLjAgRm9ybWFsIFNlbWFudGljcyA8dWxpbmsKLSAgICAgICAgdXJsPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDIwLyNYUXVlcnlGb3JtYWxTZW1hbnRpY3MiPmh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoMjAvI1hRdWVyeUZvcm1hbFNlbWFudGljczwvdWxpbms+LAotICAgICAgICBiZWNhdXNlIHRoZSBGb3JtYWwgU2VtYW50aWNzIG11c3QgYmUgYWJsZSB0byBtYXRjaCBhIHZhbHVlIHdpdGggYW55Ci0gICAgICAgIFhNTCBTY2hlbWEgdHlwZSwgd2hlcmVhcyB0aGUgcnVsZXMgYmVsb3cgb25seSBtYXRjaCB2YWx1ZXMgYWdhaW5zdAotICAgICAgICB0aG9zZSB0eXBlcyBleHByZXNzaWJsZSBieSB0aGUgU2VxdWVuY2VUeXBlIHN5bnRheC48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+U29tZSBvZiB0aGUgcnVsZXMgZm9yIFNlcXVlbmNlVHlwZSBtYXRjaGluZyByZXF1aXJlIGRldGVybWluaW5nCi0gICAgICAgIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3IgZGVyaXZlZCBmcm9tIGFuIGV4cGVjdGVkCi0gICAgICAgIHR5cGUgbmFtZS4gVGhlIGdpdmVuIHR5cGUgbmFtZSBtYXkgYmUgImtub3duIiAoZGVmaW5lZCBpbiB0aGUgaW4tc2NvcGUKLSAgICAgICAgc2NoZW1hIGRlZmluaXRpb25zKSwgb3IgInVua25vd24iIChub3QgZGVmaW5lZCBpbiB0aGUgaW4tc2NvcGUgc2NoZW1hCi0gICAgICAgIGRlZmluaXRpb25zKS4gQW4gdW5rbm93biB0eXBlIG5hbWUgbWlnaHQgYmUgZW5jb3VudGVyZWQsIGZvciBleGFtcGxlLAotICAgICAgICBpZiBhIHNvdXJjZSBkb2N1bWVudCBoYXMgYmVlbiB2YWxpZGF0ZWQgdXNpbmcgYSBzY2hlbWEgdGhhdCB3YXMgbm90Ci0gICAgICAgIGltcG9ydGVkIGludG8gdGhlIHN0YXRpYyBjb250ZXh0LiBJbiB0aGlzIGNhc2UsIGFuIGltcGxlbWVudGF0aW9uIGlzCi0gICAgICAgIGFsbG93ZWQgKGJ1dCBpcyBub3QgcmVxdWlyZWQpIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50Ci0gICAgICAgIG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgdW5rbm93biB0eXBlIG5hbWUgaXMgZGVyaXZlZAotICAgICAgICBmcm9tIHRoZSBleHBlY3RlZCB0eXBlIG5hbWUuIEZvciBleGFtcGxlLCBhbiBpbXBsZW1lbnRhdGlvbiBtaWdodAotICAgICAgICBtYWludGFpbiBhIGRhdGEgZGljdGlvbmFyeSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHR5cGUKLSAgICAgICAgaGllcmFyY2hpZXMuIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgWE1MIGRvY3VtZW50OjwvcGFyYT4KLQotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Jmx0O3NvcmJvJmd0OwotICZsdDtpcyZndDtlbGl0ZSZsdDsvaXMmZ3Q7Ci0gJmx0OyEtLSBsaWZlIHN1eCAtLSZndDsKLSZsdDsvc29yYm8mZ3Q7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPlRoZW4sIHRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZSBvZiBTZXF1ZW5jZVR5cGUKLSAgICAgICAgbWF0Y2hpbmdzOjwvcGFyYT4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+IGVsZW1lbnQoeyp9KTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5lbGVtZW50OiBzb3JibzwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5lbGVtZW50KGVsaXRlKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5FbXB0eSByZXN1bHRzPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0KLSAgICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnNvcmJvL2NvbW1lbnQoKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+cmVzdWx0OjwvZW1waGFzaXM+PC9wYXJhPgotCi0gICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5jb21tZW50OiBsaWZlIHN1eDwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L29yZGVyZWRsaXN0PgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5kYXRhKC9zb3Jiby9jb21tZW50KCkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+IDxlbXBoYXNpcyByb2xlPSJib2xkIj5yZXN1bHQ6PC9lbXBoYXNpcz48L3BhcmE+Ci0KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPnhzOnN0cmluZzogbGlmZSBzdXg8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+c29yYm8vbm9kZSgpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPnJlc3VsdDo8L2VtcGhhc2lzPjwvcGFyYT4KLQotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+dGV4dDo8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLQotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPmVsZW1lbnQ6IGlzPC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT5jb21tZW50OiBsaWZlIHN1eDwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotCi0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+dGV4dDo8L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC9vcmRlcmVkbGlzdD4KLQotICAgICAgICA8cGFyYT48L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9Ikhvd190b191c2VfWFBhdGhfMi4wX2Z1bmN0aW9uc193aXRoX1BzeWNob1BhdGgiPgotICAgIDx0aXRsZT5Ib3cgdG8gdXNlIFhQYXRoIDIuMCBmdW5jdGlvbnMgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT4KLQotICAgIDxwYXJhPlRoZSBhaW0gb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGdpdmUgdGhlIHVzZXIgYW4gb3ZlcnZpZXcgb2YgdGhlCi0gICAgYXZhaWxhYmxlIFhQYXRoIDIuMCBmdW5jdGlvbnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gUHN5Y2hvUGF0aC4gRm9yIHRoZQotICAgIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0Mgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBmdW5jdGlvbnMgYW5kCi0gICAgb3BlcmF0b3JzIDx1bGluawotICAgIHVybD0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLyI+aHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLzwvdWxpbms+LjwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSJBY2Nlc3NvcnMiPgotICAgICAgPHRpdGxlPkFjY2Vzc29yczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPkluIG9yZGVyIGZvciBQc3ljaG9QYXRoIHRvIG9wZXJhdGUgb24gaW5zdGFuY2VzIG9mIHRoZSBYUGF0aCAyLjAKLSAgICAgIGRhdGEgbW9kZWwsIHRoZSBtb2RlbCBtdXN0IGV4cG9zZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgaXQKLSAgICAgIGNvbnRhaW5zLiBJdCBkb2VzIHRoaXMgYnkgZGVmaW5pbmcgYSBmYW1pbHkgb2YgYWNjZXNzb3IgZnVuY3Rpb25zLiBUaGVzZQotICAgICAgZnVuY3Rpb25zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHVzZXJzIG9yIGFwcGxpY2F0aW9ucyB0byBjYWxsIGRpcmVjdGx5LgotICAgICAgSW5zdGVhZCwgdGhleSBhcmUgZGVzY3JpcHRpb25zIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGFuIGltcGxlbWVudGF0aW9uCi0gICAgICBvZiB0aGUgbW9kZWwgbXVzdCBleHBvc2UgdG8gYXBwbGljYXRpb25zLjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZGF0YSjigJhzdHJpbmfigJkpPC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU1N0cmluZylycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYc3RyaW5n4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJDb25zdHJ1Y3Rvcl9GdW5jdGlvbnMiPgotICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yIEZ1bmN0aW9uczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz54czpkYXRlVGltZSgiMjAwMi0wMi0wMVQxMDowMDowMCswNjowMCIpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPkZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+U3RyaW5nIG4gPSAoKFhTRGF0ZVRpbWUpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYMjAwMi0wMi0wMVQwNDowMDowMFrigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkZ1bmN0aW9uc19vbl9OdW1lcmljX1ZhbHVlcyI+Ci0gICAgICA8dGl0bGU+RnVuY3Rpb25zIG9uIE51bWVyaWMgVmFsdWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmNlaWxpbmcoeHM6ZmxvYXQo4oCYMTAuNOKAmSkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+ZmxvYXQgbiA9ICgoWFNGbG9hdClycy5maXJzdCgpKS5mbG9hdHZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJgxMS4w4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfdG9fQXNzZW1ibGVfYW5kX0Rpc2Fzc2VtYmxlX1N0cmluZ3MiPgotICAgICAgPHRpdGxlPkZ1bmN0aW9ucyB0byBBc3NlbWJsZSBhbmQgRGlzYXNzZW1ibGUgU3RyaW5nczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5jb2RlcG9pbnRzLXRvLXN0cmluZygwMTExKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU1N0cmluZylycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTsmbHQ7L3NvdXJjZSZndDs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYb+KAmTwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iQ29tcGFyZV9hbmRfT3RoZXJfRnVuY3Rpb25zX29uX1N0cmluZ19WYWx1ZXMiPgotICAgICAgPHRpdGxlPkNvbXBhcmUgYW5kIE90aGVyIEZ1bmN0aW9ucyBvbiBTdHJpbmcgVmFsdWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmNvbmNhdCjigJh1buKAmSwg4oCYZ3JhdGVmdWzigJkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+U3RyaW5nIG4gPSAoKFhTU3RyaW5nKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJh1bmdyYXRlZnVs4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfQmFzZWRfb25fU3Vic3RyaW5nX01hdGNoaW5nIj4KLSAgICAgIDx0aXRsZT5GdW5jdGlvbnMgQmFzZWQgb24gU3Vic3RyaW5nIE1hdGNoaW5nPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmNvbnRhaW5zKCJhYmMiLCAiZWRmIik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYZmFsc2XigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IlN0cmluZ19GdW5jdGlvbnNfdGhhdF9Vc2VfUGF0dGVybl9NYXRjaGluZyI+Ci0gICAgICA8dGl0bGU+U3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPm1hdGNoZXMo4oCYYWJjZOKAmSwg4oCYYWJjZOKAmSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYdHJ1ZeKAmTwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iRnVuY3Rpb25zX29uX0Jvb2xlYW5fVmFsdWVzIj4KLSAgICAgIDx0aXRsZT5GdW5jdGlvbnMgb24gQm9vbGVhbiBWYWx1ZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+bm90KHRydWUoKSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYZmFsc2XigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkNvbXBvbmVudF9FeHRyYWN0aW9uX0Z1bmN0aW9uc19vbl9EdXJhdGlvbnMuMkNfRGF0ZXNfYW5kX1RpbWVzIj4KLSAgICAgIDx0aXRsZT5Db21wb25lbnQgRXh0cmFjdGlvbiBGdW5jdGlvbnMgb24gRHVyYXRpb25zLCBEYXRlcyBhbmQKLSAgICAgIFRpbWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnRpbWV6b25lLWZyb20tdGltZSh4czp0aW1lKCIxMzoyMDowMCswNTowMCIpKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJhQVDVI4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfUmVsYXRlZF90b19RTmFtZXMiPgotICAgICAgPHRpdGxlPkZ1bmN0aW9ucyBSZWxhdGVkIHRvIFFOYW1lczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5sb2NhbC1uYW1lLWZyb20tUU5hbWUoUU5hbWUo4oCYIDx1bGluawotICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2V4YW1wbGUiPmh0dHA6Ly93d3cuZXhhbXBsZS5jb20vZXhhbXBsZTwvdWxpbms+4oCZLCDigJhwZXJzb27igJkpKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU05DTmFtZSlycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYcGVyc29u4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJGdW5jdGlvbnNfb25fTm9kZXMiPgotICAgICAgPHRpdGxlPkZ1bmN0aW9ucyBvbiBOb2RlczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjwvcGFyYT4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkdlbmVyYWxfRnVuY3Rpb25zX29uX1NlcXVlbmNlcyI+Ci0gICAgICAgIDx0aXRsZT5HZW5lcmFsIEZ1bmN0aW9ucyBvbiBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5yZW1vdmUoKOKAmHPigJks4oCYb+KAmSzigJht4oCZLOKAmGXigJks4oCYdOKAmSzigJho4oCZLOKAmGnigJks4oCYbuKAmSzigJhn4oCZKSwgNik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz5mb3IgKEl0ZXJhdG9yIGl0ZXIgPSBycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgT2JqZWN0IGl0ZW0gPSBpdGVyLm5leHQoKTsgCi0gIFN0cmluZyBuID0gKChYU1N0cmluZylpdGVtKS5zdHJpbmd2YWx1ZSgpOwotICBwcmludChuICsgIiAiKTsKLX0gcHJpbnRsbigiIik7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmHMgbyBtIGUgdCBpIG4gZ+KAmTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkZ1bmN0aW9uc19UaGF0X1Rlc3RfdGhlX0NhcmRpbmFsaXR5X29mX1NlcXVlbmNlcyI+Ci0gICAgICAgIDx0aXRsZT5GdW5jdGlvbnMgVGhhdCBUZXN0IHRoZSBDYXJkaW5hbGl0eSBvZiBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5vbmUtb3ItbW9yZSgoMSwyLDMsNCw1KSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwcm9ncmFtbGlzdGluZz5mb3IgKEl0ZXJhdG9yIGl0ZXIgPSBycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSBPYmplY3QgaXRlbSA9IGl0ZXIubmV4dCgpOwotIGludCBuID0gKChYU0ludGVnZXIpaXRlbSkuaW50dmFsdWUoKTsKLSBwcmludChuICsgIiAiKTsKLX0gcHJpbnRsbigiIik7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmDEgMiAzIDQgNeKAmTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkRlZXAtRXF1YWwuMkNfQWdncmVnYXRlX0Z1bmN0aW9ucy4yQ19hbmRfRnVuY3Rpb25zX3RoYXRfR2VuZXJhdGVfU2VxdWVuY2VzIj4KLSAgICAgICAgPHRpdGxlPkRlZXAtRXF1YWwsIEFnZ3JlZ2F0ZSBGdW5jdGlvbnMsIGFuZCBGdW5jdGlvbnMgdGhhdCBHZW5lcmF0ZQotICAgICAgICBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5hdmcoKDMsNCw1KSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5kb3VibGUgYXZnID0gKChYU0RvdWJsZSlycy5maXJzdCgpKS5kb3VibGV2YWx1ZSgpOwotcHJpbnRsbihhdmcpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmDQuMOKAmTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9IkNvbnRleHRfRnVuY3Rpb25zIj4KLSAgICAgICAgPHRpdGxlPkNvbnRleHQgRnVuY3Rpb25zPC90aXRsZT4KLQotICAgICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KDEwIHRvIDIwKSA9IDI8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5pbnQgcG9zID0gKChYU0ludGVnZXIpcnMuZmlyc3QoKSkuaW50dmFsdWUoKTsgcHJpbnRsbihwb3MpOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmDEx4oCZPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJIb3dfdG9fdXNlX1hQYXRoXzIuMF9vcGVyYXRvcnNfd2l0aF9Qc3ljaG9QYXRoIj4KLSAgICA8dGl0bGU+SG93IHRvIHVzZSBYUGF0aCAyLjAgb3BlcmF0b3JzIHdpdGggUHN5Y2hvUGF0aDwvdGl0bGU+Ci0KLSAgICA8cGFyYT5UaGUgYWltIG9mIHRoaXMgc2VjdGlvbiBpcyB0byBnaXZlIHRoZSB1c2VyIGFuIG92ZXJ2aWV3IG9mIHRoZQotICAgIGF2YWlsYWJsZSBYUGF0aCAyLjAgb3BlcmF0b3JzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIFBzeWNob1BhdGguIEZvciB0aGUKLSAgICBmb3JtYWwgc3BlY2lmaWNhdGlvbnMsIHNlZSB0aGUgVzNDIHdlYi1zaXRlIGZvciBYUGF0aCAyLjAgZnVuY3Rpb25zIGFuZAotICAgIG9wZXJhdG9ycyA8dWxpbmsKLSAgICB1cmw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoLWZ1bmN0aW9ucy8iPmh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoLWZ1bmN0aW9ucy88L3VsaW5rPi48L3BhcmE+Ci0KLSAgICA8cGFyYT48L3BhcmE+Ci0KLSAgICA8c2VjdGlvbiBpZD0iT3BlcmF0b3JzX29uX051bWVyaWNfVmFsdWVzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnMgb24gTnVtZXJpYyBWYWx1ZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+eHM6aW50ZWdlcig0KSArIHhzOmludGVnZXIoMyk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5JbnRlZ2VyIG4gPSAoKFhTSW50ZWdlcilycy5maXJzdCgpKS5pbnRlZ2VydmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiDigJg34oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJDb21wYXJpc29uX29mX051bWVyaWNfVmFsdWVzIj4KLSAgICAgIDx0aXRsZT5Db21wYXJpc29uIG9mIE51bWVyaWMgVmFsdWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnhzOmRlY2ltYWwoMy4zKSA9IHhzOmRlY2ltYWwoNi42KTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmJvb2xlYW4gbiA9ICgoWFNCb29sZWFuKXJzLmZpcnN0KCkpLnZhbHVlKCk7IHByaW50bG4obik7PC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmGZhbHNl4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJPcGVyYXRvcnNfb25fQm9vbGVhbl9WYWx1ZXMiPgotICAgICAgPHRpdGxlPk9wZXJhdG9ycyBvbiBCb29sZWFuIFZhbHVlczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz54czpib29sZWFuKOKAmXRydWXigJkpIGd0IHhzOmJvb2xlYW4o4oCZZmFsc2XigJkpPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wYXJhPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsgcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg4oCYdHJ1ZeKAmTwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iQ29tcGFyaXNvbnNfb2ZfRHVyYXRpb24uMkNfRGF0ZV9hbmRfVGltZV9WYWx1ZXMiPgotICAgICAgPHRpdGxlPkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz54czp0aW1lKCIyMzowMDowMCswNjowMCIpIGx0IHhzOnRpbWUoIjEyOjAwOjAwLTA2OjAwIik8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyAKLXByaW50bG4obik7PC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mIOKAmHRydWXigJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkFyaXRobWV0aWNfRnVuY3Rpb25zX29uX0R1cmF0aW9ucyI+Ci0gICAgICA8dGl0bGU+QXJpdGhtZXRpYyBGdW5jdGlvbnMgb24gRHVyYXRpb25zPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPm11bHRpcGx5LWRheVRpbWVEdXJhdGlvbih4czpkYXlUaW1lRHVyYXRpb24oIlBUMkgxME0iKSwgMi4xKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT53aGljaCByZXR1cm5zIGEgeGR0OmRheVRpbWVEdXJhdGlvbiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIDQgaG91cnMKLSAgICAgIGFuZCAzMyBtaW51dGVzIOKAmFBUNEgzM03igJk8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9IkFyaXRobWV0aWNfRnVuY3Rpb25zX0RhdGVzX2FuZF9UaW1lcyI+Ci0gICAgICA8dGl0bGU+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPmFkZC15ZWFyTW9udGhEdXJhdGlvbi10by1kYXRlVGltZSggeHM6ZGF0ZVRpbWUoIjIwMDAtMTAtMzBUMTE6MTI6MDAiKSwgeGR0OnllYXJNb250aER1cmF0aW9uKCJQMVkyTSIpKTwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcGFyYT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPlN0cmluZyBuID0gKChYU0RhdGVUaW1lKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7IAotcHJpbnRsbihuKTs8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+d2hpY2ggcmV0dXJucyBhbiB4czpkYXRlVGltZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZXhpY2FsCi0gICAgICByZXByZXNlbnRhdGlvbiDigJgyMDAxLTEyLTMwVDExOjEyOjAw4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJPcGVyYXRvcnNfUmVsYXRlZF90b19RTmFtZXNfQW5kX05vZGVzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnMgUmVsYXRlZCB0byBRTmFtZXMgQW5kIE5vZGVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnhzOlFOYW1lKOKAmWFv4oCZKSBlcSB4czpRTmFtZSjigJlhb+KAmSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyAKLXByaW50bG4obik7PC9wcm9ncmFtbGlzdGluZz48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPndoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZiDigJh0cnVl4oCZPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJVbmlvbi4yQ19JbnRlcnNlY3Rpb25fYW5kX0V4Y2VwdCI+Ci0gICAgICA8dGl0bGU+VW5pb24sIEludGVyc2VjdGlvbiBhbmQgRXhjZXB0PC90aXRsZT4KLQotICAgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPnVuaW9uKCRzZXEyLCAkc2VxMyk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwcm9ncmFtbGlzdGluZz5mb3IgKEl0ZXJhdG9yIGl0ZXIgPSBycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgT2JqZWN0IGl0ZW0gPSBpdGVyLm5leHQoKTsKLSAgU3RyaW5nIG4gPSAoKFhTU3RyaW5nKWl0ZW0pLnN0cmluZ3ZhbHVlKCk7Ci0gIHByaW50KG4gKyAiLCAiKTsKLX0KLXByaW50bG4oIiIpOwotPC9wcm9ncmFtbGlzdGluZz4KLQotICAgICAgPHBhcmE+IDwvcGFyYT4KLQotICAgICAgPHBhcmE+d2hpY2ggcmV0dXJucyB0aGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiAkaXRlbTEsICRpdGVtMiwKLSAgICAgICRpdGVtMy48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iT3BlcmF0b3JzX3RoYXRfR2VuZXJhdGVfU2VxdWVuY2VzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnMgdGhhdCBHZW5lcmF0ZSBTZXF1ZW5jZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT48cHJvZ3JhbWxpc3Rpbmc+KDEgdG8gMyk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHBhcmE+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPjxwcm9ncmFtbGlzdGluZz5pbnQgbiA9IChYU0ludGVnZXIpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICAgICA8cGFyYT53aGljaCByZXR1cm5zIHRoZSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIDEsIDIsIDMuPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLSAgPC9jaGFwdGVyPgotPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9ib29rLmNzcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvYm9vay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YzM1ZTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9ib29rLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi1wLkNvZGUgewotCWRpc3BsYXk6IGJsb2NrOwotCXRleHQtYWxpZ246IGxlZnQ7Ci0JdGV4dC1pbmRlbnQ6IDAuMDBwdDsKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAxNXB0OwotCWZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0JZm9udC1zdHlsZTogbm9ybWFsOwotCWNvbG9yOiAjNDQ0NENDOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQl2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0JdGV4dC10cmFuc2Zvcm06IG5vbmU7Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIENvdXJpZXIsIG1vbm9zcGFjZTsKLX0KLQotSDYuQ2FwdGlvbkZpZ0NvbHVtbiB7Ci0JZGlzcGxheTogYmxvY2s7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLQl0ZXh0LWluZGVudDogMC4wMDAwMDBwdDsKLQltYXJnaW4tdG9wOiAzLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDExLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsKLQlmb250LXNpemU6IDc1JTsKLQlmb250LXdlaWdodDogYm9sZDsKLQlmb250LXN0eWxlOiBJdGFsaWM7Ci0JY29sb3I6ICMwMDAwMDA7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLQl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLX0KLQotcC5Ob3RlIHsKLQlkaXNwbGF5OiBibG9jazsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCXRleHQtaW5kZW50OiAwcHQ7Ci0JbWFyZ2luLXRvcDogMTkuNTAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMTkuNTAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAzMHB0OwotCWZvbnQtc2l6ZTogMTEwJTsKLQlmb250LXdlaWdodDogbm9ybWFsOwotCWZvbnQtc3R5bGU6IEl0YWxpYzsKLQljb2xvcjogIzAwMDAwMDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotCXRleHQtdHJhbnNmb3JtOiBub25lOwotfQotCi1FTS5VSUxhYmVsIHsKLQlmb250LXdlaWdodDogQm9sZDsKLQlmb250LXN0eWxlOiBub3JtYWw7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLQl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLX0KLQotRU0uQ29kZU5hbWUgewotCWZvbnQtd2VpZ2h0OiBCb2xkOwotCWZvbnQtc3R5bGU6IG5vcm1hbDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotCXRleHQtdHJhbnNmb3JtOiBub25lOwotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2U7Ci19Ci0KLVVMLk5hdkxpc3QgewotCW1hcmdpbi1sZWZ0OiAxLjVlbTsKLQlwYWRkaW5nLWxlZnQ6IDBweDsKLQlsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Ci19Ci0KLWJvZHksaHRtbCB7Ci0JYm9yZGVyOiAwcHgKLX0KLQotLyogZm9sbG93aW5nIGZvbnQgZmFjZSBkZWNsYXJhdGlvbnMgbmVlZCB0byBiZSByZW1vdmVkIGZvciBEQkNTICovCi1ib2R5LGgxLGgyLGgzLGg0LGg1LGg2LHAsdGFibGUsdGQsY2FwdGlvbix0aCx1bCxvbCxkbCxsaSxkZCxkdCB7Ci0JZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci0JY29sb3I6ICMwMDAwMDAKLX0KLQotcHJlLGNvZGUgewotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2U7Ci19Ci0KLS8qIGVuZCBmb250IGZhY2UgZGVjbGFyYXRpb25zICovCi1AbWVkaWEgcHJpbnQgewotCWh0bWwgewotCQlmb250LXNpemU6IDEycHQKLQl9Ci19Ci0KLWJvZHkgewotCWZvbnQtc2l6ZTogODMlOwotCWJhY2tncm91bmQ6ICNGRkZGRkY7Ci0JbWFyZ2luLWJvdHRvbTogMWVtCi19Ci0KLWgxIHsKLQlmb250LXNpemU6IDE4MCU7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDFweAotfQotCi1oMiB7Ci0JZm9udC1zaXplOiAxNDAlOwotCW1hcmdpbi10b3A6IDI1cHg7Ci0JbWFyZ2luLWJvdHRvbTogM3B4Ci19Ci0KLWgzIHsKLQlmb250LXNpemU6IDExMCU7Ci0JbWFyZ2luLXRvcDogMjBweDsKLQltYXJnaW4tYm90dG9tOiAzcHgKLX0KLQotaDQgewotCWZvbnQtc2l6ZTogMTAwJTsKLQltYXJnaW4tdG9wOiAyMHB4OwotCW1hcmdpbi1ib3R0b206IDNweDsKLQlmb250LXN0eWxlOiBpdGFsaWMKLX0KLQotcCB7Ci0JbWFyZ2luLXRvcDogMTBweDsKLQltYXJnaW4tYm90dG9tOiAxMHB4Ci19Ci0KLXByZSB7Ci0JZm9udC1zaXplOiA5MyU7Ci0JbWFyZ2luLWxlZnQ6IDY7Ci0JY29sb3I6ICM0NDQ0Q0MKLX0KLQotY29kZSB7Ci0JZm9udC1zaXplOiA5MyU7Ci19Ci0KLXRhYmxlIHsKLQlmb250LXNpemU6IDEwMCUKLX0gIC8qIG5lZWRlZCBmb3IgcXVpcmtzIG1vZGUgKi8KLWE6bGluayB7Ci0JY29sb3I6ICMwMDAwRkYKLX0KLQotYTpob3ZlciB7Ci0JY29sb3I6ICMwMDAwODAKLX0KLQotYTp2aXNpdGVkIHsKLQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZQotfQotCi11bCB7Ci0JbWFyZ2luLXRvcDogMTBweDsKLQltYXJnaW4tYm90dG9tOiAxMHB4OwotfQotCi1saSB7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDVweDsKLX0KLQotbGkgcCB7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDVweDsKLX0KLQotb2wgewotCW1hcmdpbi10b3A6IDEwcHg7Ci0JbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLQotZGwgewotCW1hcmdpbi10b3A6IDEwcHg7Ci0JbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLQotZHQgewotCW1hcmdpbi10b3A6IDVweDsKLQltYXJnaW4tYm90dG9tOiA1cHg7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWRkIHsKLQltYXJnaW4tdG9wOiA1cHg7Ci0JbWFyZ2luLWJvdHRvbTogNXB4OwotfQotCi1zdHJvbmcgewotCWZvbnQtd2VpZ2h0OiBib2xkCi19Ci0KLWVtIHsKLQlmb250LXN0eWxlOiBpdGFsaWMKLX0KLQotdmFyIHsKLQlmb250LXN0eWxlOiBpdGFsaWMKLX0KLQotZGl2LnJldmlzaW9uIHsKLQlib3JkZXItbGVmdC1zdHlsZTogc29saWQ7Ci0JYm9yZGVyLWxlZnQtd2lkdGg6IHRoaW47Ci0JYm9yZGVyLWxlZnQtY29sb3I6ICM3QjY4RUU7Ci0JcGFkZGluZy1sZWZ0OiA1OwotfQotCi10aCB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLXByZS5wcm9ncmFtbGlzdGluZyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogc2lsdmVyOwotCWJvcmRlcjogdGhpbjsKLQlib3JkZXItc3R5bGU6IGRhc2hlZDsKLQljb2xvcjogYmxhY2s7Ci0JcGFkZGluZy1sZWZ0OiA1OwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MzVjZjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAxLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9IlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSSI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+SW50cm9kdWN0aW9uPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2MiPjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAxLmh0bWwjR2V0dGluZ19Qc3ljaG9QYXRoIj5HZXR0aW5nIFBzeWNob1BhdGg8L2E+PC9zcGFuPjwvbGk+PC91bD48L2Rpdj48cD5XaGF0IGlzIFBzeWNob2hQYXRoPyBQc3ljaG9QYXRoIGlzIGEgWFBhdGggMi4wIFhNTCBTY2hlbWEgQXdhcmUKLSAgICBwcm9jZXNzb3IuIEl0IGlzIG5lYXJseSBmdWxseSBjb21wbGlhbnQgdG8gdGhlIFhQYXRoIDIuMCB0ZXN0IHN1aXRlLiBJdCBpcwotICAgIGEgbGlicmFyeSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgZWNsaXBzZSB0byBiZSB1c2VkLiBLbm93biBhZG9wdGVycyBvZgotICAgIFBzeWNob1BhdGggaW5jbHVkZSB0aGUgWGVyY2VzLUogcHJvamVjdCBmb3IgWE1MIFNjaGVtYXMgMS4xIGFzc2VydGlvbgotICAgIHN1cHBvcnQuPC9wPjxwPlBzeWNob1BhdGggaXMgdGhlIG9ubHkga25vd24gb3Blbi1zb3VyY2UgamF2YSBYUGF0aCAyLjAgcHJvY2Vzc29yCi0gICAgdGhhdCBpcyBmdWxseSBzY2hlbWEgYXdhcmUuIFNBWE9OIEhFIG9ubHkgc3VwcG9ydHMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KLSAgICBYTUwgU2NoZW1hIGF3YXJuZXNzIHByb3ZpZGVzIHRpZ2h0ZXIgc3RhdGljIGNoZWNraW5nLCBhbmQgY2FuIGJlIHVzZWQgdG8KLSAgICBoZWxwIGRldGVybWluZSBpZiBjZXJ0YWluIG9wZXJhdGlvbnMgY2FuIG9yIHNob3VsZCBvY2N1ciBvbiBhbiBYTUwgbm9kZS4KLSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgUHN5Y2hvUGF0aCdzIGRlc2lnbiBwbGVhc2Ugc2VlIHRoZQotICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iL1BzeWNob1BhdGhYUGF0aFByb2Nlc3Nvci9EZXNpZ24iIHRhcmdldD0iX3RvcCI+ZGVzaWduPC9hPgotICAgIGRvY3VtZW50LjwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJHZXR0aW5nX1BzeWNob1BhdGgiPjwvYT5HZXR0aW5nIFBzeWNob1BhdGg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPkN1cnJlbnRseSB0aGVyZSBpcyBubyBzdGFuZGFsb25lIGJ1aWxkIG9mIFBzeWNob1BhdGguIEhvd2V2ZXIsIHlvdQotICAgICAgY2FuIGRvd25sb2FkIHRoZSA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy9kb3dubG9hZHMvZHJvcHMvUjMuMS9SLTMuMS0yMDA5MDYxNjAzNTEwNS8iIHRhcmdldD0iX3RvcCI+V1RQCi0gICAgICBXU1QgMy4xPC9hPiB6aXAgZmlsZSwgYW5kIHVzZSB0aGUKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5qYXIgZmlsZS4gVGhpcyBqYXIgaGFzIG5vCi0gICAgICBkZXBlbmRlbmNpZXMgb24gZWNsaXBzZSwgYW5kIHdpbGwgd29yayBhcyBhIHN0YW5kYXJkIGphciBmaWxlLiBJZiB5b3UKLSAgICAgIGFyZSB1c2luZyBhbiBPU0dJIGNvbnRhaW5lciwgdGhlbiB0aGlzIGlzIHRyZWF0ZWQgYXMgYSBzdGFuZGFyZCBPU0dJCi0gICAgICBidW5kbGUuPC9wPjxkaXYgY2xhc3M9InRpcCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPlBzeWNob1BhdGggMS4xTTE8L2gzPjxwPlBzeWNob1BhdGggMS4xTTEgaXMgYWxzbyBhdmFpbGFibGUgdG8gPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvZG93bmxvYWRzL2Ryb3BzL1IzLjIvUy0zLjJNMWItMjAwOTA4MTQxNDM1MTkvIiB0YXJnZXQ9Il90b3AiPmRvd25sb2FkPC9hPi4KLSAgICAgICAgMS4xTTEgcGFzc2VzIDk2JSBvZiB0aGUgWFBhdGggMi4wIHRlc3Qgc3VpdGUuPC9wPjwvZGl2PjxwPkFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHlvdSBjdXJyZW50bHkgbmVlZCBhcmU6PC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD5JQk0gSUNVIDQuMCBvciBncmVhdGVyPC9wPjwvbGk+PGxpPjxwPlhlcmNlcyAyLjguMCBvciBncmVhdGVyPC9wPjwvbGk+PGxpPjxwPkphdmFDdXAgMC4xMCBvciBncmVhdGVyLjwvcD48L2xpPjwvdWw+PC9kaXY+PHA+SWYgdXNpbmcgZWNsaXBzZSwgdGhlc2UgYXJlIGFsbCBhdmFpbGFibGUgZnJvbSB0aGUgT3JiaXQgcHJvamVjdC4KLSAgICAgIE90aGVycyBjYW4gZmluZCB0aGUgbmVjZXNzYXJ5IGphcnMgZnJvbSB0aGVpciByZXNwZWN0aXZlIHByb2plY3QKLSAgICAgIHBhZ2VzLjwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWFjNzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSTwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9IkludHJvZHVjdGlvbiI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAyLmh0bWwiIHRpdGxlPSJTY2hlbWEgQXdhcmUiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ikhvd190b19mZWVkX1BzeWNob3BhdGhfWFBhdGhfZXhwcmVzc2lvbnMiPjwvYT5Vc2luZyBQc3ljaG9QYXRoIFhQYXRoIDIuMCBBUEk8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDIuaHRtbCNOb24tU2NoZW1hX0F3YXJlIj5Ob24tU2NoZW1hIEF3YXJlPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwMi5odG1sIj5TY2hlbWEgQXdhcmU8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzLmh0bWwiPkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aDwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwMy5odG1sI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwMi5odG1sIj5QYXRoIGV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwMy5odG1sIj5BeGlzIHN0ZXBzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNC5odG1sIj5TZXQgZGlmZmVyZW5jZSwgaW50ZXJzZWN0aW9uIGFuZCBVbmlvbjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDUuaHRtbCI+QXJpdGhtZXRpYyBFeHByZXNzaW9uczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNS5odG1sI1VuYXJ5Ij5VbmFyeTwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDVzMDIuaHRtbCI+TXVsdGlwbGljYXRpb24gYW5kIERpdmlzaW9uOjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDVzMDMuaHRtbCI+QWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOjwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA2Lmh0bWwiPlJhbmdlIGV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNy5odG1sIj5Db21wYXJpc29uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDguaHRtbCI+Q29uZGl0aW9uYWwgRXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA5Lmh0bWwiPlF1YW50aWZpZWQgRXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczEwLmh0bWwiPkFuZCwgT3IgRXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczExLmh0bWwiPlNlcXVlbmNlVHlwZSBNYXRjaGluZyBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48cD5TaW5jZSBQc3ljaG9QYXRoIGhhcyBiZWVuIGltcGxlbWVudGVkIGFzIGFuIGV4dGVybmFsIGxpYnJhcnkgYW5kIG5vdAotICAgIGFzIGEgY29tcGxldGUgcHJvZ3JhbSwgaW4gb3JkZXIgdG8gdXNlIGl0LCBpdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCBmcm9tCi0gICAgaW5zaWRlIGFub3RoZXIgcHJvZ3JhbS4gVG8gcHJvY2VzcyBYUGF0aCAyLjAgZXhwcmVzc2lvbnMgdXNpbmcgUHN5Y2hvUGF0aAotICAgIGZyb20gYW5vdGhlciBwcm9ncmFtcyBvbmUgbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nCi0gICAgcHJvY2Vzczo8L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+TG9hZCB0aGUgWE1MIGRvY3VtZW50PC9wPjwvbGk+PGxpPjxwPk9wdGlvbmFsbHkgdmFsaWRhdGUgdGhlIFhNTCBkb2N1bWVudDwvcD48L2xpPjxsaT48cD5Jbml0aWFsaXplIHN0YXRpYyBhbmQgZHluYW1pYyBjb250ZXh0IGluIHJlc3BlY3QgdG8gdGhlIGRvY3VtZW50Ci0gICAgICAgIHJvb3Q8L3A+PC9saT48bGk+PHA+UGFyc2UgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uPC9wPjwvbGk+PGxpPjxwPlN0YXRpY2FsbHkgdmVyaWZ5IHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbjwvcD48L2xpPjxsaT48cD5FdmFsdWF0ZSB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24gaW4gcmVzcGVjdCB0byB0aGUgWE1MCi0gICAgICAgIGRvY3VtZW50PC9wPjwvbGk+PC9vbD48L2Rpdj48cD5UbyBnaXZlIGEgYmV0dGVyIGlkZWEgb2YgaG93IHRoaXMgcHJvY2VzcyBhY3R1YWxseSB3b3Jrcywgd2UmcnNxdW87bGwgZ28KLSAgICB0aHJvdWdoIGFuIGV4YW1wbGUgb2YgcHJvY2Vzc2luZyBhbmQgZXZhbHVhdGluZyB0aGUgc3RyaW5nIGV4cHJlc3Npb24KLSAgICAmbGRxdW87SGVsbG8gV29ybGQhJnJkcXVvOy4gSW4gdGhpcyBleGFtcGxlIHRoZSBYTUwgZG9jdW1lbnQgdGhhdCB3ZSBsb2FkIGlzIGNhbGxlZAotICAgICZsZHF1bztYUGV4YW1wbGUueG1sJnJkcXVvOy48L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iTm9uLVNjaGVtYV9Bd2FyZSI+PC9hPk5vbi1TY2hlbWEgQXdhcmU8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4vKioKLSAqIEZpcnN0IGxvYWQgYW5kIG9wdGlvbmFsbHkgdmFsaWRhdGUgdGhlIFhNTCBkb2N1bWVudCAKLSovCi0vLyBDcmVhdGUgYW4gSW5wdXRTdHJlYW0gZnJvbSB0aGUgWE1MIGRvY3VtZW50Ci1JbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oJmxkcXVvO1hQZXhhbXBsZS54bWwmcmRxdW87KTsKLQotLy8gSW5pdGlhbGl6aW5nIHRoZSBYZXJjZXMgRE9NIGxvYWRlci4KLURPTUxvYWRlciBsb2FkZXIgPSBuZXcgWGVyY2VzTG9hZGVyKCk7Ci0KLS8vIE9wdGlvbmFsbHkgc2V0IGZsYWcgdG8gdmFsaWRhdGUgWE1MIGRvY3VtZW50IGxvYWRlci5zZXR2YWxpZGF0aW5nKHZhbGlkYXRlKTsKLS8vIExvYWRzIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHN0b3JlcyB0aGUgRE9NIHJvb3QKLURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKGlzKTsKLQotLyoqCi0gKiBEeW5hbWljIGNvbnRleHRzIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gZGVmYXVsdHMKLSAqIGRlcGVuZGVudCBvbiB0aGUgWE1MIFNjaGVtYS4KLSovCi0KLS8vIEV4dHJhY3RpbmcgdGhlIHNjaGVtYSBmcm9tIERPTSByb290IG9mIFhwZXhwcmVzc2lvbi54bWwuCi1FbGVtZW50UFNWSSByb290UFNWSSA9IChFbGVtZW50UFNWSSlkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci1YU01vZGVsIHNjaGVtYSA9IHJvb3RQU1ZJLmdldFNjaGVtYUluZm9ybWF0aW9uKCk7Ci0KLS8vIEluaXRpYWxpc2luZyB0aGUgRHluYW1pY0NvbnRleHQuCi1EeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQoc2NoZW1hLCBkb2MpOwotCi0vLyBSZWdpc3RlciB0aGUgbmFtZXNwYWNlcyBvZiB0aGUgWFBhdGggMi4wIHByZWRlZmluZWQgZGF0YXR5cGVzCi1kYy5hZGRuYW1lc3BhY2UoJmxkcXVvO3hzJnJkcXVvOywmcmRxdW87W2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXSZyZHF1bzspOwotCi0vLyBSZWdpc3RlciB0aGUgWFBhdGggMi4wIHN0YW5kYXJkIGZ1bmN0aW9ucwotZGMuYWRkZnVuY3Rpb25saWJyYXJ5KG5ldyBGbkZ1bmN0aW9uTGlicmFyeSgpKTsKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgWFNDdHJMaWJyYXJ5KCkpOwotCi0vKioKLSAqIFBhcnNpbmcgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uIGludG8gYW4gQVNUIHJlcHJlc2VudGF0aW9uCi0gKi8KLS8vIEluaXRpYWxpc2VzIFBzeWNob1BhdGgmcnNxdW87cyBzdXBwbGllZCBwYXJzZXIuCi1YUGF0aFBhcnNlciB4cHAgPSBuZXcgSmZsZXhDdXBQYXJzZXIoKTsKLQotLy8gUGFyc2VzIHRoZSBYUGF0aCBleHByZXNzaW9uLgotWFBhdGggeHAgPSB4cHAucGFyc2UoeHBhdGgpOwotLyoqCi0gKiBTdGF0aWMgY2hlY2sgdGhlIEFTVCB0byB2ZXJpZnQgc3RydWN0dXJhbCB2YWxpZGl0eSBvZiAgCi0gKiBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0KLS8vIEluaXRpYWxpemluZyBTdGF0aWNDaGVja2VyLgotU3RhdGljQ2hlY2tlciBuYW1lY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKHNjKTsKLQotLy8gU3RhdGljIENoZWNraW5nIHRoZSBYcGF0aCBleHByZXNzaW9uICZyc3F1bztIZWxsbyBXb3JsZCEmcnNxdW87IG5hbWVjaGVjay5jaGVjayh4cCk7Ci0vKioKLSAqIEV2YWx1YXRlIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0gCi0vLyBJbml0aWFsaXppbmcgdGhlIGV2YWx1YXRvciB3aXRoIER5bmFtaWNDb250ZXh0IGFuZCB0aGUgbmFtZQotLy8gb2YgdGhlIFhNTCBkb2N1bWVudCBYUGV4YW1wbGUueG1sIGFzIHBhcmFtZXRlcnMuCi1FdmFsdWF0b3IgZXZhbCA9IG5ldyBEZWZhdWx0RXZhbHVhdG9yKGRjLCBkb2MpOwotIAotLy8gRXZhbHVhdGVzIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiwgc3RvcmluZyB0aGUgcmVzdWx0Ci0vLyBpbiB0aGUgUmVzdWx0U2VxdWVuY2UKLVJlc3VsdFNlcXVlbmNlIHJzID0gZXZhbC5ldmFsdWF0ZSh4cCk7IAotPC9wcmU+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE4N2NmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+U2NoZW1hIEF3YXJlPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iVXNpbmcgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgQVBJIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9IlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iU2NoZW1hX0F3YXJlIj48L2E+U2NoZW1hIEF3YXJlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPi8qKgotICogRmlyc3QgbG9hZCBhbmQgb3B0aW9uYWxseSB2YWxpZGF0ZSB0aGUgWE1MIGRvY3VtZW50IAotKi8KLQotIFNjaGVtYUZhY3Rvcnkgc2NoZW1hRmFjdG9yeSA9IG5ldyBYTUxTY2hlbWFGYWN0b3J5KCk7Ci0gVVJMIHNjaGVtYVVSTCA9IG5ldyBGaWxlKCJYUGV4YW1wbGUueHNkIikudG9VUkwoKTsKLSBTY2hlbWEgamF4cHNjaGVtYSA9IHNjaGVtYUZhY3RvcnkubmV3U2NoZW1hKHNjaGVtYVVSTCk7Ci0KLS8vIENyZWF0ZSBhbiBJbnB1dFN0cmVhbSBmcm9tIHRoZSBYTUwgZG9jdW1lbnQKLUlucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgmbGRxdW87WFBleGFtcGxlLnhtbCZyZHF1bzspOwotCi0vLyBJbml0aWFsaXppbmcgdGhlIFhlcmNlcyBET00gbG9hZGVyLgotRE9NTG9hZGVyIGxvYWRlciA9IG5ldyBYZXJjZXNMb2FkZXIoamF4cHNjaGVtYSk7Ci0KLS8vIE9wdGlvbmFsbHkgc2V0IGZsYWcgdG8gdmFsaWRhdGUgWE1MIGRvY3VtZW50IGxvYWRlci5zZXR2YWxpZGF0aW5nKHZhbGlkYXRlKTsKLS8vIExvYWRzIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHN0b3JlcyB0aGUgRE9NIHJvb3QKLURvY3VtZW50IGRvYyA9IGxvYWRlci5sb2FkKGlzKTsKLQotLyoqCi0gKiBEeW5hbWljIGNvbnRleHRzIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gZGVmYXVsdHMKLSAqIGRlcGVuZGVudCBvbiB0aGUgWE1MIFNjaGVtYS4KLSovCi0KLS8vIEluaXRpYWxpc2luZyB0aGUgRHluYW1pY0NvbnRleHQuCi1EeW5hbWljQ29udGV4dCBkYyA9IG5ldyBEZWZhdWx0RHluYW1pY0NvbnRleHQoamF4cHNjaGVtYSwgZG9jKTsKLQotLy8gUmVnaXN0ZXIgdGhlIG5hbWVzcGFjZXMgb2YgdGhlIFhQYXRoIDIuMCBwcmVkZWZpbmVkIGRhdGF0eXBlcwotZGMuYWRkbmFtZXNwYWNlKCZsZHF1bzt4cyZyZHF1bzssJnJkcXVvO1todHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYV0mcmRxdW87KTsKLQotLy8gUmVnaXN0ZXIgdGhlIFhQYXRoIDIuMCBzdGFuZGFyZCBmdW5jdGlvbnMKLWRjLmFkZGZ1bmN0aW9ubGlicmFyeShuZXcgRm5GdW5jdGlvbkxpYnJhcnkoKSk7Ci1kYy5hZGRmdW5jdGlvbmxpYnJhcnkobmV3IFhTQ3RyTGlicmFyeSgpKTsKLQotLyoqCi0gKiBQYXJzaW5nIHRoZSBYUGF0aCAyLjAgZXhwcmVzc2lvbiBpbnRvIGFuIEFTVCByZXByZXNlbnRhdGlvbgotICovCi0vLyBJbml0aWFsaXNlcyBQc3ljaG9QYXRoJnJzcXVvO3Mgc3VwcGxpZWQgcGFyc2VyLgotWFBhdGhQYXJzZXIgeHBwID0gbmV3IEpmbGV4Q3VwUGFyc2VyKCk7Ci0KLS8vIFBhcnNlcyB0aGUgWFBhdGggZXhwcmVzc2lvbi4KLVhQYXRoIHhwID0geHBwLnBhcnNlKHhwYXRoKTsKLQotLyoqCi0gKiBTdGF0aWMgY2hlY2sgdGhlIEFTVCB0byB2ZXJpZnQgc3RydWN0dXJhbCB2YWxpZGl0eSBvZiAgCi0gKiBYUGF0aCAyLjAgZXhwcmVzc2lvbgotICovCi0KLS8vIEluaXRpbGlzaW5nIFN0YXRpY0NoZWNrZXIuCi1TdGF0aWNDaGVja2VyIG5hbWVjaGVjayA9IG5ldyBTdGF0aWNOYW1lUmVzb2x2ZXIoc2MpOwotCi0vLyBTdGF0aWMgQ2hlY2tpbmcgdGhlIFhwYXRoIGV4cHJlc3Npb24gJnJzcXVvO0hlbGxvIFdvcmxkISZyc3F1bzsgbmFtZWNoZWNrLmNoZWNrKHhwKTsKLS8qKgotICogRXZhbHVhdGUgdGhlIFhQYXRoIDIuMCBleHByZXNzaW9uCi0gKi8KLQotLy8gSW5pdGlhbGlzaW5nIHRoZSBldmFsdWF0b3Igd2l0aCBEeW5hbWljQ29udGV4dCBhbmQgdGhlIG5hbWUKLS8vIG9mIHRoZSBYTUwgZG9jdW1lbnQgWFBleGFtcGxlLnhtbCBhcyBwYXJhbWV0ZXJzLgotRXZhbHVhdG9yIGV2YWwgPSBuZXcgRGVmYXVsdEV2YWx1YXRvcihkYywgZG9jKTsgCi0KLS8vIEV2YWx1YXRlcyB0aGUgWFBhdGggMi4wIGV4cHJlc3Npb24sIHN0b3JpbmcgdGhlIHJlc3VsdAotLy8gaW4gdGhlIFJlc3VsdFNlcXVlbmNlCi1SZXN1bHRTZXF1ZW5jZSBycyA9IGV2YWwuZXZhbHVhdGUoeHApOyAKLTwvcHJlPjxwPlhQYXRoIDIuMCBkZWZpbmVzIGV2ZXJ5dGhpbmcgdG8gYmUgYSBzZXF1ZW5jZSBvZiBpdGVtcywgaW5jbHVkaW5nCi0gICAgICB0aGUgYXJndW1lbnRzIHRvIGV4cHJlc3Npb25zIGFuZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbnMuIFRodXMsIHRoZQotICAgICAgb3ZlcmFsbCByZXN1bHQgb2YgYW4gWFBhdGggZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFsc28gYSBzZXF1ZW5jZSBvZgotICAgICAgaXRlbXMuIFBzeWNob1BhdGggdXNlcyB0aGUgY2xhc3MgUmVzdWx0U2VxdWVuY2UgYXMgYSBDb2xsZWN0aW9ucyB3cmFwcGVyCi0gICAgICB0byBzdG9yZSB0aGVzZSBzZXF1ZW5jZXMgYW5kIHRoZXJlZm9yZSwgdGhlIHJlc3VsdCBvZiBhbiBldmFsdWF0aW9uIGlzCi0gICAgICBvZiB0aGlzIHR5cGUgYWxzby4gVGhlIFJlc3VsdFNlcXVlbmNlIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSBpdGVtczsgYW4KLSAgICAgIGl0ZW0gbWF5IGJlIGEgbm9kZSBvciBhIHNpbXBsZS12YWx1ZS4gJmxkcXVvO0hlbGxvIFdvcmxkISZyZHF1bzsgaXMgYW4gZXhhbXBsZSBvZiBhCi0gICAgICBzaW5nbGUgdmFsdWUgd2l0aCBsZW5ndGggMS4gQSBnZW5lcmFsIHNlcXVlbmNlIGNvdWxkIGJlIHdyaXR0ZW4gYXMgKCZsZHF1bzthJnJkcXVvOywKLSAgICAgICZsZHF1bztzJnJkcXVvOywgJmxkcXVvO2QmcmRxdW87LCAmbGRxdW87ZiZyZHF1bzspLjwvcD48cD5FeHRyYWN0aW9uIG9mIGNlcnRhaW4gaXRlbXMgZnJvbSB0aGUgUmVzdWx0U2VxdWVuY2UgY2xhc3MgaXMKLSAgICAgIGRlc2NyaWJlZCBiZWxvdywgd2l0aCBkZXRhaWxzIG9mIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW9ucyB0aGF0IG9uZSBtaWdodAotICAgICAgYXBwbHkgb24gdGhlIFJlc3VsdFNlcXVlbmNlLiBDb25zaWRlciB0aGF0ICZyc3F1bztycyZyc3F1bzsgaXMgdGhlIFJlc3VsdFNlcXVlbmNlLAotICAgICAgdGhlbjo8L3A+PHA+PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4vLyBXaWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSwgaW4gdGhpcwotLy8gY2FzZSBvZiAmcnNxdW87SGVsbG8gV29ybGQhJnJzcXVvOyBleHByZXNzaW9uIHNpemUgPSAxLgotcnMuc2l6ZSgpOyAKLQotLy8gV2lsbCByZXR1cm4gdGhlIG4mcnNxdW87dGggZWxlbWVudCBpbiB0aGUgc2VxdWVuY2UsIGluIHRoaXMgY2FzZSBvZgotLy8gJnJzcXVvO0hlbGxvIFdvcmxkISZyc3F1bzssIGlmIG4gPSAxLCB0aGVuIGl0IHdpbGwgcmV0dXJuCi0vLyBYU1N0cmluZyBvZiAmbGRxdW87SGVsbG8gV29ybGQhJnJkcXVvOywgYnV0IGlmIG4gPSAyLCBpdCB3aWxsIHJldHVybgotLy8gRW1wdHkgUmVzdWx0LgotcnMuZ2V0KG4pOwotCi0vL1dpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LgotcnMuZW1wdHkoKTsgCi0KLS8vIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzZXF1ZW5jZSwgCi0vLyBpbiB0aGlzIGV4YW1wbGUgaXQgd2lsbCByZXR1cm4gWFNTdHJpbmcgb2YgJmxkcXVvO0hlbGxvIFdvcmxkISZyZHF1bzsgCi1ycy5maXJzdCgpIAotPC9wcmU+PHA+SG93ZXZlciwgYWxsIHRoZSBpdGVtcyBleHRyYWN0ZWQgd2lsbCBiZSBvZiB0aGUgdHlwZSZyc3F1bztzIGJhc2UgY2xhc3MKLSAgICAgIEFueVR5cGUgYW5kIG5lZWQgdG8gYmUgY2FzdGVkIGludG8gaXRzIGFjdHVhbCBzdWJ0eXBlLjwvcD48cD5DZXJ0YWluIG9wZXJhdGlvbnMgYWx3YXlzIHJldHVybiBhIHBhcnRpY3VsYXIgdHlwZSBhbmQgdXNpbmcgdGhpcwotICAgICAga25vd2xlZGdlLCB0aGUgZXh0cmFjdGVkIGl0ZW0gY2FuIGJlIGltbWVkaWF0ZWx5IGNhc3RlZC4gSW4gb3VyIGV4YW1wbGUKLSAgICAgICZsZHF1bztIZWxsbyBXb3JsZCEmcmRxdW87IHJldHVybnMgYSBzdHJpbmcgKGVhc2lseSBrbm93biBhcyBpdCBpcyBpbnNpZGUgdGhlIHF1b3RlcwotICAgICAgJnJzcXVvOyAmcnNxdW87ICksIHNvIHRoaXMgY2FuIHNhZmVseSBiZSBjYXN0ZWQgYXMgc3VjaDo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlhTU3RyaW5nIHhzc3RyaW5nID0gWFNTdHJpbmcpKHJzLmZpcnN0KCkpOzwvcHJlPlRoZQotICAgICAgYWN0dWFsIHJlc3VsdCBjYW4gbm93IGJlIGV4dHJhY3RlZCBmcm9tIHRoaXMgWFNTdHJpbmcgaW4gdGhlIGZvbGxvd2luZwotICAgICAgbWFubmVyOiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIHN0ciA9IHhzc3RyaW5nLnZhbHVlKCk7PC9wcmU+PC9wPjxwPlRoZSBkZXRhaWxzIG9mIGhvdyB0byBjYXN0IGV4dHJhY3RlZCBpdGVtcyBmcm9tIEFueVR5cGUgaW50byB0aGVpcgotICAgICAgYWN0dWFsIHN1YnR5cGVzIHdpdGggZXhhbXBsZXMgaXMgaW4gdGhlIG5leHQgc2VjdGlvbiBvbiBIb3cgdG8gdXNlIGVhY2gKLSAgICAgIHByb2R1Y3Rpb24gaW4gdGhlIGdyYW1tYXIuPC9wPjxwPkhvd2V2ZXIsIGlmIHRoZSBleHBlY3RlZCByZXR1cm4gdHlwZSBpcyB1bmtub3duIG9yIG11bHRpcGxlIHR5cGVzCi0gICAgICBhcmUgcG9zc2libGUsIHRoZSB0eXBlcyBoaWVyYXJjaHkgY2FuIGJlIHRyYXZlcnNlZCBpbiBhIGJyZWFkdGggZmlyc3QKLSAgICAgIG1hbm5lciBtYWtpbmcgdXNlIG9mIHRoZSBKYXZhIGluc3RhbmNlb2Ygb3BlcmF0b3IgdG8gYXNjZXJ0YWluIHRoZQotICAgICAgYWN0dWFsIHR5cGUuJm5ic3A7PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JhOTIxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+SG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iVXNpbmcgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgQVBJIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDIuaHRtbCIgdGl0bGU9IlNjaGVtYSBBd2FyZSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzczAyLmh0bWwiIHRpdGxlPSJQYXRoIGV4cHJlc3Npb25zIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ikhvd190b191c2VfdGhlX1hQYXRoXzIuMF9ncmFtbWFyX3dpdGhfUHN5Y2hvUGF0aCI+PC9hPkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+SW4gdGhpcyBzZWN0aW9uIHdlIHdpbGwgdHJ5IHRvIGdpdmUgeW91IGFuIG92ZXJ2aWV3IG9mIHRoZSBYUGF0aAotICAgICAgMi4wIGdyYW1tYXIgaW4gZ2VuZXJhbCBhbmQgaG93IGVhY2ggcHJvZHVjdGlvbiBpbiB0aGUgZ3JhbW1hciBzaG91bGQgYmUKLSAgICAgIHVzZWQgd2l0aCBQc3ljaG9QYXRoLiBGb3IgdGhlIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0MKLSAgICAgIHdlYi1zaXRlIGZvciBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoMjAiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgyMDwvYT4uPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJDb25zdGFudHMiPjwvYT5Db25zdGFudHM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlN0cmluZyBsaXRlcmFscyBhcmUgd3JpdHRlbiBhcyAmbGRxdW87SGVsbG8mcmRxdW87IG9yICZsc3F1bztIZWxsbyZyc3F1bzsuIEluIGVhY2ggY2FzZQotICAgICAgICB0aGUgb3Bwb3NpdGUga2luZCBvZiBxdW90YXRpb24gbWFyayBjYW4gYmUgdXNlZCB3aXRoaW4gdGhlIHN0cmluZzogJmxzcXVvO0hlCi0gICAgICAgIHNhaWQgJmxkcXVvO0hlbGxvJnJkcXVvOyAmcnNxdW87IG9yICZsZHF1bztMb25kb24gaXMgYSBiaWcgY2l0eSZyZHF1bzsuIFRvIGZlZWQgUHN5Y2hvUGF0aCwgJmxkcXVvOyAmbHNxdW87SGVsbG8KLSAgICAgICAgV29ybGQhJnJzcXVvOyAmcmRxdW87b3IgJmxkcXVvOyAmbGRxdW87SGVsbG8gV29ybGQhJnJkcXVvOyAmcmRxdW87IGNhbiBiZSB1c2VkIHRvIGZlZWQgaXQgd2l0aCBzdHJpbmdzLgotICAgICAgICBSZW1lbWJlciB0aGF0IHRoZSBSZXN1bHRTZXF1ZW5jZSByZXR1cm5zIEFueVR5cGUgc28gc2luY2UgYSBzdHJpbmcgaXMKLSAgICAgICAgYmVpbmcgZXhwZWN0ZWQgYXMgdGhlIHJlc3VsdCwgZmlyc3QgaXQgaGFzIHRvIGJlIGNhc3RlZCBpbiB0aGUgY29kZQotICAgICAgICBsaWtlIHRoaXM6IDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5YU1N0cmluZyB4c3N0cmluZyA9IChYU1N0cmluZykocnMuZmlyc3QoKSk7PC9wcmU+Ci0gICAgICAgIE51bWVyaWMgY29uc3RhbnRzIGZvbGxvdyB0aGUgSmF2YSBydWxlcyBmb3IgZGVjaW1hbCBsaXRlcmFsczogZm9yCi0gICAgICAgIGV4YW1wbGUsIDQgb3IgNC42NzsgYSBuZWdhdGl2ZSBudW1iZXIgY2FuIGJlIHdyaXR0ZW4gYXMgLTMuMDUuIFRoZQotICAgICAgICBudW1lcmljIGxpdGVyYWwgaXMgdGFrZW4gYXMgYSBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcgotICAgICAgICBpZiBpdCB1c2VzIHNjaWVudGlmaWMgbm90YXRpb24gKGUuZy4gMS4wZTcpLCBhcyBhIGZpeGVkIHBvaW50IGRlY2ltYWwKLSAgICAgICAgaWYgaXQgaW5jbHVkZXMgYSBkZWNpbWFsIHBvaW50LCBvciBhcyBhbiBpbnRlZ2VyIG90aGVyd2lzZS4gV2hlbgotICAgICAgICBleHRyYWN0aW5nIG51bWJlciBsaXRlcmFscyBmcm9tIHRoZSBSZXN1bHRTZXF1ZW5jZSwgcG9zc2libGUgdHlwZXMgdG8KLSAgICAgICAgYmUgcmV0dXJuZWQgaW5jbHVkZSA8c3BhbiBjbGFzcz0iaXRhbGljIj5YU0RlY2ltYScnbCAoZS5nLiZuYnNwOzoKLSAgICAgICAgeHM6ZGVjaW1hbDogNC42NyksJydYU0ludGVnZXIgJycoZS5nLiZuYnNwOzogeHM6aW50ZWdlcjogNCkgb3IKLSAgICAgICAgJydYU0RvdWJsZTwvc3Bhbj4gKGUuZy4mbmJzcDs6IHhzOmRvdWJsZSAxZTApLiBBbGwgb2Ygd2hpY2ggbmVlZCB0byBiZQotICAgICAgICBjYXN0IGluIHRoZSBzYW1lIG1hbm5lciBhcyBzdGF0ZWQgYmVmb3JlOiBmcm9tIEFueVR5cGUgdG8gdGhlaXIKLSAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlcy48L3A+PHA+VGhlcmUgYXJlIG5vIGJvb2xlYW4gY29uc3RhbnRzIGFzIHN1Y2g6IDxzcGFuIGNsYXNzPSJpdGFsaWMiPnRydWUsIGZhbHNlPC9zcGFuPiBpbnN0ZWFkIHRoZSBmdW5jdGlvbiBjYWxscwotICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz50cnVlKCk8L3N0cm9uZz48L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5mYWxzZSgpPC9zdHJvbmc+PC9zcGFuPiBhcmUgdXNlZC48L3A+PHA+Q29uc3RhbnRzIG9mIG90aGVyIGRhdGEgdHlwZXMgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgY29uc3RydWN0b3JzLgotICAgICAgICBUaGVzZSBsb29rIGxpa2UgZnVuY3Rpb24gY2FsbHMgYnV0IHJlcXVpcmUgYSBzdHJpbmcgbGl0ZXJhbCBhcyB0aGVpcgotICAgICAgICBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnhzOmZsb2F0KCZsZHF1bzsxMC43JnJkcXVvOyk8L3N0cm9uZz48L3NwYW4+IHByb2R1Y2VzIGEgc2luZ2xlLXByZWNpc2lvbgotICAgICAgICBmbG9hdGluZyBwb2ludCBudW1iZXIuPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczAyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhZDAwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+UGF0aCBleHByZXNzaW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDJzMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwMy5odG1sIiB0aXRsZT0iQXhpcyBzdGVwcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iUGF0aF9leHByZXNzaW9ucyI+PC9hPlBhdGggZXhwcmVzc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPkEgcGF0aCBleHByZXNzaW9uIGlzIGEgc2VxdWVuY2Ugb2Ygc3RlcHMgc2VwYXJhdGVkIGJ5IHRoZQotICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4vJycnIG9yICcnJy8vPC9zdHJvbmc+PC9zcGFuPiBvcGVyYXRvci4gRm9yIGV4YW1wbGUsCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi4uL0BkZXNjPC9zdHJvbmc+PC9zcGFuPiBzZWxlY3RzIHRoZSBkZXNjIGF0dHJpYnV0ZQotICAgICAgICBvZiB0aGUgcGFyZW50IG9mIHRoZSBjb250ZXh0IG5vZGUuPC9wPjxwPkluIFhQYXRoIDIuMCwgcGF0aCBleHByZXNzaW9ucyBoYXZlIGJlZW4gZ2VuZXJhbGl6ZWQgc28gdGhhdCBhbnkKLSAgICAgICAgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCBhcyBhbiBvcGVyYW5kIG9mIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi88L3N0cm9uZz48L3NwYW4+LCAoYm90aCBvbiB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0KSwgYXMgbG9uZyBhcwotICAgICAgICBpdHMgdmFsdWUgaXMgYSBzZXF1ZW5jZSBvZiBub2Rlcy4gRm9yIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhCi0gICAgICAgIHVuaW9uIGV4cHJlc3Npb24gKGluIHBhcmVudGhlc2VzKSBvciBhIGNhbGwgdG8gdGhlIGlkKCkKLSAgICAgICAgZnVuY3Rpb24uPC9wPjxwPkluIHByYWN0aWNlLCBpdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBleHByZXNzaW9ucyBvbiB0aGUgcmlnaHQKLSAgICAgICAgb2YgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Ii8iPC9zdHJvbmc+PC9zcGFuPiBpZiB0aGV5IGRlcGVuZCBvbiB0aGUgY29udGV4dAotICAgICAgICBpdGVtLiBJdCBpcyBsZWdhbCB0byB3cml0ZSAkeC8keSBwcm92aWRlZCBib3RoICR4IGFuZCAkeSBhcmUgc2VxdWVuY2VzCi0gICAgICAgIG9mIG5vZGVzLCBidXQgdGhlIHJlc3VsdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHdyaXRpbmcgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+IDxzcGFuIGNsYXNzPSJpdGFsaWMiPi4vJHk8L3NwYW4+Ci0gICAgICAgIDwvc3Ryb25nPjwvc3Bhbj4uPC9wPjxwPk5vdGUgdGhhdCB0aGUgZXhwcmVzc2lvbnMgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Li8kWDwvc3Ryb25nPjwvc3Bhbj4KLSAgICAgICAgb3IgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+JFgvLjwvc3Ryb25nPjwvc3Bhbj4gY2FuIGJlIHVzZWQgdG8gcmVtb3ZlCi0gICAgICAgIGR1cGxpY2F0ZXMgZnJvbSA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4kWDwvc3Ryb25nPjwvc3Bhbj4gYW5kIHNvcnQgdGhlCi0gICAgICAgIHJlc3VsdHMgaW50byBkb2N1bWVudCBvcmRlci48L3A+PHA+VGhlIG9wZXJhdG9yIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi8vPC9zdHJvbmc+PC9zcGFuPiBpcyBhbgotICAgICAgICBhYmJyZXZpYXRpb24gZm9yIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi9kZXNjZW5kYW50LW9yLXNlbGY6Om5vZGUoKTwvc3Ryb25nPjwvc3Bhbj4uIEFuIGV4cHJlc3Npb24gb2YKLSAgICAgICAgdGhlIGZvcm0gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+L0U8L3N0cm9uZz48L3NwYW4+IGlzIHNob3J0aGFuZCBmb3IKLSAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cm9vdCguKS9FPC9zdHJvbmc+PC9zcGFuPiwgYW5kIHRoZSBleHByZXNzaW9uCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPi8nJycgb24gaXRzIG93biBpcyBzaG9ydGhhbmQgZm9yCi0gICAgICAgICcnJ3Jvb3QoLik8L3N0cm9uZz48L3NwYW4+LjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwMy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczAzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NjYzOGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+QXhpcyBzdGVwczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDJzMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzczAyLmh0bWwiIHRpdGxlPSJQYXRoIGV4cHJlc3Npb25zIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDJzMDNzMDQuaHRtbCIgdGl0bGU9IlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJBeGlzX3N0ZXBzIj48L2E+QXhpcyBzdGVwczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIGJhc2ljIHByaW1pdGl2ZSBmb3IgYWNjZXNzaW5nIGEgc291cmNlIGRvY3VtZW50IGlzIHRoZSBheGlzCi0gICAgICAgIHN0ZXAuIEF4aXMgc3RlcHMgbWF5IGJlIGNvbWJpbmVkIGludG8gcGF0aCBleHByZXNzaW9ucyB1c2luZyB0aGUgcGF0aAotICAgICAgICBvcGVyYXRvcnMgIi8iIGFuZCAiLy8iLCBhbmQgdGhleSBtYXkgYmUgZmlsdGVyZWQgdXNpbmcgZmlsdGVyCi0gICAgICAgIGV4cHJlc3Npb25zIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgcmVzdWx0IG9mIGFueSBvdGhlcgotICAgICAgICBleHByZXNzaW9uLjwvcD48cD5BbiBheGlzIHN0ZXAgaGFzIHRoZSBiYXNpYyBmb3JtIGF4aXM6Om5vZGUtdGVzdCwgYW5kIHNlbGVjdHMKLSAgICAgICAgbm9kZXMgb24gYSBnaXZlbiBheGlzIHRoYXQgc2F0aXNmeSB0aGUgbm9kZS10ZXN0LiBUaGUgYXhlcyBhdmFpbGFibGUKLSAgICAgICAgYXJlOjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD5lbGVtZW50OiBhZ2U8L3A+PC9saT48bGk+PHA+ZWxlbWVudDogYWdlPC9wPjwvbGk+PC9vbD48L2Rpdj48cD5UaGUgcmVzdCBvZiB0aGUgYXhlcyBhY3QgaW4gdGhlIHNhbWUgbWFubmVyLjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMDE5OGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDMuaHRtbCIgdGl0bGU9IkF4aXMgc3RlcHMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwNS5odG1sIiB0aXRsZT0iQXJpdGhtZXRpYyBFeHByZXNzaW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iU2V0X2RpZmZlcmVuY2UuMkNfaW50ZXJzZWN0aW9uX2FuZF9VbmlvbiI+PC9hPlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD5UaGUgZXhwcmVzc2lvbiBFMSBleGNlcHQgRTIgc2VsZWN0cyBhbGwgbm9kZXMgdGhhdCBhcmUgaW4gRTEKLSAgICAgICAgdW5sZXNzIHRoZXkgYXJlIGFsc28gaW4gRTIuIEJvdGggZXhwcmVzc2lvbnMgbXVzdCByZXR1cm4gc2VxdWVuY2VzIG9mCi0gICAgICAgIG5vZGVzLiBUaGUgcmVzdWx0cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuIEZvciBleGFtcGxlLCBAKgotICAgICAgICBleGNlcHQgQG5vdGUgcmV0dXJucyBhbGwgYXR0cmlidXRlcyBleGNlcHQgdGhlIG5vdGUgYXR0cmlidXRlLiBUaGUKLSAgICAgICAgZXhwcmVzc2lvbiBFMSBpbnRlcnNlY3QgRTIgc2VsZWN0cyBhbGwgbm9kZXMgdGhhdCBhcmUgaW4gYm90aCBFMSBhbmQKLSAgICAgICAgRTIuIEJvdGggZXhwcmVzc2lvbnMgbXVzdCByZXR1cm4gc2VxdWVuY2VzIG9mIG5vZGVzLiBUaGUgcmVzdWx0cyBhcmUKLSAgICAgICAgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuIFRoZSBleHByZXNzaW9uIEUxIHVuaW9uIEUyIHNlbGVjdHMgYWxsCi0gICAgICAgIG5vZGVzIHRoYXQgYXJlIGluIGVpdGhlciBFMSBvciBFMiBvciBib3RoLiBCb3RoIGV4cHJlc3Npb25zIG11c3QKLSAgICAgICAgcmV0dXJuIHNlcXVlbmNlcyBvZiBub2Rlcy4gVGhlIHJlc3VsdHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLgotICAgICAgICBBIGNvbXBsZXRlIGV4YW1wbGUgb2YgdGhlIGFib3ZlIGV4cHJlc3Npb24gd291bGQgYmUgYXMgZm9sbG93cy4KLSAgICAgICAgQ29uc2lkZXIgYW4gWE1MIGRvY3VtZW50IHdoaWNoIGxvb2tzIGxpa2UgdGhpczo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiZsdDtub2RlcyZndDsKLSAgJmx0O2EmZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGEmZ3Q7QSZsdDsvY29ubmVjdGVkYSZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYSZndDtCJmx0Oy9jb25uZWN0ZWRhJmd0OwotICAgICZsdDtjb25uZWN0ZWRhJmd0O0MmbHQ7L2Nvbm5lY3RlZGEmZ3Q7Ci0gICZsdDsvYSZndDsKLSAgJmx0O2ImZ3Q7Ci0gICAgJmx0O2Nvbm5lY3RlZGImZ3Q7QiZsdDsvY29ubmVjdGVkYiZndDsKLSAgICAmbHQ7Y29ubmVjdGVkYiZndDtDJmx0Oy9jb25uZWN0ZWRiJmd0OwotICAgICZsdDtjb25uZWN0ZWRiJmd0O0QmbHQ7L2Nvbm5lY3RlZGImZ3Q7Ci0gICZsdDsvYiZndDsKLSZsdDsvbm9kZXMmZ3Q7Ci08L3ByZT48cD5UaGVuIGFuIGV4YW1wbGUgb2YgZWFjaCBvZiB0aGUgZXhwcmVzc2lvbnMgd291bGQgYmU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5kYXRhKC9hLyopIHVuaW9uIGRhdGEoL2IvKik8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOnN0cmluZzogQTwvcD48L2xpPjxsaT48cD54czpzdHJpbmc6IEI8L3A+PC9saT48bGk+PHA+eHM6c3RyaW5nOiBDPC9wPjwvbGk+PGxpPjxwPnhzOnN0cmluZzogRDwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmRhdGEoL2EvKikgaW50ZXJzZWN0IGRhdGEoL2IvKik8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOnN0cmluZzogQjwvcD48L2xpPjxsaT48cD54czpzdHJpbmc6IEM8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5kYXRhKC9hLyopIGV4Y2VwdCBkYXRhKC9iLyopPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czpzdHJpbmc6IEQ8L3A+PC9saT48L29sPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZjMTI3Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Bcml0aG1ldGljIEV4cHJlc3Npb25zPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDQuaHRtbCIgdGl0bGU9IlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDJzMDNzMDVzMDIuaHRtbCIgdGl0bGU9Ik11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjoiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkFyaXRobWV0aWNfRXhwcmVzc2lvbnMiPjwvYT5Bcml0aG1ldGljIEV4cHJlc3Npb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iVW5hcnkiPjwvYT5VbmFyeTwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+bWludXMgYW5kIHBsdXM6IFRoZSB1bmFyeSBtaW51cyBvcGVyYXRvciBjaGFuZ2VzIHRoZSBzaWduIG9mIGEKLSAgICAgICAgICBudW1iZXIuIEZvciBleGFtcGxlIC0xIGlzIG1pbnVzIG9uZSwgYW5kIC0xZTAgaXMgdGhlIGRvdWJsZSB2YWx1ZQotICAgICAgICAgIG5lZ2F0aXZlIC0xLjwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNXMwMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1czAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZjFjODEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1czAyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjo8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzczA1Lmh0bWwiIHRpdGxlPSJBcml0aG1ldGljIEV4cHJlc3Npb25zIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDUuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRXhwcmVzc2lvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwNXMwMy5odG1sIiB0aXRsZT0iQWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOiI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTXVsdGlwbGljYXRpb25fYW5kX0RpdmlzaW9uOiI+PC9hPk11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjo8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBvcGVyYXRvciAqIG11bHRpcGxpZXMgdHdvIG51bWJlcnMuIElmIHRoZSBvcGVyYW5kcyBhcmUgb2YKLSAgICAgICAgICBkaWZmZXJlbnQgdHlwZXMsIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9ucyBzYXkgdGhhdCBvbmUgb2YgdGhlbSBpcwotICAgICAgICAgIHByb21vdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBvdGhlci4mbmJzcDtUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIHR5cGUgYXMKLSAgICAgICAgICB0aGUgb3BlcmFuZHMgYWZ0ZXIgcHJvbW90aW9uLjwvcD48cD5UaGUgb3BlcmF0b3IgZGl2IGRpdmlkZXMgdHdvIG51bWJlcnMuIERpdmlkaW5nIHR3byBpbnRlZ2VycwotICAgICAgICAgIHByb2R1Y2VzIGEgZG91YmxlOyBpbiBvdGhlciBjYXNlcyB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIHR5cGUgYXMgdGhlCi0gICAgICAgICAgb3BlcmFuZHMuPC9wPjxwPlRoZSBvcGVyYXRvciBpZGl2IHBlcmZvcm1zIGludGVnZXIgZGl2aXNpb24uIEZvciBleGFtcGxlLCB0aGUKLSAgICAgICAgICByZXN1bHQgb2YgMTAgaWRpdiAzIGlzIDMuPC9wPjxwPlRoZSBtb2Qgb3BlcmF0b3IgcmV0dXJucyB0aGUgbW9kdWx1cyAob3IgcmVtYWluZGVyKSBhZnRlcgotICAgICAgICAgIGRpdmlzaW9uLjwvcD48cD5UaGUgb3BlcmF0b3JzICogYW5kIGRpdiBtYXkgYWxzbyBiZSB1c2VkIHRvIG11bHRpcGx5IG9yIGRpdmlkZQotICAgICAgICAgIGEgcmFuZ2UgYnkgYSBudW1iZXIuPC9wPjxwPkZvciBleGFtcGxlLCA8c3BhbiBjbGFzcz0iaXRhbGljIj4oMSBpZGl2IDEgdG8KLSAgICAgICAgICAzKTwvc3Bhbj4gcmV0dXJucyB0aGUgcmVzdWx0OiA8c3BhbiBjbGFzcz0iaXRhbGljIj54czppbnRlZ2VyOiAxLCB4czppbnRlZ2VyOiAyLCB4czppbnRlZ2VyOgotICAgICAgICAgIDM8L3NwYW4+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA1czAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDVzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQzNGUyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDVzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5BZGRpdGlvbiBhbmQgU3VidHJhY3Rpb246PC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwM3MwNS5odG1sIiB0aXRsZT0iQXJpdGhtZXRpYyBFeHByZXNzaW9ucyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzczA1czAyLmh0bWwiIHRpdGxlPSJNdWx0aXBsaWNhdGlvbiBhbmQgRGl2aXNpb246Ij48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDJzMDNzMDYuaHRtbCIgdGl0bGU9IlJhbmdlIGV4cHJlc3Npb25zIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJBZGRpdGlvbl9hbmRfU3VidHJhY3Rpb246Ij48L2E+QWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIG9wZXJhdG9ycyA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4rPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jy0nPC9zcGFuPiBwZXJmb3JtIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBvZgotICAgICAgICAgIG51bWJlcnMsIGluIHRoZSB1c3VhbCB3YXkuIE9uY2UgYWdhaW4sIGlmIHRoZSBvcGVyYW5kcyBhcmUgb2YKLSAgICAgICAgICBkaWZmZXJlbnQgdHlwZXMsIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9ucyBzYXkgb25lIG9mIHRoZW0gaXMKLSAgICAgICAgICBwcm9tb3RlZCBidXQgbnVtZXJpYyB0eXBlIHByb21vdGlvbiBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkKLSAgICAgICAgICBQc3ljaG9QYXRoLiBUaGUgcmVzdWx0IGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzLjwvcD48cD5FeGFtcGxlcyBvZiBhYm92ZSB3b3VsZCBiZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAtKDUgKyA3KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6aW50ZWdlcjogLTEyPC9wPjwvbGk+PC9vbD48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+LXhzOmZsb2F0KCZyc3F1bzsxLjIzJnJzcXVvOyk8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmZsb2F0OiAtMS4yMzwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPi14czpkb3VibGUoJnJzcXVvOzEuMjMmcnNxdW87KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6ZG91YmxlOiAtMS4yMzwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPigrNSAtICs3KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6aW50ZWdlcjogLTI8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oMSB0byA1IGRpdiAwICk8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD5GQUlMIChkaXZpc2lvbiBieSB6ZXJvISk8L3A+PC9saT48L3VsPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj41KjYqMTAqNSo5NiBkaXYgMjAgZGl2IDMgZGl2IDE8L3ByZT48L3A+PHA+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmRlY2ltYWw6IDI0MDAuMDwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjMxIG1vZCAxNTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6aW50ZWdlcjogMTwvcD48L2xpPjwvb2w+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjUyOTZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwNi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlJhbmdlIGV4cHJlc3Npb25zPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMDVzMDMuaHRtbCIgdGl0bGU9IkFkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbjoiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwNy5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlJhbmdlX2V4cHJlc3Npb25zIj48L2E+UmFuZ2UgZXhwcmVzc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBleHByZXNzaW9uIEUxIHRvIEUyIHJldHVybnMgYSBzZXF1ZW5jZSBvZiBpbnRlZ2Vycy4gRm9yCi0gICAgICAgIGV4YW1wbGUsIDEgdG8gNSByZXR1cm5zIHRoZSBzZXF1ZW5jZSAxLCAyLCAzLCA0LCA1LiBUaGlzIGlzIHVzZWZ1bCBpbgotICAgICAgICBmb3IgZXhwcmVzc2lvbnMsIGZvciBleGFtcGxlIHRoZSBmaXJzdCBmaXZlIG5vZGVzIG9mIGEgbm9kZSBzZXF1ZW5jZQotICAgICAgICBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHdyaXRpbmcgZm9yICRpIGluIDEgdG8gNSByZXR1cm4gKC8veCkgPGEgY2xhc3M9InVsaW5rIiBocmVmPSIkaSIgdGFyZ2V0PSJfdG9wIj4kaTwvYT4uIEFub3RoZXIgZXhhbXBsZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPigxKzEgdG8gMTApPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czppbnRlZ2VyOiAyPC9wPjwvbGk+PGxpPjxwPnhzOmludGVnZXI6IDM8L3A+PC9saT48bGk+PHA+eHM6aW50ZWdlcjogNDwvcD48L2xpPjxsaT48cD54czppbnRlZ2VyOiA1PC9wPjwvbGk+PGxpPjxwPnhzOmludGVnZXI6IDY8L3A+PC9saT48bGk+PHA+eHM6aW50ZWdlcjogNzwvcD48L2xpPjxsaT48cD54czppbnRlZ2VyOiA4PC9wPjwvbGk+PGxpPjxwPnhzOmludGVnZXI6IDk8L3A+PC9saT48bGk+PHA+eHM6aW50ZWdlcjogMTA8L3A+PC9saT48L29sPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmNmRkMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q29tcGFyaXNvbnM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MwNi5odG1sIiB0aXRsZT0iUmFuZ2UgZXhwcmVzc2lvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwOC5odG1sIiB0aXRsZT0iQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkNvbXBhcmlzb25zIj48L2E+Q29tcGFyaXNvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBzaW1wbGVzdCBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+ZXE8L3N0cm9uZz48L3NwYW4+LCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5uZTwvc3Ryb25nPjwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmx0PC9zdHJvbmc+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+bGU8L3N0cm9uZz48L3NwYW4+LCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5ndDwvc3Ryb25nPjwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmdlPC9zdHJvbmc+PC9zcGFuPi4gVGhlc2UgY29tcGFyZSB0d28gYXRvbWljIHZhbHVlcwotICAgICAgICBvZiB0aGUgc2FtZSB0eXBlLCBmb3IgZXhhbXBsZSB0d28gaW50ZWdlcnMsIHR3byBkYXRlcywgb3IgdHdvIHN0cmluZ3MuCi0gICAgICAgIChDb2xsYXRpb24gaGFzbiZyc3F1bzt0IGJlZW4gaW1wbGVtZW50ZWQgaW4gY3VycmVudCB2ZXJzaW9uIG9mIFBzeWNob1BhdGgpLgotICAgICAgICBJZiB0aGUgb3BlcmFuZHMgYXJlIG5vdCBhdG9taWMgdmFsdWVzLCBhbiBlcnJvciBpcyByYWlzZWQuPC9wPjxwPlRoZSBvcGVyYXRvcnMgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+PScnJywmbmJzcDs8L3N0cm9uZz48L3NwYW4+IT0nCi0gICAgICAgIDxzcGFuIGNsYXNzPSJpdGFsaWMiPiwgJzwvc3Bhbj4mbHQ7PScgPHNwYW4gY2xhc3M9Iml0YWxpYyI+LAotICAgICAgICAnPC9zcGFuPiZndDsgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+LCAnJycmbHQ7PC9zdHJvbmc+PC9zcGFuPiwgYW5kCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPiZndDs9PC9zdHJvbmc+PC9zcGFuPiBjYW4gY29tcGFyZSBhcmJpdHJhcnkKLSAgICAgICAgc2VxdWVuY2VzLiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYW55IHBhaXIgb2YgaXRlbXMgZnJvbSB0aGUgdHdvCi0gICAgICAgIHNlcXVlbmNlcyBoYXMgdGhlIHNwZWNpZmllZCByZWxhdGlvbnNoaXAsIGZvciBleGFtcGxlIDxzcGFuIGNsYXNzPSJpdGFsaWMiPiRBID0gJEI8L3NwYW4+IGlzIHRydWUgaWYgdGhlcmUgaXMgYW4gaXRlbSBpbgotICAgICAgICA8c3BhbiBjbGFzcz0iaXRhbGljIj4kQTwvc3Bhbj4gdGhhdCBpcyBlcXVhbCB0byBzb21lIGl0ZW0gaW4KLSAgICAgICAgPHNwYW4gY2xhc3M9Iml0YWxpYyI+JEI8L3NwYW4+LjwvcD48cD5UaGUgb3BlcmF0b3JzIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmlzPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+aXNub3Q8L3N0cm9uZz48L3NwYW4+IHRlc3Qgd2hldGhlciB0aGUgb3BlcmFuZHMgcmVwcmVzZW50IHRoZQotICAgICAgICBzYW1lIChpZGVudGljYWwpIG5vZGUuIEZvciBleGFtcGxlLCA8c3BhbiBjbGFzcz0iaXRhbGljIj50aXRsZQotICAgICAgICA8YSBjbGFzcz0idWxpbmsiIGhyZWY9IjEiIHRhcmdldD0iX3RvcCI+MTwvYT4gaXMgKiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9IkBub3RlIiB0YXJnZXQ9Il90b3AiPkBub3RlPC9hPiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9IjEiIHRhcmdldD0iX3RvcCI+MTwvYT4gPC9zcGFuPiBpcyB0cnVlIGlmIHRoZSBmaXJzdCB0aXRsZSBjaGlsZCBpcyB0aGUKLSAgICAgICAgZmlyc3QgY2hpbGQgZWxlbWVudCB0aGF0IGhhcyBhIDxzcGFuIGNsYXNzPSJpdGFsaWMiPkBub3RlPC9zcGFuPiBhdHRyaWJ1dGUuIElmIGVpdGhlciBvcGVyYW5kIGlzIGFuCi0gICAgICAgIGVtcHR5IHNlcXVlbmNlIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgc2VxdWVuY2UgKHdoaWNoIHdpbGwgdXN1YWxseSBiZQotICAgICAgICB0cmVhdGVkIGFzIGZhbHNlKS48L3A+PHA+VGhlIG9wZXJhdG9ycyA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4mbHQ7Jmx0Ozwvc3Ryb25nPjwvc3Bhbj4gYW5kCi0gICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPiZndDsmZ3Q7PC9zdHJvbmc+PC9zcGFuPiB0ZXN0IHdoZXRoZXIgb25lIG5vZGUKLSAgICAgICAgcHJlY2VkZXMgb3IgZm9sbG93cyBhbm90aGVyIGluIGRvY3VtZW50IG9yZGVyLiBDb25zaWRlciB0aGlzIFhNTAotICAgICAgICBkb2N1bWVudDo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiZsdDtib29rJmd0OwotICZsdDt0aXRsZSZndDtCZWluZyBhIERvZyBJcyBhIEZ1bGwtVGltZSBKb2ImbHQ7L3RpdGxlJmd0OwotICZsdDthdXRob3ImZ3Q7Q2hhcmxlcyBNLiBTY2h1bHombHQ7L2F1dGhvciZndDsKLSAmbHQ7Y2hhcmFjdGVyJmd0OwotICAgJmx0O25hbWUmZ3Q7U25vb3B5Jmx0Oy9uYW1lJmd0OwotICAgJmx0O2ZyaWVuZC1vZiZndDtQZXBwZXJtaW50IFBhdHR5Jmx0Oy9mcmllbmQtb2YmZ3Q7Ci0gICAmbHQ7c2luY2UmZ3Q7MTk1MC0xMC0wNCZsdDsvc2luY2UmZ3Q7Ci0gICAmbHQ7YWdlJmd0OzImbHQ7L2FnZSZndDsKLSAgICZsdDtxdWFsaWZpY2F0aW9uJmd0O2V4dHJvdmVydGVkIGJlYWdsZSZsdDsvcXVhbGlmaWNhdGlvbiZndDsKLSAmbHQ7L2NoYXJhY3RlciZndDsKLSAmbHQ7Y2hhcmFjdGVyJmd0OwotICAgJmx0O25hbWUmZ3Q7UGVwcGVybWludCBQYXR0eSZsdDsvbmFtZSZndDsKLSAgICZsdDtzaW5jZSZndDsxOTY2LTA4LTIyJmd0Oy9zaW5jZSZndDsKLSAgICZsdDthZ2UmZ3Q7NCZsdDsvYWdlJmd0OwotICAgJmx0O3F1YWxpZmljYXRpb24mZ3Q7Ym9sZCwgYnJhc2ggYW5kIHRvbWJveWlzaCZsdDsvcXVhbGlmaWNhdGlvbiZndDsKLSAmbHQ7L2NoYXJhY3RlciZndDsKLSZsdDsvYm9vayZndDsKLTwvcHJlPjxwPkV4YW1wbGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ib29rL2NoYXJhY3RlciBuYW1lPSJTbm9vcHkiICZsdDsmbHQ7IGJvb2svY2hhcmFjdGVyIFBhdHR5IiA8L3ByZT48L3A+PHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6Ym9vbGVhbjogdHJ1ZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+Ym9vay9jaGFyYWN0ZXIgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJuYW1lPSUyMlBlcHBlcm1pbnQiIHRhcmdldD0iX3RvcCI+UGF0dHkiPC9hPgotICAgICAgICAmbHQ7Jmx0OyBib29rL2NoYXJhY3RlciA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Im5hbWU9JTIyU25vb3B5JTIyIiB0YXJnZXQ9Il90b3AiPm5hbWU9IlNub29weSI8L2E+IDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmJvb2xlYW46IGZhbHNlPC9wPjwvbGk+PC9vbD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MwOC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OGZlZmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q29uZGl0aW9uYWwgRXhwcmVzc2lvbnM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MwNy5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMnMwM3MwOS5odG1sIiB0aXRsZT0iUXVhbnRpZmllZCBFeHByZXNzaW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iQ29uZGl0aW9uYWxfRXhwcmVzc2lvbnMiPjwvYT5Db25kaXRpb25hbCBFeHByZXNzaW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+WFBhdGggMi4wIGFsbG93cyBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gPHNwYW4gY2xhc3M9Iml0YWxpYyI+aWYgKCBFMSApIHRoZW4gRTIgZWxzZSBFMzwvc3Bhbj4uIEZvciBleGFtcGxlLAotICAgICAgICA8c3BhbiBjbGFzcz0iaXRhbGljIj5pZiAoQGRpc2NvdW50KSB0aGVuIEBkaXNjb3VudCBlbHNlCi0gICAgICAgIDA8L3NwYW4+IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkaXNjb3VudCBhdHRyaWJ1dGUgaWYgaXQgaXMKLSAgICAgICAgcHJlc2VudCwgb3IgemVybyBvdGhlcndpc2UuPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczA5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwZTg3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMDkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+UXVhbnRpZmllZCBFeHByZXNzaW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDJzMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgdGhlIFhQYXRoIDIuMCBncmFtbWFyIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAyczAzczA4Lmh0bWwiIHRpdGxlPSJDb25kaXRpb25hbCBFeHByZXNzaW9ucyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzczEwLmh0bWwiIHRpdGxlPSJBbmQsIE9yIEV4cHJlc3Npb25zIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJRdWFudGlmaWVkX0V4cHJlc3Npb25zIj48L2E+UXVhbnRpZmllZCBFeHByZXNzaW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIGV4cHJlc3Npb24gPHNwYW4gY2xhc3M9Iml0YWxpYyI+c29tZSAkeCBpbiBFMSBzYXRpc2ZpZXMKLSAgICAgICAgRTI8L3NwYW4+IHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBFMSBmb3IKLSAgICAgICAgd2hpY2ggdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIG9mIEUyIGlzIHRydWUuIE5vdGUgdGhhdCBFMiBtdXN0IHVzZQotICAgICAgICB0aGUgcmFuZ2UgdmFyaWFibGUgPHNwYW4gY2xhc3M9Iml0YWxpYyI+JHg8L3NwYW4+IHRvIHJlZmVyIHRvCi0gICAgICAgIHRoZSBpdGVtIGJlaW5nIHRlc3RlZDsgaXQgZG9lcyBub3QgYmVjb21lIHRoZSBjb250ZXh0IGl0ZW0uIEZvcgotICAgICAgICBleGFtcGxlLCA8c3BhbiBjbGFzcz0iaXRhbGljIj5zb21lICR4IGluIEAqIHNhdGlzZmllcyAkeCBlcQotICAgICAgICAiIjwvc3Bhbj4gaXMgdHJ1ZSBpZiB0aGUgY29udGV4dCBpdGVtIGlzIGFuIGVsZW1lbnQgdGhhdCBoYXMgYXQKLSAgICAgICAgbGVhc3Qgb25lIHplcm8tbGVuZ3RoIGF0dHJpYnV0ZSB2YWx1ZS48L3A+PHA+U2ltaWxhcmx5LCB0aGUgZXhwcmVzc2lvbiA8c3BhbiBjbGFzcz0iaXRhbGljIj5ldmVyeSAkeCBpbiBFMQotICAgICAgICBzYXRpc2ZpZXMgRTI8L3NwYW4+IHJldHVybnMgdHJ1ZSBpZiBldmVyeSBpdGVtIGluIHRoZSBzZXF1ZW5jZQotICAgICAgICBnaXZlbiBieSBFMSBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbi48L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMTAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTRmZjg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMnMwM3MxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkFuZCwgT3IgRXhwcmVzc2lvbnM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAyczAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MwOS5odG1sIiB0aXRsZT0iUXVhbnRpZmllZCBFeHByZXNzaW9ucyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyczAzczExLmh0bWwiIHRpdGxlPSJTZXF1ZW5jZVR5cGUgTWF0Y2hpbmcgRXhwcmVzc2lvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkFuZC4yQ19Pcl9FeHByZXNzaW9ucyI+PC9hPkFuZCwgT3IgRXhwcmVzc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBleHByZXNzaW9uIDxzcGFuIGNsYXNzPSJpdGFsaWMiPkUxIGFuZCBFMjwvc3Bhbj4KLSAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSBlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZXMgb2YgRTEgYW5kIEUyIGFyZSBib3RoCi0gICAgICAgIHRydWUuIFRoZSBleHByZXNzaW9uIDxzcGFuIGNsYXNzPSJpdGFsaWMiPkUxIG9yIEUyPC9zcGFuPgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyBvZiBlaXRoZXIgb3IgYm90aCBvZiBFMQotICAgICAgICBhbmQgRTIgYXJlIHRydWUuPC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gKGZvciBhIHRydXRoIHRhYmxlKSAxIGFuZCAxPC9wcmU+PC9wPjxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnhzOmJvb2xlYW46IHRydWU8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4xIGFuZCAwPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czpib29sZWFuOiBmYWxzZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjEgb3IgMDwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6Ym9vbGVhbjogdHJ1ZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjAgb3IgMTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+eHM6Ym9vbGVhbjogdHJ1ZTwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAyczAzczExLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMTEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NWM2OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDJzMDNzMTEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+U2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMnMwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDJzMDNzMTAuaHRtbCIgdGl0bGU9IkFuZCwgT3IgRXhwcmVzc2lvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iU2VxdWVuY2VUeXBlX01hdGNoaW5nX0V4cHJlc3Npb25zIj48L2E+U2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD5UaGUgcnVsZXMgZm9yIFNlcXVlbmNlVHlwZSBtYXRjaGluZyBjb21wYXJlIHRoZSBhY3R1YWwgdHlwZSBvZiBhCi0gICAgICAgIHZhbHVlIHdpdGggYW4gZXhwZWN0ZWQgdHlwZS4gVGhlc2UgcnVsZXMgYXJlIGEgc3Vic2V0IG9mIHRoZSBmb3JtYWwKLSAgICAgICAgcnVsZXMgdGhhdCBtYXRjaCBhIHZhbHVlIHdpdGggYW4gZXhwZWN0ZWQgdHlwZSBkZWZpbmVkIGluIFhRdWVyeSAxLjAKLSAgICAgICAgYW5kIFhQYXRoIDIuMCBGb3JtYWwgU2VtYW50aWNzIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgyMC8jWFF1ZXJ5Rm9ybWFsU2VtYW50aWNzIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoMjAvI1hRdWVyeUZvcm1hbFNlbWFudGljczwvYT4sCi0gICAgICAgIGJlY2F1c2UgdGhlIEZvcm1hbCBTZW1hbnRpY3MgbXVzdCBiZSBhYmxlIHRvIG1hdGNoIGEgdmFsdWUgd2l0aCBhbnkKLSAgICAgICAgWE1MIFNjaGVtYSB0eXBlLCB3aGVyZWFzIHRoZSBydWxlcyBiZWxvdyBvbmx5IG1hdGNoIHZhbHVlcyBhZ2FpbnN0Ci0gICAgICAgIHRob3NlIHR5cGVzIGV4cHJlc3NpYmxlIGJ5IHRoZSBTZXF1ZW5jZVR5cGUgc3ludGF4LjwvcD48cD5Tb21lIG9mIHRoZSBydWxlcyBmb3IgU2VxdWVuY2VUeXBlIG1hdGNoaW5nIHJlcXVpcmUgZGV0ZXJtaW5pbmcKLSAgICAgICAgd2hldGhlciBhIGdpdmVuIHR5cGUgbmFtZSBpcyB0aGUgc2FtZSBhcyBvciBkZXJpdmVkIGZyb20gYW4gZXhwZWN0ZWQKLSAgICAgICAgdHlwZSBuYW1lLiBUaGUgZ2l2ZW4gdHlwZSBuYW1lIG1heSBiZSAia25vd24iIChkZWZpbmVkIGluIHRoZSBpbi1zY29wZQotICAgICAgICBzY2hlbWEgZGVmaW5pdGlvbnMpLCBvciAidW5rbm93biIgKG5vdCBkZWZpbmVkIGluIHRoZSBpbi1zY29wZSBzY2hlbWEKLSAgICAgICAgZGVmaW5pdGlvbnMpLiBBbiB1bmtub3duIHR5cGUgbmFtZSBtaWdodCBiZSBlbmNvdW50ZXJlZCwgZm9yIGV4YW1wbGUsCi0gICAgICAgIGlmIGEgc291cmNlIGRvY3VtZW50IGhhcyBiZWVuIHZhbGlkYXRlZCB1c2luZyBhIHNjaGVtYSB0aGF0IHdhcyBub3QKLSAgICAgICAgaW1wb3J0ZWQgaW50byB0aGUgc3RhdGljIGNvbnRleHQuIEluIHRoaXMgY2FzZSwgYW4gaW1wbGVtZW50YXRpb24gaXMKLSAgICAgICAgYWxsb3dlZCAoYnV0IGlzIG5vdCByZXF1aXJlZCkgdG8gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKLSAgICAgICAgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSB1bmtub3duIHR5cGUgbmFtZSBpcyBkZXJpdmVkCi0gICAgICAgIGZyb20gdGhlIGV4cGVjdGVkIHR5cGUgbmFtZS4gRm9yIGV4YW1wbGUsIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0Ci0gICAgICAgIG1haW50YWluIGEgZGF0YSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdHlwZQotICAgICAgICBoaWVyYXJjaGllcy4gY29uc2lkZXIgdGhlIGZvbGxvd2luZyBYTUwgZG9jdW1lbnQ6PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7c29yYm8mZ3Q7Ci0gJmx0O2lzJmd0O2VsaXRlJmx0Oy9pcyZndDsKLSAmbHQ7IS0tIGxpZmUgc3V4IC0tJmd0OwotJmx0Oy9zb3JibyZndDsKLTwvcHJlPjxwPlRoZW4sIHRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZSBvZiBTZXF1ZW5jZVR5cGUKLSAgICAgICAgbWF0Y2hpbmdzOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+IGVsZW1lbnQoeyp9KTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+ZWxlbWVudDogc29yYm88L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbGVtZW50KGVsaXRlKTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+RW1wdHkgcmVzdWx0czwvcD48L2xpPjwvb2w+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnNvcmJvL2NvbW1lbnQoKTwvcHJlPjwvcD48cD4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cmVzdWx0Ojwvc3Ryb25nPjwvc3Bhbj48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+Y29tbWVudDogbGlmZSBzdXg8L3A+PC9saT48L29sPjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5kYXRhKC9zb3Jiby9jb21tZW50KCkpPC9wcmU+PC9wPjxwPiA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5yZXN1bHQ6PC9zdHJvbmc+PC9zcGFuPjwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIHR5cGU9IjEiPjxsaT48cD54czpzdHJpbmc6IGxpZmUgc3V4PC9wPjwvbGk+PC9vbD48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c29yYm8vbm9kZSgpPC9wcmU+PC9wPjxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnJlc3VsdDo8L3N0cm9uZz48L3NwYW4+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgdHlwZT0iMSI+PGxpPjxwPnRleHQ6PC9wPjwvbGk+PGxpPjxwPmVsZW1lbnQ6IGlzPC9wPjwvbGk+PGxpPjxwPmNvbW1lbnQ6IGxpZmUgc3V4PC9wPjwvbGk+PGxpPjxwPnRleHQ6PC9wPjwvbGk+PC9vbD48L2Rpdj48cD48L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2FjMzk2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwMy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Ib3cgdG8gdXNlIFhQYXRoIDIuMCBmdW5jdGlvbnMgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMnMwM3MxMS5odG1sIiB0aXRsZT0iU2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMDIuaHRtbCIgdGl0bGU9IkNvbnN0cnVjdG9yIEZ1bmN0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iSG93X3RvX3VzZV9YUGF0aF8yLjBfZnVuY3Rpb25zX3dpdGhfUHN5Y2hvUGF0aCI+PC9hPkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDMuaHRtbCNBY2Nlc3NvcnMiPkFjY2Vzc29yczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDIuaHRtbCI+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwMy5odG1sIj5GdW5jdGlvbnMgb24gTnVtZXJpYyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA0Lmh0bWwiPkZ1bmN0aW9ucyB0byBBc3NlbWJsZSBhbmQgRGlzYXNzZW1ibGUgU3RyaW5nczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDUuaHRtbCI+Q29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA2Lmh0bWwiPkZ1bmN0aW9ucyBCYXNlZCBvbiBTdWJzdHJpbmcgTWF0Y2hpbmc8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA3Lmh0bWwiPlN0cmluZyBGdW5jdGlvbnMgdGhhdCBVc2UgUGF0dGVybiBNYXRjaGluZzwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDguaHRtbCI+RnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwOS5odG1sIj5Db21wb25lbnQgRXh0cmFjdGlvbiBGdW5jdGlvbnMgb24gRHVyYXRpb25zLCBEYXRlcyBhbmQKLSAgICAgIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMC5odG1sIj5GdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExLmh0bWwiPkZ1bmN0aW9ucyBvbiBOb2RlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMS5odG1sI0dlbmVyYWxfRnVuY3Rpb25zX29uX1NlcXVlbmNlcyI+R2VuZXJhbCBGdW5jdGlvbnMgb24gU2VxdWVuY2VzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMXMwMi5odG1sIj5GdW5jdGlvbnMgVGhhdCBUZXN0IHRoZSBDYXJkaW5hbGl0eSBvZiBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczAzLmh0bWwiPkRlZXAtRXF1YWwsIEFnZ3JlZ2F0ZSBGdW5jdGlvbnMsIGFuZCBGdW5jdGlvbnMgdGhhdCBHZW5lcmF0ZQotICAgICAgICBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczA0Lmh0bWwiPkNvbnRleHQgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjwvZGl2PjxwPlRoZSBhaW0gb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGdpdmUgdGhlIHVzZXIgYW4gb3ZlcnZpZXcgb2YgdGhlCi0gICAgYXZhaWxhYmxlIFhQYXRoIDIuMCBmdW5jdGlvbnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gUHN5Y2hvUGF0aC4gRm9yIHRoZQotICAgIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0Mgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBmdW5jdGlvbnMgYW5kCi0gICAgb3BlcmF0b3JzIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC1mdW5jdGlvbnMvPC9hPi48L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iQWNjZXNzb3JzIj48L2E+QWNjZXNzb3JzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD5JbiBvcmRlciBmb3IgUHN5Y2hvUGF0aCB0byBvcGVyYXRlIG9uIGluc3RhbmNlcyBvZiB0aGUgWFBhdGggMi4wCi0gICAgICBkYXRhIG1vZGVsLCB0aGUgbW9kZWwgbXVzdCBleHBvc2UgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGl0Ci0gICAgICBjb250YWlucy4gSXQgZG9lcyB0aGlzIGJ5IGRlZmluaW5nIGEgZmFtaWx5IG9mIGFjY2Vzc29yIGZ1bmN0aW9ucy4gVGhlc2UKLSAgICAgIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSB0byB1c2VycyBvciBhcHBsaWNhdGlvbnMgdG8gY2FsbCBkaXJlY3RseS4KLSAgICAgIEluc3RlYWQsIHRoZXkgYXJlIGRlc2NyaXB0aW9ucyBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCBhbiBpbXBsZW1lbnRhdGlvbgotICAgICAgb2YgdGhlIG1vZGVsIG11c3QgZXhwb3NlIHRvIGFwcGxpY2F0aW9ucy48L3A+PHA+ZGF0YSgmbHNxdW87c3RyaW5nJnJzcXVvOyk8L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYU1N0cmluZylycy5maXJzdCgpKS5zdHJpbmd2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvO3N0cmluZyZyc3F1bzs8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGRmMjFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbnN0cnVjdG9yIEZ1bmN0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczAzLmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgb24gTnVtZXJpYyBWYWx1ZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iQ29uc3RydWN0b3JfRnVuY3Rpb25zIj48L2E+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+eHM6ZGF0ZVRpbWUoIjIwMDItMDItMDFUMTA6MDA6MDArMDY6MDAiKTwvcHJlPjwvcD48cD5Gcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIG4gPSAoKFhTRGF0ZVRpbWUpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvOzIwMDItMDItMDFUMDQ6MDA6MDBaJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwMy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczAzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MjAzZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+RnVuY3Rpb25zIG9uIE51bWVyaWMgVmFsdWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczAyLmh0bWwiIHRpdGxlPSJDb25zdHJ1Y3RvciBGdW5jdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MwNC5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIHRvIEFzc2VtYmxlIGFuZCBEaXNhc3NlbWJsZSBTdHJpbmdzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkZ1bmN0aW9uc19vbl9OdW1lcmljX1ZhbHVlcyI+PC9hPkZ1bmN0aW9ucyBvbiBOdW1lcmljIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNlaWxpbmcoeHM6ZmxvYXQoJmxzcXVvOzEwLjQmcnNxdW87KSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmZsb2F0IG4gPSAoKFhTRmxvYXQpcnMuZmlyc3QoKSkuZmxvYXR2YWx1ZSgpOwotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+SW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvOzExLjAmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczA0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlZjgyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5GdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3M8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDAzLmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBmdW5jdGlvbnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDNzMDMuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOdW1lcmljIFZhbHVlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczA1Lmh0bWwiIHRpdGxlPSJDb21wYXJlIGFuZCBPdGhlciBGdW5jdGlvbnMgb24gU3RyaW5nIFZhbHVlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJGdW5jdGlvbnNfdG9fQXNzZW1ibGVfYW5kX0Rpc2Fzc2VtYmxlX1N0cmluZ3MiPjwvYT5GdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3M8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb2RlcG9pbnRzLXRvLXN0cmluZygwMTExKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIG4gPSAoKFhTU3RyaW5nKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7Ci1wcmludGxuKG4pOyZsdDsvc291cmNlJmd0OzwvcHJlPjwvcD48cD5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87byZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzU0ZjVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBhcmUgYW5kIE90aGVyIEZ1bmN0aW9ucyBvbiBTdHJpbmcgVmFsdWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczA0Lmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3MiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MwNi5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb21wYXJlX2FuZF9PdGhlcl9GdW5jdGlvbnNfb25fU3RyaW5nX1ZhbHVlcyI+PC9hPkNvbXBhcmUgYW5kIE90aGVyIEZ1bmN0aW9ucyBvbiBTdHJpbmcgVmFsdWVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uY2F0KCZsc3F1bzt1biZyc3F1bzssICZsc3F1bztncmF0ZWZ1bCZyc3F1bzspPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5TdHJpbmcgbiA9ICgoWFNTdHJpbmcpcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsKLXByaW50bG4obik7PC9wcmU+PC9wPjxwPkluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bzt1bmdyYXRlZnVsJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczA2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDllMTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+RnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwNS5odG1sIiB0aXRsZT0iQ29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MwNy5odG1sIiB0aXRsZT0iU3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkZ1bmN0aW9uc19CYXNlZF9vbl9TdWJzdHJpbmdfTWF0Y2hpbmciPjwvYT5GdW5jdGlvbnMgQmFzZWQgb24gU3Vic3RyaW5nIE1hdGNoaW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29udGFpbnMoImFiYyIsICJlZGYiKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsKLXByaW50bG4obik7PC9wcmU+PC9wPjxwPkluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bztmYWxzZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTJhY2M2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlN0cmluZyBGdW5jdGlvbnMgdGhhdCBVc2UgUGF0dGVybiBNYXRjaGluZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwNi5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczA4Lmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgb24gQm9vbGVhbiBWYWx1ZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iU3RyaW5nX0Z1bmN0aW9uc190aGF0X1VzZV9QYXR0ZXJuX01hdGNoaW5nIj48L2E+U3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+bWF0Y2hlcygmbHNxdW87YWJjZCZyc3F1bzssICZsc3F1bzthYmNkJnJzcXVvOyk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmJvb2xlYW4gbiA9ICgoWFNCb29sZWFuKXJzLmZpcnN0KCkpLnZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5JbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87dHJ1ZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGVlMjY4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkZ1bmN0aW9ucyBvbiBCb29sZWFuIFZhbHVlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwNy5odG1sIiB0aXRsZT0iU3RyaW5nIEZ1bmN0aW9ucyB0aGF0IFVzZSBQYXR0ZXJuIE1hdGNoaW5nIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMDkuaHRtbCIgdGl0bGU9IkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZCBUaW1lcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJGdW5jdGlvbnNfb25fQm9vbGVhbl9WYWx1ZXMiPjwvYT5GdW5jdGlvbnMgb24gQm9vbGVhbiBWYWx1ZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ub3QodHJ1ZSgpKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsKLXByaW50bG4obik7PC9wcmU+PC9wPjxwPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bztmYWxzZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMDkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY0ZGQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MwOS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZCBUaW1lczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwOC5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMTAuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBSZWxhdGVkIHRvIFFOYW1lcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb21wb25lbnRfRXh0cmFjdGlvbl9GdW5jdGlvbnNfb25fRHVyYXRpb25zLjJDX0RhdGVzX2FuZF9UaW1lcyI+PC9hPkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZAotICAgICAgVGltZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50aW1lem9uZS1mcm9tLXRpbWUoeHM6dGltZSgiMTM6MjA6MDArMDU6MDAiKSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87UFQ1SCZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWQyZTQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkZ1bmN0aW9ucyBSZWxhdGVkIHRvIFFOYW1lczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDMuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MwOS5odG1sIiB0aXRsZT0iQ29tcG9uZW50IEV4dHJhY3Rpb24gRnVuY3Rpb25zIG9uIER1cmF0aW9ucywgRGF0ZXMgYW5kIFRpbWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDNzMTEuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOb2RlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJGdW5jdGlvbnNfUmVsYXRlZF90b19RTmFtZXMiPjwvYT5GdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5sb2NhbC1uYW1lLWZyb20tUU5hbWUoUU5hbWUoJmxzcXVvOyA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vZXhhbXBsZSIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmV4YW1wbGUuY29tL2V4YW1wbGU8L2E+JnJzcXVvOywgJmxzcXVvO3BlcnNvbiZyc3F1bzspKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+U3RyaW5nIG4gPSAoKFhTTkNOYW1lKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7Ci1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87cGVyc29uJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OGM3YjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+RnVuY3Rpb25zIG9uIE5vZGVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMy5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgZnVuY3Rpb25zIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczEwLmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MxMXMwMi5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIFRoYXQgVGVzdCB0aGUgQ2FyZGluYWxpdHkgb2YgU2VxdWVuY2VzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkZ1bmN0aW9uc19vbl9Ob2RlcyI+PC9hPkZ1bmN0aW9ucyBvbiBOb2RlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJHZW5lcmFsX0Z1bmN0aW9uc19vbl9TZXF1ZW5jZXMiPjwvYT5HZW5lcmFsIEZ1bmN0aW9ucyBvbiBTZXF1ZW5jZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5yZW1vdmUoKCZsc3F1bztzJnJzcXVvOywmbHNxdW87byZyc3F1bzssJmxzcXVvO20mcnNxdW87LCZsc3F1bztlJnJzcXVvOywmbHNxdW87dCZyc3F1bzssJmxzcXVvO2gmcnNxdW87LCZsc3F1bztpJnJzcXVvOywmbHNxdW87biZyc3F1bzssJmxzcXVvO2cmcnNxdW87KSwgNik8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Zm9yIChJdGVyYXRvciBpdGVyID0gcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gIE9iamVjdCBpdGVtID0gaXRlci5uZXh0KCk7IAotICBTdHJpbmcgbiA9ICgoWFNTdHJpbmcpaXRlbSkuc3RyaW5ndmFsdWUoKTsKLSAgcHJpbnQobiArICIgIik7Ci19IHByaW50bG4oIiIpOwotPC9wcmU+PHA+aW4gb3JkZXIgdG8gZ2V0IHRoZSByZXN1bHQgb2YgJmxzcXVvO3MgbyBtIGUgdCBpIG4gZyZyc3F1bzs8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMXMwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmE0NDBhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwM3MxMXMwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkZ1bmN0aW9ucyBUaGF0IFRlc3QgdGhlIENhcmRpbmFsaXR5IG9mIFNlcXVlbmNlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDNzMTEuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOb2RlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczExLmh0bWwiIHRpdGxlPSJGdW5jdGlvbnMgb24gTm9kZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwM3MxMXMwMy5odG1sIiB0aXRsZT0iRGVlcC1FcXVhbCwgQWdncmVnYXRlIEZ1bmN0aW9ucywgYW5kIEZ1bmN0aW9ucyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRnVuY3Rpb25zX1RoYXRfVGVzdF90aGVfQ2FyZGluYWxpdHlfb2ZfU2VxdWVuY2VzIj48L2E+RnVuY3Rpb25zIFRoYXQgVGVzdCB0aGUgQ2FyZGluYWxpdHkgb2YgU2VxdWVuY2VzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+b25lLW9yLW1vcmUoKDEsMiwzLDQsNSkpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmZvciAoSXRlcmF0b3IgaXRlciA9IHJzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotIE9iamVjdCBpdGVtID0gaXRlci5uZXh0KCk7Ci0gaW50IG4gPSAoKFhTSW50ZWdlcilpdGVtKS5pbnR2YWx1ZSgpOwotIHByaW50KG4gKyAiICIpOwotfSBwcmludGxuKCIiKTsKLTwvcHJlPjxwPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bzsxIDIgMyA0IDUmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExczAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg3MzRlMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5EZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwM3MxMS5odG1sIiB0aXRsZT0iRnVuY3Rpb25zIG9uIE5vZGVzIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDNzMTFzMDIuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBUaGF0IFRlc3QgdGhlIENhcmRpbmFsaXR5IG9mIFNlcXVlbmNlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAzczExczA0Lmh0bWwiIHRpdGxlPSJDb250ZXh0IEZ1bmN0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRGVlcC1FcXVhbC4yQ19BZ2dyZWdhdGVfRnVuY3Rpb25zLjJDX2FuZF9GdW5jdGlvbnNfdGhhdF9HZW5lcmF0ZV9TZXF1ZW5jZXMiPjwvYT5EZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUKLSAgICAgICAgU2VxdWVuY2VzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+YXZnKCgzLDQsNSkpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmRvdWJsZSBhdmcgPSAoKFhTRG91YmxlKXJzLmZpcnN0KCkpLmRvdWJsZXZhbHVlKCk7Ci1wcmludGxuKGF2Zyk7PC9wcmU+PC9wPjxwPmluIG9yZGVyIHRvIGdldCB0aGUgcmVzdWx0IG9mICZsc3F1bzs0LjAmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDAzczExczA0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNDNkNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDNzMTFzMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Db250ZXh0IEZ1bmN0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDNzMTEuaHRtbCIgdGl0bGU9IkZ1bmN0aW9ucyBvbiBOb2RlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAzczExczAzLmh0bWwiIHRpdGxlPSJEZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkNvbnRleHRfRnVuY3Rpb25zIj48L2E+Q29udGV4dCBGdW5jdGlvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oMTAgdG8gMjApID0gMjwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgcG9zID0gKChYU0ludGVnZXIpcnMuZmlyc3QoKSkuaW50dmFsdWUoKTsgcHJpbnRsbihwb3MpOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87MTEmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5ZjYxMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Ib3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwM3MxMXMwNC5odG1sIiB0aXRsZT0iQ29udGV4dCBGdW5jdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwMi5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbiBvZiBOdW1lcmljIFZhbHVlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iSG93X3RvX3VzZV9YUGF0aF8yLjBfb3BlcmF0b3JzX3dpdGhfUHN5Y2hvUGF0aCI+PC9hPkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDQuaHRtbCNPcGVyYXRvcnNfb25fTnVtZXJpY19WYWx1ZXMiPk9wZXJhdG9ycyBvbiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDIuaHRtbCI+Q29tcGFyaXNvbiBvZiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDMuaHRtbCI+T3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNC5odG1sIj5Db21wYXJpc29ucyBvZiBEdXJhdGlvbiwgRGF0ZSBhbmQgVGltZSBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA1Lmh0bWwiPkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDYuaHRtbCI+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNy5odG1sIj5PcGVyYXRvcnMgUmVsYXRlZCB0byBRTmFtZXMgQW5kIE5vZGVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwOC5odG1sIj5VbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQ8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA5Lmh0bWwiPk9wZXJhdG9ycyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlczwvYT48L3NwYW4+PC9saT48L3VsPjwvZGl2PjxwPlRoZSBhaW0gb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGdpdmUgdGhlIHVzZXIgYW4gb3ZlcnZpZXcgb2YgdGhlCi0gICAgYXZhaWxhYmxlIFhQYXRoIDIuMCBvcGVyYXRvcnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gUHN5Y2hvUGF0aC4gRm9yIHRoZQotICAgIGZvcm1hbCBzcGVjaWZpY2F0aW9ucywgc2VlIHRoZSBXM0Mgd2ViLXNpdGUgZm9yIFhQYXRoIDIuMCBmdW5jdGlvbnMgYW5kCi0gICAgb3BlcmF0b3JzIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC1mdW5jdGlvbnMvPC9hPi48L3A+PHA+PC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ik9wZXJhdG9yc19vbl9OdW1lcmljX1ZhbHVlcyI+PC9hPk9wZXJhdG9ycyBvbiBOdW1lcmljIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnhzOmludGVnZXIoNCkgKyB4czppbnRlZ2VyKDMpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5JbnRlZ2VyIG4gPSAoKFhTSW50ZWdlcilycy5maXJzdCgpKS5pbnRlZ2VydmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87NyZyc3F1bzs8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQ0MGE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBhcmlzb24gb2YgTnVtZXJpYyBWYWx1ZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwMy5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkNvbXBhcmlzb25fb2ZfTnVtZXJpY19WYWx1ZXMiPjwvYT5Db21wYXJpc29uIG9mIE51bWVyaWMgVmFsdWVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+eHM6ZGVjaW1hbCgzLjMpID0geHM6ZGVjaW1hbCg2LjYpPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyBwcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87ZmFsc2UmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czAzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwMmIxZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5PcGVyYXRvcnMgb24gQm9vbGVhbiBWYWx1ZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDIuaHRtbCIgdGl0bGU9IkNvbXBhcmlzb24gb2YgTnVtZXJpYyBWYWx1ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwNC5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMgb2YgRHVyYXRpb24sIERhdGUgYW5kIFRpbWUgVmFsdWVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ik9wZXJhdG9yc19vbl9Cb29sZWFuX1ZhbHVlcyI+PC9hPk9wZXJhdG9ycyBvbiBCb29sZWFuIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnhzOmJvb2xlYW4oJnJzcXVvO3RydWUmcnNxdW87KSBndCB4czpib29sZWFuKCZyc3F1bztmYWxzZSZyc3F1bzspPC9wcmU+PC9wPjxwPmZyb20gd2l0aGluIGEgSmF2YSBhcHBsaWNhdGlvbiwgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgcmVzdWx0Ci0gICAgICBmcm9tIHRoZSByZXN1bHQgc2VxdWVuY2UsIG9uZSB3b3VsZCBoYXZlIHRvIHVzZSB0aGlzIGNvZGU6PC9wPjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ib29sZWFuIG4gPSAoKFhTQm9vbGVhbilycy5maXJzdCgpKS52YWx1ZSgpOyBwcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87dHJ1ZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWNjOWM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwNHMwMy5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDRzMDUuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb21wYXJpc29uc19vZl9EdXJhdGlvbi4yQ19EYXRlX2FuZF9UaW1lX1ZhbHVlcyI+PC9hPkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnhzOnRpbWUoIjIzOjAwOjAwKzA2OjAwIikgbHQgeHM6dGltZSgiMTI6MDA6MDAtMDY6MDAiKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD5pbiBvcmRlciB0byBnZXQgdGhlIHJlc3VsdCBvZiAmbHNxdW87dHJ1ZSZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFiODY4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDQuaHRtbCIgdGl0bGU9IkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGgiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwNHMwNC5odG1sIiB0aXRsZT0iQ29tcGFyaXNvbnMgb2YgRHVyYXRpb24sIERhdGUgYW5kIFRpbWUgVmFsdWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDRzMDYuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRnVuY3Rpb25zIERhdGVzIGFuZCBUaW1lcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJBcml0aG1ldGljX0Z1bmN0aW9uc19vbl9EdXJhdGlvbnMiPjwvYT5Bcml0aG1ldGljIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5tdWx0aXBseS1kYXlUaW1lRHVyYXRpb24oeHM6ZGF5VGltZUR1cmF0aW9uKCJQVDJIMTBNIiksIDIuMSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYRFREYXlUaW1lRHVyYXRpb24pcnMuZmlyc3QoKSkuc3RyaW5ndmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD53aGljaCByZXR1cm5zIGEgeGR0OmRheVRpbWVEdXJhdGlvbiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIDQgaG91cnMKLSAgICAgIGFuZCAzMyBtaW51dGVzICZsc3F1bztQVDRIMzNNJnJzcXVvOzwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNzIyZWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iWFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwNC5odG1sIiB0aXRsZT0iSG93IHRvIHVzZSBYUGF0aCAyLjAgb3BlcmF0b3JzIHdpdGggUHN5Y2hvUGF0aCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDA0czA1Lmh0bWwiIHRpdGxlPSJBcml0aG1ldGljIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwNy5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIFJlbGF0ZWQgdG8gUU5hbWVzIEFuZCBOb2RlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJBcml0aG1ldGljX0Z1bmN0aW9uc19EYXRlc19hbmRfVGltZXMiPjwvYT5Bcml0aG1ldGljIEZ1bmN0aW9ucyBEYXRlcyBhbmQgVGltZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5hZGQteWVhck1vbnRoRHVyYXRpb24tdG8tZGF0ZVRpbWUoIHhzOmRhdGVUaW1lKCIyMDAwLTEwLTMwVDExOjEyOjAwIiksIHhkdDp5ZWFyTW9udGhEdXJhdGlvbigiUDFZMk0iKSk8L3ByZT48L3A+PHA+ZnJvbSB3aXRoaW4gYSBKYXZhIGFwcGxpY2F0aW9uLCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSByZXN1bHQKLSAgICAgIGZyb20gdGhlIHJlc3VsdCBzZXF1ZW5jZSwgb25lIHdvdWxkIGhhdmUgdG8gdXNlIHRoaXMgY29kZTo8L3A+PHA+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPlN0cmluZyBuID0gKChYU0RhdGVUaW1lKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7IAotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+d2hpY2ggcmV0dXJucyBhbiB4czpkYXRlVGltZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZXhpY2FsCi0gICAgICByZXByZXNlbnRhdGlvbiAmbHNxdW87MjAwMS0xMi0zMFQxMToxMjowMCZyc3F1bzs8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDdkODM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvY2gwNHMwNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDYuaHRtbCIgdGl0bGU9IkFyaXRobWV0aWMgRnVuY3Rpb25zIERhdGVzIGFuZCBUaW1lcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDA0czA4Lmh0bWwiIHRpdGxlPSJVbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iT3BlcmF0b3JzX1JlbGF0ZWRfdG9fUU5hbWVzX0FuZF9Ob2RlcyI+PC9hPk9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj54czpRTmFtZSgmcnNxdW87YW8mcnNxdW87KSBlcSB4czpRTmFtZSgmcnNxdW87YW8mcnNxdW87KTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vbGVhbiBuID0gKChYU0Jvb2xlYW4pcnMuZmlyc3QoKSkudmFsdWUoKTsgCi1wcmludGxuKG4pOzwvcHJlPjwvcD48cD53aGljaCByZXR1cm5zIHRoZSByZXN1bHQgb2YgJmxzcXVvO3RydWUmcnNxdW87PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0YTMwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5VbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQ8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDcuaHRtbCIgdGl0bGU9Ik9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwNHMwOS5odG1sIiB0aXRsZT0iT3BlcmF0b3JzIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlVuaW9uLjJDX0ludGVyc2VjdGlvbl9hbmRfRXhjZXB0Ij48L2E+VW5pb24sIEludGVyc2VjdGlvbiBhbmQgRXhjZXB0PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dW5pb24oJHNlcTIsICRzZXEzKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Zm9yIChJdGVyYXRvciBpdGVyID0gcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gIE9iamVjdCBpdGVtID0gaXRlci5uZXh0KCk7Ci0gIFN0cmluZyBuID0gKChYU1N0cmluZylpdGVtKS5zdHJpbmd2YWx1ZSgpOwotICBwcmludChuICsgIiwgIik7Ci19Ci1wcmludGxuKCIiKTsKLTwvcHJlPjxwPiA8L3A+PHA+d2hpY2ggcmV0dXJucyB0aGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiAkaXRlbTEsICRpdGVtMiwKLSAgICAgICRpdGVtMy48L3A+PHA+PC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvaHRtbC9jaDA0czA5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyMmEwMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2NoMDRzMDkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5PcGVyYXRvcnMgdGhhdCBHZW5lcmF0ZSBTZXF1ZW5jZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsIj48bGluayByZWw9InVwIiBocmVmPSJjaDA0Lmh0bWwiIHRpdGxlPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48bGluayByZWw9InByZXYiIGhyZWY9ImNoMDRzMDguaHRtbCIgdGl0bGU9IlVuaW9uLCBJbnRlcnNlY3Rpb24gYW5kIEV4Y2VwdCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJPcGVyYXRvcnNfdGhhdF9HZW5lcmF0ZV9TZXF1ZW5jZXMiPjwvYT5PcGVyYXRvcnMgdGhhdCBHZW5lcmF0ZSBTZXF1ZW5jZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oMSB0byAzKTwvcHJlPjwvcD48cD5mcm9tIHdpdGhpbiBhIEphdmEgYXBwbGljYXRpb24sIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHJlc3VsdAotICAgICAgZnJvbSB0aGUgcmVzdWx0IHNlcXVlbmNlLCBvbmUgd291bGQgaGF2ZSB0byB1c2UgdGhpcyBjb2RlOjwvcD48cD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IG4gPSAoWFNJbnRlZ2VyKXJzLmZpcnN0KCkpLnN0cmluZ3ZhbHVlKCk7IAotcHJpbnRsbihuKTs8L3ByZT48L3A+PHA+d2hpY2ggcmV0dXJucyB0aGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiAxLCAyLCAzLjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2h0bWwvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ExYzE5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9odG1sL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+WFBhdGggMi4wIFByb2Nlc3NvciBVc2VyIE1hbnVhbDwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iSW50cm9kdWN0aW9uIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9ImJvb2siIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTAwMDEiPjwvYT5YUGF0aCAyLjAgUHJvY2Vzc29yIFVzZXIgTWFudWFsPC9oMT48L2Rpdj48L2Rpdj48aHI+PC9kaXY+PGRpdiBjbGFzcz0idG9jIj48cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+PHVsPjxsaT48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iY2gwMS5odG1sIj5JbnRyb2R1Y3Rpb248L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDEuaHRtbCNHZXR0aW5nX1BzeWNob1BhdGgiPkdldHRpbmcgUHN5Y2hvUGF0aDwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAyLmh0bWwiPlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSTwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMi5odG1sI05vbi1TY2hlbWFfQXdhcmUiPk5vbi1TY2hlbWEgQXdhcmU8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAyLmh0bWwiPlNjaGVtYSBBd2FyZTwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDMuaHRtbCI+SG93IHRvIHVzZSB0aGUgWFBhdGggMi4wIGdyYW1tYXIgd2l0aCBQc3ljaG9QYXRoPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczAyLmh0bWwiPlBhdGggZXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczAzLmh0bWwiPkF4aXMgc3RlcHM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA0Lmh0bWwiPlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNS5odG1sIj5Bcml0aG1ldGljIEV4cHJlc3Npb25zPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA1Lmh0bWwjVW5hcnkiPlVuYXJ5PC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNXMwMi5odG1sIj5NdWx0aXBsaWNhdGlvbiBhbmQgRGl2aXNpb246PC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwNXMwMy5odG1sIj5BZGRpdGlvbiBhbmQgU3VidHJhY3Rpb246PC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDYuaHRtbCI+UmFuZ2UgZXhwcmVzc2lvbnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAyczAzczA3Lmh0bWwiPkNvbXBhcmlzb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwMnMwM3MwOC5odG1sIj5Db25kaXRpb25hbCBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMDkuaHRtbCI+UXVhbnRpZmllZCBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMTAuaHRtbCI+QW5kLCBPciBFeHByZXNzaW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDJzMDNzMTEuaHRtbCI+U2VxdWVuY2VUeXBlIE1hdGNoaW5nIEV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAzLmh0bWwiPkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGg8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDMuaHRtbCNBY2Nlc3NvcnMiPkFjY2Vzc29yczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDIuaHRtbCI+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwMy5odG1sIj5GdW5jdGlvbnMgb24gTnVtZXJpYyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA0Lmh0bWwiPkZ1bmN0aW9ucyB0byBBc3NlbWJsZSBhbmQgRGlzYXNzZW1ibGUgU3RyaW5nczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDUuaHRtbCI+Q29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA2Lmh0bWwiPkZ1bmN0aW9ucyBCYXNlZCBvbiBTdWJzdHJpbmcgTWF0Y2hpbmc8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczA3Lmh0bWwiPlN0cmluZyBGdW5jdGlvbnMgdGhhdCBVc2UgUGF0dGVybiBNYXRjaGluZzwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDNzMDguaHRtbCI+RnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MwOS5odG1sIj5Db21wb25lbnQgRXh0cmFjdGlvbiBGdW5jdGlvbnMgb24gRHVyYXRpb25zLCBEYXRlcyBhbmQKLSAgICAgIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMC5odG1sIj5GdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExLmh0bWwiPkZ1bmN0aW9ucyBvbiBOb2RlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMS5odG1sI0dlbmVyYWxfRnVuY3Rpb25zX29uX1NlcXVlbmNlcyI+R2VuZXJhbCBGdW5jdGlvbnMgb24gU2VxdWVuY2VzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwM3MxMXMwMi5odG1sIj5GdW5jdGlvbnMgVGhhdCBUZXN0IHRoZSBDYXJkaW5hbGl0eSBvZiBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczAzLmh0bWwiPkRlZXAtRXF1YWwsIEFnZ3JlZ2F0ZSBGdW5jdGlvbnMsIGFuZCBGdW5jdGlvbnMgdGhhdCBHZW5lcmF0ZQotICAgICAgICBTZXF1ZW5jZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDAzczExczA0Lmh0bWwiPkNvbnRleHQgRnVuY3Rpb25zPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDA0Lmh0bWwiPkhvdyB0byB1c2UgWFBhdGggMi4wIG9wZXJhdG9ycyB3aXRoIFBzeWNob1BhdGg8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDQuaHRtbCNPcGVyYXRvcnNfb25fTnVtZXJpY19WYWx1ZXMiPk9wZXJhdG9ycyBvbiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDIuaHRtbCI+Q29tcGFyaXNvbiBvZiBOdW1lcmljIFZhbHVlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDMuaHRtbCI+T3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNC5odG1sIj5Db21wYXJpc29ucyBvZiBEdXJhdGlvbiwgRGF0ZSBhbmQgVGltZSBWYWx1ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA1Lmh0bWwiPkFyaXRobWV0aWMgRnVuY3Rpb25zIG9uIER1cmF0aW9uczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNoMDRzMDYuaHRtbCI+QXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwNy5odG1sIj5PcGVyYXRvcnMgUmVsYXRlZCB0byBRTmFtZXMgQW5kIE5vZGVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY2gwNHMwOC5odG1sIj5VbmlvbiwgSW50ZXJzZWN0aW9uIGFuZCBFeGNlcHQ8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjaDA0czA5Lmh0bWwiPk9wZXJhdG9ycyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL2xpYi8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvbGliLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWJiMzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvbGliLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9yZy5lY2xpcHNlLm15bHluLndpa2l0ZXh0LmNvcmVfMS4xLjIuSTIwMDkwODEzLTE5MDAtZTN4Lmphcgotb3JnLmVjbGlwc2UubXlseW4ud2lraXRleHQubWVkaWF3aWtpLmNvcmVfMS4xLjIuSTIwMDkwODEzLTE5MDAtZTN4LmphcgotcGx1Z2lucwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvbWVkaWF3aWtpLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9tZWRpYXdpa2kvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1MmY5ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9tZWRpYXdpa2kvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVzZXJtYW51YWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzlkMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wuZG9jCi12ZW5kb3JOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWUgPSBYUGF0aCAyLjAgKFBzeWNob1BhdGgpIFVzZXIgRG9jdW1lbnRhdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDI3OTEyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgIDx0b2MKLSAgICAgICAgICAgIGZpbGU9InRvYy54bWwiCi0gICAgICAgICAgICBwcmltYXJ5PSJ0cnVlIj4KLSAgICAgIDwvdG9jPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvcG9tLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4Y2Q3ZDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCTxwYXJlbnQ+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjIuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2RldmVsb3BtZW50L2F0aGVuYS9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5yZWxlbmc8L3JlbGF0aXZlUGF0aD4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlcjwvYXJ0aWZhY3RJZD4KLQk8dmVyc2lvbj4xLjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0JPG5hbWU+UHN5Y2hvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yOiBVc2VyIERvY3VtZW50YXRpb248L25hbWU+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmRvYy51c2VyL3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTE2YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZG9jLnVzZXIvdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTx0b2MgdG9waWM9Imh0bWwvaW5kZXguaHRtbCIgbGFiZWw9IlhQYXRoIDIuMCBQcm9jZXNzb3IgVXNlciBNYW51YWwiPjx0b3BpYyBocmVmPSJodG1sL2NoMDEuaHRtbCIgbGFiZWw9IkludHJvZHVjdGlvbiI+PHRvcGljIGhyZWY9Imh0bWwvY2gwMS5odG1sI0dldHRpbmdfUHN5Y2hvUGF0aCIgbGFiZWw9IkdldHRpbmcgUHN5Y2hvUGF0aCI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDIuaHRtbCIgbGFiZWw9IlVzaW5nIFBzeWNob1BhdGggWFBhdGggMi4wIEFQSSI+PHRvcGljIGhyZWY9Imh0bWwvY2gwMi5odG1sI05vbi1TY2hlbWFfQXdhcmUiIGxhYmVsPSJOb24tU2NoZW1hIEF3YXJlIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDIuaHRtbCIgbGFiZWw9IlNjaGVtYSBBd2FyZSI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAyczAzLmh0bWwiIGxhYmVsPSJIb3cgdG8gdXNlIHRoZSBYUGF0aCAyLjAgZ3JhbW1hciB3aXRoIFBzeWNob1BhdGgiPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDMuaHRtbCNDb25zdGFudHMiIGxhYmVsPSJDb25zdGFudHMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwMnMwM3MwMi5odG1sIiBsYWJlbD0iUGF0aCBleHByZXNzaW9ucyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAyczAzczAzLmh0bWwiIGxhYmVsPSJBeGlzIHN0ZXBzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDQuaHRtbCIgbGFiZWw9IlNldCBkaWZmZXJlbmNlLCBpbnRlcnNlY3Rpb24gYW5kIFVuaW9uIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDUuaHRtbCIgbGFiZWw9IkFyaXRobWV0aWMgRXhwcmVzc2lvbnMiPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDUuaHRtbCNVbmFyeSIgbGFiZWw9IlVuYXJ5Ij48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDVzMDIuaHRtbCIgbGFiZWw9Ik11bHRpcGxpY2F0aW9uIGFuZCBEaXZpc2lvbjoiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwMnMwM3MwNXMwMy5odG1sIiBsYWJlbD0iQWRkaXRpb24gYW5kIFN1YnRyYWN0aW9uOiI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDYuaHRtbCIgbGFiZWw9IlJhbmdlIGV4cHJlc3Npb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDcuaHRtbCIgbGFiZWw9IkNvbXBhcmlzb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDguaHRtbCIgbGFiZWw9IkNvbmRpdGlvbmFsIEV4cHJlc3Npb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDJzMDNzMDkuaHRtbCIgbGFiZWw9IlF1YW50aWZpZWQgRXhwcmVzc2lvbnMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwMnMwM3MxMC5odG1sIiBsYWJlbD0iQW5kLCBPciBFeHByZXNzaW9ucyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAyczAzczExLmh0bWwiIGxhYmVsPSJTZXF1ZW5jZVR5cGUgTWF0Y2hpbmcgRXhwcmVzc2lvbnMiPjwvdG9waWM+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDMuaHRtbCIgbGFiZWw9IkhvdyB0byB1c2UgWFBhdGggMi4wIGZ1bmN0aW9ucyB3aXRoIFBzeWNob1BhdGgiPjx0b3BpYyBocmVmPSJodG1sL2NoMDMuaHRtbCNBY2Nlc3NvcnMiIGxhYmVsPSJBY2Nlc3NvcnMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwMi5odG1sIiBsYWJlbD0iQ29uc3RydWN0b3IgRnVuY3Rpb25zIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMDMuaHRtbCIgbGFiZWw9IkZ1bmN0aW9ucyBvbiBOdW1lcmljIFZhbHVlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczA0Lmh0bWwiIGxhYmVsPSJGdW5jdGlvbnMgdG8gQXNzZW1ibGUgYW5kIERpc2Fzc2VtYmxlIFN0cmluZ3MiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwNS5odG1sIiBsYWJlbD0iQ29tcGFyZSBhbmQgT3RoZXIgRnVuY3Rpb25zIG9uIFN0cmluZyBWYWx1ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwNi5odG1sIiBsYWJlbD0iRnVuY3Rpb25zIEJhc2VkIG9uIFN1YnN0cmluZyBNYXRjaGluZyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczA3Lmh0bWwiIGxhYmVsPSJTdHJpbmcgRnVuY3Rpb25zIHRoYXQgVXNlIFBhdHRlcm4gTWF0Y2hpbmciPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MwOC5odG1sIiBsYWJlbD0iRnVuY3Rpb25zIG9uIEJvb2xlYW4gVmFsdWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMDkuaHRtbCIgbGFiZWw9IkNvbXBvbmVudCBFeHRyYWN0aW9uIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMsIERhdGVzIGFuZCBUaW1lcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczEwLmh0bWwiIGxhYmVsPSJGdW5jdGlvbnMgUmVsYXRlZCB0byBRTmFtZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwM3MxMS5odG1sIiBsYWJlbD0iRnVuY3Rpb25zIG9uIE5vZGVzIj48dG9waWMgaHJlZj0iaHRtbC9jaDAzczExLmh0bWwjR2VuZXJhbF9GdW5jdGlvbnNfb25fU2VxdWVuY2VzIiBsYWJlbD0iR2VuZXJhbCBGdW5jdGlvbnMgb24gU2VxdWVuY2VzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMTFzMDIuaHRtbCIgbGFiZWw9IkZ1bmN0aW9ucyBUaGF0IFRlc3QgdGhlIENhcmRpbmFsaXR5IG9mIFNlcXVlbmNlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDAzczExczAzLmh0bWwiIGxhYmVsPSJEZWVwLUVxdWFsLCBBZ2dyZWdhdGUgRnVuY3Rpb25zLCBhbmQgRnVuY3Rpb25zIHRoYXQgR2VuZXJhdGUgU2VxdWVuY2VzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDNzMTFzMDQuaHRtbCIgbGFiZWw9IkNvbnRleHQgRnVuY3Rpb25zIj48L3RvcGljPjwvdG9waWM+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDA0Lmh0bWwiIGxhYmVsPSJIb3cgdG8gdXNlIFhQYXRoIDIuMCBvcGVyYXRvcnMgd2l0aCBQc3ljaG9QYXRoIj48dG9waWMgaHJlZj0iaHRtbC9jaDA0Lmh0bWwjT3BlcmF0b3JzX29uX051bWVyaWNfVmFsdWVzIiBsYWJlbD0iT3BlcmF0b3JzIG9uIE51bWVyaWMgVmFsdWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDIuaHRtbCIgbGFiZWw9IkNvbXBhcmlzb24gb2YgTnVtZXJpYyBWYWx1ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwNHMwMy5odG1sIiBsYWJlbD0iT3BlcmF0b3JzIG9uIEJvb2xlYW4gVmFsdWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDQuaHRtbCIgbGFiZWw9IkNvbXBhcmlzb25zIG9mIER1cmF0aW9uLCBEYXRlIGFuZCBUaW1lIFZhbHVlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jaDA0czA1Lmh0bWwiIGxhYmVsPSJBcml0aG1ldGljIEZ1bmN0aW9ucyBvbiBEdXJhdGlvbnMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwNHMwNi5odG1sIiBsYWJlbD0iQXJpdGhtZXRpYyBGdW5jdGlvbnMgRGF0ZXMgYW5kIFRpbWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDcuaHRtbCIgbGFiZWw9Ik9wZXJhdG9ycyBSZWxhdGVkIHRvIFFOYW1lcyBBbmQgTm9kZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY2gwNHMwOC5odG1sIiBsYWJlbD0iVW5pb24sIEludGVyc2VjdGlvbiBhbmQgRXhjZXB0Ij48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NoMDRzMDkuaHRtbCIgbGFiZWw9Ik9wZXJhdG9ycyB0aGF0IEdlbmVyYXRlIFNlcXVlbmNlcyI+PC90b3BpYz48L3RvcGljPjwvdG9jPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLmNsYXNzcGF0aCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNWUzMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjZlN2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDE4NDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNUaHUgQXVnIDI3IDAwOjU3OjQ2IEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YzYwMmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYzsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDMwMDAzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MGVjYzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgZG9jLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0b2MueG1sLFwKLSAgICAgICAgICAgICAgIGRvYy8KLWJpbi5leGNsdWRlcyA9IGRvYy9odG1sL2RlbGV0ZW1lLmh0bWwKLQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9idWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRiZjAwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgIEp1bCAyMSwgMjAwOCA2OjQ2OjAyIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICBTREsgRG9jdW1lbnRhdGlvbiAgICAKLSAgICAgQnVpbGRzIFNESyBUT0MgRG9jdW1lbnRhdGlvbiB1c2luZyBKRUxEb2NsZXQuCi0gICAgICAgICAgICAgICAgICAgCi0gICAgIGRjYXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08cHJvamVjdCBuYW1lPSJTREsgRG9jdW1lbnRhdGlvbiIgZGVmYXVsdD0iZGVmYXVsdCI+Ci0gICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgQnVpbGRzIFNESyBUT0MgRG9jdW1lbnRhdGlvbiB1c2luZyBKRUxEb2NsZXQuCi0gICAgPC9kZXNjcmlwdGlvbj4KLQkKLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiBsb2NhdGlvbj0iLiIvPgotCTxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2Vsb2MiIGxvY2F0aW9uPSIuLiIvPgotCi0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICAgdGFyZ2V0OiBkZWZhdWx0ICAgICAgICAgICAgICAKLSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImRlZmF1bHQiIGRlc2NyaXB0aW9uPSJCdWlsZHMgU0RLIFRPQyBEb2N1bWVudGF0aW9uIHVzaW5nIEpFTERvY2xldC4iPgotCi0gIAkgIDxqYXZhZG9jIGRlc3RkaXI9ImRvYyIgcGFja2FnZT0idHJ1ZSIgZG9jbGV0cGF0aD0iJHt3b3Jrc3BhY2V9L2xpYi9qZWxkb2NsZXQuamFyIj4KLSAgCSAgCSA8ZmlsZXNldCBkaXI9IiR7d29ya3NwYWNlbG9jfSI+Ci0JICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci8qLmphdmEiLz4KLQkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2FzdC8qLmphdmEiLz4KLQkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC8qLmphdmEiLz4KLQkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uLyouamF2YSIvPgotCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvKi5qYXZhIi8+Ci0JICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb25zLyouamF2YSIvPgotICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy91c2VyZGVmaW5lZC8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvKi5qYXZhIi8+Ci0gIAkgIAkgPC9maWxlc2V0PgotICAJICAgICA8ZG9jbGV0IG5hbWU9ImNvbS5qZWxkb2NsZXQuSkVMRG9jbGV0Ii8+Ci0gIAkgIDwvamF2YWRvYz4KLSAgICAJCi0gICAgIDx4c2x0IGJhc2VkaXI9Ii4iIHN0eWxlPSJkb2MvamVsdG9odG1sLnhzbCIgaW49ImRvYy9qZWwueG1sIiBvdXQ9ImRvYy9odG1sL2RlbGV0ZW1lLmh0bWwiPgotICAJCTxmYWN0b3J5IG5hbWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiPgotICAJCQk8YXR0cmlidXRlIG5hbWU9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9vcHRpbWl6ZSIgdmFsdWU9InRydWUiLz4KLSAgCQkJCi0gIAkJPC9mYWN0b3J5PgotICAgICA8L3hzbHQ+Ci0gICAgCQotICAgIAkKLSAgICAgPHhzbHQgc3R5bGU9ImRvYy9qZWx0b3RvYy54c2wiIGluPSJkb2MvamVsLnhtbCIgb3V0PSJ0b2MueG1sIiBkZXN0ZGlyPSIuIj4KLSAgCQk8ZmFjdG9yeSBuYW1lPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIj4KLSAgCQkJPGF0dHJpYnV0ZSBuYW1lPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vZmVhdHVyZXMvb3B0aW1pemUiIHZhbHVlPSJ0cnVlIi8+Ci0gIAkJPC9mYWN0b3J5PgotICAgICAJPHBhcmFtIG5hbWU9InNka25hbWUiIGV4cHJlc3Npb249IlhTTCBUb29scyBTREsgRG9jdW1lbnRhdGlvbiIvPgotICAgICA8L3hzbHQ+Ci0gICAgCQotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL2RlbGV0ZW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL2RlbGV0ZW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9kZWxldGVtZS5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkNvbGxhdGlvblByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5Db2xsYXRpb25Qcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjc3YTIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkNvbGxhdGlvblByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDb2xsYXRpb25Qcm92aWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNvbGxhdGlvblByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPlNlcnZpY2UgcHJvdmlkZXIgaW50ZXJmYWNlIGZvciBsb29raW5nIHVwIGNvbGxhdGlvbnMgZnJvbSB3aXRoaW4gdGhlIGR5bmFtaWMgY29udGV4dC48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ29tcGFyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfY29sbGF0aW9uIj5nZXRfY29sbGF0aW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0cyB0aGUgbmFtZWQgY29sbGF0b3IuIFczQyBkb2VzIG5vdCBkZWZpbmUgY29sbGF0aW9uIG5hbWVzICh5ZXQ/KSBzbyB3ZSBhcmUgY29uc3RyYWluZWQgdG8gdXNpbmcgYW4KLSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG5hbWluZyBzY2hlbWUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfY29sbGF0aW9uIj5nZXRfY29sbGF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db21wYXJhdG9yIDxzdHJvbmc+Z2V0X2NvbGxhdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD5HZXRzIHRoZSBuYW1lZCBjb2xsYXRvci4gVzNDIGRvZXMgbm90IGRlZmluZSBjb2xsYXRpb24gbmFtZXMgKHlldD8pIHNvIHdlIGFyZSBjb25zdHJhaW5lZCB0byB1c2luZyBhbgotIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbmFtaW5nIHNjaGVtZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gQSBVUkkgZGVzaWduYXRpbmcgdGhlIGNvbGxhdGlvbiB0byB1c2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5Db21wYXJhdG9yPC9jb2RlPiAtIFRoZSBjb2xsYXRpb24gdG8gdXNlLCBvciBudWxsIGlmIG5vIHN1Y2ggY29sbGF0aW9uIGV4aXN0cyBieSB0aGlzIHByb3ZpZGVyPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUJ1aWxkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUJ1aWxkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3MmU5ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01CdWlsZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRE9NQnVpbGRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRPTUJ1aWxkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoZSBET00gYnVpbGRlciBsb2FkcyBhbiBET00gZnJvbSBhbiBJbnB1dFN0cmVhbS4gVGhlIGxvYWRpbmcgaXMgYWx3YXlzIG5hbWVzcGFjZSBhd2FyZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX19uYW1lc3BhY2VfYXdhcmUiPl9uYW1lc3BhY2VfYXdhcmU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fdmFsaWRhdGluZyI+X3ZhbGlkYXRpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RPTUJ1aWxkZXIiPkRPTUJ1aWxkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2FkIj5sb2FkPC9hPihqYXZhLmlvLklucHV0U3RyZWFtIGluKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIExvYWRzIFRoZSBYTUwgZG9jdW1lbnQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhbGlkYXRpbmciPnNldF92YWxpZGF0aW5nPC9hPihib29sZWFuIHgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHZhbGlkYXRpbmcgYm9vbGVhbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX19uYW1lc3BhY2VfYXdhcmUiPl9uYW1lc3BhY2VfYXdhcmU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbiA8c3Ryb25nPl9uYW1lc3BhY2VfYXdhcmU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX3ZhbGlkYXRpbmciPl92YWxpZGF0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW4gPHN0cm9uZz5fdmFsaWRhdGluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRE9NQnVpbGRlciI+RE9NQnVpbGRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRPTUJ1aWxkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIERPTSBidWlsZGVyLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2xvYWQiPmxvYWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQgPHN0cm9uZz5sb2FkPC9zdHJvbmc+KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pPC9jb2RlPjwvcD48cD5Mb2FkcyBUaGUgWE1MIGRvY3VtZW50LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW48L2NvZGU+IC0gaXMgdGhlIGlucHV0IHN0cmVhbS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPiAtIFRoZSBsb2FkZWQgZG9jdW1lbnQuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIC0gRE9NIGxvYWRlciBleGNlcHRpb24uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfdmFsaWRhdGluZyI+c2V0X3ZhbGlkYXRpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF92YWxpZGF0aW5nPC9zdHJvbmc+KGJvb2xlYW4geCk8L2NvZGU+PC9wPjxwPlNldCB2YWxpZGF0aW5nIGJvb2xlYW4uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIGlzIHRoZSB2YWx1ZSB0byBzZXQgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbiB0by48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmZTcxNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTUxvYWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRPTUxvYWRlcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5UaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9hZCI+bG9hZDwvYT4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VlbW50PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhbGlkYXRpbmciPnNldF92YWxpZGF0aW5nPC9hPihib29sZWFuIHZhbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdmFsaWRhdGluZyBib29sZWFuLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfbG9hZCI+bG9hZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCA8c3Ryb25nPmxvYWQ8L3N0cm9uZz4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PC9wPjxwPlRoZSBET00gbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdWVtbnQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmluPC9jb2RlPiAtIGlzIHRoZSBpbnB1dCBzdHJlYW0uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT4gLSBUaGUgbG9hZGVkIGRvY3VtZW50LiBUaGUgZG9jdW1lbnQgaXMgYWx3YXlzIGxvYWRlZCBhcyBuYW1lc3BhY2UtYXdhcmU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXJFeGNlcHRpb24gLSBET00gbG9hZGVyIGV4Y2VwdGlvbi48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF92YWxpZGF0aW5nIj5zZXRfdmFsaWRhdGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X3ZhbGlkYXRpbmc8L3N0cm9uZz4oYm9vbGVhbiB2YWwpPC9jb2RlPjwvcD48cD5TZXQgdmFsaWRhdGluZyBib29sZWFuLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFsPC9jb2RlPiAtIGlzIHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUxvYWRlckV4Y2VwdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YThlMjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBET01Mb2FkZXJFeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01Mb2FkZXJFeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uPC9wcmU+RXhjZXB0aW9uIGNhdXNlZCBieSBET00gbG9hZGVyLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9ET01Mb2FkZXJFeGNlcHRpb24iPkRPTUxvYWRlckV4Y2VwdGlvbjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9ET01Mb2FkZXJFeGNlcHRpb24iPkRPTUxvYWRlckV4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRPTUxvYWRlckV4Y2VwdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBET00gbG9hZGVyIGV4Y2VwdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdER5bmFtaWNDb250ZXh0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZmYTdlMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWZhdWx0RHluYW1pY0NvbnRleHQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EZWZhdWx0RHluYW1pY0NvbnRleHQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRTdGF0aWNDb250ZXh0PC9wcmU+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSBEeW5hbWljIENvbnRleHQuCi0gCi0gSW5pdGlhbGl6ZXMgYW5kIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgb2YgYSBkeW5hbWljIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZQotIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWZhdWx0RHluYW1pY0NvbnRleHQiPkRlZmF1bHREeW5hbWljQ29udGV4dDwvYT48L3N0cm9uZz4ob3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBzY2hlbWEKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZF9mdW5jdGlvbl9saWJyYXJ5Ij5hZGRfZnVuY3Rpb25fbGlicmFyeTwvYT4oRnVuY3Rpb25MaWJyYXJ5IGZsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZHMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnRleHRfaXRlbSI+Y29udGV4dF9pdGVtPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgY29udGV4dCBpdGVtIHRoYXQgaXMgaW4gZm9jdXM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnRleHRfcG9zaXRpb24iPmNvbnRleHRfcG9zaXRpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGZvY3VzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jdXJyZW50X2RhdGVfdGltZSI+Y3VycmVudF9kYXRlX3RpbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXRzIHRoZSBDdXJyZW50IHN0YWJsZSBkYXRlIHRpbWUgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RlZmF1bHRfY29sbGF0aW9uX25hbWUiPmRlZmF1bHRfY29sbGF0aW9uX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V2YWx1YXRlX2Z1bmN0aW9uIj5ldmFsdWF0ZV9mdW5jdGlvbjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGFyZ3MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mb2N1cyI+Zm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gdGhlIGZvY3VzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db21wYXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9jb2xsYXRpb24iPmdldF9jb2xsYXRpb248L2E+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0X2RvYyI+Z2V0X2RvYzwvYT4oamF2YS5uZXQuVVJJIHJlc29sdmVkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGdldCBkb2N1bWVudDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfdmFyaWFibGUiPmdldF92YXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIHZhcmlhYmxlIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xhc3QiPmxhc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgZm9jdXM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vZGVfcG9zaXRpb24iPm5vZGVfcG9zaXRpb248L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVc2UgZm9jdXMoKS5wb3NpdGlvbigpIHRvIHJldHJpZXZlIHRoZSB2YWx1ZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5uZXQuVVJJPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmVfdXJpIj5yZXNvbHZlX3VyaTwvYT4oamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X2NvbGxhdGlvbl9wcm92aWRlciI+c2V0X2NvbGxhdGlvbl9wcm92aWRlcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkNvbGxhdGlvblByb3ZpZGVyIHByb3ZpZGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9kZWZhdWx0X2NvbGxhdGlvbiI+c2V0X2RlZmF1bHRfY29sbGF0aW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIF9kZWZhdWx0X2NvbGxhdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfZm9jdXMiPnNldF9mb2N1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzIGYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hhbmdlcyB0aGUgY3VycmVudCBmb2N1cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfdmFyaWFibGUiPnNldF92YXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcgotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgdmFsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRGVmYXVsdER5bmFtaWNDb250ZXh0Ij5EZWZhdWx0RHluYW1pY0NvbnRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5EZWZhdWx0RHluYW1pY0NvbnRleHQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBzY2hlbWEKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF9mdW5jdGlvbl9saWJyYXJ5Ij5hZGRfZnVuY3Rpb25fbGlicmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkX2Z1bmN0aW9uX2xpYnJhcnk8L3N0cm9uZz4oRnVuY3Rpb25MaWJyYXJ5IGZsKTwvY29kZT48L3A+PHA+QWRkcyBmdW5jdGlvbiBkZWZpbml0aW9ucy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZsPC9jb2RlPiAtIEZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb250ZXh0X2l0ZW0iPmNvbnRleHRfaXRlbTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNvbnRleHRfaXRlbTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSBjb250ZXh0IGl0ZW0gdGhhdCBpcyBpbiBmb2N1czwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+IC0gYW4gQW55VHlwZSByZXN1bHQgZnJvbSBfZm9jdXMuY29udGV4dF9pdGVtKCk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29udGV4dF9wb3NpdGlvbiI+Y29udGV4dF9wb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5jb250ZXh0X3Bvc2l0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9jdXM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBhbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5wb3NpdGlvbigpPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2N1cnJlbnRfZGF0ZV90aW1lIj5jdXJyZW50X2RhdGVfdGltZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIgPHN0cm9uZz5jdXJyZW50X2RhdGVfdGltZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXRzIHRoZSBDdXJyZW50IHN0YWJsZSBkYXRlIHRpbWUgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWZhdWx0X2NvbGxhdGlvbl9uYW1lIj5kZWZhdWx0X2NvbGxhdGlvbl9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5kZWZhdWx0X2NvbGxhdGlvbl9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbHVhdGVfZnVuY3Rpb24iPmV2YWx1YXRlX2Z1bmN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmV2YWx1YXRlX2Z1bmN0aW9uPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBhcmdzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48cD48Y29kZT5hcmdzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIGEgUmVzdWx0U2VxdWVuY2UgZnJvbSBmdW5jdC5ldmFsdWF0ZShhcmdzKTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZm9jdXMiPmZvY3VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyA8c3Ryb25nPmZvY3VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybiB0aGUgZm9jdXM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1czwvY29kZT4gLSBfZm9jdXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X2NvbGxhdGlvbiI+Z2V0X2NvbGxhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ29tcGFyYXRvciA8c3Ryb25nPmdldF9jb2xsYXRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5Db21wYXJhdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfZG9jIj5nZXRfZG9jPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmdldF9kb2M8L3N0cm9uZz4oamF2YS5uZXQuVVJJIHJlc29sdmVkKTwvY29kZT48L3A+PHA+Z2V0IGRvY3VtZW50PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXNvbHZlZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBhIFJlc3VsdFNlcXVlbmNlIGZyb20gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfdmFyaWFibGUiPmdldF92YXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmdldF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSB2YXJpYWJsZSBuYW1lPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+IC0gYW4gQW55VHlwZSByZXN1bHQgZnJvbSBnZXRfdmFyKG5hbWUpIG9yIHJldHVybiBOVUxMPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xhc3QiPmxhc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bGFzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgZm9jdXM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBhbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5sYXN0KCk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9kZV9wb3NpdGlvbiI+bm9kZV9wb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5ub2RlX3Bvc2l0aW9uPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PC9wPjxwPlVzZSBmb2N1cygpLnBvc2l0aW9uKCkgdG8gcmV0cmlldmUgdGhlIHZhbHVlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZV91cmkiPnJlc29sdmVfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubmV0LlVSSSA8c3Ryb25nPnJlc29sdmVfdXJpPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51cmk8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLm5ldC5VUkk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9jb2xsYXRpb25fcHJvdmlkZXIiPnNldF9jb2xsYXRpb25fcHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9jb2xsYXRpb25fcHJvdmlkZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkNvbGxhdGlvblByb3ZpZGVyIHByb3ZpZGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm92aWRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2RlZmF1bHRfY29sbGF0aW9uIj5zZXRfZGVmYXVsdF9jb2xsYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9kZWZhdWx0X2NvbGxhdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIF9kZWZhdWx0X2NvbGxhdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+X2RlZmF1bHRfY29sbGF0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfZm9jdXMiPnNldF9mb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X2ZvY3VzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyBmKTwvY29kZT48L3A+PHA+Q2hhbmdlcyB0aGUgY3VycmVudCBmb2N1cy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmY8L2NvZGU+IC0gZm9jdXMgdG8gc2V0PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF92YXJpYWJsZSI+c2V0X3ZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfdmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcgotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgdmFsKTwvY29kZT48L3A+PHA+U2V0cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSBWYXJpYWJsZSBuYW1lLjwvcD48cD48Y29kZT52YWw8L2NvZGU+IC0gVmFyaWFibGUgdmFsdWUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSBhbiB4czppbnRlZ2VyIF90ejwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQzM2JjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRGVmYXVsdEV2YWx1YXRvci5EdW1teUVycm9yPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+RGVmYXVsdEV2YWx1YXRvci5EdW1teUVycm9yPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5FcnJvcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3IiPkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvcjwvYT48L3N0cm9uZz4oaW50IHR5cGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGUiPnR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3IiPkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvcjwvc3Ryb25nPihpbnQgdHlwZSk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGUiPnR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+dHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5QYWlyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLlBhaXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MWNiNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLlBhaXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWZhdWx0RXZhbHVhdG9yLlBhaXI8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5EZWZhdWx0RXZhbHVhdG9yLlBhaXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX29uZSI+X29uZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX190d28iPl90d288L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlZmF1bHRFdmFsdWF0b3IuUGFpciI+RGVmYXVsdEV2YWx1YXRvci5QYWlyPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG8KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgdCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfX29uZSI+X29uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+X29uZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9fdHdvIj5fdHdvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5fdHdvPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWZhdWx0RXZhbHVhdG9yLlBhaXIiPkRlZmF1bHRFdmFsdWF0b3IuUGFpcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlZmF1bHRFdmFsdWF0b3IuUGFpcjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG8KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgdCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MmM0MjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWZhdWx0RXZhbHVhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGVmYXVsdEV2YWx1YXRvcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+RGVmYXVsdCBldmFsdWF0b3IgaW50ZXJmYWNlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlZmF1bHRFdmFsdWF0b3IiPkRlZmF1bHRFdmFsdWF0b3I8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYwotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uRG9jdW1lbnQgZG9jKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRGVmYXVsdEV2YWx1YXRvci5EdW1teUVycm9yIj5EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3I8L2E+PC9zdHJvbmc+KGludCB0eXBlKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRGVmYXVsdEV2YWx1YXRvci5QYWlyIj5EZWZhdWx0RXZhbHVhdG9yLlBhaXI8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgbwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCB0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsdWF0ZSI+ZXZhbHVhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZXZhbHVhdGUgdGhlIHhwYXRoIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggeHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgaXRlcmF0ZSB0aHJvdWdoIHhwYXRoIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwciBmZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZm9yIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIgcWV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHF1YW50aWZpZWQgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBpZiBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk9yRXhwciBvcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IG9yIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwciBhbmRleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBhbmQgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIGNtcGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGNvbXBhcmUgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIgcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHJhbmdlIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciBhZGRleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBhbmQgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByIHN1YmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHN1YiBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgbXVsdGlwbHkgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGRpdmlzaW9uIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgbW9kdWxhciBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciB1bmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHVuaW9uIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHIgcGlwZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgcGlwZSBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHIgaWV4cHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgaW50ZXJzZWN0IGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhjZXB0RXhwciBlZXhwcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBleGNlcHQgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByIGlvZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGluc3RhbmNlIG9mIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIgdGFleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgdHJlYXQtYXMgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBjYXN0YWJsZSBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByIGNleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgY2FzdCBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IG1pbnVzIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBwbHVzIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgWFBhdGggZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGEgZm9yd2FyZCBzdGVwIGV4cHJlc3Npb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXAgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBhIHJldmVyc2Ugc3RlcCBleHByZXNzaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5hbWVUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgYSBuYW1lIHRlc3QgZXhwcmVzc2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCB2YXJpYWJsZSByZWZlcmVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHN0cmluZyBsaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGludGVnZXIgbGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGRvdWJsZSBsaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGRlY2ltYWwgbGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHBhcmVudCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZnVuY3Rpb24gY2FsbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHNpbmdsZSB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBzZXF1ZW5jZSB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IGl0ZW0gdHlwZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW55S2luZFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBhbnkga2luZCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBkb2N1bWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHRleHQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBjb21tZW50IHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IFBJIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBhdHRyaWJ1dGUgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICB2aXNpdCBzY2hlbWEgYXR0cmlidXRlIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZWxlbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHZpc2l0IHNjaGVtYSBlbGVtZW50IHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF4aXNTdGVwIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgYXhpcyBzdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdmlzaXQgZmlsdGVyIGV4cHJlc3Npb248L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWZhdWx0RXZhbHVhdG9yIj5EZWZhdWx0RXZhbHVhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVmYXVsdEV2YWx1YXRvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyk8L2NvZGU+PC9wPjxwPnNldCBwYXJhbWV0ZXJzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbHVhdGUiPmV2YWx1YXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmV2YWx1YXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG5vZGUpPC9jb2RlPjwvcD48cD5ldmFsdWF0ZSB0aGUgeHBhdGggbm9kZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBpcyB0aGUgeHBhdGggbm9kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSByZXN1bHQgc2VxdWVuY2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggeHApPC9jb2RlPjwvcD48cD5pdGVyYXRlIHRocm91Z2ggeHBhdGggZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHA8L2NvZGU+IC0gaXMgdGhlIHhwYXRoLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSByZXN1bHQgc2VxdWVuY2UuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByIGZleCk8L2NvZGU+PC9wPjxwPnZpc2l0IGZvciBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mZXg8L2NvZGU+IC0gaXMgdGhlIGZvciBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByIHFleCk8L2NvZGU+PC9wPjxwPnZpc2l0IHF1YW50aWZpZWQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cWV4PC9jb2RlPiAtIGlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uIG9yIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PC9wPjxwPnZpc2l0IGlmIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlmZXg8L2NvZGU+IC0gaXMgdGhlIGlmIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgaWZleC50aGVuX2NsYXVzZSgpLmFjY2VwdCh0aGlzKS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk9yRXhwciBvcmV4KTwvY29kZT48L3A+PHA+dmlzaXQgb3IgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b3JleDwvY29kZT4gLSBpcyB0aGUgb3IgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFuZEV4cHIgYW5kZXgpPC9jb2RlPjwvcD48cD52aXNpdCBhbmQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5kZXg8L2NvZGU+IC0gaXMgdGhlIGFuZCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ21wRXhwciBjbXBleCk8L2NvZGU+PC9wPjxwPnZpc2l0IGNvbXBhcmUgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y21wZXg8L2NvZGU+IC0gaXMgdGhlIGNvbXBhcmUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb24gb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByIHJleCk8L2NvZGU+PC9wPjxwPnZpc2l0IHJhbmdlIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJleDwvY29kZT4gLSBpcyB0aGUgcmFuZ2UgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIgYWRkZXgpPC9jb2RlPjwvcD48cD52aXNpdCBhbmQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWRkZXg8L2NvZGU+IC0gaXMgdGhlIGFuZCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwciBzdWJleCk8L2NvZGU+PC9wPjxwPnZpc2l0IHN1YiBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdWJleDwvY29kZT4gLSBpcyB0aGUgc3ViIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByIG11bGV4KTwvY29kZT48L3A+PHA+dmlzaXQgbXVsdGlwbHkgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXVsZXg8L2NvZGU+IC0gaXMgdGhlIG11bCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGl2RXhwciBtdWxleCk8L2NvZGU+PC9wPjxwPnZpc2l0IGRpdmlzaW9uIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBkaXZpc2lvbiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD52aXNpdCBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIG11bGV4KTwvY29kZT48L3A+PHA+dmlzaXQgbW9kdWxhciBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgbW9kdWxhciBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByIHVuZXgpPC9jb2RlPjwvcD48cD52aXNpdCB1bmlvbiBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51bmV4PC9jb2RlPiAtIGlzIHRoZSB1bmlvbiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHIgcGlwZXgpPC9jb2RlPjwvcD48cD52aXNpdCBwaXBlIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBpcGV4PC9jb2RlPiAtIGlzIHRoZSBwaXBlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByIGlleHByKTwvY29kZT48L3A+PHA+dmlzaXQgaW50ZXJzZWN0IGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlleHByPC9jb2RlPiAtIGlzIHRoZSBpbnRlcnNlY3QgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjwvcD48cD52aXNpdCBleGNlcHQgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWV4cHI8L2NvZGU+IC0gaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwciBpb2V4cCk8L2NvZGU+PC9wPjxwPnZpc2l0IGluc3RhbmNlIG9mIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlvZXhwPC9jb2RlPiAtIGlzIHRoZSBpbnN0YW5jZSBvZiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIgdGFleHApPC9jb2RlPjwvcD48cD52aXNpdCB0cmVhdC1hcyBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50YWV4cDwvY29kZT4gLSBpcyB0aGUgdHJlYXQtYXMgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RhYmxlRXhwciBjZXhwKTwvY29kZT48L3A+PHA+dmlzaXQgY2FzdGFibGUgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2V4cDwvY29kZT4gLSBpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByIGNleHApPC9jb2RlPjwvcD48cD52aXNpdCBjYXN0IGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNleHA8L2NvZGU+IC0gaXMgdGhlIGNhc3QgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwciBlKTwvY29kZT48L3A+PHA+dmlzaXQgbWludXMgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgbWludXMgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByIGUpPC9jb2RlPjwvcD48cD52aXNpdCBwbHVzIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHBsdXMgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciBlKTwvY29kZT48L3A+PHA+dmlzaXQgWFBhdGggZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgWFBhdGggZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwIGUpPC9jb2RlPjwvcD48cD52aXNpdCBhIGZvcndhcmQgc3RlcCBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBmb3J3YXJkIHN0ZXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCBlKTwvY29kZT48L3A+PHA+dmlzaXQgYSByZXZlcnNlIHN0ZXAgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgcmV2ZXJzZSBzdGVwLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTmFtZVRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGEgbmFtZSB0ZXN0IGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlbmFtZSB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyUmVmIGUpPC9jb2RlPjwvcD48cD52aXNpdCB2YXJpYWJsZSByZWZlcmVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHZhcmlhYmxlIHJlZmVyZW5jZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IHN0cmluZyBsaXRlcmFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc3RyaW5nIGxpdGVyYWwuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCBlKTwvY29kZT48L3A+PHA+dmlzaXQgaW50ZWdlciBsaXRlcmFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgaW50ZWdlciBsaXRlcmFsLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCBlKTwvY29kZT48L3A+PHA+dmlzaXQgZG91YmxlIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBkb3VibGUgbGl0ZXJhbC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD52aXNpdCBkZWNpbWFsIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBkZWNpbWFsIGxpdGVyYWwuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByIGUpPC9jb2RlPjwvcD48cD52aXNpdCBwYXJlbnQgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHBhcmVudCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByIGUpPC9jb2RlPjwvcD48cD52aXNpdCBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIGUpPC9jb2RlPjwvcD48cD52aXNpdCBmdW5jdGlvbiBjYWxsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZnVuY3Rpb24gY2FsbC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb24gb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSBlKTwvY29kZT48L3A+PHA+dmlzaXQgc2luZ2xlIHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBzaW5nbGUgdHlwZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIGUpPC9jb2RlPjwvcD48cD52aXNpdCBzZXF1ZW5jZSB0eXBlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc2VxdWVuY2UgdHlwZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGl0ZW0gdHlwZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGl0ZW0gdHlwZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW55S2luZFRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGFueSBraW5kIHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBhbnkga2luZCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBkb2N1bWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZG9jdW1lbnQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCBlKTwvY29kZT48L3A+PHA+dmlzaXQgdGV4dCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgdGV4dCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGNvbW1lbnQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHRleHQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdCBlKTwvY29kZT48L3A+PHA+dmlzaXQgUEkgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIFBJIHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgYXJndW1lbnQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGF0dHJpYnV0ZSB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgYXR0cmlidXRlIHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFBdHRyVGVzdCBlKTwvY29kZT48L3A+PHA+dmlzaXQgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPnZpc2l0IGVsZW1lbnQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGVsZW1lbnQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IGUpPC9jb2RlPjwvcD48cD52aXNpdCBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc2NoZW1hIGVsZW1lbnQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF4aXNTdGVwIGUpPC9jb2RlPjwvcD48cD52aXNpdCBheGlzIHN0ZXAuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBheGlzIHN0ZXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByIGUpPC9jb2RlPjwvcD48cD52aXNpdCBmaWx0ZXIgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZmlsdGVyIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjVhNmFiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRHluYW1pY0NvbnRleHQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EeW5hbWljQ29udGV4dDwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5JbnRlcmZhY2UgZm9yIGR5bmFtaWMgY29udGV4dC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ09ERVBPSU5UX0NPTExBVElPTiI+Q09ERVBPSU5UX0NPTExBVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBjb2xsYXRpb24gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgaW1wbGVtZW50ZWQ8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnRleHRfaXRlbSI+Y29udGV4dF9pdGVtPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGNvbnRleHQgaXRlbS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnRleHRfcG9zaXRpb24iPmNvbnRleHRfcG9zaXRpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgY29udGV4dCBub2RlIHBvc2l0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3VycmVudF9kYXRlX3RpbWUiPmN1cnJlbnRfZGF0ZV90aW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBkYXRlIHRpbWUgdXNpbmcgdGhlIEdyZWdvcmlhbkNhbGVuZGFyLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RlZmF1bHRfY29sbGF0aW9uX25hbWUiPmRlZmF1bHRfY29sbGF0aW9uX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IGRlZmF1bHQgY29sbGF0b3I8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V2YWx1YXRlX2Z1bmN0aW9uIj5ldmFsdWF0ZV9mdW5jdGlvbjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGFyZ3MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXZhbHVhdGUgdGhlIGZ1bmN0aW9uIG9mIHRoZSBhcmd1bWVudHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mb2N1cyI+Zm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gZm9jdXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db21wYXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9jb2xsYXRpb24iPmdldF9jb2xsYXRpb248L2E+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybiBhIHVzZWZ1bCBjb2xsYXRvciBmb3IgdGhlIHNwZWNpZmllZCBVUkk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9kb2MiPmdldF9kb2M8L2E+KGphdmEubmV0LlVSSSB1cmkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGRvY3VtZW50LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfdmFyaWFibGUiPmdldF92YXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHZhcmlhYmxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGFzdCI+bGFzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBwb3NpdGlvbiBvZiBsYXN0IGl0ZW0uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX3Bvc2l0aW9uIj5ub2RlX3Bvc2l0aW9uPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubmV0LlVSSTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZXNvbHZlX3VyaSI+cmVzb2x2ZV91cmk8L2E+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlc29sdmUgYW4gVVJJPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X2ZvY3VzIj5zZXRfZm9jdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyBmb2N1cyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgZm9jdXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhcmlhYmxlIj5zZXRfdmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIHZhbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdmFyaWFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9DT0RFUE9JTlRfQ09MTEFUSU9OIj5DT0RFUE9JTlRfQ09MTEFUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkNPREVQT0lOVF9DT0xMQVRJT048L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBkZWZhdWx0IGNvbGxhdGlvbiB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGFsd2F5cyBiZSBpbXBsZW1lbnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29udGV4dF9pdGVtIj5jb250ZXh0X2l0ZW08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jb250ZXh0X2l0ZW08L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IGNvbnRleHQgaXRlbS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIHRoZSBjb250ZXh0IGl0ZW0uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnRleHRfcG9zaXRpb24iPmNvbnRleHRfcG9zaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Y29udGV4dF9wb3NpdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgY29udGV4dCBub2RlIHBvc2l0aW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHBvc2l0aW9uIG9mIGNvbnRleHQgbm9kZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3VycmVudF9kYXRlX3RpbWUiPmN1cnJlbnRfZGF0ZV90aW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciA8c3Ryb25nPmN1cnJlbnRfZGF0ZV90aW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGN1cnJlbnQgZGF0ZSB0aW1lIHVzaW5nIHRoZSBHcmVnb3JpYW5DYWxlbmRhci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjwvY29kZT4gLSBUaGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLCB3aGljaCB3aWxsIGFsd2F5cyBiZSBzYW1lIGZvciB0aGUgZHluYW1pYyBjb250ZXh0LjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWZhdWx0X2NvbGxhdGlvbl9uYW1lIj5kZWZhdWx0X2NvbGxhdGlvbl9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5kZWZhdWx0X2NvbGxhdGlvbl9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb2xsYXRvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBUaGUgZGVmYXVsdCBuYW1lIHRvIHVzZSBhcyB0aGUgY29sbGF0b3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbHVhdGVfZnVuY3Rpb24iPmV2YWx1YXRlX2Z1bmN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmV2YWx1YXRlX2Z1bmN0aW9uPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBhcmdzKTwvY29kZT48L3A+PHA+RXZhbHVhdGUgdGhlIGZ1bmN0aW9uIG9mIHRoZSBhcmd1bWVudHMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIGlzIHRoZSBuYW1lLjwvcD48cD48Y29kZT5hcmdzPC9jb2RlPiAtIGFyZSB0aGUgYXJndW1lbnRzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gZXZhbHVhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgLSBkeW5hbWljIGVycm9yLjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZm9jdXMiPmZvY3VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyA8c3Ryb25nPmZvY3VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybiBmb2N1cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1czwvY29kZT4gLSBGb2N1czwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfY29sbGF0aW9uIj5nZXRfY29sbGF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db21wYXJhdG9yIDxzdHJvbmc+Z2V0X2NvbGxhdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PC9wPjxwPlJldHVybiBhIHVzZWZ1bCBjb2xsYXRvciBmb3IgdGhlIHNwZWNpZmllZCBVUkk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5Db21wYXJhdG9yPC9jb2RlPiAtIEEgSmFhIGNvbGxhdG9yLCBvciBudWxsLCBpZiBubyBzdWNoIENvbGxhdG9yIGV4aXN0czwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfZG9jIj5nZXRfZG9jPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmdldF9kb2M8L3N0cm9uZz4oamF2YS5uZXQuVVJJIHVyaSk8L2NvZGU+PC9wPjxwPkdldCBkb2N1bWVudC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT4gLSBpcyB0aGUgVVJJIG9mIHRoZSBkb2N1bWVudC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBkb2N1bWVudC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X3ZhcmlhYmxlIj5nZXRfdmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5nZXRfdmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD5HZXQgdmFyaWFibGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIHZhcmlhYmxlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sYXN0Ij5sYXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmxhc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHBvc2l0aW9uIG9mIGxhc3QgaXRlbS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBsYXN0IGl0ZW0gcG9zaXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfcG9zaXRpb24iPm5vZGVfcG9zaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bm9kZV9wb3NpdGlvbjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmVfdXJpIj5yZXNvbHZlX3VyaTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLm5ldC5VUkkgPHN0cm9uZz5yZXNvbHZlX3VyaTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PC9wPjxwPlJlc29sdmUgYW4gVVJJPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51cmk8L2NvZGU+IC0gaXMgdGhlIHBvc3NpYmx5IHJlbGF0aXZlIFVSSSB0byByZXNvbHZlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLm5ldC5VUkk8L2NvZGU+IC0gdGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9mb2N1cyI+c2V0X2ZvY3VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfZm9jdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzIGZvY3VzKTwvY29kZT48L3A+PHA+U2V0IGZvY3VzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Zm9jdXM8L2NvZGU+IC0gaXMgZm9jdXMgdG8gYmUgc2V0LjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfdmFyaWFibGUiPnNldF92YXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X3ZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIHZhbCk8L2NvZGU+PC9wPjxwPlNldCB2YXJpYWJsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSBpcyBuYW1lIG9mIHRoZSB2YXJpYWJsZS48L3A+PHA+PGNvZGU+dmFsPC9jb2RlPiAtIGlzIHRoZSB2YWx1ZSB0byBiZSBzZXQgZm9yIHRoZSB2YXJpYWJsZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHoiPnR6PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+dHo8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIGN1cnJlbnQgZGF0ZSB0aW1lIGFuZCBpbXBsaWNpdCB0aW1lem9uZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYxMDljNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEeW5hbWljRXJyb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EeW5hbWljRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uPC9wcmU+RHluYW1pYyBFcnJvciBsaWtlIGRpdmlzaW9uIGJ5IDAgb3IgdHlwZSBlcnJvcnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0R5bmFtaWNFcnJvciI+RHluYW1pY0Vycm9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRHluYW1pY0Vycm9yIj5EeW5hbWljRXJyb3I8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IgdGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXJndW1lbnRfdHlwZV9lcnJvciI+YXJndW1lbnRfdHlwZV9lcnJvcjwvYT4oamF2YS5sYW5nLkNsYXNzIHR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FudF9jYXN0Ij5jYW50X2Nhc3Q8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29kZSI+Y29kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHN0cmluZyBvZiB0aGUgY29kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udGV4dFVuZGVmaW5lZCI+Y29udGV4dFVuZGVmaW5lZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXZfemVybyI+ZGl2X3plcm88L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhIERpdmlzaW9uIGJ5IHplcm88L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG9jX25vdF9mb3VuZCI+ZG9jX25vdF9mb3VuZDwvYT4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIGZuOmRvYyBjYW5ub3QgbG9hZCBpdHMgZG9jdW1lbnQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW1wdHlfc2VxIj5lbXB0eV9zZXE8L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXJyb3JSZXNvbHZpbmdVUkkiPmVycm9yUmVzb2x2aW5nVVJJPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXJyb3IgcmVzb2x2aW5nIHJlbGF0aXZlIHVyaSBhZ2FpbnN0IGJhc2UtdXJpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbmNvbnNpc3RlbnRUaW1lWm9uZSI+aW5jb25zaXN0ZW50VGltZVpvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5wdXRUb0xhcmdlRm9yRGVjaW1hbCI+aW5wdXRUb0xhcmdlRm9yRGVjaW1hbDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnZhbGlkX2RvYyI+aW52YWxpZF9kb2M8L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBJbnZhbGlkIGFyZ3VtZW50IHRvIGZuOmRvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50Ij5pbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46Y29sbGVjdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yIj5pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRGF0YSBpcyBpbnZhbGlkIGZvciBjYXN0aW5nIG9yIHRoZSBkYXRhIHR5cGUgY29uc3RydWN0b3IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ludmFsaWRMZXhpY2FsVmFsdWUiPmludmFsaWRMZXhpY2FsVmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBJbnZhbGlkIGxleGljYWwgdmFsdWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW52YWxpZFByZWZpeCI+aW52YWxpZFByZWZpeDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5vIG5hbWVzcGFjZSBmb3VuZCBmb3IgcHJlZml4LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnZhbGlkVGltZXpvbmUiPmludmFsaWRUaW1lem9uZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEludmFsaWQgVGltZXpvbmUgdmFsdWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ludmFsaWRUeXBlIj5pbnZhbGlkVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sZXhpY2FsX2Vycm9yIj5sZXhpY2FsX2Vycm9yPC9hPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgYW4gSW52YWxpZCBsZXhpY2FsIHZhbHVlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vcmVfb25lX2l0ZW0iPm1vcmVfb25lX2l0ZW08L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmFuIj5uYW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBPdmVyZmxvdy91bmRlcmZsb3cgaW4gZHVyYXRpb24gb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub0Jhc2VVUkkiPm5vQmFzZVVSSTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5vIGJhc2UtdXJpIGRlZmluZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vQ29udGV4dERvYyI+bm9Db250ZXh0RG9jPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTm8gY29udGV4dCBkb2N1bWVudDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub3RfY21wIj5ub3RfY21wPC9hPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgYW4gSXRlbXMgbm90IGNvbXBhcmFibGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm90X29uZSI+bm90X29uZTwvYT4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9udW1lcmljX292ZXJmbG93Ij5udW1lcmljX292ZXJmbG93PC9hPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBOdW1lcmljIG9wZXJhdGlvbiBvdmVyZmxvdy91bmRlcmZsb3c8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfb3ZlcmZsb3dEYXRlVGltZSI+b3ZlcmZsb3dEYXRlVGltZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkYXRlL3RpbWUgb3BlcmF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX292ZXJmbG93VW5kZXJmbG93Ij5vdmVyZmxvd1VuZGVyZmxvdzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlZ2V4X2Vycm9yIj5yZWdleF9lcnJvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVnZXhfZmxhZ3NfZXJyb3IiPnJlZ2V4X2ZsYWdzX2Vycm9yPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVnZXhfbWF0Y2hfemVyb19sZW5ndGgiPnJlZ2V4X21hdGNoX3plcm9fbGVuZ3RoPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aHJvd190eXBlX2Vycm9yIj50aHJvd190eXBlX2Vycm9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5zdXBwb3J0ZWRfY29kZXBvaW50Ij51bnN1cHBvcnRlZF9jb2RlcG9pbnQ8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Vuc3VwcG9ydGVkX2NvbGxhdGlvbiI+dW5zdXBwb3J0ZWRfY29sbGF0aW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIGNvbGxhdGlvbk5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Vuc3VwcG9ydGVkX25vcm1hbGl6YXRpb25fZm9ybSI+dW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yIGZvciBhbiB1bnN1cHBvcnRlZCBub3JtYWxpemF0aW9uIGZvcm08L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXNlcl9lcnJvciI+dXNlcl9lcnJvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBucwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRlc2MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXNlcl9lcnJvciI+dXNlcl9lcnJvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EeW5hbWljRXJyb3IiPkR5bmFtaWNFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkR5bmFtaWNFcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIER5bmFtaWMgRXJyb3IuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0R5bmFtaWNFcnJvciI+RHluYW1pY0Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RHluYW1pY0Vycm9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IgdGUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgRHluYW1pYyBFcnJvci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hcmd1bWVudF90eXBlX2Vycm9yIj5hcmd1bWVudF90eXBlX2Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5hcmd1bWVudF90eXBlX2Vycm9yPC9zdHJvbmc+KGphdmEubGFuZy5DbGFzcyB0eXBlKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnR5cGU8L2NvZGU+IC0gVHlwZSBmb3VuZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYW50X2Nhc3QiPmNhbnRfY2FzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+Y2FudF9jYXN0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycjwvY29kZT4gLSBpcyB0aGUgZXJyb3I8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIER5bmFtaWNFcnJvci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29kZSI+Y29kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Y29kZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzdHJpbmcgb2YgdGhlIGNvZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBjb2RlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb250ZXh0VW5kZWZpbmVkIj5jb250ZXh0VW5kZWZpbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5jb250ZXh0VW5kZWZpbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGl2X3plcm8iPmRpdl96ZXJvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5kaXZfemVybzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhIERpdmlzaW9uIGJ5IHplcm88L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1zZzwvY29kZT4gLSBpcyB0aGUgbWVzc2FnZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgbWFrZV9lcnJvcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb2Nfbm90X2ZvdW5kIj5kb2Nfbm90X2ZvdW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5kb2Nfbm90X2ZvdW5kPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIGZuOmRvYyBjYW5ub3QgbG9hZCBpdHMgZG9jdW1lbnQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1zZzwvY29kZT4gLSBpcyB0aGUgbWVzc2FnZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgbWFrZV9lcnJvcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbXB0eV9zZXEiPmVtcHR5X3NlcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+ZW1wdHlfc2VxPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Vycm9yUmVzb2x2aW5nVVJJIj5lcnJvclJlc29sdmluZ1VSSTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+ZXJyb3JSZXNvbHZpbmdVUkk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RXJyb3IgcmVzb2x2aW5nIHJlbGF0aXZlIHVyaSBhZ2FpbnN0IGJhc2UtdXJpLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5jb25zaXN0ZW50VGltZVpvbmUiPmluY29uc2lzdGVudFRpbWVab25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5pbmNvbnNpc3RlbnRUaW1lWm9uZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lucHV0VG9MYXJnZUZvckRlY2ltYWwiPmlucHV0VG9MYXJnZUZvckRlY2ltYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmlucHV0VG9MYXJnZUZvckRlY2ltYWw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW52YWxpZF9kb2MiPmludmFsaWRfZG9jPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5pbnZhbGlkX2RvYzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBJbnZhbGlkIGFyZ3VtZW50IHRvIGZuOmRvYzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ludmFsaWRDb2xsZWN0aW9uQXJndW1lbnQiPmludmFsaWRDb2xsZWN0aW9uQXJndW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPmludmFsaWRDb2xsZWN0aW9uQXJndW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46Y29sbGVjdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgbWFrZV9lcnJvcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yIj5pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5pbnZhbGlkRm9yQ2FzdENvbnN0cnVjdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkRhdGEgaXMgaW52YWxpZCBmb3IgY2FzdGluZyBvciB0aGUgZGF0YSB0eXBlIGNvbnN0cnVjdG9yLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSBGT1JHMDAwMTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbnZhbGlkTGV4aWNhbFZhbHVlIj5pbnZhbGlkTGV4aWNhbFZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5pbnZhbGlkTGV4aWNhbFZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkludmFsaWQgbGV4aWNhbCB2YWx1ZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW52YWxpZFByZWZpeCI+aW52YWxpZFByZWZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+aW52YWxpZFByZWZpeDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5ObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ludmFsaWRUaW1lem9uZSI+aW52YWxpZFRpbWV6b25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5pbnZhbGlkVGltZXpvbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW52YWxpZCBUaW1lem9uZSB2YWx1ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ludmFsaWRUeXBlIj5pbnZhbGlkVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+aW52YWxpZFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbGV4aWNhbF9lcnJvciI+bGV4aWNhbF9lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+bGV4aWNhbF9lcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhbiBJbnZhbGlkIGxleGljYWwgdmFsdWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1zZzwvY29kZT4gLSBpcyB0aGUgbWVzc2FnZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgbWFrZV9lcnJvcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb3JlX29uZV9pdGVtIj5tb3JlX29uZV9pdGVtPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5tb3JlX29uZV9pdGVtPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25hbiI+bmFuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5uYW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+T3ZlcmZsb3cvdW5kZXJmbG93IGluIGR1cmF0aW9uIG9wZXJhdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vQmFzZVVSSSI+bm9CYXNlVVJJPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5ub0Jhc2VVUkk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Tm8gYmFzZS11cmkgZGVmaW5lZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vQ29udGV4dERvYyI+bm9Db250ZXh0RG9jPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz5ub0NvbnRleHREb2M8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Tm8gY29udGV4dCBkb2N1bWVudDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm90X2NtcCI+bm90X2NtcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+bm90X2NtcDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiByZWFkcyBhbiBJdGVtcyBub3QgY29tcGFyYWJsZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vdF9vbmUiPm5vdF9vbmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPm5vdF9vbmU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtc2cpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tc2c8L2NvZGU+IC0gaXMgdGhlIG1lc3NhZ2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIG1ha2VfZXJyb3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbnVtZXJpY19vdmVyZmxvdyI+bnVtZXJpY19vdmVyZmxvdzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+bnVtZXJpY19vdmVyZmxvdzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPk51bWVyaWMgb3BlcmF0aW9uIG92ZXJmbG93L3VuZGVyZmxvdzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPiAtIGlzIHRoZSBtZXNzYWdlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBtYWtlX2Vycm9yPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX292ZXJmbG93RGF0ZVRpbWUiPm92ZXJmbG93RGF0ZVRpbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPm92ZXJmbG93RGF0ZVRpbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+T3ZlcmZsb3cvdW5kZXJmbG93IGluIGRhdGUvdGltZSBvcGVyYXRpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX292ZXJmbG93VW5kZXJmbG93Ij5vdmVyZmxvd1VuZGVyZmxvdzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+b3ZlcmZsb3dVbmRlcmZsb3c8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+T3ZlcmZsb3cvdW5kZXJmbG93IGluIGR1cmF0aW9uIG9wZXJhdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlZ2V4X2Vycm9yIj5yZWdleF9lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+cmVnZXhfZXJyb3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyPC9jb2RlPiAtIGlzIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWdleF9mbGFnc19lcnJvciI+cmVnZXhfZmxhZ3NfZXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPnJlZ2V4X2ZsYWdzX2Vycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgRHluYW1pYyBFcnJvciBmb3IgaW52YWxpZCBmbGFncyBpbiByZWd1bGFyIGV4cHJlc3Npb25zPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lcnI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWdleF9tYXRjaF96ZXJvX2xlbmd0aCI+cmVnZXhfbWF0Y2hfemVyb19sZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPnJlZ2V4X21hdGNoX3plcm9fbGVuZ3RoPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycjwvY29kZT4gLSBpcyB0aGUgZXJyb3I8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+IC0gdGhlIER5bmFtaWNFcnJvci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGhyb3dfdHlwZV9lcnJvciI+dGhyb3dfdHlwZV9lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+dGhyb3dfdHlwZV9lcnJvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciAtIGEgRHluYW1pYyBFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdW5zdXBwb3J0ZWRfY29kZXBvaW50Ij51bnN1cHBvcnRlZF9jb2RlcG9pbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPnVuc3VwcG9ydGVkX2NvZGVwb2ludDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lcnI8L2NvZGU+IC0gaXMgdGhlIGVycm9yPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBEeW5hbWljRXJyb3IuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Vuc3VwcG9ydGVkX2NvbGxhdGlvbiI+dW5zdXBwb3J0ZWRfY29sbGF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz51bnN1cHBvcnRlZF9jb2xsYXRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb2xsYXRpb25OYW1lKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb2xsYXRpb25OYW1lPC9jb2RlPiAtIGlzIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0iPnVuc3VwcG9ydGVkX25vcm1hbGl6YXRpb25fZm9ybTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIDxzdHJvbmc+dW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lcnI8L2NvZGU+IC0gaXMgdGhlIGVycm9yPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBEeW5hbWljRXJyb3IuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VzZXJfZXJyb3IiPnVzZXJfZXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciA8c3Ryb25nPnVzZXJfZXJyb3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBucwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRlc2MpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bnM8L2NvZGU+PC9wPjxwPjxjb2RlPmNvZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmRlc2M8L2NvZGU+IC0gaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT4gLSB0aGUgRHluYW1pY0Vycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91c2VyX2Vycm9yIj51c2VyX2Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgPHN0cm9uZz51c2VyX2Vycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycjwvY29kZT4gLSBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPiAtIHRoZSBEeW5hbWljRXJyb3IuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkV2YWx1YXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjdiOTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBFdmFsdWF0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5FdmFsdWF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+aW50ZXJmYWNlIHRvIEV2YWx1YXRvcjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V2YWx1YXRlIj5ldmFsdWF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUgcm9vdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFdmFsdWF0ZSB0aGUgcm9vdCBub2RlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbHVhdGUiPmV2YWx1YXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmV2YWx1YXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIHJvb3QpPC9jb2RlPjwvcD48cD5FdmFsdWF0ZSB0aGUgcm9vdCBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cm9vdDwvY29kZT4gLSBpcyB0aGUgWFBhdGggbm9kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBSZXN1bHQgb2YgZXZhbHVhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgLSBkeW5hbWljIGVycm9yLjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkpGbGV4Q3VwUGFyc2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OTRhMzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEpGbGV4Q3VwUGFyc2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZsZXhDdXBQYXJzZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkpGbGV4Q3VwUGFyc2VyIHBhcnNlcyB0aGUgeHBhdGggZXhwcmVzc2lvbjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmxleEN1cFBhcnNlciI+SkZsZXhDdXBQYXJzZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlIj5wYXJzZTwvYT4oamF2YS5sYW5nLlN0cmluZyB4cGF0aCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUcmllcyB0byBwYXJzZSB0aGUgeHBhdGggZXhwcmVzc2lvbjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0pGbGV4Q3VwUGFyc2VyIj5KRmxleEN1cFBhcnNlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGbGV4Q3VwUGFyc2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlIj5wYXJzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIDxzdHJvbmc+cGFyc2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4cGF0aCk8L2NvZGU+PC9wPjxwPlRyaWVzIHRvIHBhcnNlIHRoZSB4cGF0aCBleHByZXNzaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54cGF0aDwvY29kZT4gLSBpcyB0aGUgeHBhdGggc3RyaW5nLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDwvY29kZT4gLSB0aGUgeHBhdGggdmFsdWUuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDgxMmE2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUmVzdWx0U2VxdWVuY2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5SZXN1bHRTZXF1ZW5jZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+SW50ZXJmYWNlIHRvIHRoZSBtZXRob2RzIG9mIHJhbmdlIG9mIHJlc3VsdCBzZXF1ZW5jZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9SZXN1bHRTZXF1ZW5jZSI+UmVzdWx0U2VxdWVuY2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZCI+YWRkPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGFkZCBpdGVtPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xlYXIiPmNsZWFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY2xlYXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25jYXQiPmNvbmNhdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGNvbmNhdGluYXRlIGZyb20gcnM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZV9uZXciPmNyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW1wdHkiPmVtcHR5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY2hlY2sgaXMgdGhlIHNlcXVlbmNlIGlzIGVtcHR5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZpcnN0Ij5maXJzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHJldHJpZXZlIHRoZSBmaXJzdCBpdGVtPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldCI+Z2V0PC9hPihpbnQgaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBnZXQgaXRlbSBpbiBpbmRleCBpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0SXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTGlzdCBJdGVyYXRvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgcmVsZWFzZSB0aGUgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zaXplIj5zaXplPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZ2V0IHRoZSBzaXplPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nIj5zdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZXRyaWV2ZSBpdGVtcyBpbiBzZXF1ZW5jZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1Jlc3VsdFNlcXVlbmNlIj5SZXN1bHRTZXF1ZW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlc3VsdFNlcXVlbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZCI+YWRkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPmFkZCBpdGVtPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pdGVtPC9jb2RlPiAtIGlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NsZWFyIj5jbGVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Y2xlYXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uY2F0Ij5jb25jYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbmNhdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD5jb25jYXRpbmF0ZSBmcm9tIHJzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT4gLSBpcyBhIFJlc3VsdCBTZXF1ZW5jZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlX25ldyI+Y3JlYXRlX25ldzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jcmVhdGVfbmV3PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPmNyZWF0ZSBhIG5ldyByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBhIG5ldyByZXN1bHQgc2VxdWVuY2UuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VtcHR5Ij5lbXB0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZW1wdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Y2hlY2sgaXMgdGhlIHNlcXVlbmNlIGlzIGVtcHR5PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW4uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZpcnN0Ij5maXJzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmZpcnN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJldHJpZXZlIHRoZSBmaXJzdCBpdGVtPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSB0aGUgZmlyc3QgaXRlbS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Ij5nZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5nZXQ8L3N0cm9uZz4oaW50IGkpPC9jb2RlPjwvcD48cD5nZXQgaXRlbSBpbiBpbmRleCBpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pPC9jb2RlPiAtIGlzIHRoZSBwb3NpdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3RJdGVyYXRvciA8c3Ryb25nPml0ZXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkxpc3QgSXRlcmF0b3IuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJlbGVhc2UgdGhlIHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zaXplIj5zaXplPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnNpemU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Z2V0IHRoZSBzaXplPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIHNpemUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZyI+c3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+cmV0cmlldmUgaXRlbXMgaW4gc2VxdWVuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gcmVzdWx0IHN0cmluZzwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWQ2NDdhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+UmVzdWx0IHNlcXVlbmNlIGZhY3Rvcnk8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ij5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZV9uZXciPmNyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmFjdF9jcmVhdGVfbmV3Ij5mYWN0X2NyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhY3RfY3JlYXRlX25ldyI+ZmFjdF9jcmVhdGVfbmV3PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhY3RfcHJpbnRfZGVidWciPmZhY3RfcHJpbnRfZGVidWc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYWN0X3JlbGVhc2UiPmZhY3RfcmVsZWFzZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmludF9kZWJ1ZyI+cHJpbnRfZGVidWc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBmYWN0b3J5IGRlYnVnPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9SZXN1bHRTZXF1ZW5jZUZhY3RvcnkiPlJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlc3VsdFNlcXVlbmNlRmFjdG9yeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNyZWF0ZV9uZXc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNyZWF0ZV9uZXc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aXRlbTwvY29kZT4gLSBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIGZhY3RvcnkgY3JlYXRpbmcgbmV3IGl0ZW08L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9jcmVhdGVfbmV3Ij5mYWN0X2NyZWF0ZV9uZXc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZmFjdF9jcmVhdGVfbmV3PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYWN0X2NyZWF0ZV9uZXciPmZhY3RfY3JlYXRlX25ldzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5mYWN0X2NyZWF0ZV9uZXc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aXRlbTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9wcmludF9kZWJ1ZyI+ZmFjdF9wcmludF9kZWJ1ZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZmFjdF9wcmludF9kZWJ1Zzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9yZWxlYXNlIj5mYWN0X3JlbGVhc2U8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmZhY3RfcmVsZWFzZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmludF9kZWJ1ZyI+cHJpbnRfZGVidWc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnByaW50X2RlYnVnPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPmZhY3RvcnkgZGVidWc8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPiAtIGlzIHRoZSByZXN1bHQgc2VxdWVuY2UgZmFjdG9yeSByZWxlYXNlIHJzPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NoZWNrZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NoZWNrZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExNjQ0Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDaGVja2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNDaGVja2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RhdGljQ2hlY2tlcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5JbnRlcmZhY2UgdG8gc3RhdGljIGNoZWNrZXIuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NoZWNrIj5jaGVjazwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUgcm9vdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBjaGVja3MgWFBhdGhOb2RlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jaGVjayI+Y2hlY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNoZWNrPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIHJvb3QpPC9jb2RlPjwvcD48cD5jaGVja3MgWFBhdGhOb2RlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yb290PC9jb2RlPiAtIGlzIGFuIFhQYXRoIG5vZGUuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3I8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYxYWE3NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RhdGljQ29udGV4dDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0YXRpY0NvbnRleHQ8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+aW50ZXJmYWNlIHRvIHN0YXRpYyBjb250ZXh0PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZF9mdW5jdGlvbl9saWJyYXJ5Ij5hZGRfZnVuY3Rpb25fbGlicmFyeTwvYT4oRnVuY3Rpb25MaWJyYXJ5IGZsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGFkZCBmdW5jdGlvbiB0byBsaWJyYXJ5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkX25hbWVzcGFjZSI+YWRkX25hbWVzcGFjZTwvYT4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgYWRkIG5hbWVzcGFjZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZF92YXJpYWJsZSI+YWRkX3ZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBhZGQgdmFyaWFibGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hdHRyaWJ1dGVfZGVjbGFyZWQiPmF0dHJpYnV0ZV9kZWNsYXJlZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGF0dHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSBkZWNsYXJlZD88L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uIj5hdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgYXR0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Jhc2VfdXJpIj5iYXNlX3VyaTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGJhc2UgdXJpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2UiPmRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVmYXVsdF9uYW1lc3BhY2UiPmRlZmF1bHRfbmFtZXNwYWNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVsX3ZhcmlhYmxlIj5kZWxfdmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGRlbGV0ZSB0aGUgdmFyaWFibGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZXJpdmVzX2Zyb20iPmRlcml2ZXNfZnJvbTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVyaXZlc19mcm9tIj5kZXJpdmVzX2Zyb208L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBhdAotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiBldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZXN0cm95X3Njb3BlIj5kZXN0cm95X3Njb3BlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZGVzdHJveSBzY29wZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VsZW1lbnRfZGVjbGFyZWQiPmVsZW1lbnRfZGVjbGFyZWQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBlbGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGlzIHRoZSBlbGVtZW50IGRlY2xhcmVkPzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VsZW1lbnRfdHlwZV9kZWZpbml0aW9uIj5lbGVtZW50X3R5cGVfZGVmaW5pdGlvbjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGVsZW0pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSI+ZXhwYW5kX2VsZW1fdHlwZV9xbmFtZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZXhwYW5kIGVsZW1lbnQgdHlwZSBxbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cGFuZF9mdW5jdGlvbl9xbmFtZSI+ZXhwYW5kX2Z1bmN0aW9uX3FuYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBleHBhbmQgZnVuY3Rpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHBhbmRfcW5hbWUiPmV4cGFuZF9xbmFtZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZXhwYW5kIHFuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZnVuY3Rpb25fZXhpc3RzIj5mdW5jdGlvbl9leGlzdHM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBpbnQgYXJpdHkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgaXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0X2NvbGxlY3Rpb25zIj5nZXRfY29sbGVjdGlvbnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWFrZV9hdG9taWMiPm1ha2VfYXRvbWljPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdfc2NvcGUiPm5ld19zY29wZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIG5ldyBzY29wZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZWZpeF9leGlzdHMiPnByZWZpeF9leGlzdHM8L2E+KGphdmEubGFuZy5TdHJpbmcgcHJlZml4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgZG9lcyB0aGUgcHJlZml4IGV4aXN0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZV9wcmVmaXgiPnJlc29sdmVfcHJlZml4PC9hPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfYmFzZV91cmkiPnNldF9iYXNlX3VyaTwvYT4oamF2YS5sYW5nLlN0cmluZyBiYXNldXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldHMgdGhlIGJhc2UgdXJpIGZvciB0aGUgY29udGV4dC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfY29sbGVjdGlvbnMiPnNldF9jb2xsZWN0aW9uczwvYT4oamF2YS51dGlsLk1hcCBjb2xsZWN0aW9ucyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX2RlZmluZWQiPnR5cGVfZGVmaW5lZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFyaWFibGVfZXhpc3RzIj52YXJpYWJsZV9leGlzdHM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhcmlhYmxlX2luX3Njb3BlIj52YXJpYWJsZV9pbl9zY29wZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF94cGF0aDFfY29tcGF0aWJsZSI+eHBhdGgxX2NvbXBhdGlibGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBpcyBpdCB4cGF0aCAxLjAgY29tcGF0aWJsZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF9mdW5jdGlvbl9saWJyYXJ5Ij5hZGRfZnVuY3Rpb25fbGlicmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkX2Z1bmN0aW9uX2xpYnJhcnk8L3N0cm9uZz4oRnVuY3Rpb25MaWJyYXJ5IGZsKTwvY29kZT48L3A+PHA+YWRkIGZ1bmN0aW9uIHRvIGxpYnJhcnk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZsPC9jb2RlPiAtIGlzIHRoZSBmdW5jdGlvbiBsaWJyYXJ5PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF9uYW1lc3BhY2UiPmFkZF9uYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZF9uYW1lc3BhY2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbnMpPC9jb2RlPjwvcD48cD5hZGQgbmFtZXNwYWNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVmaXg8L2NvZGU+IC0gdGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlPC9wPjxwPjxjb2RlPm5zPC9jb2RlPiAtIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZF92YXJpYWJsZSI+YWRkX3ZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRfdmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD5hZGQgdmFyaWFibGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIHFuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F0dHJpYnV0ZV9kZWNsYXJlZCI+YXR0cmlidXRlX2RlY2xhcmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5hdHRyaWJ1dGVfZGVjbGFyZWQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGF0dHIpPC9jb2RlPjwvcD48cD5pcyB0aGUgYXR0cmlidXRlIGRlY2xhcmVkPzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0cjwvY29kZT4gLSBpcyB0aGUgYXR0cmlidXRlIG9mIHRoZSBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24iPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiA8c3Ryb25nPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGF0dHIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0dHI8L2NvZGU+IC0gaXMgdGhlIHFuYW1lIHZhcmlhYmxlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uPC9jb2RlPiAtIGF0dHJpYnV0ZXMncyB0eXBlIGRlZmluaXRpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYmFzZV91cmkiPmJhc2VfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSSA8c3Ryb25nPmJhc2VfdXJpPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPmJhc2UgdXJpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk8L2NvZGU+IC0gdXJpPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlIj5kZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+ZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+dGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHN0cmluZzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWZhdWx0X25hbWVzcGFjZSI+ZGVmYXVsdF9uYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmRlZmF1bHRfbmFtZXNwYWNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnRoZSBkZWZhdWx0IG5hbWVzcGFjZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBzdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGVsX3ZhcmlhYmxlIj5kZWxfdmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmRlbF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPmRlbGV0ZSB0aGUgdmFyaWFibGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIHFuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW4gaWYgZGVsZXRlZCB2YXJpYWJsZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZXJpdmVzX2Zyb20iPmRlcml2ZXNfZnJvbTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZGVyaXZlc19mcm9tPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBhdAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdDwvY29kZT4gLSB0aGUgbm9kZSB0eXBlPC9wPjxwPjxjb2RlPmV0PC9jb2RlPiAtIGlzIHRoZSBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Rlcml2ZXNfZnJvbSI+ZGVyaXZlc19mcm9tPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5kZXJpdmVzX2Zyb208L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uIGV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdDwvY29kZT4gLSB0aGUgbm9kZSB0eXBlPC9wPjxwPjxjb2RlPmV0PC9jb2RlPiAtIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGVzdHJveV9zY29wZSI+ZGVzdHJveV9zY29wZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGVzdHJveV9zY29wZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5kZXN0cm95IHNjb3BlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VsZW1lbnRfZGVjbGFyZWQiPmVsZW1lbnRfZGVjbGFyZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVsZW1lbnRfZGVjbGFyZWQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGVsZW0pPC9jb2RlPjwvcD48cD5pcyB0aGUgZWxlbWVudCBkZWNsYXJlZD88L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW08L2NvZGU+IC0gaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZWxlbWVudF90eXBlX2RlZmluaXRpb24iPmVsZW1lbnRfdHlwZV9kZWZpbml0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb24gPHN0cm9uZz5lbGVtZW50X3R5cGVfZGVmaW5pdGlvbjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZWxlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbTwvY29kZT4gLSBpcyB0aGUgZWxlbSBvZiB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb248L2NvZGU+IC0gZWxlbWVudCdzIHR5cGUgZGVmaW5pdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHBhbmRfZWxlbV90eXBlX3FuYW1lIj5leHBhbmRfZWxlbV90eXBlX3FuYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5leHBhbmRfZWxlbV90eXBlX3FuYW1lPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48L3A+PHA+ZXhwYW5kIGVsZW1lbnQgdHlwZSBxbmFtZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kX2Z1bmN0aW9uX3FuYW1lIj5leHBhbmRfZnVuY3Rpb25fcW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZF9mdW5jdGlvbl9xbmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPmV4cGFuZCBmdW5jdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kX3FuYW1lIj5leHBhbmRfcW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZF9xbmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPmV4cGFuZCBxbmFtZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBpcyB0aGUgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZnVuY3Rpb25fZXhpc3RzIj5mdW5jdGlvbl9leGlzdHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmZ1bmN0aW9uX2V4aXN0czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgaW50IGFyaXR5KTwvY29kZT48L3A+PHA+aXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIGlzIHRoZSBxbmFtZSBuYW1lPC9wPjxwPjxjb2RlPmFyaXR5PC9jb2RlPiAtIGludGVnZXIgb2YgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfY29sbGVjdGlvbnMiPmdldF9jb2xsZWN0aW9uczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwIDxzdHJvbmc+Z2V0X2NvbGxlY3Rpb25zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLk1hcDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWFrZV9hdG9taWMiPm1ha2VfYXRvbWljPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIDxzdHJvbmc+bWFrZV9hdG9taWM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIHFuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTwvY29kZT4gLSBhbnkgYXRvbWljIHR5cGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3X3Njb3BlIj5uZXdfc2NvcGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPm5ld19zY29wZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5uZXcgc2NvcGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJlZml4X2V4aXN0cyI+cHJlZml4X2V4aXN0czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cHJlZml4X2V4aXN0czwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PC9wPjxwPm5hbWVzcGFjZXMgZG9lcyB0aGUgcHJlZml4IGV4aXN0PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVmaXg8L2NvZGU+IC0gaXMgdGhlIHByZWZpeDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmVfcHJlZml4Ij5yZXNvbHZlX3ByZWZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cmVzb2x2ZV9wcmVmaXg8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByZWZpeDwvY29kZT4gLSBpcyB0aGUgcHJlZml4PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHN0cmluZzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfYmFzZV91cmkiPnNldF9iYXNlX3VyaTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X2Jhc2VfdXJpPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgYmFzZXVyaSk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIGJhc2UgdXJpIGZvciB0aGUgY29udGV4dC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmJhc2V1cmk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9jb2xsZWN0aW9ucyI+c2V0X2NvbGxlY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfY29sbGVjdGlvbnM8L3N0cm9uZz4oamF2YS51dGlsLk1hcCBjb2xsZWN0aW9ucyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29sbGVjdGlvbnM8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfZGVmaW5lZCI+dHlwZV9kZWZpbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz50eXBlX2RlZmluZWQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gYm9vbGVhbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YXJpYWJsZV9leGlzdHMiPnZhcmlhYmxlX2V4aXN0czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dmFyaWFibGVfZXhpc3RzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIGlzIHRoZSBxbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuIGlmIHZhcmlhYmxlIGV4aXN0czwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YXJpYWJsZV9pbl9zY29wZSI+dmFyaWFibGVfaW5fc2NvcGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnZhcmlhYmxlX2luX3Njb3BlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSBpcyB0aGUgdmFyaWFibGUgb2YgcW5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3hwYXRoMV9jb21wYXRpYmxlIj54cGF0aDFfY29tcGF0aWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+eHBhdGgxX2NvbXBhdGlibGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+aXMgaXQgeHBhdGggMS4wIGNvbXBhdGlibGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYTRmMjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNFcnJvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0YXRpY0Vycm9yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbjwvcHJlPkJhc2UgY2xhc3MgZm9yIGFsbCBzdGF0aWMgZXJyb3JzIGFzIGRlZmluZWQgYnkgdGhlIFhQYXRoIDIuMCBzcGVjaWZpY2F0aW9uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0YXRpY0Vycm9yIj5TdGF0aWNFcnJvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvZGUiPmNvZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdGF0aWNFcnJvciI+U3RhdGljRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNFcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIGEgZ2VuZXJpYyBzdGF0aWMgZXJyb3I8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb2RlIj5jb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5jb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBlcnJvciBjb2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGVycm9yPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGM4ZWY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvcjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlN0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5FcnJvcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvciI+U3RhdGljTmFtZVJlc29sdmVyLkR1bW15RXJyb3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yIj5TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlN0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2I0NTMwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNOYW1lUmVzb2x2ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdGF0aWNOYW1lUmVzb2x2ZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoaXMgY2xhc3MgcmVzb2x2ZXMgc3RhdGljIG5hbWVzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGF0aWNOYW1lUmVzb2x2ZXIiPlN0YXRpY05hbWVSZXNvbHZlcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQgc2MpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvciI+U3RhdGljTmFtZVJlc29sdmVyLkR1bW15RXJyb3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NoZWNrIj5jaGVjazwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB0aGUgWFBhdGggbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmludEJpbkV4cHIiPnByaW50QmluRXhwcjwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGJpbmFyeSBleHByZXNzaW9uIGJ5IGNoZWNraW5nIGl0cyBsZWZ0IGFuZCByaWdodCBjaGlsZHJlbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmludFVuRXhwciI+cHJpbnRVbkV4cHI8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHVuYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIG9uZSBjaGlsZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggeHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gWFBhdGggYnkgdmlzaXRpbmcgYWxsIHRoZSBub2Rlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwciBmZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBmb3IgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIgcWV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgcXVhbnRpZmllZCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBpZiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHIgb3JleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBPUiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByIGFuZGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIEFORCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIGNtcGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIgcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgcmFuZ2UgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciBhZGRleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBhZGRpdG9uIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN1YkV4cHIgc3ViZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBzdWJ0cmFjdGlvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgbXVsdGlwbGljYXRpb24gZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGl2RXhwciBtdWxleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGRpdmlzaW9uIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGludGVnZXIgZGl2aXNvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgbW9kIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciB1bmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgdW5pb24gZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHIgcGlwZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBwaXBlZCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByIGlleHByKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGludGVyc2VjdGlvbiBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByIGVleHByKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGV4Y2VwdCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByIGlvZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuICdpbnN0YW5jZSBvZicgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIgdGFleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSAndHJlYXQgYXMnIGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RhYmxlRXhwciBjZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgY2FzdGFibGUgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGNhc3QgZXhwcmVzc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBtaW51cyBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgcGx1cyBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiB4cGF0aCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgZm9yd2FyZCBzdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgcmV2ZXJzZSBzdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgbmFtZSB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHZhcmlhYmxlIHJlZmVyZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgc3RyaW5nIGxpdGVyYWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVnZXJMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gaW50ZWdlciBsaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBkb3VibGUgbGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGRlY2ltYWwgbGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GdW5jdGlvbkNhbGwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGZ1bmN0aW9uIGNhbGwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNpbmdsZVR5cGUgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHNpbmdsZSB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHNlcXVlbmNlIHR5cGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkl0ZW1UeXBlIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYW4gaXRlbSB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGFueSBraW5kIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvY3VtZW50VGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgZG9jdW1lbnQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVGV4dFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHRleHQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIGNvbW1lbnQgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW5nIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBhdHRyaWJ1dGUgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmFsaWRhdGUgYSBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGFuIGF4aXMgc3RlcC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRmlsdGVyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIGEgZmlsdGVyIGV4cHJlc3Npb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RhdGljTmFtZVJlc29sdmVyIj5TdGF0aWNOYW1lUmVzb2x2ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNOYW1lUmVzb2x2ZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQgc2MpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgcmVzb2x2ZXI8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jaGVjayI+Y2hlY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNoZWNrPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG5vZGUpPC9jb2RlPjwvcD48cD5DaGVjayB0aGUgWFBhdGggbm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIFhQYXRoIG5vZGUgdG8gY2hlY2suPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IgLSBzdGF0aWMgZXJyb3IuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmludEJpbkV4cHIiPnByaW50QmluRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cHJpbnRCaW5FeHByPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGJpbmFyeSBleHByZXNzaW9uIGJ5IGNoZWNraW5nIGl0cyBsZWZ0IGFuZCByaWdodCBjaGlsZHJlbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBleHByZXNzaW9uLjwvcD48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbnRVbkV4cHIiPnByaW50VW5FeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wcmludFVuRXhwcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5FeHByIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHVuYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIG9uZSBjaGlsZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIG5hbWUgb2YgdGhlIGV4cHJlc3Npb24uPC9wPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggeHApPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBYUGF0aCBieSB2aXNpdGluZyBhbGwgdGhlIG5vZGVzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHA8L2NvZGU+IC0gaXMgdGhlIFhQYXRoLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwciBmZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGZvciBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmV4PC9jb2RlPiAtIGlzIHRoZSBmb3IgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByIHFleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgcXVhbnRpZmllZCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cWV4PC9jb2RlPiAtIGlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIGlmIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZmV4PC9jb2RlPiAtIGlzIHRoZSBpZiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIG9yZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBPUiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b3JleDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFuZEV4cHIgYW5kZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBBTkQgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFuZGV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ21wRXhwciBjbXBleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y21wZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIgcmV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSByYW5nZSBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciBhZGRleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIGFkZGl0b24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFkZGV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwciBzdWJleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc3VidHJhY3Rpb24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN1YmV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTXVsRXhwciBtdWxleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgbXVsdGlwbGljYXRpb24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGl2RXhwciBtdWxleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgZGl2aXNpb24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBpbnRlZ2VyIGRpdmlzb24gZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTW9kRXhwciBtdWxleCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgbW9kIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciB1bmV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSB1bmlvbiBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dW5leDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByIHBpcGV4KTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBwaXBlZCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGlwZXg8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByIGlleHByKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gaW50ZXJzZWN0aW9uIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZXhwcjwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBleGNlcHQgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVleHByPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwciBpb2V4cCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuICdpbnN0YW5jZSBvZicgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlvZXhwPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIgdGFleHApPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhICd0cmVhdCBhcycgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRhZXhwPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByIGNleHApPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGNhc3RhYmxlIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jZXhwPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIgY2V4cCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY2FzdCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2V4cDwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwciBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBtaW51cyBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHBsdXMgZXhwcmVzc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIHhwYXRoIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yd2FyZFN0ZXAgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgZm9yd2FyZCBzdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJldmVyc2VTdGVwIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHJldmVyc2Ugc3RlcC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBuYW1lIHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyUmVmIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHZhcmlhYmxlIHJlZmVyZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdHJpbmdMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHN0cmluZyBsaXRlcmFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVnZXJMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBpbnRlZ2VyIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBkb3VibGUgbGl0ZXJhbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBkZWNpbWFsIGxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwciBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZ1bmN0aW9uQ2FsbCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBmdW5jdGlvbiBjYWxsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNpbmdsZVR5cGUgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc2luZ2xlIHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhIHNlcXVlbmNlIHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGFuIGl0ZW0gdHlwZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gYW55IGtpbmQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgZG9jdW1lbnQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSB0ZXh0IHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgY29tbWVudCB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW5nIHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0cmlidXRlVGVzdCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gYXR0cmlidXRlIHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0IGUpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hRWxlbVRlc3QgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgc2NoZW1hIGVsZW1lbnQgdGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG51bGwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCBlKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgYW4gYXhpcyBzdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHIgZSk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIGEgZmlsdGVyIGV4cHJlc3Npb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBudWxsLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyZWU3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhFeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aEV4Y2VwdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9wcmU+VGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYW4gWFBhdGggZXhjZXB0aW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aEV4Y2VwdGlvbiI+WFBhdGhFeGNlcHRpb248L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVhc29uIj5yZWFzb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aEV4Y2VwdGlvbiI+WFBhdGhFeGNlcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aEV4Y2VwdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBYUGF0aEV4Y2VwdGlvbjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3JlYXNvbiI+cmVhc29uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5yZWFzb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3cuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTFkZjc0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aFBhcnNlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoUGFyc2VyPC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPlRoaXMgaXMgYW4gaW50ZXJmYWNlIGNsYXNzIGZvciB0aGUgWFBhdGggcGFyc2VyLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZSI+cGFyc2U8L2E+KGphdmEubGFuZy5TdHJpbmcgeHBhdGgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgZm9yIHRoZSBYUGF0aCBwYXJzZXIgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2UiPnBhcnNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggPHN0cm9uZz5wYXJzZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHhwYXRoKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHRoZSBYUGF0aCBwYXJzZXIgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHBhdGg8L2NvZGU+IC0gaXMgdGhlIGlucHV0IFhQYXRoIHRvIGJlIHBhcnNlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg8L2NvZGU+IC0gVGhlIHBhcnNlZCBYUGF0aC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbiAtIFhQYXRoIHBhcnNlciBleGNlcHRpb24uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNThiNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhQYXJzZXJFeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aFBhcnNlckV4Y2VwdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3I8L3ByZT5UaGlzIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIFhQYXRoIHBhcnNlci48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU5WQUxJRF9YUEFUSF9FWFBSRVNTSU9OIj5JTlZBTElEX1hQQVRIX0VYUFJFU1NJT048L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIHR5cGUgb2YgZXhjZXB0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aFBhcnNlckV4Y2VwdGlvbiI+WFBhdGhQYXJzZXJFeGNlcHRpb248L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9JTlZBTElEX1hQQVRIX0VYUFJFU1NJT04iPklOVkFMSURfWFBBVEhfRVhQUkVTU0lPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTlZBTElEX1hQQVRIX0VYUFJFU1NJT048L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSB0eXBlIG9mIGV4Y2VwdGlvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aFBhcnNlckV4Y2VwdGlvbiI+WFBhdGhQYXJzZXJFeGNlcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aFBhcnNlckV4Y2VwdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBYUGF0aFBhcnNlckV4Y2VwdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWGVyY2VzTG9hZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YZXJjZXNMb2FkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTliN2ZhMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YZXJjZXNMb2FkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYZXJjZXNMb2FkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YZXJjZXNMb2FkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlhlcmNlcyBsb2FkZXIgY2xhc3MuIFRoZSBsb2FkaW5nIGlzIGFsd2F5cyBuYW1lc3BhY2UgYXdhcmUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmF4LnhtbC52YWxpZGF0aW9uLlNjaGVtYTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX19zY2hlbWEiPl9zY2hlbWE8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fdmFsaWRhdGluZyI+X3ZhbGlkYXRpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RPQ1VNRU5UX0lNUExFTUVOVEFUSU9OX1BST1BFUlRZIj5ET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9DVU1FTlRfUFNWSV9JTVBMRU1FTlRBVElPTiI+RE9DVU1FTlRfUFNWSV9JTVBMRU1FTlRBVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRFlOQU1JQ19WQUxJREFUSU9OX0ZFQVRVUkUiPkRZTkFNSUNfVkFMSURBVElPTl9GRUFUVVJFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9KQVhQX1NDSEVNQV9MQU5HVUFHRSI+SkFYUF9TQ0hFTUFfTEFOR1VBR0U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0xPQURfRVhURVJOQUxfRFREX0ZFQVRVUkUiPkxPQURfRVhURVJOQUxfRFREX0ZFQVRVUkU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05BTUVTUEFDRVNfRkVBVFVSRSI+TkFNRVNQQUNFU19GRUFUVVJFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFIj5TQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFIj5TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9WQUxJREFUSU9OX0ZFQVRVUkUiPlZBTElEQVRJT05fRkVBVFVSRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVzNDX1hNTF9TQ0hFTUEiPlczQ19YTUxfU0NIRU1BPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YZXJjZXNMb2FkZXIiPlhlcmNlc0xvYWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGVyY2VzTG9hZGVyIj5YZXJjZXNMb2FkZXI8L2E+PC9zdHJvbmc+KGphdmF4LnhtbC52YWxpZGF0aW9uLlNjaGVtYSBzY2hlbWEpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9hZCI+bG9hZDwvYT4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgWGVyY2VzIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3ZhbGlkYXRpbmciPnNldF92YWxpZGF0aW5nPC9hPihib29sZWFuIHgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHZhbGlkYXRpbmcgYm9vbGVhbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX19zY2hlbWEiPl9zY2hlbWE8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YXgueG1sLnZhbGlkYXRpb24uU2NoZW1hIDxzdHJvbmc+X3NjaGVtYTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9fdmFsaWRhdGluZyI+X3ZhbGlkYXRpbmc8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbiA8c3Ryb25nPl92YWxpZGF0aW5nPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RPQ1VNRU5UX0lNUExFTUVOVEFUSU9OX1BST1BFUlRZIj5ET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5ET0NVTUVOVF9JTVBMRU1FTlRBVElPTl9QUk9QRVJUWTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ET0NVTUVOVF9QU1ZJX0lNUExFTUVOVEFUSU9OIj5ET0NVTUVOVF9QU1ZJX0lNUExFTUVOVEFUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkRPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT048L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRFlOQU1JQ19WQUxJREFUSU9OX0ZFQVRVUkUiPkRZTkFNSUNfVkFMSURBVElPTl9GRUFUVVJFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkRZTkFNSUNfVkFMSURBVElPTl9GRUFUVVJFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0pBWFBfU0NIRU1BX0xBTkdVQUdFIj5KQVhQX1NDSEVNQV9MQU5HVUFHRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5KQVhQX1NDSEVNQV9MQU5HVUFHRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9MT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFIj5MT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkxPQURfRVhURVJOQUxfRFREX0ZFQVRVUkU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTkFNRVNQQUNFU19GRUFUVVJFIj5OQU1FU1BBQ0VTX0ZFQVRVUkU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TkFNRVNQQUNFU19GRUFUVVJFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NDSEVNQV9GVUxMX0NIRUNLSU5HX0ZFQVRVUkUiPlNDSEVNQV9GVUxMX0NIRUNLSU5HX0ZFQVRVUkU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+U0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFIj5TQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVkFMSURBVElPTl9GRUFUVVJFIj5WQUxJREFUSU9OX0ZFQVRVUkU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VkFMSURBVElPTl9GRUFUVVJFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1czQ19YTUxfU0NIRU1BIj5XM0NfWE1MX1NDSEVNQTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5XM0NfWE1MX1NDSEVNQTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGVyY2VzTG9hZGVyIj5YZXJjZXNMb2FkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YZXJjZXNMb2FkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIFhlcmNlcyBsb2FkZXIuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hlcmNlc0xvYWRlciI+WGVyY2VzTG9hZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGVyY2VzTG9hZGVyPC9zdHJvbmc+KGphdmF4LnhtbC52YWxpZGF0aW9uLlNjaGVtYSBzY2hlbWEpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2FkIj5sb2FkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50IDxzdHJvbmc+bG9hZDwvc3Ryb25nPihqYXZhLmlvLklucHV0U3RyZWFtIGluKTwvY29kZT48L3A+PHA+VGhlIFhlcmNlcyBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1bWVudDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW48L2NvZGU+IC0gaXMgdGhlIGlucHV0IHN0cmVhbS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPiAtIFRoZSBsb2FkZWQgZG9jdW1lbnQuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIC0gRE9NIGxvYWRlciBleGNlcHRpb24uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfdmFsaWRhdGluZyI+c2V0X3ZhbGlkYXRpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF92YWxpZGF0aW5nPC9zdHJvbmc+KGJvb2xlYW4geCk8L2NvZGU+PC9wPjxwPlNldCB2YWxpZGF0aW5nIGJvb2xlYW4uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIGlzIHRoZSB2YWx1ZSB0byBzZXQgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbiB0by48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVkODE1ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGg8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU8L3ByZT5TdXBwb3J0IGZvciBYUGF0aC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGgiPlhQYXRoPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ29sbGVjdGlvbiBleHBycyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoIj5YUGF0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoPC9zdHJvbmc+KGphdmEudXRpbC5Db2xsZWN0aW9uIGV4cHJzKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIFhQYXRoLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIDxzdHJvbmc+aXRlcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPiAtIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLkZuRnVuY3Rpb25MaWJyYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDE5MjJjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLkZuRnVuY3Rpb25MaWJyYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBGbkZ1bmN0aW9uTGlicmFyeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkZuRnVuY3Rpb25MaWJyYXJ5PC9zdHJvbmc+Ci1leHRlbmRzIEZ1bmN0aW9uTGlicmFyeTwvcHJlPk1haW50YWlucyBhIGxpYnJhcnkgb2YgY29yZSBmdW5jdGlvbnMgYW5kIHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIX0ZVTkNUSU9OU19OUyI+WFBBVEhfRlVOQ1RJT05TX05TPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8geHBhdGggZnVuY3Rpb25zIHNwZWNpZmljYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0ZuRnVuY3Rpb25MaWJyYXJ5Ij5GbkZ1bmN0aW9uTGlicmFyeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9GVU5DVElPTlNfTlMiPlhQQVRIX0ZVTkNUSU9OU19OUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF9GVU5DVElPTlNfTlM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhdGggdG8geHBhdGggZnVuY3Rpb25zIHNwZWNpZmljYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRm5GdW5jdGlvbkxpYnJhcnkiPkZuRnVuY3Rpb25MaWJyYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Rm5GdW5jdGlvbkxpYnJhcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEZuRnVuY3Rpb25MaWJyYXJ5LjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLlhTQ3RyTGlicmFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGM3ODU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLlhTQ3RyTGlicmFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb248L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNDdHJMaWJyYXJ5PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNDdHJMaWJyYXJ5PC9zdHJvbmc+Ci1leHRlbmRzIENvbnN0cnVjdG9yRkw8L3ByZT5YTUwgU2NoZW1hIGNvbnRyb2wgbGlicmFyeSBzdXBwb3J0Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YTUxfU0NIRU1BX05TIj5YTUxfU0NIRU1BX05TPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdzMub3JnIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNDdHJMaWJyYXJ5Ij5YU0N0ckxpYnJhcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfWE1MX1NDSEVNQV9OUyI+WE1MX1NDSEVNQV9OUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YTUxfU0NIRU1BX05TPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNDdHJMaWJyYXJ5Ij5YU0N0ckxpYnJhcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0N0ckxpYnJhcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIFhTQ3RyTGlicmFyeS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQW5jZXN0b3JBeGlzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BbmNlc3RvckF4aXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAwMjcxYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BbmNlc3RvckF4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBbmNlc3RvckF4aXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BbmNlc3RvckF4aXM8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlBhcmVudEF4aXM8L3ByZT5SZXR1cm5zIHRoZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZSwgdGhpcyBhbHdheXMgaW5jbHVkZXMgdGhlIHJvb3QKLSBub2RlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BbmNlc3RvckF4aXMiPkFuY2VzdG9yQXhpczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRlIj5pdGVyYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQW5jZXN0b3JBeGlzIj5BbmNlc3RvckF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BbmNlc3RvckF4aXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pdGVyYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGFuY2VzdG9ycyBvZiB0aGUgY29udGV4dCBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBpcyB0aGUgdHlwZSBvZiBub2RlLjwvcD48cD48Y29kZT5kYzwvY29kZT4gLSBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIFRoZSBub2RlcyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQW5jZXN0b3JPclNlbGZBeGlzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BbmNlc3Rvck9yU2VsZkF4aXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkxNWYzMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BbmNlc3Rvck9yU2VsZkF4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBbmNlc3Rvck9yU2VsZkF4aXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BbmNlc3Rvck9yU2VsZkF4aXM8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJldmVyc2VBeGlzPC9wcmU+VGhlIGFuY2VzdG9yLW9yLXNlbGYgYXhpcyBjb250YWlucyB0aGUgY29udGV4dCBub2RlIGFuZCB0aGUgYW5jZXN0b3JzIG9mIHRoZQotIGNvbnRleHQgbm9kZSwgdGhpcyBhbHdheXMgaW5jbHVkZXMgdGhlIHJvb3Qgbm9kZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQW5jZXN0b3JPclNlbGZBeGlzIj5BbmNlc3Rvck9yU2VsZkF4aXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgYW5jZXN0b3Igbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGNvbnRleHQgbm9kZSBpdHNlbGYuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQW5jZXN0b3JPclNlbGZBeGlzIj5BbmNlc3Rvck9yU2VsZkF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BbmNlc3Rvck9yU2VsZkF4aXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pdGVyYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjwvcD48cD5HZXQgYW5jZXN0b3Igbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGNvbnRleHQgbm9kZSBpdHNlbGYuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9wPjxwPjxjb2RlPmRjPC9jb2RlPiAtIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gVGhlIGNvbnRleHQgbm9kZSBhbmQgaXRzIGFuY2VzdG9ycy48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQXR0cmlidXRlQXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQXR0cmlidXRlQXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzU3OTZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF0dHJpYnV0ZUF4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBdHRyaWJ1dGVBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QXR0cmlidXRlQXhpczwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXM8L3ByZT5UaGUgYXR0cmlidXRlIGF4aXMgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGNvbnRleHQgbm9kZS4gVGhlIGF4aXMgd2lsbAotIGJlIGVtcHR5IHVubGVzcyB0aGUgY29udGV4dCBub2RlIGlzIGFuIGVsZW1lbnQuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F0dHJpYnV0ZUF4aXMiPkF0dHJpYnV0ZUF4aXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgbm9kZSdzIGF0dHJpYnV0ZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmluY2lwYWxfbm9kZV9raW5kIj5wcmluY2lwYWxfbm9kZV9raW5kPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBub2RlJ3MgcHJpbmNpcGxlIG5vZGUga2luZC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BdHRyaWJ1dGVBeGlzIj5BdHRyaWJ1dGVBeGlzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QXR0cmlidXRlQXhpczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRlIj5pdGVyYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPml0ZXJhdGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJ3MgYXR0cmlidXRlcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIHR5cGUgb2Ygbm9kZS48L3A+PHA+PGNvZGU+ZGM8L2NvZGU+IC0gaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBUaGUgYXR0aWJ1dGVzIG9mIHRoZSBjb250ZXh0IG5vZGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByaW5jaXBhbF9ub2RlX2tpbmQiPnByaW5jaXBhbF9ub2RlX2tpbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIDxzdHJvbmc+cHJpbmNpcGFsX25vZGVfa2luZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5vZGUncyBwcmluY2lwbGUgbm9kZSBraW5kLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9jb2RlPiAtIFRoZSB0eXBlIG9mIG5vZGUuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF4aXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF4aXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFjYTFhNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BeGlzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQXhpczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkF4aXM8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+VGhpcyBpcyB0aGUgaW50ZXJmYWNlIGNsYXNzIGZvciBhbiBBeGlzLgotIAotIEFuIGF4aXMgZGVmaW5lcyB0aGUgImRpcmVjdGlvbiBvZiBtb3ZlbWVudCIgZm9yIGEgc3RlcCBiZXR3ZWVuIGEgY29udGV4dCBub2RlCi0gYW5kIGFub3RoZXIgbm9kZSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGF4aXMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmluY2lwYWxfbm9kZV9raW5kIj5wcmluY2lwYWxfbm9kZV9raW5kPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBwcmluY2lwbGUga2luZCBvZiBub2RlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pdGVyYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjwvcD48cD5HZXQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9wPjxwPjxjb2RlPmRjPC9jb2RlPiAtIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gVGhlIHJlc3VsdCBzZXF1ZW5jZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbmNpcGFsX25vZGVfa2luZCI+cHJpbmNpcGFsX25vZGVfa2luZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgPHN0cm9uZz5wcmluY2lwYWxfbm9kZV9raW5kPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgcHJpbmNpcGxlIGtpbmQgb2Ygbm9kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvY29kZT4gLSBUaGUgcHJpbmNpcGxlIG5vZGUga2luZC48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ1VQJFhQYXRoQ3VwJGFjdGlvbnMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNVUCRYUGF0aEN1cCRhY3Rpb25zLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNGE5MjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ1VQJFhQYXRoQ3VwJGFjdGlvbnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDVVAkWFBhdGhDdXAkYWN0aW9uczwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPkNVUCRYUGF0aEN1cCRhY3Rpb25zPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5DdXAgZ2VuZXJhdGVkIGNsYXNzIHRvIGVuY2Fwc3VsYXRlIHVzZXIgc3VwcGxpZWQgYWN0aW9uIGNvZGUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NVUCRYUGF0aEN1cCRhY3Rpb25zIj5DVVAkWFBhdGhDdXAkYWN0aW9uczwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoQ3VwIHBhcnNlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9DVVAkWFBhdGhDdXAkZG9fYWN0aW9uIj5DVVAkWFBhdGhDdXAkZG9fYWN0aW9uPC9hPihpbnQgQ1VQJFhQYXRoQ3VwJGFjdF9udW0KLSAgICAgICAgICwKLSAgICAgIGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyIENVUCRYUGF0aEN1cCRwYXJzZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5TdGFjayBDVVAkWFBhdGhDdXAkc3RhY2sKLSAgICAgICAgICwKLSAgICAgIGludCBDVVAkWFBhdGhDdXAkdG9wKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgZ2VuZXJhdGVkIGFjdGlvbiBjb2RlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NVUCRYUGF0aEN1cCRhY3Rpb25zIj5DVVAkWFBhdGhDdXAkYWN0aW9uczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPkNVUCRYUGF0aEN1cCRhY3Rpb25zPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEN1cCBwYXJzZXIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX0NVUCRYUGF0aEN1cCRkb19hY3Rpb24iPkNVUCRYUGF0aEN1cCRkb19hY3Rpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YV9jdXAucnVudGltZS5TeW1ib2wgPHN0cm9uZz5DVVAkWFBhdGhDdXAkZG9fYWN0aW9uPC9zdHJvbmc+KGludCBDVVAkWFBhdGhDdXAkYWN0X251bQotICAgICAgICAgLAotICAgICAgamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIgQ1VQJFhQYXRoQ3VwJHBhcnNlcgotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLlN0YWNrIENVUCRYUGF0aEN1cCRzdGFjawotICAgICAgICAgLAotICAgICAgaW50IENVUCRYUGF0aEN1cCR0b3ApPC9jb2RlPjwvcD48cD5NZXRob2Qgd2l0aCB0aGUgYWN0dWFsIGdlbmVyYXRlZCBhY3Rpb24gY29kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPkNVUCRYUGF0aEN1cCRhY3RfbnVtPC9jb2RlPjwvcD48cD48Y29kZT5DVVAkWFBhdGhDdXAkcGFyc2VyPC9jb2RlPjwvcD48cD48Y29kZT5DVVAkWFBhdGhDdXAkc3RhY2s8L2NvZGU+PC9wPjxwPjxjb2RlPkNVUCRYUGF0aEN1cCR0b3A8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhX2N1cC5ydW50aW1lLlN5bWJvbDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNoaWxkQXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ2hpbGRBeGlzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZTFjOTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ2hpbGRBeGlzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ2hpbGRBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Q2hpbGRBeGlzPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpczwvcHJlPlRoZSBjaGlsZCBheGlzIGNvbnRhaW5zIHRoZSBjaGlsZHJlbiBvZiB0aGUgY29udGV4dCBub2RlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9DaGlsZEF4aXMiPkNoaWxkQXhpczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRlIj5pdGVyYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJ3MgY2hpbGRyZW4uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ2hpbGRBeGlzIj5DaGlsZEF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5DaGlsZEF4aXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pdGVyYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGNvbnRleHQgbm9kZSdzIGNoaWxkcmVuLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBpcyB0aGUgdHlwZSBvZiBub2RlLjwvcD48cD48Y29kZT5kYzwvY29kZT4gLSBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIFRoZSBjb250ZXh0IG5vZGUncyBjaGlsZHJlbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ3VwRXJyb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkN1cEVycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNTBkNjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ3VwRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEN1cEVycm9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Q3VwRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoRXJyb3I8L3ByZT5FcnJvciBjYXVzZWQgYnkgQ1VQIFBhcnNlci48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ3VwRXJyb3IiPkN1cEVycm9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0N1cEVycm9yIj5DdXBFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkN1cEVycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIENVUCBlcnJvci48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJTRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJTRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjliNTVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSU0ZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWZhdWx0UlNGYWN0b3J5PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGVmYXVsdFJTRmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5PC9wcmU+RmFjdG9yeSBpbXBsZW1lbnRhdGlvbiB3aGljaCBjcmVhdGVzIHNlcXVlbmNlcyBvZiB0eXBlIERlZmF1bHRSZXN1bHRTZXF1ZW5jZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QT09MX1NJWkUiPlBPT0xfU0laRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRGVmYXVsdFJTRmFjdG9yeSI+RGVmYXVsdFJTRmFjdG9yeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYWN0X2NyZWF0ZV9uZXciPmZhY3RfY3JlYXRlX25ldzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhY3RfcHJpbnRfZGVidWciPmZhY3RfcHJpbnRfZGVidWc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYWN0X3JlbGVhc2UiPmZhY3RfcmVsZWFzZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfUE9PTF9TSVpFIj5QT09MX1NJWkU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5QT09MX1NJWkU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RlZmF1bHRSU0ZhY3RvcnkiPkRlZmF1bHRSU0ZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5EZWZhdWx0UlNGYWN0b3J5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIG9mIGZhY3RvcnkuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZmFjdF9jcmVhdGVfbmV3Ij5mYWN0X2NyZWF0ZV9uZXc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZmFjdF9jcmVhdGVfbmV3PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYWN0X3ByaW50X2RlYnVnIj5mYWN0X3ByaW50X2RlYnVnPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5mYWN0X3ByaW50X2RlYnVnPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYWN0X3JlbGVhc2UiPmZhY3RfcmVsZWFzZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZmFjdF9yZWxlYXNlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cnM8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSZXN1bHRTZXF1ZW5jZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJlc3VsdFNlcXVlbmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NmFhMGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJlc3VsdFNlcXVlbmNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRGVmYXVsdFJlc3VsdFNlcXVlbmNlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGVmYXVsdFJlc3VsdFNlcXVlbmNlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvcHJlPkRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSByZXN1bHQgc2VxdWVuY2UuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlZmF1bHRSZXN1bHRTZXF1ZW5jZSI+RGVmYXVsdFJlc3VsdFNlcXVlbmNlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWZhdWx0UmVzdWx0U2VxdWVuY2UiPkRlZmF1bHRSZXN1bHRTZXF1ZW5jZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZCI+YWRkPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NsZWFyIj5jbGVhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENsZWFycyB0aGUgc2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uY2F0Ij5jb25jYXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZV9uZXciPmNyZWF0ZV9uZXc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGUgYSBuZXcgc2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW1wdHkiPmVtcHR5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgV2hldGhlciBvciBub3QgYXJyYXkgX3NlcSBpcyBlbXB0eTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9maXJzdCI+Zmlyc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Ij5nZXQ8L2E+KGludCBpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2l6ZSI+c2l6ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RlZmF1bHRSZXN1bHRTZXF1ZW5jZSI+RGVmYXVsdFJlc3VsdFNlcXVlbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVmYXVsdFJlc3VsdFNlcXVlbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yLgotIAotIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fRGVmYXVsdFJlc3VsdFNlcXVlbmNlIj5EZWZhdWx0UmVzdWx0U2VxdWVuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5EZWZhdWx0UmVzdWx0U2VxdWVuY2U8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZCI+YWRkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgaXRlbSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aXRlbTwvY29kZT4gLSBpcyBhZGRlZCB0byBhcnJheSBfc2VxPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NsZWFyIj5jbGVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2xlYXJzIHRoZSBzZXF1ZW5jZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uY2F0Ij5jb25jYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbmNhdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPiAtIFJlc3VsdFNlcXVlbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZV9uZXciPmNyZWF0ZV9uZXc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y3JlYXRlX25ldzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgc2VxdWVuY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gVGhlIG5ldyBzZXF1ZW5jZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZW1wdHkiPmVtcHR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lbXB0eTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5XaGV0aGVyIG9yIG5vdCBhcnJheSBfc2VxIGlzIGVtcHR5PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGEgYm9vbGVhbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9maXJzdCI+Zmlyc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5maXJzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIGZpcnN0IGl0ZW0gZnJvbSBhcnJheSBfc2VxPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldCI+Z2V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Z2V0PC9zdHJvbmc+KGludCBpKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pPC9jb2RlPiAtIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXJyYXkgaXRlbSB0aGF0IGlzIHdhbnRlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIGl0ZW0gaSBmcm9tIGFycmF5IF9zZXE8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0SXRlcmF0b3IgPHN0cm9uZz5pdGVyYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0SXRlcmF0b3I8L2NvZGU+IC0gdGhlIG5leHQgaXRlcmF0aW9uIG9mIGFycmF5IF9zZXE8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2l6ZSI+c2l6ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5zaXplPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIGludGVnZXIgb2YgdGhlIHNpemUgb2YgYXJyYXkgX3NlcTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZWZhdWx0U3RhdGljQ29udGV4dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFN0YXRpY0NvbnRleHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyNjA5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZWZhdWx0U3RhdGljQ29udGV4dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWZhdWx0U3RhdGljQ29udGV4dDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRlZmF1bHRTdGF0aWNDb250ZXh0PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5EZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEgc3RhdGljIGNvbnRleHQgYXMgZGVzY3JpYmVkIGJ5IHRoZSBYUGF0aCAyLjAKLSBzcGVjaWZpY2F0aW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWZhdWx0U3RhdGljQ29udGV4dCI+RGVmYXVsdFN0YXRpY0NvbnRleHQ8L2E+PC9zdHJvbmc+KG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWwgc2NoZW1hKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRGVmYXVsdFN0YXRpY0NvbnRleHQiPkRlZmF1bHRTdGF0aWNDb250ZXh0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRfZnVuY3Rpb25fbGlicmFyeSI+YWRkX2Z1bmN0aW9uX2xpYnJhcnk8L2E+KEZ1bmN0aW9uTGlicmFyeSBmbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGRzIGEgZnVuY3Rpb24gdG8gdGhlIGxpYnJhcnkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkX25hbWVzcGFjZSI+YWRkX25hbWVzcGFjZTwvYT4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbmFtZXNwYWNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGFkZHMgbmFtZXNwYWNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkX3ZhcmlhYmxlIj5hZGRfdmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkcyBhIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUuCi0gCi0gdXNlZCBmb3Igc3RhdGljIGNoZWNraW5nLi4uLiBpLmUuIHByZXNlbmNlIG9mIHZhcmlhYmxlczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2F0dHJpYnV0ZV9kZWNsYXJlZCI+YXR0cmlidXRlX2RlY2xhcmVkPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgYXR0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVja3MgaWYgYW4gYXR0cmlidXRlIGlzIGluIHRoZSBpbi1zY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXR0cmlidXRlX3R5cGVfZGVmaW5pdGlvbiI+YXR0cmlidXRlX3R5cGVfZGVmaW5pdGlvbjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGVsZW0pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgYXR0cmlidXRlIGluIGFuIGVsZW1lbnQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9iYXNlX3VyaSI+YmFzZV91cmk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZXR1cm4gdGhlIGJhc2UgVVJJPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVidWdfcHJpbnRfdmFycyI+ZGVidWdfcHJpbnRfdmFyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERlYnVnIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcHJpbnQgY3VycmVudCB2YXJpYWJsZSBzY29wZXMgYW5kIGluZm8uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2UiPmRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkZWZhdWwgZnVuY3Rpb24gbmFtZXNwYWNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVmYXVsdF9uYW1lc3BhY2UiPmRlZmF1bHRfbmFtZXNwYWNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgd2hlbiBvbmUgaXMgbm90IGFsbG9jYXRlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RlbF92YXJpYWJsZSI+ZGVsX3ZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERlbGV0ZXMgYSB2YXJpYWJsZSBmcm9tIGN1cnJlbnQgc2NvcGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVyaXZlc19mcm9tIj5kZXJpdmVzX2Zyb208L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBhdAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrcyBpZiBhbiBYTUwgbm9kZSBkZXJpdmVzIGZyb20gYSBzcGVjaWZpZWQgdHlwZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZXJpdmVzX2Zyb20iPmRlcml2ZXNfZnJvbTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uIGV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrcyBpZiBhbiBYTUwgbm9kZSBkZXJpdmVzIGZyb20gYSBzcGVjaWZpZWQgdHlwZSBkZWZpbml0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rlc3Ryb3lfc2NvcGUiPmRlc3Ryb3lfc2NvcGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEZXN0cm95cyBhIHNjb3BlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VsZW1lbnRfZGVjbGFyZWQiPmVsZW1lbnRfZGVjbGFyZWQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBlbGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGlzIGVsZW1lbnQgZGVjbGFyZWQ/PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZWxlbWVudF90eXBlX2RlZmluaXRpb24iPmVsZW1lbnRfdHlwZV9kZWZpbml0aW9uPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZWxlbSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBPYnRhaW5zIHNjaGVtYSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSI+ZXhwYW5kX2VsZW1fdHlwZV9xbmFtZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXhwYW5kcyBhIHFuYW1lIGFuZCB1c2VzIHRoZSBkZWZhdWx0IHR5cGUvZWxlbWVudCBuYW1lc3BhY2UgaWYKLSB1bnByZWZpeGVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cGFuZF9mdW5jdGlvbl9xbmFtZSI+ZXhwYW5kX2Z1bmN0aW9uX3FuYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFeHBhbmRzIGEgcW5hbWUgYW5kIHVzZXMgdGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlIGlmIHVucHJlZml4ZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwYW5kX3FuYW1lIj5leHBhbmRfcW5hbWU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV4cGFuZHMgdGhlIHFuYW1lJ3MgcHJlZml4IGludG8gYSBuYW1lc3BhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEZ1bmN0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Z1bmN0aW9uIj5mdW5jdGlvbjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGludCBhcml0eSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mdW5jdGlvbl9leGlzdHMiPmZ1bmN0aW9uX2V4aXN0czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGludCBhcml0eSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3IgZXhpc3RhbmNlIG9mIGZ1bmN0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9jbnR4dF9pdGVtX3R5cGUiPmdldF9jbnR4dF9pdGVtX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfY29sbGVjdGlvbnMiPmdldF9jb2xsZWN0aW9uczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZSI+Z2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0X2RvY3VtZW50cyI+Z2V0X2RvY3VtZW50czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfdmFyIj5nZXRfdmFyPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tYWtlX2F0b21pYyI+bWFrZV9hdG9taWM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYW4gYXRvbWljIGZyb20gYSBzcGVjaWZpYyB0eXBlIG5hbWUgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlZmF1bHQKLSB2YWx1ZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdfc2NvcGUiPm5ld19zY29wZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgc2NvcGUgbGV2ZWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJlZml4X2V4aXN0cyI+cHJlZml4X2V4aXN0czwvYT4oamF2YS5sYW5nLlN0cmluZyBwcmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGRvZXMgcHJlZml4IGV4aXN0PzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmVfcHJlZml4Ij5yZXNvbHZlX3ByZWZpeDwvYT4oamF2YS5sYW5nLlN0cmluZyBwcmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlc29sdmVzIGEgcHJlZml4IGludG8gYSBuYW1lc3BhY2UgVVJJLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9iYXNlX3VyaSI+c2V0X2Jhc2VfdXJpPC9hPihqYXZhLmxhbmcuU3RyaW5nIGJhc2V1cmkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBCYXNlIFVSSSBmb3IgdGhlIHN0YXRpYyBjb250ZXh0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9jbnR4dF9pdGVtX3R5cGUiPnNldF9jbnR4dF9pdGVtX3R5cGU8L2E+KGphdmEubGFuZy5TdHJpbmcgY250eHRJdGVtVHlwZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfY29sbGVjdGlvbnMiPnNldF9jb2xsZWN0aW9uczwvYT4oamF2YS51dGlsLk1hcCBjb2xsZWN0aW9ucyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGUiPnNldF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZTwvYT4oamF2YS5sYW5nLlN0cmluZyBkZWZhdWx0Q29sbGVjdGlvblR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X2RvY3VtZW50cyI+c2V0X2RvY3VtZW50czwvYT4oamF2YS51dGlsLk1hcCBfZG9jdW1lbnRzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF92YXJpYWJsZSI+c2V0X3ZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB2YWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9kZWZpbmVkIj50eXBlX2RlZmluZWQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBxbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVja3Mgd2hldGhlciB0aGUgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBpbiBzY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9kZWZpbmVkIj50eXBlX2RlZmluZWQ8L2E+KGphdmEubGFuZy5TdHJpbmcgbnMKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdHlwZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVja3Mgd2hldGhlciB0aGUgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBpbiBzY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFyaWFibGVfZXhpc3RzIj52YXJpYWJsZV9leGlzdHM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZG9lcyB2YXJpYWJsZSBleGlzdCBpbiBjdXJyZW50IHNjb3BlID88L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YXJpYWJsZV9pbl9zY29wZSI+dmFyaWFibGVfaW5fc2NvcGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY2hlY2tzIHRvIHNlZSBpZiB2YXJpYWJsZSBpcyBpbiBzY29wZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3hwYXRoMV9jb21wYXRpYmxlIj54cGF0aDFfY29tcGF0aWJsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGlzIGl0IHhwYXRoMSBjb21wYXRpYmxlPzwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RlZmF1bHRTdGF0aWNDb250ZXh0Ij5EZWZhdWx0U3RhdGljQ29udGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlZmF1bHRTdGF0aWNDb250ZXh0PC9zdHJvbmc+KG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWwgc2NoZW1hKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0RlZmF1bHRTdGF0aWNDb250ZXh0Ij5EZWZhdWx0U3RhdGljQ29udGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlZmF1bHRTdGF0aWNDb250ZXh0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBzY2hlbWEtbGVzcyBkb2N1bWVudHMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkX2Z1bmN0aW9uX2xpYnJhcnkiPmFkZF9mdW5jdGlvbl9saWJyYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRfZnVuY3Rpb25fbGlicmFyeTwvc3Ryb25nPihGdW5jdGlvbkxpYnJhcnkgZmwpPC9jb2RlPjwvcD48cD5BZGRzIGEgZnVuY3Rpb24gdG8gdGhlIGxpYnJhcnkuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mbDwvY29kZT4gLSBGdW5jdGlvbiBsaWJyYXJ5IHRvIGFkZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkX25hbWVzcGFjZSI+YWRkX25hbWVzcGFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkX25hbWVzcGFjZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBuYW1lc3BhY2UpPC9jb2RlPjwvcD48cD5hZGRzIG5hbWVzcGFjZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJlZml4PC9jb2RlPiAtIG5hbWVzcGFjZSBwcmVmaXg8L3A+PHA+PGNvZGU+bmFtZXNwYWNlPC9jb2RlPiAtIG5hbWVzcGFjZSBVUkk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkX3ZhcmlhYmxlIj5hZGRfdmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyKTwvY29kZT48L3A+PHA+QWRkcyBhIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUuCi0gCi0gdXNlZCBmb3Igc3RhdGljIGNoZWNraW5nLi4uLiBpLmUuIHByZXNlbmNlIG9mIHZhcmlhYmxlczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFyPC9jb2RlPiAtIHZhcmlhYmxlIG5hbWUgdG8gYWRkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hdHRyaWJ1dGVfZGVjbGFyZWQiPmF0dHJpYnV0ZV9kZWNsYXJlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+YXR0cmlidXRlX2RlY2xhcmVkPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBhdHRyKTwvY29kZT48L3A+PHA+Q2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBpcyBpbiB0aGUgaW4tc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0cjwvY29kZT4gLSBuYW1lIG9mIGF0dHJpYnV0ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiBhdHRyaWJ1dGUgaXMgZGVjbGFyZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24iPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiA8c3Ryb25nPmF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb248L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGVsZW0pPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgaW4gYW4gZWxlbWVudC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW08L2NvZGU+IC0gZWxlbWVudCBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uPC9jb2RlPiAtIHNjaGVtYSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBhdHRyaWJ1dGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYmFzZV91cmkiPmJhc2VfdXJpPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSSA8c3Ryb25nPmJhc2VfdXJpPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJldHVybiB0aGUgYmFzZSBVUkk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSTwvY29kZT4gLSBYU0FueVVSSTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWJ1Z19wcmludF92YXJzIj5kZWJ1Z19wcmludF92YXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kZWJ1Z19wcmludF92YXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkRlYnVnIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcHJpbnQgY3VycmVudCB2YXJpYWJsZSBzY29wZXMgYW5kIGluZm8uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlIj5kZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+ZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkZWZhdWwgZnVuY3Rpb24gbmFtZXNwYWNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHN0cmluZzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWZhdWx0X25hbWVzcGFjZSI+ZGVmYXVsdF9uYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmRlZmF1bHRfbmFtZXNwYWNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHdoZW4gb25lIGlzIG5vdCBhbGxvY2F0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gc3RyaW5nPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RlbF92YXJpYWJsZSI+ZGVsX3ZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5kZWxfdmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcik8L2NvZGU+PC9wPjxwPkRlbGV0ZXMgYSB2YXJpYWJsZSBmcm9tIGN1cnJlbnQgc2NvcGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YXI8L2NvZGU+IC0gdmFyaWFibGUgbmFtZSB0byBkZWxldGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGZhbHNlIGlmIHZhcmlhYmxlIGRvZXNuJ3QgZXhpc3QuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Rlcml2ZXNfZnJvbSI+ZGVyaXZlc19mcm9tPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5kZXJpdmVzX2Zyb208L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZXQpPC9jb2RlPjwvcD48cD5DaGVja3MgaWYgYW4gWE1MIG5vZGUgZGVyaXZlcyBmcm9tIGEgc3BlY2lmaWVkIHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdDwvY29kZT4gLSBub2RlIGFjdHVhbCB0eXBlPC9wPjxwPjxjb2RlPmV0PC9jb2RlPiAtIG5hbWUgb2YgZXhwZWN0ZWQgdHlwZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIGEgZGVyaXZhdGlvbiBleGlzdHM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGVyaXZlc19mcm9tIj5kZXJpdmVzX2Zyb208L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmRlcml2ZXNfZnJvbTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYXQKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb24gZXQpPC9jb2RlPjwvcD48cD5DaGVja3MgaWYgYW4gWE1MIG5vZGUgZGVyaXZlcyBmcm9tIGEgc3BlY2lmaWVkIHR5cGUgZGVmaW5pdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0PC9jb2RlPiAtIG5vZGUgYWN0dWFsIHR5cGUuPC9wPjxwPjxjb2RlPmV0PC9jb2RlPiAtIHR5cGUgZGVmaW5pdGlvbiBvZiBleHBlY3RlZCB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIGEgZGVyaXZhdGlvbiBleGlzdHMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Rlc3Ryb3lfc2NvcGUiPmRlc3Ryb3lfc2NvcGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRlc3Ryb3lfc2NvcGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RGVzdHJveXMgYSBzY29wZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZWxlbWVudF9kZWNsYXJlZCI+ZWxlbWVudF9kZWNsYXJlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZWxlbWVudF9kZWNsYXJlZDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgZWxlbSk8L2NvZGU+PC9wPjxwPmlzIGVsZW1lbnQgZGVjbGFyZWQ/PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtPC9jb2RlPiAtIG5hbWUgb2YgZWxlbWVudC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiBlbGVtZW50IGRlY2xhcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbGVtZW50X3R5cGVfZGVmaW5pdGlvbiI+ZWxlbWVudF90eXBlX2RlZmluaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiA8c3Ryb25nPmVsZW1lbnRfdHlwZV9kZWZpbml0aW9uPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBlbGVtKTwvY29kZT48L3A+PHA+T2J0YWlucyBzY2hlbWEgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZSBvZiBhbiBlbGVtZW50LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbTwvY29kZT4gLSBuYW1lIG9mIGVsZW1lbnQgd2hvJ3MgdHlwZSBpcyBkZXNpcmVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjwvY29kZT4gLSBzY2hlbWEgZGVmaW5pdGlvbiBvZiB0eXBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V4cGFuZF9lbGVtX3R5cGVfcW5hbWUiPmV4cGFuZF9lbGVtX3R5cGVfcW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZF9lbGVtX3R5cGVfcW5hbWU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD5FeHBhbmRzIGEgcW5hbWUgYW5kIHVzZXMgdGhlIGRlZmF1bHQgdHlwZS9lbGVtZW50IG5hbWVzcGFjZSBpZgotIHVucHJlZml4ZWQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIHFuYW1lIHRvIGV4cGFuZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBvbiBzdWNjZXNzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHBhbmRfZnVuY3Rpb25fcW5hbWUiPmV4cGFuZF9mdW5jdGlvbl9xbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXhwYW5kX2Z1bmN0aW9uX3FuYW1lPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lKTwvY29kZT48L3A+PHA+RXhwYW5kcyBhIHFuYW1lIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZSBpZiB1bnByZWZpeGVkLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBxbmFtZSB0byBleHBhbmQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIHRydWUgb24gc3VjY2Vzcy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kX3FuYW1lIj5leHBhbmRfcW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZF9xbmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPkV4cGFuZHMgdGhlIHFuYW1lJ3MgcHJlZml4IGludG8gYSBuYW1lc3BhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIHFuYW1lIHRvIGV4cGFuZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBvbiBzdWNjZXNzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mdW5jdGlvbiI+ZnVuY3Rpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgRnVuY3Rpb24gPHN0cm9uZz5mdW5jdGlvbjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgaW50IGFyaXR5KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48cD48Y29kZT5hcml0eTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkZ1bmN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mdW5jdGlvbl9leGlzdHMiPmZ1bmN0aW9uX2V4aXN0czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZnVuY3Rpb25fZXhpc3RzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBpbnQgYXJpdHkpPC9jb2RlPjwvcD48cD5DaGVjayBmb3IgZXhpc3RhbmNlIG9mIGZ1bmN0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSBmdW5jdGlvbiBuYW1lLjwvcD48cD48Y29kZT5hcml0eTwvY29kZT4gLSBhcml0eSBvZiBmdW5jdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiBmdW5jdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X2NudHh0X2l0ZW1fdHlwZSI+Z2V0X2NudHh0X2l0ZW1fdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0X2NudHh0X2l0ZW1fdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldF9jb2xsZWN0aW9ucyI+Z2V0X2NvbGxlY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXAgPHN0cm9uZz5nZXRfY29sbGVjdGlvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTWFwPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGUiPmdldF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X2RvY3VtZW50cyI+Z2V0X2RvY3VtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwIDxzdHJvbmc+Z2V0X2RvY3VtZW50czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5NYXA8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldF92YXIiPmdldF92YXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5nZXRfdmFyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB2YXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tYWtlX2F0b21pYyI+bWFrZV9hdG9taWM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgPHN0cm9uZz5tYWtlX2F0b21pYzwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZSk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYW4gYXRvbWljIGZyb20gYSBzcGVjaWZpYyB0eXBlIG5hbWUgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlZmF1bHQKLSB2YWx1ZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gbmFtZSBvZiB0eXBlIHRvIGNyZWF0ZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU8L2NvZGU+IC0gQXRvbWljIHR5cGUgb2YgZGVzaXJlZCB0eXBlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdfc2NvcGUiPm5ld19zY29wZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bmV3X3Njb3BlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgc2NvcGUgbGV2ZWwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZWZpeF9leGlzdHMiPnByZWZpeF9leGlzdHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnByZWZpeF9leGlzdHM8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmKTwvY29kZT48L3A+PHA+ZG9lcyBwcmVmaXggZXhpc3Q/PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVmPC9jb2RlPiAtIHByZWZpeCBuYW1lLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIGl0IGRvZXMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmVfcHJlZml4Ij5yZXNvbHZlX3ByZWZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cmVzb2x2ZV9wcmVmaXg8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmKTwvY29kZT48L3A+PHA+UmVzb2x2ZXMgYSBwcmVmaXggaW50byBhIG5hbWVzcGFjZSBVUkkuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVmPC9jb2RlPiAtIHByZWZpeCBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHVyaSBwcmVmaXggaXMgcmVzb2x2ZWQgdG8gb3IgbnVsbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2Jhc2VfdXJpIj5zZXRfYmFzZV91cmk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9iYXNlX3VyaTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGJhc2V1cmkpPC9jb2RlPjwvcD48cD5TZXQgdGhlIEJhc2UgVVJJIGZvciB0aGUgc3RhdGljIGNvbnRleHQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5iYXNldXJpPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfY250eHRfaXRlbV90eXBlIj5zZXRfY250eHRfaXRlbV90eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfY250eHRfaXRlbV90eXBlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgY250eHRJdGVtVHlwZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y250eHRJdGVtVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2NvbGxlY3Rpb25zIj5zZXRfY29sbGVjdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9jb2xsZWN0aW9uczwvc3Ryb25nPihqYXZhLnV0aWwuTWFwIGNvbGxlY3Rpb25zKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb2xsZWN0aW9uczwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlIj5zZXRfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGRlZmF1bHRDb2xsZWN0aW9uVHlwZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZGVmYXVsdENvbGxlY3Rpb25UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfZG9jdW1lbnRzIj5zZXRfZG9jdW1lbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfZG9jdW1lbnRzPC9zdHJvbmc+KGphdmEudXRpbC5NYXAgX2RvY3VtZW50cyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+X2RvY3VtZW50czwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X3ZhcmlhYmxlIj5zZXRfdmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldF92YXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB2YWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT48L3A+PHA+PGNvZGU+dmFsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX2RlZmluZWQiPnR5cGVfZGVmaW5lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dHlwZV9kZWZpbmVkPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBxbmFtZSk8L2NvZGU+PC9wPjxwPkNoZWNrcyB3aGV0aGVyIHRoZSB0eXBlIGlzIGRlZmluZWQgaW4gdGhlIGluIHNjb3BlIHNjaGVtYSBkZWZpbml0aW9ucy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnFuYW1lPC9jb2RlPiAtIHR5cGUgbmFtZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiB0eXBlIGlzIGRlZmluZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfZGVmaW5lZCI+dHlwZV9kZWZpbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz50eXBlX2RlZmluZWQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBucwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB0eXBlKTwvY29kZT48L3A+PHA+Q2hlY2tzIHdoZXRoZXIgdGhlIHR5cGUgaXMgZGVmaW5lZCBpbiB0aGUgaW4gc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bnM8L2NvZGU+IC0gbmFtZXNwYWNlIG9mIHR5cGUuPC9wPjxwPjxjb2RlPnR5cGU8L2NvZGU+IC0gbmFtZSBvZiB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIHR5cGUgaXMgZGVmaW5lZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFyaWFibGVfZXhpc3RzIj52YXJpYWJsZV9leGlzdHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnZhcmlhYmxlX2V4aXN0czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyKTwvY29kZT48L3A+PHA+ZG9lcyB2YXJpYWJsZSBleGlzdCBpbiBjdXJyZW50IHNjb3BlID88L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSB2YXJpYWJsZSBuYW1lLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIGl0IGRvZXMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhcmlhYmxlX2luX3Njb3BlIj52YXJpYWJsZV9pbl9zY29wZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dmFyaWFibGVfaW5fc2NvcGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHZhcik8L2NvZGU+PC9wPjxwPmNoZWNrcyB0byBzZWUgaWYgdmFyaWFibGUgaXMgaW4gc2NvcGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSB2YXJpYWJsZSBuYW1lLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIHZhcmlhYmxlIGlzIGluIGN1cnJlbnQgb3IgYWJvdmUgc2NvcGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3hwYXRoMV9jb21wYXRpYmxlIj54cGF0aDFfY29tcGF0aWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+eHBhdGgxX2NvbXBhdGlibGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+aXMgaXQgeHBhdGgxIGNvbXBhdGlibGU/PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVzY2VuZGFudEF4aXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlc2NlbmRhbnRBeGlzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMTEyZWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVzY2VuZGFudEF4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZXNjZW5kYW50QXhpczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRlc2NlbmRhbnRBeGlzPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5DaGlsZEF4aXM8L3ByZT5UaGUgZGVzY2VuZGFudCBheGlzIGNvbnRhaW5zIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Rlc2NlbmRhbnRBeGlzIj5EZXNjZW5kYW50QXhpczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRlIj5pdGVyYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzaW5nIHRoZSBjb250ZXh0IG5vZGUgcmV0cmlldmUgdGhlIGRlc2NlbmRhbnRzIG9mIHRoaXMgbm9kZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0Rlc2NlbmRhbnRBeGlzIj5EZXNjZW5kYW50QXhpczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlc2NlbmRhbnRBeGlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aXRlcmF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48L3A+PHA+VXNpbmcgdGhlIGNvbnRleHQgbm9kZSByZXRyaWV2ZSB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9wPjxwPjxjb2RlPmRjPC9jb2RlPiAtIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gVGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb250ZXh0IG5vZGUuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlc2NlbmRhbnRPclNlbGZBeGlzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZXNjZW5kYW50T3JTZWxmQXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTI5OWY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlc2NlbmRhbnRPclNlbGZBeGlzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRGVzY2VuZGFudE9yU2VsZkF4aXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EZXNjZW5kYW50T3JTZWxmQXhpczwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXM8L3ByZT5UaGUgZGVzY2VuZGFudC1vci1zZWxmIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGRlc2NlbmRhbnRzIG9mCi0gdGhlIGNvbnRleHQgbm9kZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRGVzY2VuZGFudE9yU2VsZkF4aXMiPkRlc2NlbmRhbnRPclNlbGZBeGlzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlIGFuZCB0aGUgY29udGV4dCBub2RlCi0gaXRzZWxmLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0Rlc2NlbmRhbnRPclNlbGZBeGlzIj5EZXNjZW5kYW50T3JTZWxmQXhpczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlc2NlbmRhbnRPclNlbGZBeGlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aXRlcmF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlIGFuZCB0aGUgY29udGV4dCBub2RlCi0gaXRzZWxmLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBpcyB0aGUgdHlwZSBvZiBub2RlLjwvcD48cD48Y29kZT5kYzwvY29kZT4gLSBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIFRoZSBjb250ZXh0IG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cy48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9jdXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiM2ZjNmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9jdXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBGb2N1czwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkZvY3VzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5zZXQgdGhlIGZvY3VzIGZyb20gYSByZXN1bHQgc2VxdWVuY2U8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRm9jdXMiPkZvY3VzPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZHZhbmNlX2NwIj5hZHZhbmNlX2NwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiBwb3NzaWJsZSB0byBhZHZhbmNlIHJzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb250ZXh0X2l0ZW0iPmNvbnRleHRfaXRlbTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBwcmV2aW91cyBpdGVtIGZyb20gY3VycmVudCBjb250ZXh0IHBvc2l0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGFzdCI+bGFzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcnMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wb3NpdGlvbiI+cG9zaXRpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZXR1cm5zIGFuIGludGVnZXIgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3Bvc2l0aW9uIj5zZXRfcG9zaXRpb248L2E+KGludCBwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHNldHMgdGhlIHBvc2l0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0ZvY3VzIj5Gb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZvY3VzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIF9ycyB0byBycyBhbmQgY29udGV4dCBwb3NpdGlvbiB0byAxLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkdmFuY2VfY3AiPmFkdmFuY2VfY3A8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmFkdmFuY2VfY3A8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2tzIHRvIHNlZSBpZiBwb3NzaWJsZSB0byBhZHZhbmNlIHJzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0aGUgYm9vbGVhbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29udGV4dF9pdGVtIj5jb250ZXh0X2l0ZW08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jb250ZXh0X2l0ZW08L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHByZXZpb3VzIGl0ZW0gZnJvbSBjdXJyZW50IGNvbnRleHQgcG9zaXRpb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSB0aGUgaXRlbSBmcm9tIF9ycywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBjb250ZXh0IGl0ZW0uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xhc3QiPmxhc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bGFzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5yZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBpdGVtIGluIHJzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBzaXplIG9mIHJzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wb3NpdGlvbiI+cG9zaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+cG9zaXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+cmV0dXJucyBhbiBpbnRlZ2VyIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHJzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfcG9zaXRpb24iPnNldF9wb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X3Bvc2l0aW9uPC9zdHJvbmc+KGludCBwKTwvY29kZT48L3A+PHA+c2V0cyB0aGUgcG9zaXRpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wPC9jb2RlPiAtIGlzIHRoZSBwb3NpdGlvbiB0aGF0IGlzIHNldC48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9sbG93aW5nQXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9sbG93aW5nQXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTk2ZDYxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvbGxvd2luZ0F4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBGb2xsb3dpbmdBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Rm9sbG93aW5nQXhpczwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXM8L3ByZT50aGUgZm9sbG93aW5nIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSdzIGZvbGxvd2luZyBzaWJsaW5ncywgdGhvc2UKLSBjaGlsZHJlbiBvZiB0aGUgY29udGV4dCBub2RlJ3MgcGFyZW50IHRoYXQgb2NjdXIgYWZ0ZXIgdGhlIGNvbnRleHQgbm9kZSBpbgotIGRvY3VtZW50IG9yZGVyLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Gb2xsb3dpbmdBeGlzIj5Gb2xsb3dpbmdBeGlzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgb2YgRm9sbG93aW5nQXhpcyBleHByZXNzaW9uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRm9sbG93aW5nQXhpcyI+Rm9sbG93aW5nQXhpczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZvbGxvd2luZ0F4aXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pdGVyYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjwvcD48cD5SZXR1cm4gdGhlIHJlc3VsdCBvZiBGb2xsb3dpbmdBeGlzIGV4cHJlc3Npb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIHR5cGUgb2Ygbm9kZS48L3A+PHA+PGNvZGU+ZGM8L2NvZGU+IC0gaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBUaGUgcmVzdWx0IG9mIEZvbGxvd2luZ0F4aXMuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvbGxvd2luZ1NpYmxpbmdBeGlzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2xsb3dpbmdTaWJsaW5nQXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDY1ODk0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvbGxvd2luZ1NpYmxpbmdBeGlzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRm9sbG93aW5nU2libGluZ0F4aXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Gb2xsb3dpbmdTaWJsaW5nQXhpczwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXM8L3ByZT5UaGUgZm9sbG93aW5nLXNpYmxpbmcgYXhpcyBjb250YWlucyB0aGUgY29udGV4dCBub2RlJ3MgZm9sbG93aW5nIHNpYmxpbmdzLAotIHRob3NlIGNoaWxkcmVuIG9mIHRoZSBjb250ZXh0IG5vZGUncyBwYXJlbnQgdGhhdCBvY2N1ciBhZnRlciB0aGUgY29udGV4dCBub2RlCi0gaW4gZG9jdW1lbnQgb3JkZXI7IGlmIHRoZSBjb250ZXh0IG5vZGUgaXMgYW4gYXR0cmlidXRlIG5vZGVvciBuYW1lc3BhY2Ugbm9kZSwKLSB0aGUgZm9sbG93aW5nLXNpYmxpbmcgYXhpcyBpcyBlbXB0eS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRm9sbG93aW5nU2libGluZ0F4aXMiPkZvbGxvd2luZ1NpYmxpbmdBeGlzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgb2YgRm9sbG93aW5nU2libGluZ0F4aXMgZXhwcmVzc2lvbjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0ZvbGxvd2luZ1NpYmxpbmdBeGlzIj5Gb2xsb3dpbmdTaWJsaW5nQXhpczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZvbGxvd2luZ1NpYmxpbmdBeGlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aXRlcmF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48L3A+PHA+UmV0dXJuIHRoZSByZXN1bHQgb2YgRm9sbG93aW5nU2libGluZ0F4aXMgZXhwcmVzc2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBpcyB0aGUgdHlwZSBvZiBub2RlLjwvcD48cD48Y29kZT5kYzwvY29kZT4gLSBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIFRoZSByZXN1bHQgb2YgRm9sbG93aW5nU2libGluZ0F4aXMuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzJkZGI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRm9yd2FyZEF4aXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Gb3J3YXJkQXhpczwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QW4gYXhpcyB0aGF0IG9ubHkgZXZlciBjb250YWlucyB0aGUgY29udGV4dCBub2RlIG9yIG5vZGVzIHRoYXQgYXJlIGFmdGVyIHRoZQotIGNvbnRleHQgbm9kZSBpbiBkb2N1bWVudCBvcmRlciBpcyBhIGZvcndhcmQgYXhpcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRm9yd2FyZEF4aXMiPkZvcndhcmRBeGlzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByaW5jaXBhbF9ub2RlX2tpbmQiPnByaW5jaXBhbF9ub2RlX2tpbmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gdGhlIG5ldyBFbGVtZW50IFR5cGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Gb3J3YXJkQXhpcyI+Rm9yd2FyZEF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Gb3J3YXJkQXhpczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmluY2lwYWxfbm9kZV9raW5kIj5wcmluY2lwYWxfbm9kZV9raW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSA8c3Ryb25nPnByaW5jaXBhbF9ub2RlX2tpbmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJuIHRoZSBuZXcgRWxlbWVudCBUeXBlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU8L2NvZGU+IC0gVGhlIGVsZW1lbnQgdHlwZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuSkZsZXhFcnJvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuSkZsZXhFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDk1Zjc5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkpGbGV4RXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEpGbGV4RXJyb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5KRmxleEVycm9yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEVycm9yPC9wcmU+RXJyb3IgY2F1c2VkIGJ5IEpGbGV4PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0pGbGV4RXJyb3IiPkpGbGV4RXJyb3I8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSkZsZXhFcnJvciI+SkZsZXhFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGbGV4RXJyb3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgSkZsZXggZXJyb3IuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLk5vcm1hbGl6ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLk5vcm1hbGl6ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU3NTk2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Ob3JtYWxpemVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5vcm1hbGl6ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Ob3JtYWxpemVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5Ob3JtYWxpemVyIHRoYXQgdXNlcyBYUGF0aFZpc2l0b3IuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05vcm1hbGl6ZXIiPk5vcm1hbGl6ZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IHNjKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJpbnRCaW5FeHByIj5wcmludEJpbkV4cHI8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJpbnRVbkV4cHIiPnByaW50VW5FeHByPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5FeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIHhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdHJlZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByIGZleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIgcWV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIG9yZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFuZEV4cHIgYW5kZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNtcEV4cHIgY21wZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJhbmdlRXhwciByZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIgYWRkZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN1YkV4cHIgc3ViZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHIgbXVsZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbmlvbkV4cHIgdW5leCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHIgcGlwZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHIgaWV4cHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHIgaW9leHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByIHRhZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBhckV4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZ1bmN0aW9uQ2FsbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVGV4dFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hRWxlbVRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXhpc1N0ZXAgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRmlsdGVyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX05vcm1hbGl6ZXIiPk5vcm1hbGl6ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Ob3JtYWxpemVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IHNjKTwvY29kZT48L3A+PHA+U3RhdGljIENvbnRleHQgaXMgc2V0IHRvIHNjPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbnRCaW5FeHByIj5wcmludEJpbkV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnByaW50QmluRXhwcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIG9mIGJpbmFyeSBleHByZXNzaW9uLjwvcD48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBiaW5hcnkgZXhwcmVzc2lvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbnRVbkV4cHIiPnByaW50VW5FeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wcmludFVuRXhwcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5FeHByIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gaXMgdGhlIG5hbWUuPC9wPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIFVuIEV4cHJlc3Npb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCB4cCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdHJlZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHA8L2NvZGU+IC0gaXMgdGhlIHhwYXRoIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIHRoZSB4cGF0aCBleHByZXNzaW9ucy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvckV4cHIgZmV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mZXg8L2NvZGU+IC0gaXMgdGhlIEZvciBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBmZXggZXhwcmVzc2lvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByIHFleCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cWV4PC9jb2RlPiAtIGlzIHRoZSBRdWFudGlmaWVkIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIHFleCBleHByZXNzaW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSWZFeHByIGlmZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlmZXg8L2NvZGU+IC0gaXMgdGhlICdpZicgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gaWZleCBleHByZXNzaW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIG9yZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9yZXg8L2NvZGU+IC0gaXMgdGhlICdvcicgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gbWFrZSBsb2dpYyBleHByKG9yZXgpLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwciBhbmRleCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5kZXg8L2NvZGU+IC0gaXMgdGhlICdhbmQnIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG1ha2UgbG9naWMgZXhwcihhbmRleCkuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIGNtcGV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jbXBleDwvY29kZT4gLSBpcyB0aGUgY29tcGFyZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBjbXBleC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJhbmdlRXhwciByZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJleDwvY29kZT4gLSBpcyB0aGUgcmFuZ2UgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BZGRFeHByIGFkZGV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hZGRleDwvY29kZT4gLSBpcyB0aGUgYWRkIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwciBzdWJleCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3ViZXg8L2NvZGU+IC0gaXMgdGhlIHN1YiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBtdWx0aXBseSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPiAtIGlzIHRoZSBkaXZpc2lvbiBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIG11bGV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYW4gICAgICAgICAgICAgaW50ZWdlci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIG11bGV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tdWxleDwvY29kZT4gLSBpcyB0aGUgbW9kIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByIHVuZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVuZXg8L2NvZGU+IC0gaXMgdGhlIHVuaW9uIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHIgcGlwZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBpcGV4PC9jb2RlPiAtIGlzIHRoZSBwaXBlIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGEgbmV3IGZ1bmN0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZXJzZWN0RXhwciBpZXhwcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWV4cHI8L2NvZGU+IC0gaXMgdGhlIGludGVyc2VjdCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBhIG5ldyBmdW5jdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVleHByPC9jb2RlPiAtIGlzIHRoZSBleGNlcHQgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBuZXcgZnVuY3Rpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByIGlvZXhwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pb2V4cDwvY29kZT4gLSBpcyB0aGUgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSBpb2V4cC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByIHRhZXhwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50YWV4cDwvY29kZT4gLSBpcyB0aGUgdHJlYXQgYXMgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gYSB0YWV4cC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RhYmxlRXhwciBjZXhwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jZXhwPC9jb2RlPiAtIGlzIHRoZSBjYXN0YWJsZSBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBjZXhwLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIgY2V4cCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2V4cDwvY29kZT4gLSBpcyB0aGUgY2FzdCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBjZXhwLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIG1pbnVzIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIG5ldyBzdWIgZXhwcmVzc2lvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHIgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgcGx1cyBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBuZXcgYWRkIGV4cHJlc3Npb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSB4cGF0aCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSByZXN1bHQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBmb3J3YXJkIHN0ZXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJldmVyc2VTdGVwIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHJldmVyc2Ugc3RlcC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTmFtZVRlc3QgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgTmFtZSB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgdmVyaWFibGUgcmVmZXJlbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdHJpbmdMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHN0cmluZyBsaXRlcmFsLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBpbnRlZ2VyIGxpdGVyYWwuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvdWJsZUxpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZG91YmxlIGxpdGVyYWwuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIGRlY2ltYWwgbGl0ZXJhbC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwciBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBwYXIgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIENudHggSXRlbSBFeHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBuZXcgZnVuY3Rpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZ1bmN0aW9uQ2FsbCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBmdWNudGlvbiBjYWxsLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHNpbmdsZSB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgc2VxdWVuY2UgdHlwZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgaXRlbSB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBhbnkga2luZCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZG9jdW1lbnQgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVGV4dFRlc3QgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgdGV4dCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Db21tZW50VGVzdCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBjb21tb24gdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0IGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIFBJIHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgYXR0cmlidXRlIHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUF0dHJUZXN0IGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+IC0gaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZWxlbWVudCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBzY2hlbWEgZWxlbWVudCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPiAtIGlzIHRoZSBheGlzIHN0ZXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHIgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyB0aGUgZmlsdGVyIGV4cHJlc3Npb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIGU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUGFyZW50QXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUGFyZW50QXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzkyZDM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlBhcmVudEF4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBQYXJlbnRBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UGFyZW50QXhpczwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXM8L3ByZT50aGUgcGFyZW50IGF4aXMgY29udGFpbnMgdGhlIHNlcXVlbmNlIHJldHVybmVkIGJ5IHRoZSBkbTpwYXJlbnQgYWNjZXNzb3IgaW4sCi0gd2hpY2ggcmV0dXJucyB0aGUgcGFyZW50IG9mIHRoZSBjb250ZXh0IG5vZGUsIG9yIGFuIGVtcHR5IHNlcXVlbmNlIGlmIHRoZQotIGNvbnRleHQgbm9kZSBoYXMgbm8gcGFyZW50PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1BhcmVudEF4aXMiPlBhcmVudEF4aXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZXR1cm5zIHBhcmVudCBhY2Nlc3NvcnMgb2YgdGhlIGNvbnRleHQgbm9kZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1BhcmVudEF4aXMiPlBhcmVudEF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QYXJlbnRBeGlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aXRlcmF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48L3A+PHA+cmV0dXJucyBwYXJlbnQgYWNjZXNzb3JzIG9mIHRoZSBjb250ZXh0IG5vZGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIG5vZGUgdHlwZS48L3A+PHA+PGNvZGU+ZGM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gdGhlIGFjY2Vzc29ycy48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUHJlY2VkaW5nQXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUHJlY2VkaW5nQXhpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmJlZWFiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlByZWNlZGluZ0F4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBQcmVjZWRpbmdBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UHJlY2VkaW5nQXhpczwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXM8L3ByZT50aGUgcHJlY2VkaW5nIGF4aXMgY29udGFpbnMgYWxsIG5vZGVzIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IG9mIHRoZQotIHRyZWUgaW4gd2hpY2ggdGhlIGNvbnRleHQgbm9kZSBpcyBmb3VuZDxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QcmVjZWRpbmdBeGlzIj5QcmVjZWRpbmdBeGlzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBub2RlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgZGMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgcmV0dXJucyBwcmVjZWRpbmcgbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1ByZWNlZGluZ0F4aXMiPlByZWNlZGluZ0F4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QcmVjZWRpbmdBeGlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aXRlcmF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48L3A+PHA+cmV0dXJucyBwcmVjZWRpbmcgbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBpcyB0aGUgbm9kZSB0eXBlLjwvcD48cD48Y29kZT5kYzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QcmVjZWRpbmdTaWJsaW5nQXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUHJlY2VkaW5nU2libGluZ0F4aXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4NjU0OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QcmVjZWRpbmdTaWJsaW5nQXhpcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFByZWNlZGluZ1NpYmxpbmdBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UHJlY2VkaW5nU2libGluZ0F4aXM8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJldmVyc2VBeGlzPC9wcmU+dGhlIHByZWNlZGluZyBheGlzIGNvbnRhaW5zIGFsbCBub2RlcyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0aGUgcm9vdCBvZiB0aGUKLSB0cmVlIGluIHdoaWNoIHRoZSBjb250ZXh0IG5vZGUgaXMgZm91bmQgaW5jbHVkaW5nIHRoZSBjb250ZXh0IG5vZGUgaXRzZWxmPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ByZWNlZGluZ1NpYmxpbmdBeGlzIj5QcmVjZWRpbmdTaWJsaW5nQXhpczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRlIj5pdGVyYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHJldHVybnMgcHJlY2VkaW5nIG5vZGVzIG9mIHRoZSBjb250ZXh0IG5vZGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QcmVjZWRpbmdTaWJsaW5nQXhpcyI+UHJlY2VkaW5nU2libGluZ0F4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QcmVjZWRpbmdTaWJsaW5nQXhpczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRlIj5pdGVyYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPml0ZXJhdGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PC9wPjxwPnJldHVybnMgcHJlY2VkaW5nIG5vZGVzIG9mIHRoZSBjb250ZXh0IG5vZGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIG5vZGUgdHlwZS48L3A+PHA+PGNvZGU+ZGM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gdGhlIGRlc2NlbmRhbnRzIGFuZCB0aGUgY29udGV4dCBub2RlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJhbmdlUmVzdWx0U2VxdWVuY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJhbmdlUmVzdWx0U2VxdWVuY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkZTZiMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SYW5nZVJlc3VsdFNlcXVlbmNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUmFuZ2VSZXN1bHRTZXF1ZW5jZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlJhbmdlUmVzdWx0U2VxdWVuY2U8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9wcmU+QSByYW5nZSBleHByZXNzaW9uIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlCi0gaW50ZWdlcnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1JhbmdlUmVzdWx0U2VxdWVuY2UiPlJhbmdlUmVzdWx0U2VxdWVuY2U8L2E+PC9zdHJvbmc+KGludCBzdGFydAotICAgICAgICAgLAotICAgICAgaW50IGVuZCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZCI+YWRkPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBpdGVtKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGl0ZW0gaXMgYW4gaW50ZWdlciB0byBhZGQgdG8gdGhlIHJhbmdlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NsZWFyIj5jbGVhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGNsZWFyIHJhbmdlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uY2F0Ij5jb25jYXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZW1vdmUgdGhlIHRhaWwgZnJvbSB0aGUgcmFuZ2UgZ2l2ZW4uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgY3JlYXRlIG5ldyByZXN1bHQgc2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbXB0eSI+ZW1wdHk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBhc2tzIGlmIHRoZSByYW5nZSBpcyBlbXB0eT88L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmlyc3QiPmZpcnN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldCI+Z2V0PC9hPihpbnQgaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3RJdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBpbnRlcmF0ZSB0aHJvdWdoIHJhbmdlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZWxlYXNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zaXplIj5zaXplPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUmFuZ2VSZXN1bHRTZXF1ZW5jZSI+UmFuZ2VSZXN1bHRTZXF1ZW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJhbmdlUmVzdWx0U2VxdWVuY2U8L3N0cm9uZz4oaW50IHN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgZW5kKTwvY29kZT48L3A+PHA+c2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZSByZXN1bHQgc2VxdWVuY2U8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGQiPmFkZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGl0ZW0pPC9jb2RlPjwvcD48cD5pdGVtIGlzIGFuIGludGVnZXIgdG8gYWRkIHRvIHRoZSByYW5nZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPml0ZW08L2NvZGU+IC0gaXMgYW4gaW50ZWdlci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYXIiPmNsZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jbGVhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5jbGVhciByYW5nZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25jYXQiPmNvbmNhdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y29uY2F0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPnJlbW92ZSB0aGUgdGFpbCBmcm9tIHRoZSByYW5nZSBnaXZlbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPiAtIGlzIHRoZSByYW5nZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVfbmV3Ij5jcmVhdGVfbmV3PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNyZWF0ZV9uZXc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Y3JlYXRlIG5ldyByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VtcHR5Ij5lbXB0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZW1wdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+YXNrcyBpZiB0aGUgcmFuZ2UgaXMgZW1wdHk/PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmlyc3QiPmZpcnN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Zmlyc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSBmaXJzdCBpdGVtIGluIHJhbmdlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldCI+Z2V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Z2V0PC9zdHJvbmc+KGludCBpKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+IC0gaXRlbSBmcm9tIHJhbmdlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yIDxzdHJvbmc+aXRlcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+aW50ZXJhdGUgdGhyb3VnaCByYW5nZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0SXRlcmF0b3I8L2NvZGU+IC0gdGFpbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJlbGVhc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2l6ZSI+c2l6ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5zaXplPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHNpemU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJldmVyc2VBeGlzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNTM2ZGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBSZXZlcnNlQXhpczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlJldmVyc2VBeGlzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BbiBheGlzIHRoYXQgb25seSBldmVyIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgb3Igbm9kZXMgdGhhdCBhcmUgYmVmb3JlIHRoZQotIGNvbnRleHQgbm9kZSBpbiBkb2N1bWVudCBvcmRlciBpcyBhIHJldmVyc2UgYXhpcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUmV2ZXJzZUF4aXMiPlJldmVyc2VBeGlzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByaW5jaXBhbF9ub2RlX2tpbmQiPnByaW5jaXBhbF9ub2RlX2tpbmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9SZXZlcnNlQXhpcyI+UmV2ZXJzZUF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5SZXZlcnNlQXhpczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmluY2lwYWxfbm9kZV9raW5kIj5wcmluY2lwYWxfbm9kZV9raW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSA8c3Ryb25nPnByaW5jaXBhbF9ub2RlX2tpbmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU8L2NvZGU+IC0gbmV3IGVsZW1lbnQgdHlwZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZWxmQXhpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VsZkF4aXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIwZmNhNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZWxmQXhpcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFNlbGZBeGlzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U2VsZkF4aXM8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzPC9wcmU+Q3JlYXRlIGEgcmVzdWx0IHNlcXVlbmNlIHRoYXQgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TZWxmQXhpcyI+U2VsZkF4aXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlcmF0ZSI+aXRlcmF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBjcmVhdGUgbmV3IHJzIGFuZCBhZGQgdGhlIGNvbnRleHQgbm9kZSB0byBpdDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1NlbGZBeGlzIj5TZWxmQXhpczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlNlbGZBeGlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdGUiPml0ZXJhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aXRlcmF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgbm9kZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjKTwvY29kZT48L3A+PHA+Y3JlYXRlIG5ldyBycyBhbmQgYWRkIHRoZSBjb250ZXh0IG5vZGUgdG8gaXQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gaXMgdGhlIG5vZGUgdHlwZTwvcD48cD48Y29kZT5kYzwvY29kZT4gLSBpcyB0aGUgZHluYW1pYyBjb250ZXh0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gcnMgY29udGFpbmluZyBub2RlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwZmY1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU2VxVHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlNlcVR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPnJlcHJlc2VudHMgYSBTZXF1ZW5jZSB0eXBlcyB1c2VkIGZvciBtYXRjaGluZyBleHBlY3RlZCBhcmd1bWVudHMgb2YgZnVuY3Rpb25zPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfT0NDX0VNUFRZIj5PQ0NfRU1QVFk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfT0NDX05PTkUiPk9DQ19OT05FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX09DQ19QTFVTIj5PQ0NfUExVUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9PQ0NfUU1BUksiPk9DQ19RTUFSSzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9PQ0NfU1RBUiI+T0NDX1NUQVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hNTF9TQ0hFTUFfTlMiPlhNTF9TQ0hFTUFfTlM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGF0aCB0byB3My5vcmcgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TZXFUeXBlIj5TZXFUeXBlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB0Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2NjKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU2VxVHlwZSI+U2VxVHlwZTwvYT48L3N0cm9uZz4oaW50IG9jYyk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1NlcVR5cGUiPlNlcVR5cGU8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5DbGFzcyB0eXBlX2NsYXNzCi0gICAgICAgICAsCi0gICAgICBpbnQgb2NjKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU2VxVHlwZSI+U2VxVHlwZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgc3QKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IHNjCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TZXFUeXBlIj5TZXFUeXBlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tYXRjaCI+bWF0Y2g8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmdzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIG1hdGNoZXMgYXJnczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfb2NjdXJlbmNlIj5vY2N1cmVuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZSI+dHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfT0NDX0VNUFRZIj5PQ0NfRU1QVFk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5PQ0NfRU1QVFk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfT0NDX05PTkUiPk9DQ19OT05FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+T0NDX05PTkU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfT0NDX1BMVVMiPk9DQ19QTFVTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+T0NDX1BMVVM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfT0NDX1FNQVJLIj5PQ0NfUU1BUks8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5PQ0NfUU1BUks8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfT0NDX1NUQVIiPk9DQ19TVEFSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+T0NDX1NUQVI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWE1MX1NDSEVNQV9OUyI+WE1MX1NDSEVNQV9OUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YTUxfU0NIRU1BX05TPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU2VxVHlwZSI+U2VxVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlNlcVR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgdAotICAgICAgICAgLAotICAgICAgaW50IG9jYyk8L2NvZGU+PC9wPjxwPnNlcXVlbmNlIHR5cGU8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fU2VxVHlwZSI+U2VxVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlNlcVR5cGU8L3N0cm9uZz4oaW50IG9jYyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9TZXFUeXBlIj5TZXFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2VxVHlwZTwvc3Ryb25nPihqYXZhLmxhbmcuQ2xhc3MgdHlwZV9jbGFzcwotICAgICAgICAgLAotICAgICAgaW50IG9jYyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9TZXFUeXBlIj5TZXFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2VxVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZSBzdAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQgc2MKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9TZXFUeXBlIj5TZXFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2VxVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB0KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfbWF0Y2giPm1hdGNoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1hdGNoPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmdzKTwvY29kZT48L3A+PHA+bWF0Y2hlcyBhcmdzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmdzPC9jb2RlPiAtIGlzIGEgcmVzdWx0IHNlcXVlbmNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gYSByZXN1bHQgc2VxdWVuY2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX29jY3VyZW5jZSI+b2NjdXJlbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm9jY3VyZW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBhbiBpbnRlZ2VyLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlIj50eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+dHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIGEgdHlwZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljQXR0ck5hbWVFcnJvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljQXR0ck5hbWVFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2U0ZDU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0F0dHJOYW1lRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0YXRpY0F0dHJOYW1lRXJyb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdGF0aWNBdHRyTmFtZUVycm9yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3I8L3ByZT5FcnJvciBjYXVzZWQgYnkgc3RhdGljIGF0dHJpYnV0ZSBuYW1lLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGF0aWNBdHRyTmFtZUVycm9yIj5TdGF0aWNBdHRyTmFtZUVycm9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0YXRpY0F0dHJOYW1lRXJyb3IiPlN0YXRpY0F0dHJOYW1lRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNBdHRyTmFtZUVycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBhdHRyaWJ1dGUgbmFtZSBlcnJvcjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNFbGVtTmFtZUVycm9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNFbGVtTmFtZUVycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZTY5ODguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljRWxlbU5hbWVFcnJvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RhdGljRWxlbU5hbWVFcnJvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0YXRpY0VsZW1OYW1lRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05hbWVFcnJvcjwvcHJlPkVycm9yIGNhdXNlZCBieSBzdGF0aWMgZWxlbWVudCBuYW1lLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGF0aWNFbGVtTmFtZUVycm9yIj5TdGF0aWNFbGVtTmFtZUVycm9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0YXRpY0VsZW1OYW1lRXJyb3IiPlN0YXRpY0VsZW1OYW1lRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNFbGVtTmFtZUVycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBlbGVtZW50IG5hbWUgZXJyb3I8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljRnVuY3ROYW1lRXJyb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0Z1bmN0TmFtZUVycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YjJjOGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljRnVuY3ROYW1lRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0YXRpY0Z1bmN0TmFtZUVycm9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RhdGljRnVuY3ROYW1lRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05hbWVFcnJvcjwvcHJlPkVycm9yIGNhdXNlZCBieSBzdGF0aWMgZnVuY3Rpb24gbmFtZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRlVOQ1RJT05fTk9UX0ZPVU5EIj5GVU5DVElPTl9OT1RfRk9VTkQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0YXRpY0Z1bmN0TmFtZUVycm9yIj5TdGF0aWNGdW5jdE5hbWVFcnJvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0ZVTkNUSU9OX05PVF9GT1VORCI+RlVOQ1RJT05fTk9UX0ZPVU5EPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkZVTkNUSU9OX05PVF9GT1VORDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RhdGljRnVuY3ROYW1lRXJyb3IiPlN0YXRpY0Z1bmN0TmFtZUVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3RhdGljRnVuY3ROYW1lRXJyb3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3Igc3RhdGljIGZ1bmN0aW9uIG5hbWUgZXJyb3I8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTmFtZUVycm9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyMmM5OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNOYW1lRXJyb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdGF0aWNOYW1lRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yPC9wcmU+RXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBuYW1lLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQU1FX05PVF9GT1VORCI+TkFNRV9OT1RfRk9VTkQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1BSRUZJWF9OT1RfRk9VTkQiPlBSRUZJWF9OT1RfRk9VTkQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0YXRpY05hbWVFcnJvciI+U3RhdGljTmFtZUVycm9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RhdGljTmFtZUVycm9yIj5TdGF0aWNOYW1lRXJyb3I8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9OQU1FX05PVF9GT1VORCI+TkFNRV9OT1RfRk9VTkQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TkFNRV9OT1RfRk9VTkQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfUFJFRklYX05PVF9GT1VORCI+UFJFRklYX05PVF9GT1VORDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5QUkVGSVhfTk9UX0ZPVU5EPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdGF0aWNOYW1lRXJyb3IiPlN0YXRpY05hbWVFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0YXRpY05hbWVFcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBuYW1lIGVycm9yPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1N0YXRpY05hbWVFcnJvciI+U3RhdGljTmFtZUVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3RhdGljTmFtZUVycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBuYW1lIGVycm9yPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOc05hbWVFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTdjZGY0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNOc05hbWVFcnJvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0YXRpY05zTmFtZUVycm9yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3I8L3ByZT5TdGF0aWMgbmFtZXNwYWNlIG5hbWUgZXJyb3IgY2xhc3MuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0YXRpY05zTmFtZUVycm9yIj5TdGF0aWNOc05hbWVFcnJvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOc05hbWVFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91bmtub3duX3ByZWZpeCI+dW5rbm93bl9wcmVmaXg8L2E+KGphdmEubGFuZy5TdHJpbmcgcHJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb25zdHJ1Y3Rvci48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdGF0aWNOc05hbWVFcnJvciI+U3RhdGljTnNOYW1lRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNOc05hbWVFcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3Vua25vd25fcHJlZml4Ij51bmtub3duX3ByZWZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTnNOYW1lRXJyb3IgPHN0cm9uZz51bmtub3duX3ByZWZpeDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByZWYpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3Rvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByZWY8L2NvZGU+IC0gaXMgdGhlIHVua25vd24gcHJlZml4LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yPC9jb2RlPiAtIHRoZSBlcnJvci48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVHlwZU5hbWVFcnJvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVHlwZU5hbWVFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDU1NDE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY1R5cGVOYW1lRXJyb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0YXRpY1R5cGVOYW1lRXJyb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdGF0aWNUeXBlTmFtZUVycm9yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3I8L3ByZT5TdGF0aWMgdHlwZSBuYW1lIGVycm9yIGNsYXNzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9UWVBFX05PVF9GT1VORCI+VFlQRV9OT1RfRk9VTkQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0YXRpY1R5cGVOYW1lRXJyb3IiPlN0YXRpY1R5cGVOYW1lRXJyb3I8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9UWVBFX05PVF9GT1VORCI+VFlQRV9OT1RfRk9VTkQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VFlQRV9OT1RfRk9VTkQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0YXRpY1R5cGVOYW1lRXJyb3IiPlN0YXRpY1R5cGVOYW1lRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdGF0aWNUeXBlTmFtZUVycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY1Zhck5hbWVFcnJvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVmFyTmFtZUVycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NWFhMTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVmFyTmFtZUVycm9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdGF0aWNWYXJOYW1lRXJyb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdGF0aWNWYXJOYW1lRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05hbWVFcnJvcjwvcHJlPlN0YXRpYyB2YXJpYWJsZSBuYW1lIGVycm9yIGNsYXNzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGF0aWNWYXJOYW1lRXJyb3IiPlN0YXRpY1Zhck5hbWVFcnJvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZWFzb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdGF0aWNWYXJOYW1lRXJyb3IiPlN0YXRpY1Zhck5hbWVFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0YXRpY1Zhck5hbWVFcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlYXNvbik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODA5NTMwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFR5cGVFcnJvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlR5cGVFcnJvcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb248L3ByZT5FcnJvciBjYXVzZWQgYnkgYmFkIHR5cGVzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UeXBlRXJyb3IiPlR5cGVFcnJvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jaV9ub3Rfbm9kZSI+Y2lfbm90X25vZGU8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29kZSI+Y29kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgZXJyb3IgY29kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW52YWxpZF90eXBlIj5pbnZhbGlkX3R5cGU8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21peGVkX3ZhbHMiPm1peGVkX3ZhbHM8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0ZXBfY29uYXRpbnNfYXRvbXMiPnN0ZXBfY29uYXRpbnNfYXRvbXM8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVHlwZUVycm9yIj5UeXBlRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UeXBlRXJyb3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciB0eXBlIGVycm9yLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NpX25vdF9ub2RlIj5jaV9ub3Rfbm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yIDxzdHJvbmc+Y2lfbm90X25vZGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD4iRmFjdG9yeSIgZm9yIGJ1aWxkaW5nIGVycm9yczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyPC9jb2RlPiAtIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I8L2NvZGU+IC0gdGhlIGVycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb2RlIj5jb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5jb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgZXJyb3IgY29kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGVycm9yIGNvZGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ludmFsaWRfdHlwZSI+aW52YWxpZF90eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IgPHN0cm9uZz5pbnZhbGlkX3R5cGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnIpPC9jb2RlPjwvcD48cD4iRmFjdG9yeSIgZm9yIGJ1aWxkaW5nIGVycm9yczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyPC9jb2RlPiAtIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I8L2NvZGU+IC0gdGhlIGVycm9yLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taXhlZF92YWxzIj5taXhlZF92YWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IgPHN0cm9uZz5taXhlZF92YWxzPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZXJyKTwvY29kZT48L3A+PHA+IkZhY3RvcnkiIGZvciBidWlsZGluZyBlcnJvcnM8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycjwvY29kZT4gLSBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yPC9jb2RlPiAtIHRoZSBlcnJvci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RlcF9jb25hdGluc19hdG9tcyI+c3RlcF9jb25hdGluc19hdG9tczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yIDxzdHJvbmc+c3RlcF9jb25hdGluc19hdG9tczwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGVycik8L2NvZGU+PC9wPjxwPiJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lcnI8L2NvZGU+IC0gaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjwvY29kZT4gLSB0aGUgZXJyb3IuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoMlBsdWdpbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGgyUGx1Z2luLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNTllZDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGgyUGx1Z2luLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aDJQbHVnaW48L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aDJQbHVnaW48L3N0cm9uZz4KLWV4dGVuZHMgUGx1Z2luPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoMlBsdWdpbiI+WFBhdGgyUGx1Z2luPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aDJQbHVnaW4iPlhQYXRoMlBsdWdpbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoMlBsdWdpbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhDdXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoQ3VwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYWRhNGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhDdXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aEN1cDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoQ3VwPC9zdHJvbmc+Ci1leHRlbmRzIGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyPC9wcmU+Q1VQIHYwLjEwayBnZW5lcmF0ZWQgcGFyc2VyLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBzaG9ydFtdW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fYWN0aW9uX3RhYmxlIj5fYWN0aW9uX3RhYmxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlLWFjdGlvbiB0YWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBzaG9ydFtdW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fcHJvZHVjdGlvbl90YWJsZSI+X3Byb2R1Y3Rpb25fdGFibGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUHJvZHVjdGlvbiB0YWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBzaG9ydFtdW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fcmVkdWNlX3RhYmxlIj5fcmVkdWNlX3RhYmxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgICZsdDtjb2RlJmd0O3JlZHVjZV9nb3RvJmx0Oy9jb2RlJmd0OyB0YWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNVUCRYUGF0aEN1cCRhY3Rpb25zPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfYWN0aW9uX29iaiI+YWN0aW9uX29iajwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBJbnN0YW5jZSBvZiBhY3Rpb24gZW5jYXBzdWxhdGlvbiBjbGFzcy48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhDdXAiPlhQYXRoQ3VwPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aEN1cCI+WFBhdGhDdXA8L2E+PC9zdHJvbmc+KGphdmFfY3VwLnJ1bnRpbWUuU2Nhbm5lciBzKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHNob3J0W11bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY3Rpb25fdGFibGUiPmFjdGlvbl90YWJsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFjY2VzcyB0byBwYXJzZS1hY3Rpb24gdGFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RvX2FjdGlvbiI+ZG9fYWN0aW9uPC9hPihpbnQgYWN0X251bQotICAgICAgICAgLAotICAgICAgamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIgcGFyc2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuU3RhY2sgc3RhY2sKLSAgICAgICAgICwKLSAgICAgIGludCB0b3ApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgSW52b2tlIGEgdXNlciBzdXBwbGllZCBwYXJzZSBhY3Rpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9FT0Zfc3ltIj5FT0Zfc3ltPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPGNvZGU+RU9GPC9jb2RlPiBTeW1ib2wgaW5kZXguPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcnJvcl9zeW0iPmVycm9yX3N5bTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDxjb2RlPmVycm9yPC9jb2RlPiBTeW1ib2wgaW5kZXguPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdF9hY3Rpb25zIj5pbml0X2FjdGlvbnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBY3Rpb24gZW5jYXBzdWxhdGlvbiBvYmplY3QgaW5pdGlhbGl6ZXIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHNob3J0W11bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcm9kdWN0aW9uX3RhYmxlIj5wcm9kdWN0aW9uX3RhYmxlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWNjZXNzIHRvIHByb2R1Y3Rpb24gdGFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHNob3J0W11bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWR1Y2VfdGFibGUiPnJlZHVjZV90YWJsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFjY2VzcyB0byA8Y29kZT5yZWR1Y2VfZ290bzwvY29kZT4gdGFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVwb3J0X2Vycm9yIj5yZXBvcnRfZXJyb3I8L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBpbmZvKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRfcHJvZHVjdGlvbiI+c3RhcnRfcHJvZHVjdGlvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEluZGljYXRlcyBzdGFydCBwcm9kdWN0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRfc3RhdGUiPnN0YXJ0X3N0YXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgSW5kaWNhdGVzIHN0YXJ0IHN0YXRlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfX2FjdGlvbl90YWJsZSI+X2FjdGlvbl90YWJsZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIHNob3J0W11bXSA8c3Ryb25nPl9hY3Rpb25fdGFibGU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhcnNlLWFjdGlvbiB0YWJsZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX19wcm9kdWN0aW9uX3RhYmxlIj5fcHJvZHVjdGlvbl90YWJsZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIHNob3J0W11bXSA8c3Ryb25nPl9wcm9kdWN0aW9uX3RhYmxlPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5Qcm9kdWN0aW9uIHRhYmxlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX3JlZHVjZV90YWJsZSI+X3JlZHVjZV90YWJsZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIHNob3J0W11bXSA8c3Ryb25nPl9yZWR1Y2VfdGFibGU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPjxjb2RlPnJlZHVjZV9nb3RvPC9jb2RlPiB0YWJsZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2FjdGlvbl9vYmoiPmFjdGlvbl9vYmo8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNVUCRYUGF0aEN1cCRhY3Rpb25zIDxzdHJvbmc+YWN0aW9uX29iajwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+SW5zdGFuY2Ugb2YgYWN0aW9uIGVuY2Fwc3VsYXRpb24gY2xhc3MuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhDdXAiPlhQYXRoQ3VwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhDdXA8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RGVmYXVsdCBjb25zdHJ1Y3Rvci48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFBhdGhDdXAiPlhQYXRoQ3VwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhDdXA8L3N0cm9uZz4oamF2YV9jdXAucnVudGltZS5TY2FubmVyIHMpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciB3aGljaCBzZXRzIHRoZSBkZWZhdWx0IHNjYW5uZXIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWN0aW9uX3RhYmxlIj5hY3Rpb25fdGFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc2hvcnRbXVtdIDxzdHJvbmc+YWN0aW9uX3RhYmxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFjY2VzcyB0byBwYXJzZS1hY3Rpb24gdGFibGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5zaG9ydFtdW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RvX2FjdGlvbiI+ZG9fYWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sIDxzdHJvbmc+ZG9fYWN0aW9uPC9zdHJvbmc+KGludCBhY3RfbnVtCi0gICAgICAgICAsCi0gICAgICBqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciBwYXJzZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5TdGFjayBzdGFjawotICAgICAgICAgLAotICAgICAgaW50IHRvcCk8L2NvZGU+PC9wPjxwPkludm9rZSBhIHVzZXIgc3VwcGxpZWQgcGFyc2UgYWN0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWN0X251bTwvY29kZT48L3A+PHA+PGNvZGU+cGFyc2VyPC9jb2RlPjwvcD48cD48Y29kZT5zdGFjazwvY29kZT48L3A+PHA+PGNvZGU+dG9wPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YV9jdXAucnVudGltZS5TeW1ib2w8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9FT0Zfc3ltIj5FT0Zfc3ltPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPkVPRl9zeW08L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PGNvZGU+RU9GPC9jb2RlPiBTeW1ib2wgaW5kZXguPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Vycm9yX3N5bSI+ZXJyb3Jfc3ltPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmVycm9yX3N5bTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48Y29kZT5lcnJvcjwvY29kZT4gU3ltYm9sIGluZGV4LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0X2FjdGlvbnMiPmluaXRfYWN0aW9uczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+aW5pdF9hY3Rpb25zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFjdGlvbiBlbmNhcHN1bGF0aW9uIG9iamVjdCBpbml0aWFsaXplci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJvZHVjdGlvbl90YWJsZSI+cHJvZHVjdGlvbl90YWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzaG9ydFtdW10gPHN0cm9uZz5wcm9kdWN0aW9uX3RhYmxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFjY2VzcyB0byBwcm9kdWN0aW9uIHRhYmxlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+c2hvcnRbXVtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWR1Y2VfdGFibGUiPnJlZHVjZV90YWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzaG9ydFtdW10gPHN0cm9uZz5yZWR1Y2VfdGFibGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QWNjZXNzIHRvIDxjb2RlPnJlZHVjZV9nb3RvPC9jb2RlPiB0YWJsZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPnNob3J0W11bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVwb3J0X2Vycm9yIj5yZXBvcnRfZXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlcG9ydF9lcnJvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgaW5mbyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT48L3A+PHA+PGNvZGU+aW5mbzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRfcHJvZHVjdGlvbiI+c3RhcnRfcHJvZHVjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5zdGFydF9wcm9kdWN0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluZGljYXRlcyBzdGFydCBwcm9kdWN0aW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydF9zdGF0ZSI+c3RhcnRfc3RhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+c3RhcnRfc3RhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5kaWNhdGVzIHN0YXJ0IHN0YXRlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEVycm9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEVycm9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzVmNmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhFcnJvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhFcnJvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoRXJyb3I8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLkVycm9yPC9wcmU+VGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBhbiBYUGF0aCBleGNlcHRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoRXJyb3IiPlhQYXRoRXJyb3I8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVhc29uIj5yZWFzb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgcmVhc29uIHdoeSB0aGUgZXJyb3IgaGFzIGJlZW4gdGhyb3duLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoRXJyb3IiPlhQYXRoRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aEVycm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVhc29uKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIFhQYXRoRXJyb3I8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWFzb24iPnJlYXNvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cmVhc29uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSByZWFzb24gd2h5IHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvd24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSByZWFzb24gd2h5IHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvdy48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhGbGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEZsZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ0ZWI0ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEZsZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aEZsZXg8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aEZsZXg8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoaXMgY2xhc3MgaXMgYSBzY2FubmVyIGdlbmVyYXRlZCBieSAKLSA8YSBocmVmPSJodHRwOi8vd3d3LmpmbGV4LmRlLyI+SkZsZXg8L2E+IDEuNC4zCi0gb24gMTIvMTQvMDkgMjowMiBBTSBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uIGZpbGUKLSA8dHQ+L1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLTMuNU01L29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXg8L3R0Pjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NPTU1FTlQiPkNPTU1FTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWVlFT0YiPllZRU9GPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgY2hhcmFjdGVyIGRlbm90ZXMgdGhlIGVuZCBvZiBmaWxlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWVlJTklUSUFMIj5ZWUlOSVRJQUw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgbGV4aWNhbCBzdGF0ZXM8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhGbGV4Ij5YUGF0aEZsZXg8L2E+PC9zdHJvbmc+KGphdmEuaW8uUmVhZGVyIGluKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhGbGV4Ij5YUGF0aEZsZXg8L2E+PC9zdHJvbmc+KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbG5vIj5jb2xubzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGluZW5vIj5saW5lbm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YV9jdXAucnVudGltZS5TeW1ib2w8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV4dF90b2tlbiI+bmV4dF90b2tlbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlc3VtZXMgc2Nhbm5pbmcgdW50aWwgdGhlIG5leHQgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQsCi0gdGhlIGVuZCBvZiBpbnB1dCBpcyBlbmNvdW50ZXJlZCBvciBhbiBJL08tRXJyb3Igb2NjdXJzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3l5YmVnaW4iPnl5YmVnaW48L2E+KGludCBuZXdTdGF0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFbnRlcnMgYSBuZXcgbGV4aWNhbCBzdGF0ZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBjaGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3l5Y2hhcmF0Ij55eWNoYXJhdDwvYT4oaW50IHBvcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gPHR0PnBvczwvdHQ+IGZyb20gdGhlIAotIG1hdGNoZWQgdGV4dC4gCi0gCi0gSXQgaXMgZXF1aXZhbGVudCB0byB5eXRleHQoKS5jaGFyQXQocG9zKSwgYnV0IGZhc3RlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3l5Y2xvc2UiPnl5Y2xvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDbG9zZXMgdGhlIGlucHV0IHN0cmVhbS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3l5bGVuZ3RoIj55eWxlbmd0aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2hlZCB0ZXh0IHJlZ2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF95eXB1c2hiYWNrIj55eXB1c2hiYWNrPC9hPihpbnQgbnVtYmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFB1c2hlcyB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGJhY2sgaW50byB0aGUgaW5wdXQgc3RyZWFtLgotCi0gVGhleSB3aWxsIGJlIHJlYWQgYWdhaW4gYnkgdGhlbiBuZXh0IGNhbGwgb2YgdGhlIHNjYW5uaW5nIG1ldGhvZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3l5cmVzZXQiPnl5cmVzZXQ8L2E+KGphdmEuaW8uUmVhZGVyIHJlYWRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXNldHMgdGhlIHNjYW5uZXIgdG8gcmVhZCBmcm9tIGEgbmV3IGlucHV0IHN0cmVhbS4KLSBEb2VzIG5vdCBjbG9zZSB0aGUgb2xkIHJlYWRlci4KLQotIEFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgYXJlIHJlc2V0LCB0aGUgb2xkIGlucHV0IHN0cmVhbSAKLSA8Yj5jYW5ub3Q8L2I+IGJlIHJldXNlZCAoaW50ZXJuYWwgYnVmZmVyIGlzIGRpc2NhcmRlZCBhbmQgbG9zdCkuCi0gTGV4aWNhbCBzdGF0ZSBpcyBzZXQgdG8gPHR0PlpaX0lOSVRJQUw8L3R0Pi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3l5c3RhdGUiPnl5c3RhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IGxleGljYWwgc3RhdGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfeXl0ZXh0Ij55eXRleHQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIGN1cnJlbnQgcmVndWxhciBleHByZXNzaW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfQ09NTUVOVCI+Q09NTUVOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkNPTU1FTlQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWVlFT0YiPllZRU9GPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+WVlFT0Y8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoaXMgY2hhcmFjdGVyIGRlbm90ZXMgdGhlIGVuZCBvZiBmaWxlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ZWUlOSVRJQUwiPllZSU5JVElBTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPllZSU5JVElBTDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+bGV4aWNhbCBzdGF0ZXM8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aEZsZXgiPlhQYXRoRmxleDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoRmxleDwvc3Ryb25nPihqYXZhLmlvLlJlYWRlciBpbik8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgc2Nhbm5lcgotIFRoZXJlIGlzIGFsc28gYSBqYXZhLmlvLklucHV0U3RyZWFtIHZlcnNpb24gb2YgdGhpcyBjb25zdHJ1Y3Rvci48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFBhdGhGbGV4Ij5YUGF0aEZsZXg8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5YUGF0aEZsZXg8L3N0cm9uZz4oamF2YS5pby5JbnB1dFN0cmVhbSBpbik8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgc2Nhbm5lci4KLSBUaGVyZSBpcyBhbHNvIGphdmEuaW8uUmVhZGVyIHZlcnNpb24gb2YgdGhpcyBjb25zdHJ1Y3Rvci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb2xubyI+Y29sbm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Y29sbm88L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xpbmVubyI+bGluZW5vPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmxpbmVubzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV4dF90b2tlbiI+bmV4dF90b2tlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCA8c3Ryb25nPm5leHRfdG9rZW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmVzdW1lcyBzY2FubmluZyB1bnRpbCB0aGUgbmV4dCByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZCwKLSB0aGUgZW5kIG9mIGlucHV0IGlzIGVuY291bnRlcmVkIG9yIGFuIEkvTy1FcnJvciBvY2N1cnMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhX2N1cC5ydW50aW1lLlN5bWJvbDwvY29kZT4gLSB0aGUgbmV4dCB0b2tlbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5pby5JT0V4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfeXliZWdpbiI+eXliZWdpbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+eXliZWdpbjwvc3Ryb25nPihpbnQgbmV3U3RhdGUpPC9jb2RlPjwvcD48cD5FbnRlcnMgYSBuZXcgbGV4aWNhbCBzdGF0ZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3U3RhdGU8L2NvZGU+IC0gdGhlIG5ldyBsZXhpY2FsIHN0YXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3l5Y2hhcmF0Ij55eWNoYXJhdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBjaGFyIDxzdHJvbmc+eXljaGFyYXQ8L3N0cm9uZz4oaW50IHBvcyk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNoYXJhY3RlciBhdCBwb3NpdGlvbiA8dHQ+cG9zPC90dD4gZnJvbSB0aGUgCi0gbWF0Y2hlZCB0ZXh0LiAKLSAKLSBJdCBpcyBlcXVpdmFsZW50IHRvIHl5dGV4dCgpLmNoYXJBdChwb3MpLCBidXQgZmFzdGVyPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wb3M8L2NvZGU+IC0gdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgdG8gZmV0Y2guICAgICAgICAgICAgICBBIHZhbHVlIGZyb20gMCB0byB5eWxlbmd0aCgpLTEuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5jaGFyPC9jb2RlPiAtIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3l5Y2xvc2UiPnl5Y2xvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnl5Y2xvc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2xvc2VzIHRoZSBpbnB1dCBzdHJlYW0uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmlvLklPRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95eWxlbmd0aCI+eXlsZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+eXlsZW5ndGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaGVkIHRleHQgcmVnaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95eXB1c2hiYWNrIj55eXB1c2hiYWNrPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz55eXB1c2hiYWNrPC9zdHJvbmc+KGludCBudW1iZXIpPC9jb2RlPjwvcD48cD5QdXNoZXMgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBiYWNrIGludG8gdGhlIGlucHV0IHN0cmVhbS4KLQotIFRoZXkgd2lsbCBiZSByZWFkIGFnYWluIGJ5IHRoZW4gbmV4dCBjYWxsIG9mIHRoZSBzY2FubmluZyBtZXRob2Q8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm51bWJlcjwvY29kZT4gLSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVhZCBhZ2Fpbi4gICAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiB5eWxlbmd0aCgpITwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95eXJlc2V0Ij55eXJlc2V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz55eXJlc2V0PC9zdHJvbmc+KGphdmEuaW8uUmVhZGVyIHJlYWRlcik8L2NvZGU+PC9wPjxwPlJlc2V0cyB0aGUgc2Nhbm5lciB0byByZWFkIGZyb20gYSBuZXcgaW5wdXQgc3RyZWFtLgotIERvZXMgbm90IGNsb3NlIHRoZSBvbGQgcmVhZGVyLgotCi0gQWxsIGludGVybmFsIHZhcmlhYmxlcyBhcmUgcmVzZXQsIHRoZSBvbGQgaW5wdXQgc3RyZWFtIAotIDxiPmNhbm5vdDwvYj4gYmUgcmV1c2VkIChpbnRlcm5hbCBidWZmZXIgaXMgZGlzY2FyZGVkIGFuZCBsb3N0KS4KLSBMZXhpY2FsIHN0YXRlIGlzIHNldCB0byA8dHQ+WlpfSU5JVElBTDwvdHQ+LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVhZGVyPC9jb2RlPiAtIHRoZSBuZXcgaW5wdXQgc3RyZWFtPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3l5c3RhdGUiPnl5c3RhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+eXlzdGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjdXJyZW50IGxleGljYWwgc3RhdGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3l5dGV4dCI+eXl0ZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz55eXRleHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgdGV4dCBtYXRjaGVkIGJ5IHRoZSBjdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhwYXRoU3ltLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YcGF0aFN5bS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWU4ZmUxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhwYXRoU3ltLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhwYXRoU3ltPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WHBhdGhTeW08L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkNVUCBnZW5lcmF0ZWQgY2xhc3MgY29udGFpbmluZyBzeW1ib2wgY29uc3RhbnRzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FOQ0VTVE9SIj5BTkNFU1RPUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BTkNFU1RPUl9PUl9TRUxGIj5BTkNFU1RPUl9PUl9TRUxGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FORCI+QU5EPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FTIj5BUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BVF9TWU0iPkFUX1NZTTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BVFRSSUJVVEUiPkFUVFJJQlVURTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DQVNUIj5DQVNUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NBU1RBQkxFIj5DQVNUQUJMRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DSElMRCI+Q0hJTEQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ09MT04iPkNPTE9OPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NPTE9OQ09MT04iPkNPTE9OQ09MT048L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ09NTUEiPkNPTU1BPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NPTU1FTlQiPkNPTU1FTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfREVDSU1BTCI+REVDSU1BTDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ERVNDRU5EQU5UIj5ERVNDRU5EQU5UPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RFU0NFTkRBTlRfT1JfU0VMRiI+REVTQ0VOREFOVF9PUl9TRUxGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RJViI+RElWPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RPQ1VNRU5UX05PREUiPkRPQ1VNRU5UX05PREU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9MTEFSIj5ET0xMQVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9UIj5ET1Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9URE9UIj5ET1RET1Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9VQkxFIj5ET1VCTEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRUxFTUVOVCI+RUxFTUVOVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FTFNFIj5FTFNFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0VNUFRZX1NFUVVFTkNFIj5FTVBUWV9TRVFVRU5DRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FT0YiPkVPRjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FUSI+RVE8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRVFVQUxTIj5FUVVBTFM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZXJyb3IiPmVycm9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0VWRVJZIj5FVkVSWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FWENFUFQiPkVYQ0VQVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9GT0xMT1dJTkciPkZPTExPV0lORzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9GT0xMT1dJTkdfU0lCTElORyI+Rk9MTE9XSU5HX1NJQkxJTkc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRk9SIj5GT1I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRk9SV0FSRF9TTEFTSCI+Rk9SV0FSRF9TTEFTSDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9GT1JXQVJEX1NMQVNIU0xBU0giPkZPUldBUkRfU0xBU0hTTEFTSDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HRSI+R0U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfR1JFQVRFUiI+R1JFQVRFUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HUkVBVEVSX0dSRUFURVIiPkdSRUFURVJfR1JFQVRFUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HUkVBVEVSRVFVQUwiPkdSRUFURVJFUVVBTDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HVCI+R1Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSURJViI+SURJVjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JRiI+SUY8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU4iPklOPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lOU1RBTkNFIj5JTlNUQU5DRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTlRFR0VSIj5JTlRFR0VSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lOVEVSU0VDVCI+SU5URVJTRUNUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lTIj5JUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JVEVNIj5JVEVNPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0xCUkFDS0VUIj5MQlJBQ0tFVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9MRSI+TEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTEVTU19MRVNTIj5MRVNTX0xFU1M8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTEVTU0VRVUFMIj5MRVNTRVFVQUw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTEVTU1RIQU4iPkxFU1NUSEFOPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0xQQVIiPkxQQVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTFQiPkxUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01JTlVTIj5NSU5VUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NT0QiPk1PRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQU1FU1BBQ0UiPk5BTUVTUEFDRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQ05BTUUiPk5DTkFNRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ORSI+TkU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTk9ERSI+Tk9ERTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OT1RFUVVBTFMiPk5PVEVRVUFMUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9PRiI+T0Y8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfT1IiPk9SPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1BBUkVOVCI+UEFSRU5UPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1BJUEUiPlBJUEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUExVUyI+UExVUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QUkVDRURJTkciPlBSRUNFRElORzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QUkVDRURJTkdfU0lCTElORyI+UFJFQ0VESU5HX1NJQkxJTkc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiI+UFJPQ0VTU0lOR19JTlNUUlVDVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9RVUVTVElPTk1BUksiPlFVRVNUSU9OTUFSSzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9SQlJBQ0tFVCI+UkJSQUNLRVQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUkVUVVJOIj5SRVRVUk48L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUlBBUiI+UlBBUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TQVRJU0ZJRVMiPlNBVElTRklFUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TQ0hFTUFfQVRUUklCVVRFIj5TQ0hFTUFfQVRUUklCVVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NDSEVNQV9FTEVNRU5UIj5TQ0hFTUFfRUxFTUVOVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TRUxGIj5TRUxGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NPTUUiPlNPTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU1RBUiI+U1RBUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TVFJJTkciPlNUUklORzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9URVhUIj5URVhUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RIRU4iPlRIRU48L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVE8iPlRPPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RSRUFUIj5UUkVBVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9UWVBFU1dJVENIIj5UWVBFU1dJVENIPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1VOSU9OIj5VTklPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWHBhdGhTeW0iPlhwYXRoU3ltPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FOQ0VTVE9SIj5BTkNFU1RPUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkFOQ0VTVE9SPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FOQ0VTVE9SX09SX1NFTEYiPkFOQ0VTVE9SX09SX1NFTEY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5BTkNFU1RPUl9PUl9TRUxGPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FORCI+QU5EPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+QU5EPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FTIj5BUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkFTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FUX1NZTSI+QVRfU1lNPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+QVRfU1lNPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FUVFJJQlVURSI+QVRUUklCVVRFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+QVRUUklCVVRFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NBU1QiPkNBU1Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5DQVNUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NBU1RBQkxFIj5DQVNUQUJMRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkNBU1RBQkxFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NISUxEIj5DSElMRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkNISUxEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NPTE9OIj5DT0xPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkNPTE9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NPTE9OQ09MT04iPkNPTE9OQ09MT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5DT0xPTkNPTE9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NPTU1BIj5DT01NQTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkNPTU1BPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NPTU1FTlQiPkNPTU1FTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5DT01NRU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RFQ0lNQUwiPkRFQ0lNQUw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5ERUNJTUFMPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RFU0NFTkRBTlQiPkRFU0NFTkRBTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5ERVNDRU5EQU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RFU0NFTkRBTlRfT1JfU0VMRiI+REVTQ0VOREFOVF9PUl9TRUxGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+REVTQ0VOREFOVF9PUl9TRUxGPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RJViI+RElWPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RElWPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RPQ1VNRU5UX05PREUiPkRPQ1VNRU5UX05PREU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5ET0NVTUVOVF9OT0RFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RPTExBUiI+RE9MTEFSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RE9MTEFSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RPVCI+RE9UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RE9UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RPVERPVCI+RE9URE9UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RE9URE9UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RPVUJMRSI+RE9VQkxFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RE9VQkxFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VMRU1FTlQiPkVMRU1FTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5FTEVNRU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VMU0UiPkVMU0U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5FTFNFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VNUFRZX1NFUVVFTkNFIj5FTVBUWV9TRVFVRU5DRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkVNUFRZX1NFUVVFTkNFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VPRiI+RU9GPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RU9GPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VRIj5FUTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkVRPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VRVUFMUyI+RVFVQUxTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RVFVQUxTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2Vycm9yIj5lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPmVycm9yPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VWRVJZIj5FVkVSWTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkVWRVJZPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VYQ0VQVCI+RVhDRVBUPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RVhDRVBUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0ZPTExPV0lORyI+Rk9MTE9XSU5HPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Rk9MTE9XSU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0ZPTExPV0lOR19TSUJMSU5HIj5GT0xMT1dJTkdfU0lCTElORzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkZPTExPV0lOR19TSUJMSU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0ZPUiI+Rk9SPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Rk9SPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0ZPUldBUkRfU0xBU0giPkZPUldBUkRfU0xBU0g8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5GT1JXQVJEX1NMQVNIPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0ZPUldBUkRfU0xBU0hTTEFTSCI+Rk9SV0FSRF9TTEFTSFNMQVNIPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Rk9SV0FSRF9TTEFTSFNMQVNIPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0dFIj5HRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkdFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0dSRUFURVIiPkdSRUFURVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5HUkVBVEVSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0dSRUFURVJfR1JFQVRFUiI+R1JFQVRFUl9HUkVBVEVSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+R1JFQVRFUl9HUkVBVEVSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0dSRUFURVJFUVVBTCI+R1JFQVRFUkVRVUFMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+R1JFQVRFUkVRVUFMPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0dUIj5HVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkdUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lESVYiPklESVY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5JRElWPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lGIj5JRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPklGPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lOIj5JTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPklOPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lOU1RBTkNFIj5JTlNUQU5DRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPklOU1RBTkNFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lOVEVHRVIiPklOVEVHRVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5JTlRFR0VSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lOVEVSU0VDVCI+SU5URVJTRUNUPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+SU5URVJTRUNUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lTIj5JUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPklTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lURU0iPklURU08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5JVEVNPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xCUkFDS0VUIj5MQlJBQ0tFVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkxCUkFDS0VUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xFIj5MRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkxFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xFU1NfTEVTUyI+TEVTU19MRVNTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TEVTU19MRVNTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xFU1NFUVVBTCI+TEVTU0VRVUFMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TEVTU0VRVUFMPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xFU1NUSEFOIj5MRVNTVEhBTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkxFU1NUSEFOPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xQQVIiPkxQQVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5MUEFSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xUIj5MVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkxUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01JTlVTIj5NSU5VUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk1JTlVTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01PRCI+TU9EPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TU9EPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05BTUVTUEFDRSI+TkFNRVNQQUNFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TkFNRVNQQUNFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05DTkFNRSI+TkNOQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TkNOQU1FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05FIj5ORTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk5FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05PREUiPk5PREU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5OT0RFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05PVEVRVUFMUyI+Tk9URVFVQUxTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Tk9URVFVQUxTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX09GIj5PRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk9GPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX09SIj5PUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk9SPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BBUkVOVCI+UEFSRU5UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+UEFSRU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BJUEUiPlBJUEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5QSVBFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BMVVMiPlBMVVM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5QTFVTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BSRUNFRElORyI+UFJFQ0VESU5HPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+UFJFQ0VESU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BSRUNFRElOR19TSUJMSU5HIj5QUkVDRURJTkdfU0lCTElORzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlBSRUNFRElOR19TSUJMSU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04iPlBST0NFU1NJTkdfSU5TVFJVQ1RJT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1FVRVNUSU9OTUFSSyI+UVVFU1RJT05NQVJLPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+UVVFU1RJT05NQVJLPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JCUkFDS0VUIj5SQlJBQ0tFVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlJCUkFDS0VUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JFVFVSTiI+UkVUVVJOPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+UkVUVVJOPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JQQVIiPlJQQVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5SUEFSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NBVElTRklFUyI+U0FUSVNGSUVTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+U0FUSVNGSUVTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NDSEVNQV9BVFRSSUJVVEUiPlNDSEVNQV9BVFRSSUJVVEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5TQ0hFTUFfQVRUUklCVVRFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NDSEVNQV9FTEVNRU5UIj5TQ0hFTUFfRUxFTUVOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlNDSEVNQV9FTEVNRU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NFTEYiPlNFTEY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5TRUxGPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NPTUUiPlNPTUU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5TT01FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NUQVIiPlNUQVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5TVEFSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NUUklORyI+U1RSSU5HPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+U1RSSU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RFWFQiPlRFWFQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5URVhUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RIRU4iPlRIRU48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5USEVOPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RPIj5UTzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlRPPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RSRUFUIj5UUkVBVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlRSRUFUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RZUEVTV0lUQ0giPlRZUEVTV0lUQ0g8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5UWVBFU1dJVENIPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1VOSU9OIj5VTklPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlVOSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YcGF0aFN5bSI+WHBhdGhTeW08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YcGF0aFN5bTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BZGRFeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MDVhMzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFkZEV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BZGRFeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjwvcHJlPkNsYXNzIGZvciBiaW5hcnkgb3BlcmF0aW9uIEFkZCwgdGFrZXMgMiBpbnB1dHMgYW5kIHJldHVybnMgdGhlIGNvbWJpbmVkCi0gdmFsdWUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0FkZEV4cHIiPkFkZEV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0FkZEV4cHIiPkFkZEV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BZGRFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBBZGRFeHByPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWI1ODBhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBbmRFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QW5kRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5DbGFzcyBmb3IgYmluYXJ5IG9wZXJhdGlvbiBBbmQuIFRoZSB2YWx1ZSBvZiBhbiBhbmQtZXhwcmVzc2lvbiBpcyBkZXRlcm1pbmVkCi0gYnkgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyAoRUJWJ3MpIG9mIGl0cyBvcGVyYW5kcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQW5kRXhwciI+QW5kRXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQW5kRXhwciI+QW5kRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkFuZEV4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEFuZEV4cHIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFueUtpbmRUZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjM2UxZjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFueUtpbmRUZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBbnlLaW5kVGVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkFueUtpbmRUZXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3Q8L3ByZT5DbGFzcyB0byB0ZXN0IGEgdHlwZSBvZiBhbnkga2luZC4gVGhpcyBtYXRjaGVzIGFueSBub2RlIGluIHRoZSBleHByZXNzaW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BbnlLaW5kVGVzdCI+QW55S2luZFRlc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXN0VHlwZSI+Y3JlYXRlVGVzdFR5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhETUNsYXNzVHlwZSI+Z2V0WERNQ2xhc3NUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNXaWxkIj5pc1dpbGQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWUiPm5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BbnlLaW5kVGVzdCI+QW55S2luZFRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BbnlLaW5kVGVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y3JlYXRlVGVzdFR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5nZXRYRE1DbGFzc1R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1dpbGQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW1lIj5uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyRWxlbVRlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyRWxlbVRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwNGJjNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0ckVsZW1UZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBdHRyRWxlbVRlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BdHRyRWxlbVRlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdDwvcHJlPkNvbW1vbiBiYXNlIGNsYXNzIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F0dHJFbGVtVGVzdCI+QXR0ckVsZW1UZXN0PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB3aWxkCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdHlwZSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F0dHJFbGVtVGVzdCI+QXR0ckVsZW1UZXN0PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB3aWxkKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQXR0ckVsZW1UZXN0Ij5BdHRyRWxlbVRlc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzaG9ydDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREZXJ2aWF0aW9uVHlwZXMiPmdldERlcnZpYXRpb25UeXBlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmFtZSI+bmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIG5hbWUgdGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGUiPnR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0eXBlIHRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfd2lsZCI+d2lsZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHdpbGRjYXJkIHRlc3QuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQXR0ckVsZW1UZXN0Ij5BdHRyRWxlbVRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BdHRyRWxlbVRlc3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gd2lsZAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHR5cGUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIDMgaW5wdXRzLAotIE5hbWUsIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkgYW5kIHR5cGUuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0F0dHJFbGVtVGVzdCI+QXR0ckVsZW1UZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QXR0ckVsZW1UZXN0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHdpbGQpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lCi0gYW5kIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0F0dHJFbGVtVGVzdCI+QXR0ckVsZW1UZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QXR0ckVsZW1UZXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkRlZmF1bHQgQ29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZSBhbmQgRWxlbWVudCB0ZXN0cy4gVGhpcyB0YWtlcyBpbiBubwotIGlucHV0cy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREZXJ2aWF0aW9uVHlwZXMiPmdldERlcnZpYXRpb25UeXBlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzaG9ydCA8c3Ryb25nPmdldERlcnZpYXRpb25UeXBlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPnNob3J0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW1lIj5uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgbmFtZSB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIFJlc3VsdCBvZiBuYW1lIHRlc3QuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGUiPnR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+dHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciB0eXBlIHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gUmVzdWx0IG9mIHR5cGUgdGVzdC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfd2lsZCI+d2lsZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+d2lsZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciB3aWxkY2FyZCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBSZXN1bHQgb2Ygd2lsZGNhcmQgdGVzdC48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyaWJ1dGVUZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ODI3MGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEF0dHJpYnV0ZVRlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BdHRyaWJ1dGVUZXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0ckVsZW1UZXN0PC9wcmU+Q2xhc3MgdXNlZCB0byBtYXRjaCBhbiBhdHRyaWJ1dGUgbm9kZSBieSBpdHMgbmFtZSBhbmQvb3IgdHlwZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQXR0cmlidXRlVGVzdCI+QXR0cmlidXRlVGVzdDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gd2lsZAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHR5cGUpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BdHRyaWJ1dGVUZXN0Ij5BdHRyaWJ1dGVUZXN0PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB3aWxkKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQXR0cmlidXRlVGVzdCI+QXR0cmlidXRlVGVzdDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVRlc3RUeXBlIj5jcmVhdGVUZXN0VHlwZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0WERNQ2xhc3NUeXBlIj5nZXRYRE1DbGFzc1R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1dpbGQiPmlzV2lsZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0F0dHJpYnV0ZVRlc3QiPkF0dHJpYnV0ZVRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BdHRyaWJ1dGVUZXN0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHdpbGQKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB0eXBlKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZVRlc3QuIFRoaXMgb25lIHRha2VzIGluIDMgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotIHRlc3QodHJ1ZS9mYWxzZSkgYW5kIHR5cGUuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0F0dHJpYnV0ZVRlc3QiPkF0dHJpYnV0ZVRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BdHRyaWJ1dGVUZXN0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHdpbGQpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlVGVzdC4gVGhpcyBvbmUgdGFrZXMgaW4gMiBpbnB1dHMsIE5hbWUgYW5kCi0gd2lsZGNhcmQgdGVzdCh0cnVlL2ZhbHNlKS48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fQXR0cmlidXRlVGVzdCI+QXR0cmlidXRlVGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkF0dHJpYnV0ZVRlc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RGVmYXVsdCBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlVGVzdC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y3JlYXRlVGVzdFR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5nZXRYRE1DbGFzc1R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1dpbGQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXhpc1N0ZXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTIwNGRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQXhpc1N0ZXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BeGlzU3RlcDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByPC9wcmU+Q2xhc3MgZm9yIEF4aXNTdGVwLCB0aGlzIGdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBub2Rlcy4gVGhlc2UKLSBub2RlcyBhcmUgYWx3YXlzIHJldHVybmVkIGluIERvY3VtZW50IE9yZGVyLiBUaGlzIGNhbiBiZSBGb3J3YXJkIFN0ZXAgb3IKLSBSZXZlcnNlIFN0ZXAuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F4aXNTdGVwIj5BeGlzU3RlcDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwIHN0ZXAKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGV4cHJzKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBJbnRlcmF0b3IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmVkaWNhdGVfY291bnQiPnByZWRpY2F0ZV9jb3VudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERldGVybWluZXMgc2l6ZSBvZiBleHByZXNzaW9ucy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfc3RlcCI+c2V0X3N0ZXA8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCBzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgc3RlcCBkaXJlY3Rpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGVwIj5zdGVwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWR2YW5jZXMgdG8gbmV4dCBzdGVwLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0F4aXNTdGVwIj5BeGlzU3RlcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkF4aXNTdGVwPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCBzdGVwCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBleHBycyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBBeGlzU3RlcC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvciA8c3Ryb25nPml0ZXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkludGVyYXRvci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5JdGVyYXRvcjwvY29kZT4gLSBJdGVyYXRlZCBleHByZXNzaW9ucy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJlZGljYXRlX2NvdW50Ij5wcmVkaWNhdGVfY291bnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+cHJlZGljYXRlX2NvdW50PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkRldGVybWluZXMgc2l6ZSBvZiBleHByZXNzaW9ucy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBTaXplIG9mIGV4cHJlc3Npb25zLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfc3RlcCI+c2V0X3N0ZXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9zdGVwPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCBzKTwvY29kZT48L3A+PHA+U2V0IHRoZSBzdGVwIGRpcmVjdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnM8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0ZXAiPnN0ZXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwIDxzdHJvbmc+c3RlcDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5BZHZhbmNlcyB0byBuZXh0IHN0ZXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXA8L2NvZGU+IC0gUHJldmlvdXMgc3RlcC48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3N2Q5NWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEJpbkV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5CaW5FeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjwvcHJlPkFic3RyYWN0IGNsYXNzIGZvciBhIEJpbmFyeSBvcGVyYXRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0JpbkV4cHIiPkJpbkV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGVmdCI+bGVmdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIExlZnQgeHBhdGggbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmlnaHQiPnJpZ2h0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmlnaHQgeHBhdGggbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfbGVmdCI+c2V0X2xlZnQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBsZWZ0IHhwYXRoIG5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3JpZ2h0Ij5zZXRfcmlnaHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSByaWdodCB4cGF0aCBub2RlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0JpbkV4cHIiPkJpbkV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5CaW5FeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIHIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgQmluRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9sZWZ0Ij5sZWZ0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIDxzdHJvbmc+bGVmdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5MZWZ0IHhwYXRoIG5vZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTwvY29kZT4gLSBMZWZ0IG5vZGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JpZ2h0Ij5yaWdodDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSA8c3Ryb25nPnJpZ2h0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJpZ2h0IHhwYXRoIG5vZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTwvY29kZT4gLSBSaWdodCBub2RlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfbGVmdCI+c2V0X2xlZnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9sZWZ0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG4pPC9jb2RlPjwvcD48cD5TZXQgdGhlIGxlZnQgeHBhdGggbm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm48L2NvZGU+IC0gTGVmdCBub2RlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfcmlnaHQiPnNldF9yaWdodDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X3JpZ2h0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIG4pPC9jb2RlPjwvcD48cD5TZXQgdGhlIHJpZ2h0IHhwYXRoIG5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uPC9jb2RlPiAtIFJpZ2h0IG5vZGUuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0RXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTEzYTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDYXN0RXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNhc3RFeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjwvcHJlPkEgY2xhc3MgdGhhdCBjcmVhdGVzIGEgbmV3IHZhbHVlIG9mIGEgc3BlY2lmaWMgdHlwZSBiYXNlZCBvbiBhbiBleGlzdGluZwotIHZhbHVlLiBBIGNhc3QgZXhwcmVzc2lvbiB0YWtlcyB0d28gb3BlcmFuZHM6IGFuIGlucHV0IGV4cHJlc3Npb24gYW5kIGEgdGFyZ2V0Ci0gdHlwZS4gVGhlIHR5cGUgb2YgdGhlIGlucHV0IGV4cHJlc3Npb24gaXMgY2FsbGVkIHRoZSBpbnB1dCB0eXBlLiBUaGUgdGFyZ2V0Ci0gdHlwZSBtdXN0IGJlIGEgbmFtZWQgYXRvbWljIHR5cGUsIHJlcHJlc2VudGVkIGJ5IGEgUU5hbWUsIG9wdGlvbmFsbHkgZm9sbG93ZWQKLSBieSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgPyBpZiBhbiBlbXB0eSBzZXF1ZW5jZSBpcyBwZXJtaXR0ZWQuIElmIHRoZQotIHRhcmdldCB0eXBlIGhhcyBubyBuYW1lc3BhY2UgcHJlZml4LCBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBkZWZhdWx0Ci0gZWxlbWVudC90eXBlIG5hbWVzcGFjZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ2FzdEV4cHIiPkNhc3RFeHByPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9DYXN0RXhwciI+Q2FzdEV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5DYXN0RXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIHIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgQ2FzdEV4cHIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2ZTQ3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDYXN0YWJsZUV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DYXN0YWJsZUV4cHI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByPC9wcmU+QSBjbGFzcyB0aGF0IHRlc3RzIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBjYXN0YWJsZSBpbnRvIGEgZ2l2ZW4gdHlwZS4gVGhpcwotIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSB0eXBlIGZvciBwcm9jZXNzaW5nIGEgZ2l2ZW4gdmFsdWUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Nhc3RhYmxlRXhwciI+Q2FzdGFibGVFeHByPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9DYXN0YWJsZUV4cHIiPkNhc3RhYmxlRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNhc3RhYmxlRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIHIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBvZiBDYXN0YWJsZUV4cHI8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNtcEV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzgwNmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNtcEV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIENtcEV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DbXBFeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjwvcHJlPlRoZSBjb21wYXJpc29uIG9mIGV4cHJlc3Npb24gb3BlcmF0b3IgdGFrZXMgdGhlIHZhbHVlIG9mIGl0cyBsZWZ0IG9wZXJhbmQgYW5kCi0gY29tcGFyZXMgKGRlcGVuZGFudCBvbiB0eXBlKSBhZ2FpbnN0IGl0cyByaWdodCBvcGVyYW5kLCBhY2NvcmRpbmcgdG8gdGhlCi0gcnVsZXMgb2YgdGhlIHBhcnRpY3VsYXIgY29tcGFyaXNvbiBydWxlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRVEiPkVRPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVEgb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0VRVUFMUyI+RVFVQUxTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVFVQUxTIG9wZXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HRSI+R0U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBHRSBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfR1JFQVRFUiI+R1JFQVRFUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVIgb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0dSRUFURVJfR1JFQVRFUiI+R1JFQVRFUl9HUkVBVEVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1JFQVRFUl9HUkVBVEVSIG9wZXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HUkVBVEVSRVFVQUwiPkdSRUFURVJFUVVBTDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVJFUVVBTCBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfR1QiPkdUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1Qgb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lTIj5JUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIElTIG9wZXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9MRSI+TEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBMRSBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTEVTU19MRVNTIj5MRVNTX0xFU1M8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTX0xFU1Mgb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0xFU1NFUVVBTCI+TEVTU0VRVUFMPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEVTU0VRVUFMIG9wZXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9MRVNTVEhBTiI+TEVTU1RIQU48L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTVEhBTiBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTFQiPkxUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTFQgb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05FIj5ORTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5FIG9wZXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OT1RFUVVBTFMiPk5PVEVRVUFMUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5PVEVRVUFMUyBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NtcEV4cHIiPkNtcEV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcgotICAgICAgICAgLAotICAgICAgaW50IHR5cGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGUiPnR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0VRIj5FUTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkVRPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEVRIG9wZXJhdGlvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VRVUFMUyI+RVFVQUxTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RVFVQUxTPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEVRVUFMUyBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9HRSI+R0U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5HRTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBHRSBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9HUkVBVEVSIj5HUkVBVEVSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+R1JFQVRFUjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBHUkVBVEVSIG9wZXJhdGlvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0dSRUFURVJfR1JFQVRFUiI+R1JFQVRFUl9HUkVBVEVSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+R1JFQVRFUl9HUkVBVEVSPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVJfR1JFQVRFUiBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9HUkVBVEVSRVFVQUwiPkdSRUFURVJFUVVBTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkdSRUFURVJFUVVBTDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBHUkVBVEVSRVFVQUwgb3BlcmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfR1QiPkdUPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+R1Q8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1Qgb3BlcmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSVMiPklTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+SVM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgSVMgb3BlcmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTEUiPkxFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TEU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEUgb3BlcmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTEVTU19MRVNTIj5MRVNTX0xFU1M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5MRVNTX0xFU1M8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEVTU19MRVNTIG9wZXJhdGlvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0xFU1NFUVVBTCI+TEVTU0VRVUFMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+TEVTU0VRVUFMPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExFU1NFUVVBTCBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9MRVNTVEhBTiI+TEVTU1RIQU48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5MRVNTVEhBTjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTVEhBTiBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9MVCI+TFQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5MVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBMVCBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ORSI+TkU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5ORTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBORSBvcGVyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OT1RFUVVBTFMiPk5PVEVRVUFMUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk5PVEVRVUFMUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBOT1RFUVVBTFMgb3BlcmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NtcEV4cHIiPkNtcEV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5DbXBFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcgotICAgICAgICAgLAotICAgICAgaW50IHR5cGUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgQ21wRXhwcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlIj50eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gY29tcGFyaXNvbiB0eXBlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyMTUxZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIENudHhJdGVtRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNudHhJdGVtRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlByaW1hcnlFeHByPC9wcmU+Q2xhc3MgZm9yIENvbnRleHQgSXRlbSBFeHByZXNpb25zLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9DbnR4SXRlbUV4cHIiPkNudHhJdGVtRXhwcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ250eEl0ZW1FeHByIj5DbnR4SXRlbUV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5DbnR4SXRlbUV4cHI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Db21tZW50VGVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMjUwMmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDb21tZW50VGVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNvbW1lbnRUZXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3Q8L3ByZT5DbGFzcyBmb3IgQ29tbWVudCB0ZXN0aW5nLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Db21tZW50VGVzdCI+Q29tbWVudFRlc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXN0VHlwZSI+Y3JlYXRlVGVzdFR5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhETUNsYXNzVHlwZSI+Z2V0WERNQ2xhc3NUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNXaWxkIj5pc1dpbGQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWUiPm5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Db21tZW50VGVzdCI+Q29tbWVudFRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Db21tZW50VGVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y3JlYXRlVGVzdFR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5nZXRYRE1DbGFzc1R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1dpbGQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW1lIj5uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MTg3MjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWNpbWFsTGl0ZXJhbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRlY2ltYWxMaXRlcmFsPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTnVtZXJpY0xpdGVyYWw8L3ByZT5UaGUgdmFsdWUgb2YgYSBudW1lcmljIGxpdGVyYWwgY29udGFpbmluZyAiLiIgYnV0IG5vIGUgb3IgRSBjaGFyYWN0ZXIgaXMgYW4KLSBhdG9taWMgdmFsdWUgb2YgdHlwZSB4czpkZWNpbWFsPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlY2ltYWxMaXRlcmFsIj5EZWNpbWFsTGl0ZXJhbDwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0RlY2ltYWwgdmFsdWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWNpbWFsTGl0ZXJhbCI+RGVjaW1hbExpdGVyYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5EZWNpbWFsTGl0ZXJhbDwvc3Ryb25nPihqYXZhLm1hdGguQmlnRGVjaW1hbCB2YWx1ZSk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBEZWNpbWFsTGl0ZXJhbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbCA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbDwvY29kZT4gLSB4czpkZWNpbWFsIHZhbHVlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGl2RXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2M0ZjIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEaXZFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGl2RXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5DbGFzcyBmb3IgRGl2aXNpb24gZXhwcmVzc2lvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RpdkV4cHIiPkRpdkV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RpdkV4cHIiPkRpdkV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5EaXZFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBEaXZFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTAxZjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvY3VtZW50VGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRG9jdW1lbnRUZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RG9jdW1lbnRUZXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3Q8L3ByZT5DbGFzcyBmb3IgRG9jdW1lbnQgdGVzdGluZy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FTEVNRU5UIj5FTEVNRU5UPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRUxFTUVOVC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OT05FIj5OT05FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TQ0hFTUFfRUxFTUVOVCI+U0NIRU1BX0VMRU1FTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBTQ0hFTUFfRUxFTUVOVC48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRG9jdW1lbnRUZXN0Ij5Eb2N1bWVudFRlc3Q8L2E+PC9zdHJvbmc+KGludCB0eXBlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IGFyZyk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RvY3VtZW50VGVzdCI+RG9jdW1lbnRUZXN0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0ckVsZW1UZXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VsZW1fdGVzdCI+ZWxlbV90ZXN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRWxlbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0WERNQ2xhc3NUeXBlIj5nZXRYRE1DbGFzc1R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1dpbGQiPmlzV2lsZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmFtZSI+bmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NjaGVtYV9lbGVtX3Rlc3QiPnNjaGVtYV9lbGVtX3Rlc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTY2hlbWEgZWxlbWVudCB0ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZSI+dHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0ZXN0IHR5cGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9FTEVNRU5UIj5FTEVNRU5UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+RUxFTUVOVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBFTEVNRU5ULjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTk9ORSI+Tk9ORTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk5PTkU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NDSEVNQV9FTEVNRU5UIj5TQ0hFTUFfRUxFTUVOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlNDSEVNQV9FTEVNRU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNDSEVNQV9FTEVNRU5ULjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RvY3VtZW50VGVzdCI+RG9jdW1lbnRUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RG9jdW1lbnRUZXN0PC9zdHJvbmc+KGludCB0eXBlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IGFyZyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBEb2N1bWVudFRlc3QuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0RvY3VtZW50VGVzdCI+RG9jdW1lbnRUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RG9jdW1lbnRUZXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkRlZmF1bHQgQ29uc3RydWN0b3IgZm9yIERvY3VtZW50VGVzdC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y3JlYXRlVGVzdFR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbGVtX3Rlc3QiPmVsZW1fdGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJFbGVtVGVzdCA8c3Ryb25nPmVsZW1fdGVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5FbGVtZW50IHRlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJFbGVtVGVzdDwvY29kZT4gLSBFbGVtZW50IHRlc3QuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFhETUNsYXNzVHlwZSI+Z2V0WERNQ2xhc3NUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzcyA8c3Ryb25nPmdldFhETUNsYXNzVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbGFzczwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNXaWxkIj5pc1dpbGQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzV2lsZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25hbWUiPm5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2NoZW1hX2VsZW1fdGVzdCI+c2NoZW1hX2VsZW1fdGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IDxzdHJvbmc+c2NoZW1hX2VsZW1fdGVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TY2hlbWEgZWxlbWVudCB0ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdDwvY29kZT4gLSBTY2hlbWEgZWxlbWVudCB0ZXN0LjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlIj50eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRlc3QgdHlwZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUeXBlIG9mIHRlc3QuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTQ3MmQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEb3VibGVMaXRlcmFsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RG91YmxlTGl0ZXJhbDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk51bWVyaWNMaXRlcmFsPC9wcmU+VGhlIHZhbHVlIG9mIGEgbnVtZXJpYyBsaXRlcmFsIGNvbnRhaW5pbmcgYW4gZSBvciBFIGNoYXJhY3RlciBpcyBhbiBhdG9taWMKLSB2YWx1ZSBvZiB0eXBlIHhzOmRvdWJsZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Eb3VibGVMaXRlcmFsIj5Eb3VibGVMaXRlcmFsPC9hPjwvc3Ryb25nPihkb3VibGUgdmFsdWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RvdWJsZUxpdGVyYWwiPkRvdWJsZUxpdGVyYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Eb3VibGVMaXRlcmFsPC9zdHJvbmc+KGRvdWJsZSB2YWx1ZSk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBEb3VibGVpdGVyYWw8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZSA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlPC9jb2RlPiAtIHhzOmRvdWJsZSB2YWx1ZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FbGVtZW50VGVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTQ1ZTE2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FbGVtZW50VGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRWxlbWVudFRlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5FbGVtZW50VGVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJFbGVtVGVzdDwvcHJlPkNsYXNzIGZvciBFbGVtZW50IHRlc3RpbmcuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0VsZW1lbnRUZXN0Ij5FbGVtZW50VGVzdDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gd2lsZAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHR5cGUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gcW1hcmspPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9FbGVtZW50VGVzdCI+RWxlbWVudFRlc3Q8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHdpbGQKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB0eXBlKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRWxlbWVudFRlc3QiPkVsZW1lbnRUZXN0PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB3aWxkKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRWxlbWVudFRlc3QiPkVsZW1lbnRUZXN0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcW1hcmsiPnFtYXJrPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IG5pbGxlZCBwcm9wZXJ0eS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9FbGVtZW50VGVzdCI+RWxlbWVudFRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5FbGVtZW50VGVzdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgbmFtZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB3aWxkCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdHlwZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBxbWFyayk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4gVGhpcyB0YWtlcyBpbiA0IGlucHV0cywgTmFtZSwgd2lsZGNhcmQKLSB0ZXN0KHRydWUvZmFsc2UpLCB0eXBlIGFuZCBxdWVzdGlvbiBtYXJrIHRlc3QodHJ1ZS9mYWxzZSkuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0VsZW1lbnRUZXN0Ij5FbGVtZW50VGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVsZW1lbnRUZXN0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSBuYW1lCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHdpbGQKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSB0eXBlKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDMgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotIHRlc3QodHJ1ZS9mYWxzZSlhbmQgdHlwZS48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fRWxlbWVudFRlc3QiPkVsZW1lbnRUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RWxlbWVudFRlc3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gd2lsZCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4gVGhpcyB0YWtlcyBpbiAyIGlucHV0cywgTmFtZSwgd2lsZGNhcmQKLSB0ZXN0KHRydWUvZmFsc2UpLjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9FbGVtZW50VGVzdCI+RWxlbWVudFRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5FbGVtZW50VGVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5EZWZhdWx0IENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y3JlYXRlVGVzdFR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5nZXRYRE1DbGFzc1R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1dpbGQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9xbWFyayI+cW1hcms8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnFtYXJrPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlNldCBuaWxsZWQgcHJvcGVydHkuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFJlc3VsdCBvZiBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhjZXB0RXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDMxZmI4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBFeGNlcHRFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RXhjZXB0RXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5UaGUgZXhjZXB0IG9wZXJhdG9yIHRha2VzIHR3byBub2RlIHNlcXVlbmNlcyBhcyBvcGVyYW5kcyBhbmQgcmV0dXJucyBhCi0gc2VxdWVuY2UgY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gdGhlIGZpcnN0IG9wZXJhbmQgYnV0IG5vdCBpbgotIHRoZSBzZWNvbmQgb3BlcmFuZC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRXhjZXB0RXhwciI+RXhjZXB0RXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRXhjZXB0RXhwciI+RXhjZXB0RXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkV4Y2VwdEV4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEV4Y2VwdEV4cHIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYwMjE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5FeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlPC9wcmU+Q2xhc3MgZm9yIG5vcm1hbCBleHByZXNzaW9ucy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRXhwciI+RXhwcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRXhwciI+RXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkV4cHI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRmlsdGVyRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGM5N2UzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBGaWx0ZXJFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RmlsdGVyRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByPC9wcmU+QSBmaWx0ZXIgZXhwcmVzc2lvbiBjb25zaXN0cyBzaW1wbHkgb2YgYSBwcmltYXJ5IGV4cHJlc3Npb24gZm9sbG93ZWQgYnkgemVybwotIG9yIG1vcmUgcHJlZGljYXRlcy4gVGhlIHJlc3VsdCBvZiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gY29uc2lzdHMgb2YgYWxsIHRoZQotIGl0ZW1zIHJldHVybmVkIGJ5IHRoZSBwcmltYXJ5IGV4cHJlc3Npb24gZm9yIHdoaWNoIGFsbCB0aGUgcHJlZGljYXRlcyBhcmUKLSB0cnVlLiBJZiBubyBwcmVkaWNhdGVzIGFyZSBzcGVjaWZpZWQsIHRoZSByZXN1bHQgaXMgc2ltcGx5IHRoZSByZXN1bHQgb2YgdGhlCi0gcHJpbWFyeSBleHByZXNzaW9uLiBUaGlzIHJlc3VsdCBtYXkgY29udGFpbiBub2RlcywgYXRvbWljIHZhbHVlcywgb3IgYW55Ci0gY29tYmluYXRpb24gb2YgdGhlc2UuIFRoZSBvcmRlcmluZyBvZiB0aGUgaXRlbXMgcmV0dXJuZWQgYnkgYSBmaWx0ZXIKLSBleHByZXNzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZWlyIG9yZGVyIGluIHRoZSByZXN1bHQgb2YgdGhlIHByaW1hcnkKLSBleHByZXNzaW9uLiBDb250ZXh0IHBvc2l0aW9ucyBhcmUgYXNzaWduZWQgdG8gaXRlbXMgYmFzZWQgb24gdGhlaXIgb3JkaW5hbAotIHBvc2l0aW9uIGluIHRoZSByZXN1bHQgc2VxdWVuY2UuIFRoZSBmaXJzdCBjb250ZXh0IHBvc2l0aW9uIGlzIDEuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0ZpbHRlckV4cHIiPkZpbHRlckV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIgcGV4cHIKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGV4cHJzKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIG5leHQgcHJlZGljYXRlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJlZGljYXRlX2NvdW50Ij5wcmVkaWNhdGVfY291bnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb3VudCB0aGUgbnVtYmVyIG9mIHByZWRpY2F0ZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJpbWFyeSI+cHJpbWFyeTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgcHJpbWFyeSBleHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9wcmltYXJ5Ij5zZXRfcHJpbWFyeTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QcmltYXJ5RXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBhIG5ldyBwcmltYXJ5IGV4cHJlc3Npb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRmlsdGVyRXhwciI+RmlsdGVyRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZpbHRlckV4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QcmltYXJ5RXhwciBwZXhwcgotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkNvbGxlY3Rpb24gZXhwcnMpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBvZiBGaWx0ZXJFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIDxzdHJvbmc+aXRlcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBuZXh0IHByZWRpY2F0ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5JdGVyYXRvcjwvY29kZT4gLSBUaGUgbmV4dCBwcmVkaWNhdGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZWRpY2F0ZV9jb3VudCI+cHJlZGljYXRlX2NvdW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnByZWRpY2F0ZV9jb3VudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Db3VudCB0aGUgbnVtYmVyIG9mIHByZWRpY2F0ZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIHNpemUgb2YgdGhlIGNvbGxlY3Rpb24gb2YgcHJlZGljYXRlcy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbWFyeSI+cHJpbWFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlByaW1hcnlFeHByIDxzdHJvbmc+cHJpbWFyeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHByaW1hcnkgZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHI8L2NvZGU+IC0gVGhlIHByaW1hcnkgZXhwcmVzc2lvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X3ByaW1hcnkiPnNldF9wcmltYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfcHJpbWFyeTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlByaW1hcnlFeHByIGUpPC9jb2RlPjwvcD48cD5TZXQgYSBuZXcgcHJpbWFyeSBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBpcyBzZXQgYXMgdGhlIG5ldyBwcmltYXJ5IGV4cHJlc3Npb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzZkMmExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBGb3JFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Rm9yRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L3ByZT5DbGFzcyBmb3IgdGhlIEZvciBleHByZXNzaW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Gb3JFeHByIj5Gb3JFeHByPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ29sbGVjdGlvbiB2YXJleHAKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByZXQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cHIiPmV4cHI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBFeHByIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfZXhwciI+c2V0X2V4cHI8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBFeHByZXNzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RydW5jYXRlX3BhaXJzIj50cnVuY2F0ZV9wYWlyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5vcm1hbGl6YXRpb24gb2YgZXhwcmVzc2lvbiBwYWlycy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmVfcGFpcnMiPnZlX3BhaXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRm9yRXhwciI+Rm9yRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZvckV4cHI8L3N0cm9uZz4oamF2YS51dGlsLkNvbGxlY3Rpb24gdmFyZXhwCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcmV0KTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEZvckV4cHIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V4cHIiPmV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIDxzdHJvbmc+ZXhwcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBFeHByIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjwvY29kZT4gLSBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3IgPHN0cm9uZz5pdGVyYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuSXRlcmF0b3I8L2NvZGU+IC0gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2V4cHIiPnNldF9leHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfZXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgZSk8L2NvZGU+PC9wPjxwPlNldCBFeHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBFeHByZXNzaW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90cnVuY2F0ZV9wYWlycyI+dHJ1bmNhdGVfcGFpcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnRydW5jYXRlX3BhaXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPk5vcm1hbGl6YXRpb24gb2YgZXhwcmVzc2lvbiBwYWlycy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmVfcGFpcnMiPnZlX3BhaXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIDxzdHJvbmc+dmVfcGFpcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ29sbGVjdGlvbjwvY29kZT4gLSBFeHByZXNzaW9uIHBhaXJzLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yd2FyZFN0ZXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDUyMTY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRm9yd2FyZFN0ZXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Gb3J3YXJkU3RlcDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXA8L3ByZT5DbGFzcyBmb3IgRm9yd2FyZCBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQVRfU1lNIj5BVF9TWU08L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBBVF9TWU0uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQVRUUklCVVRFIj5BVFRSSUJVVEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBBVFRSSUJVVEUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ0hJTEQiPkNISUxEPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQ0hJTEQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfREVTQ0VOREFOVCI+REVTQ0VOREFOVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIERFU0NFTkRBTlQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfREVTQ0VOREFOVF9PUl9TRUxGIj5ERVNDRU5EQU5UX09SX1NFTEY8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBERVNDRU5EQU5UX09SX1NFTEYuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRk9MTE9XSU5HIj5GT0xMT1dJTkc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBGT0xMT1dJTkcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRk9MTE9XSU5HX1NJQkxJTkciPkZPTExPV0lOR19TSUJMSU5HPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRk9MTE9XSU5HX1NJQkxJTkcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTkFNRVNQQUNFIj5OQU1FU1BBQ0U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBOQU1FU1BBQ0UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTk9ORSI+Tk9ORTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5PTkUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU0VMRiI+U0VMRjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNFTEYuPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0ZvcndhcmRTdGVwIj5Gb3J3YXJkU3RlcDwvYT48L3N0cm9uZz4oaW50IGF4aXMKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3Qgbm9kZV90ZXN0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9heGlzIj5heGlzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgQXhpcyBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X2F4aXMiPnNldF9heGlzPC9hPihpbnQgYXhpcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgQXhpcyB0byBjdXJyZW50LjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfQVRfU1lNIj5BVF9TWU08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5BVF9TWU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQVRfU1lNLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQVRUUklCVVRFIj5BVFRSSUJVVEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5BVFRSSUJVVEU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQVRUUklCVVRFLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQ0hJTEQiPkNISUxEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Q0hJTEQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQ0hJTEQuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ERVNDRU5EQU5UIj5ERVNDRU5EQU5UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+REVTQ0VOREFOVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBERVNDRU5EQU5ULjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfREVTQ0VOREFOVF9PUl9TRUxGIj5ERVNDRU5EQU5UX09SX1NFTEY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5ERVNDRU5EQU5UX09SX1NFTEY8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgREVTQ0VOREFOVF9PUl9TRUxGLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRk9MTE9XSU5HIj5GT0xMT1dJTkc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5GT0xMT1dJTkc8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRk9MTE9XSU5HLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRk9MTE9XSU5HX1NJQkxJTkciPkZPTExPV0lOR19TSUJMSU5HPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Rk9MTE9XSU5HX1NJQkxJTkc8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRk9MTE9XSU5HX1NJQkxJTkcuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OQU1FU1BBQ0UiPk5BTUVTUEFDRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk5BTUVTUEFDRTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBOQU1FU1BBQ0UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OT05FIj5OT05FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+Tk9ORTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfU0VMRiI+U0VMRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlNFTEY8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU0VMRi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Gb3J3YXJkU3RlcCI+Rm9yd2FyZFN0ZXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Gb3J3YXJkU3RlcDwvc3Ryb25nPihpbnQgYXhpcwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Ob2RlVGVzdCBub2RlX3Rlc3QpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgRm9yd2FyZFN0ZXAuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F4aXMiPmF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+YXhpczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBBeGlzIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBSZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXMgPHN0cm9uZz5pdGVyYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXM8L2NvZGU+IC0gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2F4aXMiPnNldF9heGlzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfYXhpczwvc3Ryb25nPihpbnQgYXhpcyk8L2NvZGU+PC9wPjxwPlNldCBBeGlzIHRvIGN1cnJlbnQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5heGlzPC9jb2RlPiAtIEF4aXMgdG8gc2V0LjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YWUyNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZ1bmN0aW9uQ2FsbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRnVuY3Rpb25DYWxsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RnVuY3Rpb25DYWxsPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHI8L3ByZT5DbGFzcyBmb3IgRnVuY3Rpb24gQ2FsbCBzdXBwb3J0Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9GdW5jdGlvbkNhbGwiPkZ1bmN0aW9uQ2FsbDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGFyZ3MpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FyaXR5Ij5hcml0eTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIEFyaXR5IGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWUiPm5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRnVuY3Rpb25DYWxsIj5GdW5jdGlvbkNhbGw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5GdW5jdGlvbkNhbGw8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGFyZ3MpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgRnVuY3Rpb25DYWxsLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hcml0eSI+YXJpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+YXJpdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgQXJpdHkgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFJlc3VsdCBvZiBBcml0eSBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3IgPHN0cm9uZz5pdGVyYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuSXRlcmF0b3I8L2NvZGU+IC0gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmFtZSI+bmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JRGl2RXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDY3M2Q1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JRGl2RXhwci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSURpdkV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JRGl2RXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5TdXBwb3J0IGZvciBJbnRlZ2VyIGRpdmlzaW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9JRGl2RXhwciI+SURpdkV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0lEaXZFeHByIj5JRGl2RXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPklEaXZFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBJRGl2RXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U4YmZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIElmRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPklmRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L3ByZT5TdXBwb3J0IGZvciBJRiBleHByZXNzaW9ucy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSWZFeHByIj5JZkV4cHI8L2E+PC9zdHJvbmc+KGphdmEudXRpbC5Db2xsZWN0aW9uIGV4cHMKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciB0Ci0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZWxzZV9jbGF1c2UiPmVsc2VfY2xhdXNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aGVuX2NsYXVzZSI+dGhlbl9jbGF1c2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9JZkV4cHIiPklmRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPklmRXhwcjwvc3Ryb25nPihqYXZhLnV0aWwuQ29sbGVjdGlvbiBleHBzCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgdAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgSWZFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbHNlX2NsYXVzZSI+ZWxzZV9jbGF1c2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIDxzdHJvbmc+ZWxzZV9jbGF1c2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L2NvZGU+IC0gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIDxzdHJvbmc+aXRlcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPiAtIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RoZW5fY2xhdXNlIj50aGVuX2NsYXVzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgPHN0cm9uZz50aGVuX2NsYXVzZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjwvY29kZT4gLSBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTI2MTRiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBJbnN0T2ZFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SW5zdE9mRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5UaGUgYm9vbGVhbiBvcGVyYXRvciAnaW5zdGFuY2Ugb2YnIHRha2VzIHRoZSB2YWx1ZSBvZiBpdHMgZmlyc3Qgb3BlcmFuZCBhbmQKLSBtYXRjaGVzIGl0cyB0eXBlIHRvIHRoZSBTZXF1ZW5jZVR5cGUgaW4gaXRzIHNlY29uZCBvcGVyYW5kLCBhY2NvcmRpbmcgdG8gdGhlCi0gcnVsZXMgZm9yIFNlcXVlbmNlVHlwZSBtYXRjaGluZy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSW5zdE9mRXhwciI+SW5zdE9mRXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9JbnN0T2ZFeHByIj5JbnN0T2ZFeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SW5zdE9mRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBJbnN0T2ZFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZWdlckxpdGVyYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2IxZDBhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSW50ZWdlckxpdGVyYWw8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JbnRlZ2VyTGl0ZXJhbDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk51bWVyaWNMaXRlcmFsPC9wcmU+VGhlIHZhbHVlIG9mIGEgbnVtZXJpYyBsaXRlcmFsIGNvbnRhaW5pbmcgbm8gIi4iIGFuYWQgbm8gZSBvciBFIGNoYXJhY3RlciBpcwotIGFuIGF0b21pYyB2YWx1ZSBvZiB0eXBlIHhzOmludGVnZXI8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSW50ZWdlckxpdGVyYWwiPkludGVnZXJMaXRlcmFsPC9hPjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciBpKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSW50ZWdlckxpdGVyYWwiPkludGVnZXJMaXRlcmFsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SW50ZWdlckxpdGVyYWw8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgaSk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBJbnRlZ2VyTGl0ZXJhbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjwvY29kZT4gLSB4czppbnRlZ2VyIHZhbHVlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZXJzZWN0RXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWYyNjljLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBJbnRlcnNlY3RFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SW50ZXJzZWN0RXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5UaGUgaW50ZXJzZWN0IG9wZXJhdG9yIHRha2VzIHR3byBub2RlIHNlcXVlbmNlcyBhcyBvcGVyYW5kcyBhbmQgcmV0dXJucyBhCi0gc2VxdWVuY2UgY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gYm90aCBvcGVyYW5kcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSW50ZXJzZWN0RXhwciI+SW50ZXJzZWN0RXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSW50ZXJzZWN0RXhwciI+SW50ZXJzZWN0RXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkludGVyc2VjdEV4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIEludGVyc2VjdEV4cHIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkl0ZW1UeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZTcyZTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkl0ZW1UeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBJdGVtVHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkl0ZW1UeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlPC9wcmU+U3VwcG9ydCBmb3IgSXRlbSBub2RlIHR5cGUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSVRFTSI+SVRFTTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIElURU0uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfS0lORFRFU1QiPktJTkRURVNUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgS0lORFRFU1QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUU5BTUUiPlFOQU1FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUU5BTUUuPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0l0ZW1UeXBlIj5JdGVtVHlwZTwvYT48L3N0cm9uZz4oaW50IHR5cGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgdmFsdWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9raW5kX3Rlc3QiPmtpbmRfdGVzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgS2luZFRlc3QgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcW5hbWUiPnFuYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZSI+dHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFR5cGUgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfSVRFTSI+SVRFTTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPklURU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgSVRFTS48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0tJTkRURVNUIj5LSU5EVEVTVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPktJTkRURVNUPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEtJTkRURVNULjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfUU5BTUUiPlFOQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+UU5BTUU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUU5BTUUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSXRlbVR5cGUiPkl0ZW1UeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SXRlbVR5cGU8L3N0cm9uZz4oaW50IHR5cGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgdmFsdWUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgSXRlbVR5cGUuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2tpbmRfdGVzdCI+a2luZF90ZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3QgPHN0cm9uZz5raW5kX3Rlc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBLaW5kVGVzdCBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0PC9jb2RlPiAtIFJlc3VsdCBvZiBLaW5kVGVzdCBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3FuYW1lIj5xbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5xbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZSI+dHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz50eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFR5cGUgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFJlc3VsdCBvZiBUeXBlIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5ZWVmMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEtpbmRUZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+S2luZFRlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Ob2RlVGVzdDwvcHJlPkNsYXNzIGZvciBLaW5kVGVzdCBvcGVyYXRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0tpbmRUZXN0Ij5LaW5kVGVzdDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVRlc3RUeXBlIj5jcmVhdGVUZXN0VHlwZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0WERNQ2xhc3NUeXBlIj5nZXRYRE1DbGFzc1R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1dpbGQiPmlzV2lsZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmFtZSI+bmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0tpbmRUZXN0Ij5LaW5kVGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPktpbmRUZXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRlc3RUeXBlIj5jcmVhdGVUZXN0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNyZWF0ZVRlc3RUeXBlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cnM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0WERNQ2xhc3NUeXBlIj5nZXRYRE1DbGFzc1R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzIDxzdHJvbmc+Z2V0WERNQ2xhc3NUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1dpbGQiPmlzV2lsZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNXaWxkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmFtZSI+bmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTGl0ZXJhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkxpdGVyYWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2Mzc4NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTGl0ZXJhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBMaXRlcmFsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TGl0ZXJhbDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlByaW1hcnlFeHByPC9wcmU+TGl0ZXJhbCBpcyBlaXRoZXIgYSBOdW1lcmljTGl0ZXJhbCBvciBhIFN0cmluZ0xpdGVyYWw8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTGl0ZXJhbCI+TGl0ZXJhbDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTGl0ZXJhbCI+TGl0ZXJhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkxpdGVyYWw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NaW51c0V4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NaW51c0V4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE4YmVhNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1pbnVzRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1pbnVzRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwcjwvcHJlPkNsYXNzIGZvciBNaW51cyBleHByZXNzaW9ucy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTWludXNFeHByIj5NaW51c0V4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBhcmcpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9NaW51c0V4cHIiPk1pbnVzRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk1pbnVzRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgYXJnKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIE1pbnVzRXhwcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTW9kRXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjMGM2MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTW9kRXhwci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTW9kRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1vZEV4cHI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByPC9wcmU+Q2xhc3MgZm9yIE1vZHVsYXIgb3BlcmF0aW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Nb2RFeHByIj5Nb2RFeHByPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Nb2RFeHByIj5Nb2RFeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TW9kRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIHIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgTW9kRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZDljNmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE11bEV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5NdWxFeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjwvcHJlPkNsYXNzIGZvciBNdWx0aXBseSBvcGVyYXRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX011bEV4cHIiPk11bEV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX011bEV4cHIiPk11bEV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5NdWxFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBNdWxFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTmFtZVRlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2E2Mjc2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTmFtZVRlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OYW1lVGVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5vZGVUZXN0PC9wcmU+Q2xhc3MgZm9yIE5hbWUgdGVzdCBvcGVyYXRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05hbWVUZXN0Ij5OYW1lVGVzdDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWUiPm5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmFtZVRlc3QiPk5hbWVUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TmFtZVRlc3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgTmFtZVRlc3QuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25hbWUiPm5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gUmVzdWxmIG9mIFFOYW1lIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5vZGVUZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNiODVlMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTm9kZVRlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Ob2RlVGVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTwvcHJlPkNsYXNzIGZvciBOb2RlIHRlc3Qgb3BlcmF0aW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Ob2RlVGVzdCI+Tm9kZVRlc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX05vZGVUZXN0Ij5Ob2RlVGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5vZGVUZXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTnVtZXJpY0xpdGVyYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OdW1lcmljTGl0ZXJhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ2MmU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OdW1lcmljTGl0ZXJhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOdW1lcmljTGl0ZXJhbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk51bWVyaWNMaXRlcmFsPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTGl0ZXJhbDwvcHJlPk51bWVyaWNMaXRlcmFsIGlzIGEgdmFsdWUgb2YgdHlwcGUgeHM6aW50ZWdlciwgeHM6ZGVjaW1hbCBvciB4czpkb3VibGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTnVtZXJpY0xpdGVyYWwiPk51bWVyaWNMaXRlcmFsPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OdW1lcmljTGl0ZXJhbCI+TnVtZXJpY0xpdGVyYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OdW1lcmljTGl0ZXJhbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk9yRXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk9yRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWEzZWExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE9yRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk9yRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5DbGFzcyBmb3IgT3Igb3BlcmF0aW9uLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9PckV4cHIiPk9yRXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fT3JFeHByIj5PckV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5PckV4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciByKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIE9yRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsZiBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE0ODFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFBJVGVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlBJVGVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0PC9wcmU+Q2xhc3MgZm9yIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24gc3VwcG9ydC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUElUZXN0Ij5QSVRlc3Q8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgYXJnKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUElUZXN0Ij5QSVRlc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FyZyI+YXJnPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgU3RyaW5nIGFyZ3VtZW50cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uYW1lIj5uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUElUZXN0Ij5QSVRlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QSVRlc3Q8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBhcmcpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgUElUZXN0LjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9QSVRlc3QiPlBJVGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlBJVGVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5EZWZhdWx0IENvbnN0cnVjdG9yIGZvciBQSVRlc3QuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FyZyI+YXJnPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5hcmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgU3RyaW5nIGFyZ3VtZW50cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gUmVzdWx0IG9mIFN0cmluZyBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRlc3RUeXBlIj5jcmVhdGVUZXN0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNyZWF0ZVRlc3RUeXBlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cnM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0WERNQ2xhc3NUeXBlIj5nZXRYRE1DbGFzc1R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzIDxzdHJvbmc+Z2V0WERNQ2xhc3NUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1dpbGQiPmlzV2lsZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNXaWxkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmFtZSI+bmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBhckV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1MmMzNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUGFyRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlBhckV4cHI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QcmltYXJ5RXhwcjwvcHJlPkNsYXNzIGZvciBwYXJldGhlc2l6ZWQgZXhwcmVzc2lvbnMgc3VwcG9ydC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUGFyRXhwciI+UGFyRXhwcjwvYT48L3N0cm9uZz4oamF2YS51dGlsLkNvbGxlY3Rpb24gZXhwcnMpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QYXJFeHByIj5QYXJFeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UGFyRXhwcjwvc3Ryb25nPihqYXZhLnV0aWwuQ29sbGVjdGlvbiBleHBycyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBQYXJFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yIDxzdHJvbmc+aXRlcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPiAtIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZWFiNzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBQaXBlRXhwcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlBpcGVFeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjwvcHJlPkNsYXNzIGZvciBQaXBlZCBleHByZXNzaW9ucyBzdXBwb3J0Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QaXBlRXhwciI+UGlwZUV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1BpcGVFeHByIj5QaXBlRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlBpcGVFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBQaXBlRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I2MDkxNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUGx1c0V4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5QbHVzRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwcjwvcHJlPkNsYXNzIGZvciBQbHVzIGV4cHJlc3Npb24gc3VwcG9ydC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUGx1c0V4cHIiPlBsdXNFeHByPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgYXJnKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUGx1c0V4cHIiPlBsdXNFeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UGx1c0V4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGFyZyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBQbHVzRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlByaW1hcnlFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0YzJlZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUHJpbWFyeUV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5QcmltYXJ5RXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTwvcHJlPlN1cHBvcnQgZm9yIEJhc2ljIHByaW1pdGl2ZSBsYW5ndWFnZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUHJpbWFyeUV4cHIiPlByaW1hcnlFeHByPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QcmltYXJ5RXhwciI+UHJpbWFyeUV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QcmltYXJ5RXhwcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJkODNmOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFF1YW50aWZpZWRFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UXVhbnRpZmllZEV4cHI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByPC9wcmU+U3VwcG9ydCBmb3IgUXVhbnRpZmllZCBleHByZXNzaW9ucy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BTEwiPkFMTDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFMTC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TT01FIj5TT01FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU09NRS48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUXVhbnRpZmllZEV4cHIiPlF1YW50aWZpZWRFeHByPC9hPjwvc3Ryb25nPihpbnQgdHlwZQotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkNvbGxlY3Rpb24gdmFyZXhwCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcmV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHByIj5leHByPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfZXhwciI+c2V0X2V4cHI8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBuZXh0IGV4cHJlc3Npb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHJ1bmNhdGVfcGFpcnMiPnRydW5jYXRlX3BhaXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTm9ybWFsaXphdGlvbiBvZiBleHByZXNzaW9uIHBhaXJzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZSI+dHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIEludGVnZXIgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92ZV9wYWlycyI+dmVfcGFpcnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBDb2xsZWN0aW9uIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FMTCI+QUxMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+QUxMPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFMTC48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NPTUUiPlNPTUU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5TT01FPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNPTUUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUXVhbnRpZmllZEV4cHIiPlF1YW50aWZpZWRFeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UXVhbnRpZmllZEV4cHI8L3N0cm9uZz4oaW50IHR5cGUKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIHZhcmV4cAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIHJldCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBRdWFudGlmaWVkRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwciI+ZXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgPHN0cm9uZz5leHByPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByPC9jb2RlPiAtIFJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlcmF0b3IiPml0ZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5JdGVyYXRvciA8c3Ryb25nPml0ZXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPiAtIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9leHByIj5zZXRfZXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X2V4cHI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGUpPC9jb2RlPjwvcD48cD5TZXQgbmV4dCBleHByZXNzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT4gLSBFeHByZXNzaW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90cnVuY2F0ZV9wYWlycyI+dHJ1bmNhdGVfcGFpcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnRydW5jYXRlX3BhaXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPk5vcm1hbGl6YXRpb24gb2YgZXhwcmVzc2lvbiBwYWlycy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZSI+dHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz50eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIEludGVnZXIgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFJlc3VsdCBvZiBJbnQgb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92ZV9wYWlycyI+dmVfcGFpcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb24gPHN0cm9uZz52ZV9wYWlyczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBDb2xsZWN0aW9uIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5Db2xsZWN0aW9uPC9jb2RlPiAtIEV4cHJlc3Npb24gcGFpcnMuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJkNzE3My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBSYW5nZUV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5SYW5nZUV4cHI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByPC9wcmU+U3VwcG9ydCBmb3IgUmFuZ2UgZXhwcmVzc2lvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1JhbmdlRXhwciI+UmFuZ2VFeHByPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9SYW5nZUV4cHIiPlJhbmdlRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJhbmdlRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIHIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgUmFuZ2VFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2NiMzYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUmV2ZXJzZVN0ZXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5SZXZlcnNlU3RlcDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXA8L3ByZT5DbGFzcyBmb3IgUmV2ZXJzZSBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQU5DRVNUT1IiPkFOQ0VTVE9SPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgQU5DRVNUT1IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQU5DRVNUT1JfT1JfU0VMRiI+QU5DRVNUT1JfT1JfU0VMRjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFOQ0VTVE9SX09SX1NFTEYuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9URE9UIj5ET1RET1Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBET1RET1QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUEFSRU5UIj5QQVJFTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBQQVJFTlQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUFJFQ0VESU5HIj5QUkVDRURJTkc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUFJFQ0VESU5HX1NJQkxJTkciPlBSRUNFRElOR19TSUJMSU5HPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUFJFQ0VESU5HX1NJQkxJTkcuPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1JldmVyc2VTdGVwIj5SZXZlcnNlU3RlcDwvYT48L3N0cm9uZz4oaW50IGF4aXMKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3Qgbm9kZV90ZXN0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9heGlzIj5heGlzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgQXhpcyBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SZXZlcnNlQXhpczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pdGVyYXRvciI+aXRlcmF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9BTkNFU1RPUiI+QU5DRVNUT1I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5BTkNFU1RPUjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBBTkNFU1RPUi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FOQ0VTVE9SX09SX1NFTEYiPkFOQ0VTVE9SX09SX1NFTEY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5BTkNFU1RPUl9PUl9TRUxGPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFOQ0VTVE9SX09SX1NFTEYuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ET1RET1QiPkRPVERPVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkRPVERPVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBET1RET1QuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9QQVJFTlQiPlBBUkVOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlBBUkVOVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBQQVJFTlQuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9QUkVDRURJTkciPlBSRUNFRElORzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPlBSRUNFRElORzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkcuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9QUkVDRURJTkdfU0lCTElORyI+UFJFQ0VESU5HX1NJQkxJTkc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5QUkVDRURJTkdfU0lCTElORzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkdfU0lCTElORy48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9SZXZlcnNlU3RlcCI+UmV2ZXJzZVN0ZXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5SZXZlcnNlU3RlcDwvc3Ryb25nPihpbnQgYXhpcwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Ob2RlVGVzdCBub2RlX3Rlc3QpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgUmV2ZXJzZVN0ZXAuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2F4aXMiPmF4aXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+YXhpczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBBeGlzIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBSZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZXJhdG9yIj5pdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXMgPHN0cm9uZz5pdGVyYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXM8L2NvZGU+IC0gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUF0dHJUZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxM2IzNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFNjaGVtYUF0dHJUZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U2NoZW1hQXR0clRlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdDwvcHJlPlN1cHBvcnQgZm9yIFNjaGVtYSBBdHRyaWJ1dGUgdGVzdC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU2NoZW1hQXR0clRlc3QiPlNjaGVtYUF0dHJUZXN0PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgYXJnKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hcmciPmFyZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uYW1lIj5uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU2NoZW1hQXR0clRlc3QiPlNjaGVtYUF0dHJUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2NoZW1hQXR0clRlc3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGFyZyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBTY2hlbWFBdHRyVGVzdC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYXJnIj5hcmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+YXJnPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVUZXN0VHlwZSI+Y3JlYXRlVGVzdFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jcmVhdGVUZXN0VHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFhETUNsYXNzVHlwZSI+Z2V0WERNQ2xhc3NUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzcyA8c3Ryb25nPmdldFhETUNsYXNzVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbGFzczwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNXaWxkIj5pc1dpbGQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzV2lsZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25hbWUiPm5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hRWxlbVRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZkMDc4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hRWxlbVRlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFNjaGVtYUVsZW1UZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U2NoZW1hRWxlbVRlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdDwvcHJlPlN1cHBvcnQgZm9yIFNjaGVtYSBFbGVtZW50IFRlc3QuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1NjaGVtYUVsZW1UZXN0Ij5TY2hlbWFFbGVtVGVzdDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGFyZyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXN0VHlwZSI+Y3JlYXRlVGVzdFR5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhETUNsYXNzVHlwZSI+Z2V0WERNQ2xhc3NUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNXaWxkIj5pc1dpbGQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWUiPm5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU2NoZW1hRWxlbVRlc3QiPlNjaGVtYUVsZW1UZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2NoZW1hRWxlbVRlc3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIGFyZyk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBTY2hlbWFFbGVtVGVzdC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y3JlYXRlVGVzdFR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5nZXRYRE1DbGFzc1R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1dpbGQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW1lIj5uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ1OWQ4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTZXF1ZW5jZVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TZXF1ZW5jZVR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU8L3ByZT5TdXBwb3J0IGZvciBTZXF1ZW5jZSB0eXBlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0VNUFRZIj5FTVBUWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEVNUFRZLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05PTkUiPk5PTkU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1BMVVMiPlBMVVM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBQTFVTLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1FVRVNUSU9OIj5RVUVTVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFFVRVNUSU9OLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NUQVIiPlNUQVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IGludGVybmFsIHZhbHVlIGZvciBTVEFSLjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TZXF1ZW5jZVR5cGUiPlNlcXVlbmNlVHlwZTwvYT48L3N0cm9uZz4oaW50IG9jYwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSBpdCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkl0ZW1UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZW1fdHlwZSI+aXRlbV90eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgSXRlbVR5cGUgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfb2NjdXJyZW5jZSI+b2NjdXJyZW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBvY2N1cmVuY2Ugb2YgaXRlbS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0VNUFRZIj5FTVBUWTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkVNUFRZPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEVNUFRZLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTk9ORSI+Tk9ORTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPk5PTkU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BMVVMiPlBMVVM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5QTFVTPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFBMVVMuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9RVUVTVElPTiI+UVVFU1RJT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5RVUVTVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U2V0IGludGVybmFsIHZhbHVlIGZvciBRVUVTVElPTi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NUQVIiPlNUQVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5TVEFSPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNUQVIuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU2VxdWVuY2VUeXBlIj5TZXF1ZW5jZVR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TZXF1ZW5jZVR5cGU8L3N0cm9uZz4oaW50IG9jYwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSBpdCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBTZXF1ZW5jZVR5cGUuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2l0ZW1fdHlwZSI+aXRlbV90eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUgPHN0cm9uZz5pdGVtX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgSXRlbVR5cGUgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZTwvY29kZT4gLSBSZXN1bHQgb2YgSXRlbVR5cGUgb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9vY2N1cnJlbmNlIj5vY2N1cnJlbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm9jY3VycmVuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IG9jY3VyZW5jZSBvZiBpdGVtLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFJlc3VsdCBmcm9tIEludCBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWQ0ZTc2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTaW5nbGVUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U2luZ2xlVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTwvcHJlPlN1cHBvcnQgZm9yIFNpbmdsZSB0eXBlcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU2luZ2xlVHlwZSI+U2luZ2xlVHlwZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIHR5cGUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gcW1hcmspPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TaW5nbGVUeXBlIj5TaW5nbGVUeXBlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdHlwZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3FtYXJrIj5xbWFyazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCBvcHRpb25hbCB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZSI+dHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TaW5nbGVUeXBlIj5TaW5nbGVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2luZ2xlVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdHlwZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBxbWFyayk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBTaW5nbGVUeXBlLjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9TaW5nbGVUeXBlIj5TaW5nbGVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2luZ2xlVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdHlwZSk8L2NvZGU+PC9wPjxwPkRlZmF1bHQgQ29uc3RydWN0b3IgZm9yIFNpbmdsZVR5cGUuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3FtYXJrIj5xbWFyazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cW1hcms8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U2V0IG9wdGlvbmFsIHR5cGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIG9wdGlvbmFsIHR5cGUgdmFsdWUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGUiPnR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+dHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNmY0MWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RlcDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0ZXA8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU8L3ByZT5TdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0ZXAiPlN0ZXA8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3Qgbm9kZV90ZXN0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV90ZXN0Ij5ub2RlX3Rlc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBOb2RlVGVzdCBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RlcCI+U3RlcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0ZXA8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Ob2RlVGVzdCBub2RlX3Rlc3QpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgU3RlcC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub2RlX3Rlc3QiPm5vZGVfdGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5vZGVUZXN0IDxzdHJvbmc+bm9kZV90ZXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIE5vZGVUZXN0IGludGVyZmFjZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3Q8L2NvZGU+IC0gUmVzdWx0IG9mIE5vZGVUZXN0IG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EwNzE2NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RlcEV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdGVwRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L3ByZT5TdXBwb3J0IGZvciBTdGVwIGV4cHJlc3Npb25zLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdGVwRXhwciI+U3RlcEV4cHI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0ZXBFeHByIj5TdGVwRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0ZXBFeHByPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2MmU2OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RyaW5nTGl0ZXJhbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0cmluZ0xpdGVyYWw8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5MaXRlcmFsPC9wcmU+VGhlIHZhbHVlIG9mIGEgc3RyaW5nIGxpdGVyYWwgaXMgYW4gYXRvbWljIHZhbHVlIHdob3NlIHR5cGUgaXMgeHM6c3RyaW5nIGFuZAotIHdob3NlIHZhbHVlIGlzIHRoZSBzdHJpbmcgZGVub3RlZCBieSB0aGUgY2hhcmFjdGVycyBiZXR3ZWVuIHRoZSBkZWxpbWl0aW5nCi0gYXBvc3Ryb3BoZXMgb3IgcXVvdGF0aW9uIG1hcmtzLiBJZiB0aGUgbGl0ZXJhbCBpcyBkZWxpbWl0ZWQgYnkgYXBvc3Ryb3BoZXMsCi0gdHdvIGFkamFjZW50IGFwb3N0cm9waGVzIHdpdGhpbiB0aGUgbGl0ZXJhbCBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUKLSBhcG9zdHJvcGhlLiBTaW1pbGFybHksIGlmIHRoZSBsaXRlcmFsIGlzIGRlbGltaXRlZCBieSBxdW90YXRpb24gbWFya3MsIHR3bwotIGFkamFjZW50IHF1b3RhdGlvbiBtYXJrcyB3aXRoaW4gdGhlIGxpdGVyYWwgYXJlIGludGVycHJldGVkIGFzIG9uZSBxdW90YXRpb24KLSBtYXJrPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0cmluZ0xpdGVyYWwiPlN0cmluZ0xpdGVyYWw8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdmFsdWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmciPnN0cmluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RyaW5nTGl0ZXJhbCI+U3RyaW5nTGl0ZXJhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0cmluZ0xpdGVyYWw8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB2YWx1ZSk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBTdHJpbmdMaXRlcmFsPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZyI+c3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHN0cmluZyB2YWx1ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc8L2NvZGU+IC0geHM6c3RyaW5nIHZhbHVlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjM4NDllLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdWJFeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3ViRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5TdXBwb3J0IGZvciBTdWJ0cmFjdGlvbiBvcGVyYXRpb24uPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N1YkV4cHIiPlN1YkV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N1YkV4cHIiPlN1YkV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdWJFeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBTdWJFeHByLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVGV4dFRlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTA3MGRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVGV4dFRlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5UZXh0VGVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0PC9wcmU+Q2xhc3MgdG8gbWF0Y2ggYW55IHRleHQgbm9kZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGV4dFRlc3QiPlRleHRUZXN0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGVzdFR5cGUiPmNyZWF0ZVRlc3RUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRYRE1DbGFzc1R5cGUiPmdldFhETUNsYXNzVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzV2lsZCI+aXNXaWxkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uYW1lIj5uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGV4dFRlc3QiPlRleHRUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VGV4dFRlc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRlc3RUeXBlIj5jcmVhdGVUZXN0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNyZWF0ZVRlc3RUeXBlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cnM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0WERNQ2xhc3NUeXBlIj5nZXRYRE1DbGFzc1R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzIDxzdHJvbmc+Z2V0WERNQ2xhc3NUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1dpbGQiPmlzV2lsZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNXaWxkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmFtZSI+bmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UcmVhdEFzRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDVhZDdkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UcmVhdEFzRXhwci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVHJlYXRBc0V4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5UcmVhdEFzRXhwcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHI8L3ByZT5TdXBwb3J0IGZvciBUcmVhdCBvcGVyYXRpb24uIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgb3BlcmFuZCwKLSByYXRoZXIgaXQgZW5zdWVzIHRoZSBvcGVyYW5kIGhhcyBhIGNvcnJlY3QgdHlwZSBhdCBldmFsdWF0aW9uIHRpbWUuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1RyZWF0QXNFeHByIj5UcmVhdEFzRXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIHIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UcmVhdEFzRXhwciI+VHJlYXRBc0V4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UcmVhdEFzRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBUcmVhdEFzRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+YWNjZXB0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjwvcD48cD5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGYzMGYxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVW5FeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VW5FeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjwvcHJlPlN1cHBvcnQgZm9yIFVuYXJ5IGV4cHJlc3Npb25zLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9VbkV4cHIiPlVuRXhwcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIGFyZyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXJnIj5hcmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9VbkV4cHIiPlVuRXhwcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlVuRXhwcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgYXJnKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIFVuRXhwci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hcmciPmFyZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgPHN0cm9uZz5hcmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L2NvZGU+IC0gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjZjNDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVW5pb25FeHByPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VW5pb25FeHByPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjwvcHJlPlRoZSB1bmlvbiBjbGFzcyB0YWtlcyB0d28gbm9kZSBzZXF1ZW5jZXMgYXMgb3BlcmFuZHMgYW5kIHJldHVybiBhIHNlcXVlbmNlCi0gY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gZWl0aGVyIG9mIHRoZSBvcGVyYW5kcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVW5pb25FeHByIj5VbmlvbkV4cHI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1VuaW9uRXhwciI+VW5pb25FeHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VW5pb25FeHByPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciBsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBVbmlvbkV4cHIuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJFeHByUGFpci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhckV4cHJQYWlyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MDE3MjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhckV4cHJQYWlyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYXJFeHByUGFpcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlZhckV4cHJQYWlyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5DbGFzcyBmb3IgVmFyaWFibGUgRXhwcmVzc2lvbiBQYWlycy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmFyRXhwclBhaXIiPlZhckV4cHJQYWlyPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgZXhwcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwciI+ZXhwcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFybmFtZSI+dmFybmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYXJFeHByUGFpciI+VmFyRXhwclBhaXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYXJFeHByUGFpcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgdmFyCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIgZXhwcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBWYXJFeHByUGFpci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHByIj5leHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciA8c3Ryb25nPmV4cHI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI8L2NvZGU+IC0gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YXJuYW1lIj52YXJuYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPnZhcm5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBmNTIwYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyUmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYXJSZWY8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYXJSZWY8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QcmltYXJ5RXhwcjwvcHJlPlN1cHBvcnQgZm9yIFZhcmlhYmxlIFJlZmVyZW5jZS4gQSBRTmFtZSBwcmVjZWRlZCBieSBhICQtc2lnbiBpcyBhIHZhcmlhYmxlCi0gcmVmZXJlbmNlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9WYXJSZWYiPlZhclJlZjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hY2NlcHQiPmFjY2VwdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25hbWUiPm5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmFyUmVmIj5WYXJSZWY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYXJSZWY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIG5hbWUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgVmFyUmVmLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW1lIj5uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI1ZjgzNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aEV4cHI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aEV4cHI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByPC9wcmU+UGF0aCBleHByZXNzaW9uIHdhbGtzIHRyaWVzIHRvIHdhbGsgdGhlIHBhdGggc3BlY2lmaWVkIGluIGl0cyBhcmd1bWVudDxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aEV4cHIiPlhQYXRoRXhwcjwvYT48L3N0cm9uZz4oaW50IHNsYXNoZXMKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIgZXhwcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZF90YWlsIj5hZGRfdGFpbDwvYT4oaW50IHNsYXNoZXMKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIgZXhwcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgdG8gdGFpbCBvZiBwYXRoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwciI+ZXhwcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXh0Ij5uZXh0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X25leHQiPnNldF9uZXh0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciBuKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGFuIFhQYXRoIGV4cHJlc3Npb24sIG4gaXMgY29waWVkIHRvIF9uZXh0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0X3NsYXNoZXMiPnNldF9zbGFzaGVzPC9hPihpbnQgY291bnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zbGFzaGVzIj5zbGFzaGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhFeHByIj5YUGF0aEV4cHI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aEV4cHI8L3N0cm9uZz4oaW50IHNsYXNoZXMKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIgZXhwcik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FjY2VwdCI+YWNjZXB0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5hY2NlcHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3Igdik8L2NvZGU+PC9wPjxwPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+djwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+IC0gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRfdGFpbCI+YWRkX3RhaWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZF90YWlsPC9zdHJvbmc+KGludCBzbGFzaGVzCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByIGV4cHIpPC9jb2RlPjwvcD48cD5BZGQgdG8gdGFpbCBvZiBwYXRoPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zbGFzaGVzPC9jb2RlPjwvcD48cD48Y29kZT5leHByPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHByIj5leHByPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIgPHN0cm9uZz5leHByPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwRXhwcjwvY29kZT4gLSBTdGVwIGV4cHJlc3Npb24gX2V4cHI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV4dCI+bmV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciA8c3Ryb25nPm5leHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwcjwvY29kZT4gLSBYUGF0aCBleHByZXNzaW9uIF9uZXh0PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldF9uZXh0Ij5zZXRfbmV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X25leHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIgbik8L2NvZGU+PC9wPjxwPmFuIFhQYXRoIGV4cHJlc3Npb24sIG4gaXMgY29waWVkIHRvIF9uZXh0PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfc2xhc2hlcyI+c2V0X3NsYXNoZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldF9zbGFzaGVzPC9zdHJvbmc+KGludCBjb3VudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y291bnQ8L2NvZGU+IC0gaXMgY29waWVkIHRvIF9zbGFzaGVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NsYXNoZXMiPnNsYXNoZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+c2xhc2hlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBpbnQgX3NsYXNoZXM8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FjZjcyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOb2RlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhOb2RlPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5DbGFzcyBmb3IgYSBYUGF0aE5vZGUgb2JqZWN0Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5vZGUiPlhQYXRoTm9kZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIHYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOb2RlIj5YUGF0aE5vZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aE5vZGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWNjZXB0Ij5hY2NlcHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmFjY2VwdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciB2KTwvY29kZT48L3A+PHA+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGVkOTg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aFZpc2l0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aFZpc2l0b3I8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+VmlzaXRvciBjbGFzcyBmb3IgWFBhdGggZXhwcmVzc2lvbnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCB4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBYUGF0aC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwciBmZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgRm9yRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIgcWV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IFF1YW50aWZpZWRFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBJZkV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk9yRXhwciBvcmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IE9yRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwciBhbmRleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBBbmRFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIGNtcGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IENtcEV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJhbmdlRXhwciByZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgUmFuZ2VFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BZGRFeHByIGFkZGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEFkZEV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN1YkV4cHIgc3ViZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgU3ViRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTXVsRXhwciBtdWxleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBNdWxFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IERpdkV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IElEaXZFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIG11bGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IE1vZEV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciB1bmV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IFVuaW9uRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHIgcGlwZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgUGlwZUV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHIgaWV4cHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgSW50ZXJzZWN0RXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhjZXB0RXhwciBlZXhwcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBFeGNlcHRFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByIGlvZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEluc3RPZkV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByIHRhZXhwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IFRyZWF0QXNFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHIgY2V4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBDYXN0YWJsZUV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByIGNleHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgQ2FzdEV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IE1pbnVzRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHIgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBQbHVzRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgWFBhdGhFeHByLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEZvcndhcmRTdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IFJldmVyc2VTdGVwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IE5hbWVUZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBWYXJSZWYuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBTdHJpbmdMaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEludGVnZXJMaXRlcmFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgRG91YmxlTGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWwgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBEZWNpbWFsTGl0ZXJhbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IFBhckV4cHIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNudHhJdGVtRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IENudHhJdGVtRXhwci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgRnVuY3Rpb25DYWxsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgU2luZ2xlVHlwZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgU2VxdWVuY2VUeXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEl0ZW1UeXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEFueUtpbmRUZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBEb2N1bWVudFRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRleHRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgVGV4dFRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgQ29tbWVudFRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IFBJVGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0cmlidXRlVGVzdCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEF0dHJpYnV0ZVRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUF0dHJUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgU2NoZW1hQXR0clRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgRWxlbWVudFRlc3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmlzaXQiPnZpc2l0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVmlzaXQgU2NoZW1FbGVtVGVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXhpc1N0ZXAgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWaXNpdCBBeGlzU3RlcC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92aXNpdCI+dmlzaXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRmlsdGVyRXhwciBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZpc2l0IEZpbHRlckV4cHIuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGggeHApPC9jb2RlPjwvcD48cD5WaXNpdCBYUGF0aC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnhwPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvckV4cHIgZmV4KTwvY29kZT48L3A+PHA+VmlzaXQgRm9yRXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5RdWFudGlmaWVkRXhwciBxZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBRdWFudGlmaWVkRXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnFleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIgaWZleCk8L2NvZGU+PC9wPjxwPlZpc2l0IElmRXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlmZXg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIG9yZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBPckV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vcmV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFuZEV4cHIgYW5kZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBBbmRFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5kZXg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ21wRXhwciBjbXBleCk8L2NvZGU+PC9wPjxwPlZpc2l0IENtcEV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jbXBleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIgcmV4KTwvY29kZT48L3A+PHA+VmlzaXQgUmFuZ2VFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIgYWRkZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBBZGRFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWRkZXg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwciBzdWJleCk8L2NvZGU+PC9wPjxwPlZpc2l0IFN1YkV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdWJleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByIG11bGV4KTwvY29kZT48L3A+PHA+VmlzaXQgTXVsRXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBEaXZFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXVsZXg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBJRGl2RXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm11bGV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHIgbXVsZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBNb2RFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXVsZXg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByIHVuZXgpPC9jb2RlPjwvcD48cD5WaXNpdCBVbmlvbkV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT51bmV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByIHBpcGV4KTwvY29kZT48L3A+PHA+VmlzaXQgUGlwZUV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5waXBleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByIGlleHByKTwvY29kZT48L3A+PHA+VmlzaXQgSW50ZXJzZWN0RXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlleHByPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIgZWV4cHIpPC9jb2RlPjwvcD48cD5WaXNpdCBFeGNlcHRFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWV4cHI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwciBpb2V4cCk8L2NvZGU+PC9wPjxwPlZpc2l0IEluc3RPZkV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pb2V4cDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UcmVhdEFzRXhwciB0YWV4cCk8L2NvZGU+PC9wPjxwPlZpc2l0IFRyZWF0QXNFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGFleHA8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByIGNleHApPC9jb2RlPjwvcD48cD5WaXNpdCBDYXN0YWJsZUV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jZXhwPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByIGNleHApPC9jb2RlPjwvcD48cD5WaXNpdCBDYXN0RXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNleHA8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBNaW51c0V4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBQbHVzRXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBYUGF0aEV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBGb3J3YXJkU3RlcC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXAgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IFJldmVyc2VTdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCBlKTwvY29kZT48L3A+PHA+VmlzaXQgTmFtZVRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhclJlZiBlKTwvY29kZT48L3A+PHA+VmlzaXQgVmFyUmVmLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdHJpbmdMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBTdHJpbmdMaXRlcmFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCBlKTwvY29kZT48L3A+PHA+VmlzaXQgSW50ZWdlckxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvdWJsZUxpdGVyYWwgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IERvdWJsZUxpdGVyYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBEZWNpbWFsTGl0ZXJhbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwciBlKTwvY29kZT48L3A+PHA+VmlzaXQgUGFyRXhwci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBDbnR4SXRlbUV4cHIuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZ1bmN0aW9uQ2FsbCBlKTwvY29kZT48L3A+PHA+VmlzaXQgRnVuY3Rpb25DYWxsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBTaW5nbGVUeXBlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IFNlcXVlbmNlVHlwZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IEl0ZW1UeXBlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCBlKTwvY29kZT48L3A+PHA+VmlzaXQgQW55S2luZFRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvY3VtZW50VGVzdCBlKTwvY29kZT48L3A+PHA+VmlzaXQgRG9jdW1lbnRUZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCBlKTwvY29kZT48L3A+PHA+VmlzaXQgVGV4dFRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0IGUpPC9jb2RlPjwvcD48cD5WaXNpdCBDb21tZW50VGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0IGUpPC9jb2RlPjwvcD48cD5WaXNpdCBQSVRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IEF0dHJpYnV0ZVRlc3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmlzaXQiPnZpc2l0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz52aXNpdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUF0dHJUZXN0IGUpPC9jb2RlPjwvcD48cD5WaXNpdCBTY2hlbWFBdHRyVGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IEVsZW1lbnRUZXN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdCBlKTwvY29kZT48L3A+PHA+VmlzaXQgU2NoZW1FbGVtVGVzdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92aXNpdCI+dmlzaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPnZpc2l0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXhpc1N0ZXAgZSk8L2NvZGU+PC9wPjxwPlZpc2l0IEF4aXNTdGVwLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Zpc2l0Ij52aXNpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+dmlzaXQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByIGUpPC9jb2RlPjwvcD48cD5WaXNpdCBGaWx0ZXJFeHByLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3ZWEzOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBbnlBdG9taWNUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QW55QXRvbWljVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZTwvcHJlPkNvbW1vbiBiYXNlIGZvciBldmVyeSBhdG9taWMgdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BbnlBdG9taWNUeXBlIj5BbnlBdG9taWNUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BbnlBdG9taWNUeXBlIj5BbnlBdG9taWNUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QW55QXRvbWljVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQwODhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVNpbXBsZVR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFueVNpbXBsZVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BbnlTaW1wbGVUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9wcmU+Q29tbW9uIGJhc2UgZm9yIGV2ZXJ5IHNpbXBsZSB0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0FueVNpbXBsZVR5cGUiPkFueVNpbXBsZVR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0FueVNpbXBsZVR5cGUiPkFueVNpbXBsZVR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BbnlTaW1wbGVUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZDUzYTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFueVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BbnlUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5Db21tb24gYmFzZSBmb3IgZXZlcnkgdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BbnlUeXBlIj5BbnlUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BbnlUeXBlIj5BbnlUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QW55VHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIERhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIERhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BdHRyVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY4M2FjMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BdHRyVHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEF0dHJUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QXR0clR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQXR0cmlidXRlVHlwZSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BdHRyVHlwZSI+QXR0clR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F0dHJUeXBlIj5BdHRyVHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uQXR0ciB2KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNBdHRyVHlwZSI+aXNBdHRyVHlwZTwvYT4oamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BdHRyVHlwZSI+QXR0clR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BdHRyVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0F0dHJUeXBlIj5BdHRyVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkF0dHJUeXBlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkF0dHIgdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzQXR0clR5cGUiPmlzQXR0clR5cGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzQXR0clR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5vZGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBOYW1lIG9mIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImF0dHJpYnV0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTQxYjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ2FsZW5kYXJUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Q2FsZW5kYXJUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlPC9wcmU+Q29tbW9uIGJhc2UgZm9yIGFsbCBDYWxlbmRhciBiYXNlZCBjbGFzc2VzPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NhbGVuZGFyVHlwZSI+Q2FsZW5kYXJUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0dEYXRhVHlwZSI+aXNHRGF0YVR5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFhdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vcm1hbGl6ZUNhbGVuZGFyIj5ub3JtYWxpemVDYWxlbmRhcjwvYT4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdGltZXpvbmUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ2FsZW5kYXJUeXBlIj5DYWxlbmRhclR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5DYWxlbmRhclR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0dEYXRhVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhYXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFhdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vcm1hbGl6ZUNhbGVuZGFyIj5ub3JtYWxpemVDYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5ub3JtYWxpemVDYWxlbmRhcjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0aW1lem9uZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2FsPC9jb2RlPjwvcD48cD48Y29kZT50aW1lem9uZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ29tbWVudFR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNzkyMmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ29tbWVudFR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDb21tZW50VHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNvbW1lbnRUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbW1lbnRUeXBlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NvbW1lbnRUeXBlIj5Db21tZW50VHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uQ29tbWVudCB2KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRCI+aXNJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWVudCBiZWluZyBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVkX3ZhbHVlIj50eXBlZF92YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgY29tbWVudCBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Db21tZW50VHlwZSI+Q29tbWVudFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Db21tZW50VHlwZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Db21tZW50IHYpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSUQiPmlzSUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEUkVGIj5pc0lEUkVGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEUkVGPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bm9kZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlVuc3VwcG9ydGVkIG1ldGhvZCBmb3IgdGhpcyBub2RlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiY29tbWVudCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWVudCBiZWluZyBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tZW50IGJlaW5nIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+dHlwZWRfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBjb21tZW50IHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBjb21tZW50IHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YjkzZTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEN0clR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DdHJUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3RyVHlwZSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9DdHJUeXBlIj5DdHJUeXBlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVc2VkIGZvciBjb25zdHJ1Y3RvciBmdW5jdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ3RyVHlwZSI+Q3RyVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkN0clR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5Vc2VkIGZvciBjb25zdHJ1Y3RvciBmdW5jdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBFaXRoZXIgYW4gZW1wdHkgc2VxdWVuY2Ugb3IgMSBhdG9taWMgdHlwZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIFRoZSByZXN1bHRpbmcgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRG9jVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRG9jVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTE5NzgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkRvY1R5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEb2NUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RG9jVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEb2N1bWVudFR5cGUgZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRG9jVHlwZSI+RG9jVHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uRG9jdW1lbnQgdik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSUQiPmlzSUQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEUkVGIj5pc0lEUkVGPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Eb2NUeXBlIj5Eb2NUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RG9jVHlwZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Eb2N1bWVudCB2KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRCI+aXNJRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSURSRUY8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUgPHN0cm9uZz5ub2RlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZG9jdW1lbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+dHlwZWRfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT4gLSBBY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMThjYTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBFbGVtZW50VHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkVsZW1lbnRUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIEVsZW1lbnRUeXBlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0VsZW1lbnRUeXBlIj5FbGVtZW50VHlwZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRWxlbWVudFR5cGUiPkVsZW1lbnRUeXBlPC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IHYpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9FbGVtZW50VHlwZSI+RWxlbWVudFR5cGU8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgdgotICAgICAgICAgLAotICAgICAgaW50IG5vZGVQb3NpdGlvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzRWxlbWVudFR5cGUiPmlzRWxlbWVudFR5cGU8L2E+KGphdmEubGFuZy5TdHJpbmcgdHlwZU5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRCI+aXNJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25pbGxlZCI+bmlsbGVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX25hbWUiPm5vZGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RleHRub2RlX3N0cmluZ3MiPnRleHRub2RlX3N0cmluZ3M8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWUiPnZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgZWxlbWVudCB2YWx1ZSBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0VsZW1lbnRUeXBlIj5FbGVtZW50VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVsZW1lbnRUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIGEgbnVsbCBlbGVtZW50PC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0VsZW1lbnRUeXBlIj5FbGVtZW50VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVsZW1lbnRUeXBlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9FbGVtZW50VHlwZSI+RWxlbWVudFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5FbGVtZW50VHlwZTwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IHYKLSAgICAgICAgICwKLSAgICAgIGludCBub2RlUG9zaXRpb24pPC9jb2RlPjwvcD48cD5UaGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQWRvcHRlcnMgbmVlZCB0byB1c2UKLSBFbGVtZW50VHlwZShFbGVtZW50KTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzRWxlbWVudFR5cGUiPmlzRWxlbWVudFR5cGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzRWxlbWVudFR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25pbGxlZCI+bmlsbGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm5pbGxlZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bm9kZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPiAtIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImVsZW1lbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBiZWluZyBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGV4dG5vZGVfc3RyaW5ncyI+dGV4dG5vZGVfc3RyaW5nczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dGV4dG5vZGVfc3RyaW5nczwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjwvcD48cD5SZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIE5vZGUgdG8gcmVjdXJzZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgc3VwcGxpZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWUiPnZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkVsZW1lbnQgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5FbGVtZW50PC9jb2RlPiAtIEFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmJkZDIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTm9kZVR5cGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Ob2RlVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgYSBOb2RlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NDSEVNQV9UWVBFX0lEIj5TQ0hFTUFfVFlQRV9JRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU0NIRU1BX1RZUEVfSURSRUYiPlNDSEVNQV9UWVBFX0lEUkVGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Ob2RlVHlwZSI+Tm9kZVR5cGU8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FmdGVyIj5hZnRlcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIHR3byk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWZ0ZXIiPmFmdGVyPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYmVmb3JlIj5iZWZvcmU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSB0d28pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2JlZm9yZSI+YmVmb3JlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG9tX3RvX3hwYXRoIj5kb21fdG9feHBhdGg8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbGltaW5hdGVfZHVwcyI+ZWxpbWluYXRlX2R1cHM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZSI+Z2V0VHlwZWRWYWx1ZUZvclByaW1pdGl2ZVR5cGU8L2E+KG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb24gdHlwZURlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzVHlwZSI+aXNUeXBlPC9hPihvcmcudzNjLmRvbS5UeXBlSW5mbyB0eXBlSW5mbwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB0eXBlTmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVdGlsaXR5IG1ldGhvZCB0byBjaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIFR5cGVJbmZvIG1hdGNoZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uaWxsZWQiPm5pbGxlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub2RlX3ZhbHVlIj5ub2RlX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zYW1lIj5zYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc29ydF9kb2N1bWVudF9vcmRlciI+c29ydF9kb2N1bWVudF9vcmRlcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfU0NIRU1BX1RZUEVfSUQiPlNDSEVNQV9UWVBFX0lEPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlNDSEVNQV9UWVBFX0lEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NDSEVNQV9UWVBFX0lEUkVGIj5TQ0hFTUFfVFlQRV9JRFJFRjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5TQ0hFTUFfVFlQRV9JRFJFRjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTm9kZVR5cGUiPk5vZGVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Tm9kZVR5cGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWZ0ZXIiPmFmdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5hZnRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgdHdvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50d288L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZnRlciI+YWZ0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmFmdGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSBhCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YTwvY29kZT48L3A+PHA+PGNvZGU+YjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2JlZm9yZSI+YmVmb3JlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5iZWZvcmU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIHR3byk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHdvPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYmVmb3JlIj5iZWZvcmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmJlZm9yZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmE8L2NvZGU+PC9wPjxwPjxjb2RlPmI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb21fdG9feHBhdGgiPmRvbV90b194cGF0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgPHN0cm9uZz5kb21fdG9feHBhdGg8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbGltaW5hdGVfZHVwcyI+ZWxpbWluYXRlX2R1cHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZWxpbWluYXRlX2R1cHM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VHlwZWRWYWx1ZUZvclByaW1pdGl2ZVR5cGUiPmdldFR5cGVkVmFsdWVGb3JQcmltaXRpdmVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZTwvc3Ryb25nPihvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uIHR5cGVEZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnR5cGVEZWY8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEIj5pc0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzVHlwZSI+aXNUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc1R5cGU8L3N0cm9uZz4ob3JnLnczYy5kb20uVHlwZUluZm8gdHlwZUluZm8KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdHlwZU5hbWUpPC9jb2RlPjwvcD48cD5VdGlsaXR5IG1ldGhvZCB0byBjaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIFR5cGVJbmZvIG1hdGNoZXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlSW5mbzwvY29kZT48L3A+PHA+PGNvZGU+dHlwZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uaWxsZWQiPm5pbGxlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5uaWxsZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5vZGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub2RlX3ZhbHVlIj5ub2RlX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5ub2RlX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGU8L2NvZGU+IC0gQWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2FtZSI+c2FtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+c2FtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUgYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIGIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmE8L2NvZGU+PC9wPjxwPjxjb2RlPmI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zb3J0X2RvY3VtZW50X29yZGVyIj5zb3J0X2RvY3VtZW50X29yZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnNvcnRfZG9jdW1lbnRfb3JkZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0NzZlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE51bWVyaWNUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TnVtZXJpY1R5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOdW1lcmljVHlwZSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OdW1lcmljVHlwZSI+TnVtZXJpY1R5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWJzIj5hYnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBYnNvbHV0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NlaWxpbmciPmNlaWxpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmxvb3IiPmZsb29yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRfc2luZ2xlX2FyZyI+Z2V0X3NpbmdsZV9hcmc8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldF9zaW5nbGVfdHlwZSI+Z2V0X3NpbmdsZV90eXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLkNsYXNzIHR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciB0aGUgc3VwcGxpZWQgbm9kZSBpcyBvZiB0aGUgc3VwcGxpZWQgdHlwZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0X3NpbmdsZV90eXBlIj5nZXRfc2luZ2xlX3R5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLkNsYXNzIHR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgd2hldGhlciBmaXJzdCBub2RlIGluIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIGlzIG9mIHRoZSBzdXBwbGllZAotIHR5cGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kIj5yb3VuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KGludCBwcmVjaXNpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91bmFyeV9taW51cyI+dW5hcnlfbWludXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3plcm8iPnplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB3aGV0aGVyIG5vZGUgcmVwcmVzbnRzIDA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OdW1lcmljVHlwZSI+TnVtZXJpY1R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OdW1lcmljVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hYnMiPmFiczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5hYnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gTmV3IE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5jZWlsaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSAgICAgICAgICBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Zsb29yIj5mbG9vcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5mbG9vcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X3NpbmdsZV9hcmciPmdldF9zaW5nbGVfYXJnPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Z2V0X3NpbmdsZV9hcmc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0X3NpbmdsZV90eXBlIj5nZXRfc2luZ2xlX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5nZXRfc2luZ2xlX3R5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5DbGFzcyB0eXBlKTwvY29kZT48L3A+PHA+Q2hlY2sgd2hldGhlciB0aGUgc3VwcGxpZWQgbm9kZSBpcyBvZiB0aGUgc3VwcGxpZWQgdHlwZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXQ8L2NvZGU+IC0gVGhlIG5vZGUgYmVpbmcgdGVzdGVkPC9wPjxwPjxjb2RlPnR5cGU8L2NvZGU+IC0gVGhlIHR5cGUgZXhwZWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPiAtIFRoZSBub2RlIGJlaW5nIHRlc3RlZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciAtIElmIG5vZGUgYmVpbmcgdGVzdGVkIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRfc2luZ2xlX3R5cGUiPmdldF9zaW5nbGVfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmdldF9zaW5nbGVfdHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5DbGFzcyB0eXBlKTwvY29kZT48L3A+PHA+Q2hlY2sgd2hldGhlciBmaXJzdCBub2RlIGluIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIGlzIG9mIHRoZSBzdXBwbGllZAotIHR5cGU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJzPC9jb2RlPiAtIFRoZSBub2RlIGJlaW5nIHRlc3RlZDwvcD48cD48Y29kZT50eXBlPC9jb2RlPiAtIFRoZSB0eXBlIGV4cGVjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT4gLSBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IgLSBJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfcm91bmQiPnJvdW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZF9oYWxmX3RvX2V2ZW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPihpbnQgcHJlY2lzaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3plcm8iPnplcm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnplcm88L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgd2hldGhlciBub2RlIHJlcHJlc250cyAwPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgbm9kZSByZXByZXNudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMjdjNjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUElUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UElUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QSVR5cGUiPlBJVHlwZTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uIHYpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb25zdHJ1Y3RzIHRoZSBub2RlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0gc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlZF92YWx1ZSI+dHlwZWRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHM8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QSVR5cGUiPlBJVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlBJVHlwZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gdik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSUQiPmlzSUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0lEUkVGIj5pc0lEUkVGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0lEUkVGPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfbm9kZV9uYW1lIj5ub2RlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIDxzdHJvbmc+bm9kZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdHMgdGhlIG5vZGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gQSBRTmFtZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZWRfdmFsdWUiPnR5cGVkX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnR5cGVkX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uICAgICAgICAgIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50czwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9jb2RlPiAtIEFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzk1ZDE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUU5hbWU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5RTmFtZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgYSBRTmFtZSBkYXRhdHlwZSAobmFtZSBvZiBhIG5vZGUpPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1FOYW1lIj5RTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbG9jYWxfcGFydAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBucyk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1FOYW1lIj5RTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbG9jYWxfcGFydCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1FOYW1lIj5RTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBsb2NhbF9wYXJ0KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUU5hbWUiPlFOYW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFFOYW1lIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIFFOYW1lIGFuZCB0aGUgc3VwcGxpZWQgUU5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcXVhbHMiPmVxdWFsczwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmopPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIGEgc3VwcGxpZWQgUU5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHBhbmRlZCI+ZXhwYW5kZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGlzIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHBhbmRlZF9uYW1lIj5leHBhbmRlZF9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBmdWxsIHBhdGhuYW1lIGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlLiBUaGlzIG1ldGhvZCBtdXN0IG5vdAotIGJlIGNhbGxlZCBpZiBhIG5hbWVzcGFjZSBkb2VzIGV4aXN0IGZvciB0aGlzIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc2hDb2RlIj5oYXNoQ29kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENhbGN1bGF0ZXMgdGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvY2FsIj5sb2NhbDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbm9kZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uYW1lc3BhY2UiPm5hbWVzcGFjZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbmFtZXNwYWNlIHRoYXQgdGhpcyBub2RlIGJlbG9uZ3MgaW4uIFRoaXMgbWV0aG9kIG11c3Qgbm90Ci0gYmUgY2FsbGVkIGlmIHRoZSBub2RlIGRvZXMgbm90IGJlbG9uZyBpbiBhIG5hbWVzcGFjZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX1FOYW1lIj5wYXJzZV9RTmFtZTwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBRTmFtZSBieSBwYXJzaW5nIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmVmaXgiPnByZWZpeDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgcHJlZml4IG9mIHRoZSBub2RlJ3MgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRfbmFtZXNwYWNlIj5zZXRfbmFtZXNwYWNlPC9hPihqYXZhLmxhbmcuU3RyaW5nIG4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0cyB0aGUgbmFtZXNwYWNlIGZvciB0aGlzIG5vZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmciPnN0cmluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWUuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmcoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9RTmFtZSI+UU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5RTmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsb2NhbF9wYXJ0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG5zKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fUU5hbWUiPlFOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UU5hbWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbG9jYWxfcGFydCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1FOYW1lIj5RTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlFOYW1lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbG9jYWxfcGFydCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIG9ubHkgdGhlIG5vZGUgbmFtZSAobm8gcHJlZml4KTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9RTmFtZSI+UU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5RTmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB3aXRoIGEgbnVsbCBwcmVmaXggYW5kIG51bGwgbm9kZSBuYW1lPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFFOYW1lIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIGV4dHJhY3QgZnJvbTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBRTmFtZSBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIHRoZSBzdXBwbGllZCBRTmFtZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBRTmFtZSB0byBjb21wYXJlIHdpdGg8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudCB0aGUgc2FtZSBub2RlLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxdWFscyI+ZXF1YWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcXVhbHM8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmopPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgYSBzdXBwbGllZCBRTmFtZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqPC9jb2RlPiAtIFRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoLiBTaG91bGQgYmUgb2YgdHlwZSBRTmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHBhbmRlZCI+ZXhwYW5kZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmV4cGFuZGVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIGEgbmFtZXNwYWNlIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGEgbmFtZXNwYWNlIGhhcyBiZWVuIGRlZmluZWQgZm9yIG5vZGUuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHBhbmRlZF9uYW1lIj5leHBhbmRlZF9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5leHBhbmRlZF9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZnVsbCBwYXRobmFtZSBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZS4gVGhpcyBtZXRob2QgbXVzdCBub3QKLSBiZSBjYWxsZWQgaWYgYSBuYW1lc3BhY2UgZG9lcyBleGlzdCBmb3IgdGhpcyBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIEZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIG5hbWVzcGFjZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9oYXNoQ29kZSI+aGFzaENvZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+aGFzaENvZGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2FsY3VsYXRlcyB0aGUgaGFzaGNvZGUgZm9yIHRoZSBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2NhbCI+bG9jYWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmxvY2FsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbm9kZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gTm9kZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmFtZXNwYWNlIj5uYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPm5hbWVzcGFjZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluLiBUaGlzIG1ldGhvZCBtdXN0IG5vdAotIGJlIGNhbGxlZCBpZiB0aGUgbm9kZSBkb2VzIG5vdCBiZWxvbmcgaW4gYSBuYW1lc3BhY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gTmFtZXNwYWNlIHRoYXQgdGhpcyBub2RlIGJlbG9uZ3MgaW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfUU5hbWUiPnBhcnNlX1FOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPnBhcnNlX1FOYW1lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBRTmFtZSBieSBwYXJzaW5nIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTwvY29kZT4gLSBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZWZpeCI+cHJlZml4PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5wcmVmaXg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBwcmVmaXggb2YgdGhlIG5vZGUncyBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBQcmVmaXggb2YgdGhlIG5vZGUncyBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfbmFtZXNwYWNlIj5zZXRfbmFtZXNwYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfbmFtZXNwYWNlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbik8L2NvZGU+PC9wPjxwPlNldHMgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBub2RlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uPC9jb2RlPiAtIE5hbWVzcGFjZSB0aGlzIG5vZGUgYmVsb25ncyBpbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmciPnN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6UU5hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZygpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJRTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5UZXh0VHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0MTk3Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5UZXh0VHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFRleHRUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VGV4dFR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGV4dFR5cGUgZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGV4dFR5cGUiPlRleHRUeXBlPC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5UZXh0IHYpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0lEIj5pc0lEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgV2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlOzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSURSRUYiPmlzSURSRUY8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGV0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVkX3ZhbHVlIj50eXBlZF92YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVGV4dCB2YWx1ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UZXh0VHlwZSI+VGV4dFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UZXh0VHlwZTwvc3Ryb25nPihvcmcudzNjLmRvbS5UZXh0IHYpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSUQiPmlzSUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+V2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlOzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNJRFJFRiI+aXNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNJRFJFRjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vZGVfbmFtZSI+bm9kZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSA8c3Ryb25nPm5vZGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5VbnN1cHBvcnRlZCBtZXRob2QgZm9yIHRoaXMgbm9kZXR5cGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU8L2NvZGU+IC0gbnVsbCAobm8gdXNlciBkZWZpbmVkIG5hbWUgZm9yIHRoaXMgbm9kZSBnZXRzIGRlZmluZWQpPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInRleHQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVkX3ZhbHVlIj50eXBlZF92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz50eXBlZF92YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhQYXRoRGVjaW1hbEZvcm1hdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMjk2OWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhEZWNpbWFsRm9ybWF0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhEZWNpbWFsRm9ybWF0PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEudGV4dC5EZWNpbWFsRm9ybWF0PC9wcmU+VGhpcyBpcyBhbiBYUGF0aCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBEZWNpbWFsRm9ybWF0IHRvIGhhbmRsZQotIHNvbWUgb2YgdGhlIHhwYXRoIHNwZWNpZmljIGZvcm1hdHRpbmcgcmVxdWlyZW1lbnRzLiAgIFNwZWNpZmljYWxseQotIGl0IGFsbG93cyBmb3IgRSMgdG8gYmUgcmVwcmVzZW50ZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZXhwb25lbnQgdmFsdWUKLSBpcyBvcHRpb25hbC4gIE90aGVyd2lzZSBhbGwgZXhpc3RpbmcgRGVjaW1hbEZvcm1hdCBwYXR0ZXJucyBhcmUgaGFuZGxlZAotIGFzIGlzLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoRGVjaW1hbEZvcm1hdCI+WFBhdGhEZWNpbWFsRm9ybWF0PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHBhdHRlcm4pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF94cGF0aEZvcm1hdCI+eHBhdGhGb3JtYXQ8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEZvcm1hdHMgdGhlIHN0cmluZyBkcm9wcGluZyBhIFplcm8gRXhwb25lbnQgVmFsdWUgaWYgaXQgZXhpc3RzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoRGVjaW1hbEZvcm1hdCI+WFBhdGhEZWNpbWFsRm9ybWF0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhEZWNpbWFsRm9ybWF0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcGF0dGVybik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3hwYXRoRm9ybWF0Ij54cGF0aEZvcm1hdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+eHBhdGhGb3JtYXQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmopPC9jb2RlPjwvcD48cD5Gb3JtYXRzIHRoZSBzdHJpbmcgZHJvcHBpbmcgYSBaZXJvIEV4cG9uZW50IFZhbHVlIGlmIGl0IGV4aXN0cy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iajwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc5ODdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNBbnlVUkk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0FueVVSSTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPlJlcHJlc2VudHMgYSBVbml2ZXJzYWwgUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSByZWZlcmVuY2U8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNBbnlVUkkiPlhTQW55VVJJPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0FueVVSSSI+WFNBbnlVUkk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0aW9uIG9mIGEgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYSBVUkkgZnJvbSBhIHByZXZpb3VzIHJlc3VsdAotIHNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdyZWF0ZXIgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIExlc3MgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRyYW5zZm9ybXMgYW5kIHJldHJpZXZlcyB0aGUgVVJJIHZhbHVlIG9mIHRoaXMgVVJJIGRhdGF0eXBlIGluIFN0cmluZwotIGZvcm1hdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdHlwZSBuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0FueVVSSSI+WFNBbnlVUkk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0FueVVSSTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD5Bcml0eSAxIENvbnN0cnVjdG9yPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTQW55VVJJIj5YU0FueVVSSTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTQW55VVJJPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFyaXR5IDAgQ29uc3RydWN0b3IuIEluaXRpYXRlcyBVUkkgdG8gbnVsbC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0aW9uIG9mIGEgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYSBVUkkgZnJvbSBhIHByZXZpb3VzIHJlc3VsdAotIHNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIHByZXZpb3VzIHJlc3VsdCBzZXF1ZW5jZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVVJJIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5HcmVhdGVyIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkxlc3MgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6YW55VVJJIiwgdGhlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VHJhbnNmb3JtcyBhbmQgcmV0cmlldmVzIHRoZSBVUkkgdmFsdWUgb2YgdGhpcyBVUkkgZGF0YXR5cGUgaW4gU3RyaW5nCi0gZm9ybWF0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBVUkkgdmFsdWUgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoZSBVUkkgZGF0YXR5cGUgYXMgYSAgICAgICAgICBTdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0eXBlIG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiYW55VVJJIiwgdGhlIHR5cGUgbmFtZSBvZiB0aGlzIGRhdGF0eXBlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQmFzZTY0QmluYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jhc2U2NEJpbmFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGY5YmJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQmFzZTY0QmluYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNCYXNlNjRCaW5hcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0Jhc2U2NEJpbmFyeTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0Jhc2U2NEJpbmFyeSI+WFNCYXNlNjRCaW5hcnk8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTQmFzZTY0QmluYXJ5Ij5YU0Jhc2U2NEJpbmFyeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBiYXNlNjRCaW5hcnkgdmFsdWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSBiYXNlNjRCaW5hcnk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTQmFzZTY0QmluYXJ5Ij5YU0Jhc2U2NEJpbmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTQmFzZTY0QmluYXJ5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNCYXNlNjRCaW5hcnkiPlhTQmFzZTY0QmluYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNCYXNlNjRCaW5hcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gbnVsbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBiYXNlNjRCaW5hcnkgdmFsdWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYmFzZTY0QmluYXJ5IHZhbHVlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyBiYXNlNjRCaW5hcnkgdmFsdWU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgYmFzZTY0QmluYXJ5PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmJhc2U2NEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0QmluYXJ5IHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiYmFzZTY0QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JhMDBjZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0Jvb2xlYW48L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0Jvb2xlYW48L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJ1ZSBvciBhIGZhbHNlIHZhbHVlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0Jvb2xlYW4iPlhTQm9vbGVhbjwvYT48L3N0cm9uZz4oYm9vbGVhbiB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNCb29sZWFuIj5YU0Jvb2xlYW48L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGJvb2xlYW4gdmFsdWUKLSBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gZm9yIGVxdWFsaXR5IGJldHdlZW4gdGhlIHN1cHBsaWVkIGFuZCB0aGlzIGJvb2xlYW4KLSByZXByZXNlbnRhdGlvbi4gUmV0dXJucyB0cnVlIGlmIGJvdGggcmVwcmVzZW50IHNhbWUgYm9vbGVhbiB2YWx1ZSwgZmFsc2UKLSBvdGhlcndpc2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIHRydWUgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0gcmVwcmVzZW50cyBmYWxzZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIGZhbHNlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotIHJlcHJlc2VudHMgdHJ1ZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgZGF0YXR5cGUgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNCb29sZWFuIj5YU0Jvb2xlYW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0Jvb2xlYW48L3N0cm9uZz4oYm9vbGVhbiB4KTwvY29kZT48L3A+PHA+SW5pdGlhdGVzIHRoZSBuZXcgcmVwcmVzZW50YXRpb24gdG8gdGhlIGJvb2xlYW4gc3VwcGxpZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNCb29sZWFuIj5YU0Jvb2xlYW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0Jvb2xlYW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhdGVzIHRvIGEgZGVmYXVsdCByZXByZXNlbnRhdGlvbiBvZiBmYWxzZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGJvb2xlYW4gdmFsdWUKLSBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGJvb2xlYW4gdmFsdWUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3VwcGxpZWQuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGZvciBlcXVhbGl0eSBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuCi0gcmVwcmVzZW50YXRpb24uIFJldHVybnMgdHJ1ZSBpZiBib3RoIHJlcHJlc2VudCBzYW1lIGJvb2xlYW4gdmFsdWUsIGZhbHNlCi0gb3RoZXJ3aXNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlICAgICAgICAgICAgIHdpdGguPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlIGVxdWFsaXR5ICAgICAgICAgIGNvbXBhcmlzb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2d0Ij5ndDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+Z3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbiByZXByZXNlbnRhdGlvbi4gUmV0dXJucwotIHRydWUgaWYgdGhpcyBYU0Jvb2xlYW4gcmVwcmVzZW50cyB0cnVlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotIHJlcHJlc2VudHMgZmFsc2UuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlICAgICAgICAgICAgIHdpdGguPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlICAgICAgICAgIGNvbXBhcmlzb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbiByZXByZXNlbnRhdGlvbi4gUmV0dXJucwotIHRydWUgaWYgdGhpcyBYU0Jvb2xlYW4gcmVwcmVzZW50cyBmYWxzZSBhbmQgdGhhdCBYU0Jvb2xlYW4gc3VwcGxpZWQKLSByZXByZXNlbnRzIHRydWUuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlICAgICAgICAgICAgIHdpdGguPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlICAgICAgICAgIGNvbXBhcmlzb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpib29sZWFuIiwgdGhlIGZ1bGwgZGF0YXR5cGUgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSBkYXRhdHlwZSBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJib29sZWFuIiwgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIG5hbWUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdGhlIGFjdHVhbCBib29sZWFuIHZhbHVlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0J5dGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQnl0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDNjNzdlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQnl0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTQnl0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTQnl0ZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTaG9ydDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0J5dGUiPlhTQnl0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNCeXRlIj5YU0J5dGU8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdieXRlJyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTQnl0ZSI+WFNCeXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNCeXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0J5dGUiPlhTQnl0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTQnl0ZTwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgYnl0ZSB2YWx1ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAnYnl0ZScgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgYnl0ZSBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ2J5dGUnIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpieXRlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlNzhiZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0RhdGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0RhdGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTwvcHJlPlJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBvZiB0aGUgZm9ybSB5ZWFyLW1vbnRoLWRheSBhbmQgb3B0aW9uYWwgdGltZXpvbmU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEYXRlIj5YU0RhdGU8L2E+PC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEYXRlIj5YU0RhdGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIHZhbHVlIGluCi0gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGF5Ij5kYXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8KLSBhY2NvdW50KTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2d0Ij5ndDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnVzIj5taW51czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLSBzZXF1ZW5jZSAoWFNEYXRlLCBYU1llYXJNb250aER1cmF0aW9uIGFuZCBYU0RheVRpbWVEdXJhdGlvbiBhcmUgb25seQotIHZhbGlkIG9uZXMpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9udGgiPm1vbnRoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2RhdGUiPnBhcnNlX2RhdGU8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgKG9mIHRoZSBmb3JtIHllYXItbW9udGgtZGF5IG9yCi0geWVhci1tb250aC1kYXkrdGltZXpvbmUpIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZgotIGl0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLSBzZXF1ZW5jZSAoWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUgb25seSB2YWxpZAotIG9uZXMpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpdmUgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZGF0ZSBoYXMgYW4gb3B0aW9uYWwgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIGl0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHoiPnR6PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF95ZWFyIj55ZWFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0RhdGUiPlhTRGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRGF0ZTwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIGEgc3VwcGxpZWQgZGF0ZTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RhdGUiPlhTRGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhciA8c3Ryb25nPmNhbGVuZGFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Nsb25lIj5jbG9uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Y2xvbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBkYXRlIHJlcHJlc2VudGF0aW9uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIEEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIHZhbHVlIGluCi0gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIHZhbHVlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkYXRlIHZhbHVlIHN1cHBsaWVkLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGF5Ij5kYXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+ZGF5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvCi0gYWNjb3VudCk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gZGF0ZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdCBwb2ludCBpbiB0aW1lLiAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG88L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgbGllcyBhZnRlciB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGxpZXMgYmVmb3JlIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZSAgICAgICAgICBvdGhlcndpc2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51cyI+bWludXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bWludXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotIHNlcXVlbmNlIChYU0RhdGUsIFhTWWVhck1vbnRoRHVyYXRpb24gYW5kIFhTRGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0gdmFsaWQgb25lcykuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cyAgICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGUsIHRoZSByZXN1bHQgd2lsbCBiZSBhICAgICAgICAgICAgIFhTRGF5VGltZUR1cmF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UgdHdvICAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWFNZZWFyTW9udGhEdXJhdGlvbiBvciBhbiAgICAgICAgICAgICBYU0RheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdCBvZiAgICAgICAgICAgICB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN1cHBsaWVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb250aCI+bW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bW9udGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIG1vbnRoIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9kYXRlIj5wYXJzZV9kYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGUgPHN0cm9uZz5wYXJzZV9kYXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSAob2YgdGhlIGZvcm0geWVhci1tb250aC1kYXkgb3IKLSB5ZWFyLW1vbnRoLWRheSt0aW1lem9uZSkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mCi0gaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTwvY29kZT4gLSBUaGUgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkgdmFsaWQKLSBvbmVzKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzICAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4gICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZSBvZiB0aGUgcmVzdWx0ICAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cml2ZSB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6ZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgd2hldGhlciB0aGlzIGRhdGUgaGFzIGFuIG9wdGlvbmFsIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZXJlIGlzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZS4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3llYXIiPnllYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+eWVhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMmMzZTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0RhdGVUaW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNEYXRlVGltZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEYXRlVGltZSI+WFNEYXRlVGltZTwvYT48L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RhdGVUaW1lIj5YU0RhdGVUaW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xvbmUiPmNsb25lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGF0ZSBhbmQgdGltZQotIHZhbHVlIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RheSI+ZGF5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIGRheSBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZwotIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotIGludG8gYWNjb3VudCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hvdXIiPmhvdXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgaG91ciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc19kaWdpdCI+aXNfZGlnaXQ8L2E+KGNoYXIgeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBjaGFyYWN0ZXIgaXMgbnVtZXJpYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLSBpbnRvIGFjY291bnQpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG1pbnVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGVUaW1lIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotIHNlcXVlbmNlIChYU0RhdGVUaW1lLCBYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZQotIG9ubHkgdmFsaWQgb25lcykuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51dGUiPm1pbnV0ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBtaW51dGUgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vbnRoIj5tb250aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBtb250aCBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYWRfaW50Ij5wYWRfaW50PC9hPihpbnQgbnVtCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhZHMgdGhlIHN1cHBsaWVkIG51bWJlciB0byB0aGUgc3VwcGxpZWQgbnVtYmVyIG9mIGRpZ2l0cyBieSBhZGRpbmcgMCdzCi0gaW4gZnJvbnQgb2YgaXQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGludFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2RhdGUiPnBhcnNlX2RhdGU8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgeWVhciwKLSBtb250aCBhbmQgZGF5IGZyb20gaXQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGRvdWJsZVtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX3RpbWUiPnBhcnNlX3RpbWU8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgaG91ciwKLSBtaW51dGUgYW5kIHNlY29uZHMgZnJvbSBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgaW50W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfdGltZXpvbmUiPnBhcnNlX3RpbWV6b25lPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlCi0gdGltZXpvbmUgZnJvbSBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VEYXRlVGltZSI+cGFyc2VEYXRlVGltZTwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgY29uc3RydWN0cyBhIG5ldwotIFhTRGF0ZVRpbWUgb2JqZWN0IHVzaW5nIHRoYXQgaW5mb3JtYXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGVUaW1lIGFuZCBhIHN1cHBsaWVkCi0gcmVzdWx0IHNlcXVlbmNlIChYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0gdmFsaWQgb25lcykuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWNvbmQiPnNlY29uZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSBzZWNvbmRzIGZyb20gdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cml2ZSB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHoiPnR6PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF95ZWFyIj55ZWFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0RhdGVUaW1lIj5YU0RhdGVUaW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEYXRlVGltZTwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiBhIHN1cHBsaWVkIGRhdGUgYW5kIHRpbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEYXRlVGltZSI+WFNEYXRlVGltZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRGF0ZVRpbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGl0YXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhciA8c3Ryb25nPmNhbGVuZGFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Nsb25lIj5jbG9uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Y2xvbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIEEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIGFuZCB0aW1lCi0gdmFsdWUgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIGFuZCB0aW1lICAgICAgICAgICAgIHZhbHVlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHZhbHVlICAgICAgICAgIHN1cHBsaWVkLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGF5Ij5kYXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+ZGF5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZwotIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byBkYXRlcyBhbmQgdGltZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdCAgICAgICAgICBwb2ludCBpbiB0aW1lLiBGYWxzZSBvdGhlcndpc2UuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLSBpbnRvIGFjY291bnQpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGFuZCB0aW1lIGxpZXMgYWZ0ZXIgdGhlIGRhdGUgYW5kIHRpbWUgICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hvdXIiPmhvdXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+aG91cjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgaG91ciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBob3VyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc19kaWdpdCI+aXNfZGlnaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzX2RpZ2l0PC9zdHJvbmc+KGNoYXIgeCk8L2NvZGU+PC9wPjxwPkNoZWNrIHRvIHNlZSBpZiBhIGNoYXJhY3RlciBpcyBudW1lcmljPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIENoYXJhY3RlciB0byBiZSB0ZXN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIG51bWVyaWMuIEZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgYW5kIHRpbWVzICh0YWtpbmcgdGltZXpvbmVzCi0gaW50byBhY2NvdW50KTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBhbmQgdGltZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBhbmQgdGltZSAgICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXMiPm1pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1pbnVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhTRGF0ZVRpbWUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlCi0gb25seSB2YWxpZCBvbmVzKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzICAgICAgICAgICAgIG9wZXJhdG9yLiBJZiB0aGlzIGlzIGFuIFhTRGF0ZVRpbWUsIHRoZSByZXN1bHQgd2lsbCBiZSBhICAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlIHR3byAgICAgICAgICAgICBkYXRlcy4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuICAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGVUaW1lIG9mIHRoZSAgICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSAgICAgICAgICAgICBzdXBwbGllZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgbWludXMgb3BlcmF0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXRlIj5taW51dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bWludXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlIHRoZSBtaW51dGUgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgbWludXRlIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb250aCI+bW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bW9udGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIG1vbnRoIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYWRfaW50Ij5wYWRfaW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5wYWRfaW50PC9zdHJvbmc+KGludCBudW0KLSAgICAgICAgICwKLSAgICAgIGludCBsZW4pPC9jb2RlPjwvcD48cD5QYWRzIHRoZSBzdXBwbGllZCBudW1iZXIgdG8gdGhlIHN1cHBsaWVkIG51bWJlciBvZiBkaWdpdHMgYnkgYWRkaW5nIDAncwotIGluIGZyb250IG9mIGl0PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5udW08L2NvZGU+IC0gTnVtYmVyIHRoYXQgc2kgdG8gYmUgcGFkZGVkIChpZiBuZWNjZXNzYXkpPC9wPjxwPjxjb2RlPmxlbjwvY29kZT4gLSBEZXNpcmVkIGxlbmd0aCBhZnRlciBwYWRkaW5nPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFkZGVkIGludGVnZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfZGF0ZSI+cGFyc2VfZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnRbXSA8c3Ryb25nPnBhcnNlX2RhdGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlIHllYXIsCi0gbW9udGggYW5kIGRheSBmcm9tIGl0PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50W108L2NvZGU+IC0gSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSBpcyB0aGUgeWVhciwgZWxlbWVudCAyIGlzIHRoZSAgICAgICAgICBtb250aCBhbmQgZWxlbWVudCAzIGlzIHRoZSBkYXk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VfdGltZSI+cGFyc2VfdGltZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGVbXSA8c3Ryb25nPnBhcnNlX3RpbWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlIGhvdXIsCi0gbWludXRlIGFuZCBzZWNvbmRzIGZyb20gaXQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGVbXTwvY29kZT4gLSBJbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSBob3VyLCBlbGVtZW50IDIgaXMgdGhlICAgICAgICAgIG1pbnV0ZSBhbmQgZWxlbWVudCAzIGlzIHRoZSBzZWNvbmRzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX3RpbWV6b25lIj5wYXJzZV90aW1lem9uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnRbXSA8c3Ryb25nPnBhcnNlX3RpbWV6b25lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZQotIHRpbWV6b25lIGZyb20gaXQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnRbXTwvY29kZT4gLSBJbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIHJlcHJlc2VudHMgd2hldGhlciB0aGUgICAgICAgICAgdGltZXpvbmUgaXMgYWhlYWQgb3IgYmVoaW5kIEdNVCwgZWxlbWVudCAyIGlzIHRoZSBob3VyICAgICAgICAgIGRpc3BsYWNlbWVudCBhbmQgZWxlbWVudCAzIGlzIHRoZSBtaW51dGUgZGlzcGxhY2VtZW50LjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZURhdGVUaW1lIj5wYXJzZURhdGVUaW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lIDxzdHJvbmc+cGFyc2VEYXRlVGltZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIGNvbnN0cnVjdHMgYSBuZXcKLSBYU0RhdGVUaW1lIG9iamVjdCB1c2luZyB0aGF0IGluZm9ybWF0aW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU8L2NvZGU+IC0gVGhlIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgKGFuZCBvcHRpb25hbCAgICAgICAgICB0aW1lem9uZSk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGx1cyI+cGx1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5wbHVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQKLSByZXN1bHQgc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkKLSB2YWxpZCBvbmVzKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzICAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4gICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlICAgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lICAgICAgICAgICAgIHN1cHBsaWVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWNvbmQiPnNlY29uZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz5zZWNvbmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmUgdGhlIHNlY29uZHMgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSB0aGUgc2Vjb25kcyB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpkYXRlVGltZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJkYXRlVGltZSIgd2hpY2ggaXMgdGhlIGRhdGF5cGUgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz52YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3llYXIiPnllYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+eWVhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXlUaW1lRHVyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkYWU5My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTRGF5VGltZUR1cmF0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNEYXlUaW1lRHVyYXRpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEYXlUaW1lRHVyYXRpb24gZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEYXlUaW1lRHVyYXRpb24iPlhTRGF5VGltZUR1cmF0aW9uPC9hPjwvc3Ryb25nPihpbnQgZGF5cwotICAgICAgICAgLAotICAgICAgaW50IGhvdXJzCi0gICAgICAgICAsCi0gICAgICBpbnQgbWludXRlcwotICAgICAgICAgLAotICAgICAgZG91YmxlIHNlY29uZHMKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gbmVnYXRpdmUpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RheVRpbWVEdXJhdGlvbiI+WFNEYXlUaW1lRHVyYXRpb248L2E+PC9zdHJvbmc+KGRvdWJsZSBzZWNzKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEYXlUaW1lRHVyYXRpb24iPlhTRGF5VGltZUR1cmF0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgdGltZSBkdXJhdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGl2Ij5kaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZURURHVyYXRpb24iPnBhcnNlRFREdXJhdGlvbjwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBYU0RheVRpbWVEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLSByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wbHVzIj5wbHVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lcyI+dGltZXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNEYXlUaW1lRHVyYXRpb24iPlhTRGF5VGltZUR1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEYXlUaW1lRHVyYXRpb248L3N0cm9uZz4oaW50IGRheXMKLSAgICAgICAgICwKLSAgICAgIGludCBob3VycwotICAgICAgICAgLAotICAgICAgaW50IG1pbnV0ZXMKLSAgICAgICAgICwKLSAgICAgIGRvdWJsZSBzZWNvbmRzCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIG5lZ2F0aXZlKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIG1vcmUgdGhhbiAyNCBob3VycyBpcwotIHN1cHBsaWVkLCB0aGUgbnVtYmVyIG9mIGRheXMgaXMgYWRqdXN0ZWQgYWNvcmRpbmdseS4gVGhlIHNhbWUgb2NjdXJzIGZvcgotIG1pbnV0ZXMgYW5kIHNlY29uZHM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEYXlUaW1lRHVyYXRpb24iPlhTRGF5VGltZUR1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEYXlUaW1lRHVyYXRpb248L3N0cm9uZz4oZG91YmxlIHNlY3MpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEYXlUaW1lRHVyYXRpb24iPlhTRGF5VGltZUR1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEYXlUaW1lRHVyYXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgwZGF5cywgMGhvdXJzLCAwbWludXRlcywgMHNlY29uZHMpPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2xvbmUiPmNsb25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5jbG9uZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgY29weSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgdGltZSBkdXJhdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGl2Ij5kaXY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZGl2PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIgICAgICAgICAgdGhlIGRpdmlzaW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51cyI+bWludXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bWludXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyICAgICAgICAgIHRoZSBzdWJ0cmFjdGlvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VEVER1cmF0aW9uIj5wYXJzZURURHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz5wYXJzZURURHVyYXRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wbHVzIj5wbHVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnBsdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGFkZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlciAgICAgICAgICB0aGUgYWRkaXRpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmRheVRpbWVEdXJhdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lcyI+dGltZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+dGltZXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyICAgICAgICAgIHRoZSBtdWx0aXBsaWNhdGlvbjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJkYXlUaW1lRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM2MmFkOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0RlY2ltYWw8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0RlY2ltYWw8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RlY2ltYWwiPlhTRGVjaW1hbDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEZWNpbWFsIj5YU0RlY2ltYWw8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdEZWNpbWFsIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RlY2ltYWwiPlhTRGVjaW1hbDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hYnMiPmFiczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGVjaW1hbAotIG51bWJlciBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnZlcnRBcmciPmNvbnZlcnRBcmc8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RpdiI+ZGl2PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RvdWJsZV92YWx1ZSI+ZG91YmxlX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGF0Ci0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Zsb29yIj5mbG9vcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5tYXRoLkJpZ0RlY2ltYWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaWRpdiI+aWRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLSB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0xleGljYWxWYWx1ZSI+aXNMZXhpY2FsVmFsdWU8L2E+KGphdmEubGFuZy5TdHJpbmcgdmFsdWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWludXMiPm1pbnVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vZCI+bW9kPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sIHRoZQotIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yb3VuZCI+cm91bmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPihpbnQgcHJlY2lzaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9kb3VibGUiPnNldF9kb3VibGU8L2E+KGRvdWJsZSB4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldHMgdGhlIG51bWJlciBzdG9yZWQgdG8gdGhhdCBzdXBwbGllZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lcyI+dGltZXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfemVybyI+emVybzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGlmIHRoaXMgWFNEZWNpbWFsIHJlcHJlc2VudHMgMDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRGVjaW1hbCI+WFNEZWNpbWFsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEZWNpbWFsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAuMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RlY2ltYWwiPlhTRGVjaW1hbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRGVjaW1hbDwvc3Ryb25nPihqYXZhLm1hdGguQmlnRGVjaW1hbCB4KTwvY29kZT48L3A+PHA+SW5pdGlhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RlY2ltYWwiPlhTRGVjaW1hbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRGVjaW1hbDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hYnMiPmFiczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5hYnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jZWlsaW5nIj5jZWlsaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPmNlaWxpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSAgICAgICAgICBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGVjaW1hbAotIG51bWJlciBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRlY2ltYWwgbnVtYmVyLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkZWNpbWFsIG51bWJlciBzdXBwbGllZC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnZlcnRBcmciPmNvbnZlcnRBcmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jb252ZXJ0QXJnPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXYiPmRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5kaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIGRpdmlzaW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBkaXZpc2lvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RvdWJsZV92YWx1ZSI+ZG91YmxlX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZSA8c3Ryb25nPmRvdWJsZV92YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+ZG91YmxlPC9jb2RlPiAtIFRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhdAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0PC9jb2RlPiAtIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUgICAgICAgICAgICAgWFNEZWNpbWFsKTwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9uIHJlcHJlc2VudCB0aGUgc2FtZSBudW1iZXIuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmxvb3IiPmZsb29yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPmZsb29yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubWF0aC5CaWdEZWNpbWFsIDxzdHJvbmc+Z2V0VmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLm1hdGguQmlnRGVjaW1hbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZSAgICAgICAgICAgICBYU0RlY2ltYWwpPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcyAgICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lkaXYiPmlkaXY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+aWRpdjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sCi0gdGhlIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlciAgICAgICAgICBkaXZpc2lvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzTGV4aWNhbFZhbHVlIj5pc0xleGljYWxWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aXNMZXhpY2FsVmFsdWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB2YWx1ZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFsdWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlICAgICAgICAgICAgIFhTRGVjaW1hbCk8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzICAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXMiPm1pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1pbnVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgc3VidHJhY3Rpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb2QiPm1vZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5tb2Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBhZGRpdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kIj5yb3VuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPihpbnQgcHJlY2lzaW9uKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+IC0gQW4gaW50ZWdlciBwcmVjaXNpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0X2RvdWJsZSI+c2V0X2RvdWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0X2RvdWJsZTwvc3Ryb25nPihkb3VibGUgeCk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIG51bWJlciBzdG9yZWQgdG8gdGhhdCBzdXBwbGllZDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eDwvY29kZT4gLSBOdW1iZXIgdG8gYmUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmRlY2ltYWwiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJkZWNpbWFsIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhpcyBYU0RlY2ltYWw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfemVybyI+emVybzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+emVybzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDA8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcwMzk5OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTRG91YmxlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNEb3VibGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRG91YmxlIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRG91YmxlIj5YU0RvdWJsZTwvYT48L3N0cm9uZz4oZG91YmxlIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0RvdWJsZSI+WFNEb3VibGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRG91YmxlIj5YU0RvdWJsZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbml0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hYnMiPmFiczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZG91YmxlIG51bWJlcgotIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udmVydEFyZyI+Y29udmVydEFyZzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGl2Ij5kaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kb3VibGVfdmFsdWUiPmRvdWJsZV92YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhYQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mbG9vciI+Zmxvb3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaWRpdiI+aWRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luZmluaXRlIj5pbmZpbml0ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBhbiBpbmZpbml0ZSBudW1iZXIgKG5lZ2F0aXZlIG9yIHBvc2l0aXZlKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gQ3VycmVudGx5Ci0gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBleGlzdHMgc28gdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUKLSBvZiB0eXBlIFhTRG91YmxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWludXMiPm1pbnVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9kIj5tb2Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uYW4iPm5hbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZWdhdGl2ZVplcm8iPm5lZ2F0aXZlWmVybzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2RvdWJsZSI+cGFyc2VfZG91YmxlPC9hPihqYXZhLmxhbmcuU3RyaW5nIGkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kIj5yb3VuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KGludCBwcmVjaXNpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZAotIHByZWNpc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXMiPnRpbWVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLAotIHRoZSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEb3VibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5hcnlfbWludXMiPnVuYXJ5X21pbnVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF96ZXJvIj56ZXJvPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIDA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0RvdWJsZSI+WFNEb3VibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RvdWJsZTwvc3Ryb25nPihkb3VibGUgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0RvdWJsZSI+WFNEb3VibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0RvdWJsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNEb3VibGUiPlhTRG91YmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNEb3VibGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbml0KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWJzIj5hYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+YWJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jZWlsaW5nIj5jZWlsaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPmNlaWxpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkb3VibGUgbnVtYmVyCi0gaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkb3VibGUgbnVtYmVyLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb3VibGUgbnVtYmVyIHN1cHBsaWVkLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29udmVydEFyZyI+Y29udmVydEFyZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSA8c3Ryb25nPmNvbnZlcnRBcmc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RpdiI+ZGl2PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmRpdjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gZGl2aXNpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgZGl2aXNpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb3VibGVfdmFsdWUiPmRvdWJsZV92YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz5kb3VibGVfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYWEKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hYTwvY29kZT4gLSBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlICAgICAgICAgICAgIFhTRG91YmxlKTwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9ucyByZXByZXNlbnQgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZSAgICAgICAgICBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Zsb29yIj5mbG9vcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5mbG9vcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlICAgICAgICAgIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZSAgICAgICAgICAgICBYU0RvdWJsZSk8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGlzICAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaWRpdiI+aWRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5pZGl2PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIgICAgICAgICAgZGl2aXNpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbmZpbml0ZSI+aW5maW5pdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmluZmluaXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBhbiBpbmZpbml0ZSBudW1iZXIgKG5lZ2F0aXZlIG9yIHBvc2l0aXZlKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBpbmZpbml0eS4gRmFsc2Ugb3RoZXJ3aXNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gQ3VycmVudGx5Ci0gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBleGlzdHMgc28gdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUKLSBvZiB0eXBlIFhTRG91YmxlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUgICAgICAgICAgICAgWFNEb3VibGUpPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcyAgICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnVzIj5taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5taW51czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gc3VidHJhY3Rpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgc3VidHJhY3Rpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb2QiPm1vZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5tb2Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW4iPm5hbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bmFuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25lZ2F0aXZlWmVybyI+bmVnYXRpdmVaZXJvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5uZWdhdGl2ZVplcm88L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9kb3VibGUiPnBhcnNlX2RvdWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGUgPHN0cm9uZz5wYXJzZV9kb3VibGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aTwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTwvY29kZT4gLSBOZXcgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgc3VwcGxpZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGx1cyI+cGx1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5wbHVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kIj5yb3VuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+cm91bmRfaGFsZl90b19ldmVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZF9oYWxmX3RvX2V2ZW48L3N0cm9uZz4oaW50IHByZWNpc2lvbik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQKLSBwcmVjaXNpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVjaXNpb248L2NvZGU+IC0gQW4gaW50ZWdlciBwcmVjaXNpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpkb3VibGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLSB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRG91YmxlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIG11bHRpcGxpY2F0aW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIG11bHRpcGxpY2F0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZG91YmxlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF96ZXJvIj56ZXJvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz56ZXJvPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAwPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhpcyBYU0RvdWJsZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzJmYjkyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNEdXJhdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTRHVyYXRpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB4czpkdXJhdGlvbiBkYXRhIHR5cGUuIE90aGVyIGR1cmF0aW9uIGltcGxlbWVudGF0aW9ucwotIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBpbXBsZW1lbnRhdGlvbi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX19kYXlzIj5fZGF5czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX2hvdXJzIj5faG91cnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX19taW51dGVzIj5fbWludXRlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX21vbnRoIj5fbW9udGg8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9fbmVnYXRpdmUiPl9uZWdhdGl2ZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfX3NlY29uZHMiPl9zZWNvbmRzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9feWVhciI+X3llYXI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRHVyYXRpb24iPlhTRHVyYXRpb248L2E+PC9zdHJvbmc+KGludCB5ZWFycwotICAgICAgICAgLAotICAgICAgaW50IG1vbnRocwotICAgICAgICAgLAotICAgICAgaW50IGRheXMKLSAgICAgICAgICwKLSAgICAgIGludCBob3VycwotICAgICAgICAgLAotICAgICAgaW50IG1pbnV0ZXMKLSAgICAgICAgICwKLSAgICAgIGRvdWJsZSBzZWNvbmRzCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIG5lZ2F0aXZlKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNEdXJhdGlvbiI+WFNEdXJhdGlvbjwvYT48L3N0cm9uZz4oZG91YmxlIHNlY3MpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0R1cmF0aW9uIj5YU0R1cmF0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZHVyYXRpb24KLSBmcm9tIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGF5cyI+ZGF5czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hvdXJzIj5ob3VyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGhvdXJzIChtYXggMjQpIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0Nhc3RhYmxlIj5pc0Nhc3RhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnV0ZXMiPm1pbnV0ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtaW51dGVzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbW9udGgiPm1vbnRoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgbW9udGhzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZWdhdGl2ZSI+bmVnYXRpdmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2gKLSB0aW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZURURHVyYXRpb24iPnBhcnNlRFREdXJhdGlvbjwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBYU0RheVRpbWVEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLSByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWNvbmRzIj5zZWNvbmRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyAobWF4IDYwKSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lX3ZhbHVlIj50aW1lX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgZG91YmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQgYXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHdpdGhpbiBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfeWVhciI+eWVhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHllYXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX19kYXlzIj5fZGF5czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5fZGF5czwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9faG91cnMiPl9ob3VyczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5faG91cnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfX21pbnV0ZXMiPl9taW51dGVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPl9taW51dGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX19tb250aCI+X21vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPl9tb250aDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9fbmVnYXRpdmUiPl9uZWdhdGl2ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+X25lZ2F0aXZlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX19zZWNvbmRzIj5fc2Vjb25kczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBkb3VibGUgPHN0cm9uZz5fc2Vjb25kczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9feWVhciI+X3llYXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+X3llYXI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRHVyYXRpb24iPlhTRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0R1cmF0aW9uPC9zdHJvbmc+KGludCB5ZWFycwotICAgICAgICAgLAotICAgICAgaW50IG1vbnRocwotICAgICAgICAgLAotICAgICAgaW50IGRheXMKLSAgICAgICAgICwKLSAgICAgIGludCBob3VycwotICAgICAgICAgLAotICAgICAgaW50IG1pbnV0ZXMKLSAgICAgICAgICwKLSAgICAgIGRvdWJsZSBzZWNvbmRzCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIG5lZ2F0aXZlKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIG1vcmUgdGhhbiAyNCBob3VycyBpcwotIHN1cHBsaWVkLCB0aGUgbnVtYmVyIG9mIGRheXMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuIFRoZSBzYW1lIG9jY3VycyBmb3IKLSBtaW51dGVzIGFuZCBzZWNvbmRzPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTRHVyYXRpb24iPlhTRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0R1cmF0aW9uPC9zdHJvbmc+KGRvdWJsZSBzZWNzKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTRHVyYXRpb24iPlhTRHVyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0R1cmF0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIGEgZHVyYXRpb24gb2Ygbm8gdGltZSAoMGRheXMsIDBob3VycywgMG1pbnV0ZXMsIDBzZWNvbmRzKTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Nsb25lIj5jbG9uZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Y2xvbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBkdXJhdGlvbgotIGZyb20gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGF5cyI+ZGF5czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5kYXlzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIE51bWJlciBvZiBkYXlzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIGR1cmF0aW9uIG9mIHRpbWUuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBzbWFsbGVyIGR1cmF0aW9uIHRoYW4gdGhhdCAgICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaG91cnMiPmhvdXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhvdXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGhvdXJzIChtYXggMjQpIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBOdW1iZXIgb2YgaG91cnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0Nhc3RhYmxlIj5pc0Nhc3RhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0Nhc3RhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIGFhdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWF0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbHQiPmx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5sdDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBsYXJnZXIgZHVyYXRpb24gdGhhbiB0aGF0ICAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51dGVzIj5taW51dGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm1pbnV0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBudW1iZXIgb2YgbWludXRlcyAobWF4IDYwKSB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBOdW1iZXIgb2YgbWludXRlcyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vbnRoIj5tb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5tb250aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIE51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZWdhdGl2ZSI+bmVnYXRpdmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPm5lZ2F0aXZlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotIHRpbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlRFREdXJhdGlvbiI+cGFyc2VEVER1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+cGFyc2VEVER1cmF0aW9uPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBYU0RheVRpbWVEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLSByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2Vjb25kcyI+c2Vjb25kczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz5zZWNvbmRzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgKG1heCA2MCkgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0gc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gTnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lX3ZhbHVlIj50aW1lX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGRvdWJsZSA8c3Ryb25nPnRpbWVfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgZG91YmxlIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGl0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gTnVtYmVyIG9mIHNlY29uZHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95ZWFyIj55ZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnllYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBudW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIE51bWJlciBvZiB5ZWFycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRW50aXR5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0VudGl0eS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjMzOTNkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRW50aXR5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNFbnRpdHk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0VudGl0eTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU8L3ByZT5CdWlsdCBpbiBEYXRhIFR5cGUgZm9yIHhzOkVudGl0eTxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTRW50aXR5Ij5YU0VudGl0eTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNFbnRpdHkiPlhTRW50aXR5PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgd2l0aGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAgVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoaXMKLSBpcyByZWxheGVkIGZyb20gdGhlIFhNTCBTY2hlbWEgcmVxdWlyZW1lbnQuICBUaGUgRU5USVRZIGRvZXMKLSBub3QgaGF2ZSB0byBiZSBsb2NhdGVkIG9yIGV4cGFuZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kCi0gZXZhbHVhdGlvbiBmb3IgY2FzdGluZy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRW50aXR5Ij5YU0VudGl0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRW50aXR5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0VudGl0eSI+WFNFbnRpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0VudGl0eTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIEVOVElUWSB3aXRoaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuICBUaGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhpcwotIGlzIHJlbGF4ZWQgZnJvbSB0aGUgWE1MIFNjaGVtYSByZXF1aXJlbWVudC4gIFRoZSBFTlRJVFkgZG9lcwotIG5vdCBoYXZlIHRvIGJlIGxvY2F0ZWQgb3IgZXhwYW5kZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBhbmQKLSBldmFsdWF0aW9uIGZvciBjYXN0aW5nLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIEVOVElUWTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWE5Y2E4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0Zsb2F0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNGbG9hdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGbG9hdCBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0Zsb2F0Ij5YU0Zsb2F0PC9hPjwvc3Ryb25nPihmbG9hdCB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNGbG9hdCI+WFNGbG9hdDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNGbG9hdCI+WFNGbG9hdDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbml0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hYnMiPmFiczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2VpbGluZyI+Y2VpbGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb252ZXJ0QXJnIj5jb252ZXJ0QXJnPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXYiPmRpdjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYWEKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBmbG9hdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mbG9hdF92YWx1ZSI+ZmxvYXRfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBmbG9hdCB2YWx1ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Zsb29yIj5mbG9vcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pZGl2Ij5pZGl2PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBpbnRlZ2VyIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbmZpbml0ZSI+aW5maW5pdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgbmVnYXRpdmUgb3IgcG9zaXRpdmUgaW5maW5pdHk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vZCI+bW9kPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwgdGhlCi0gUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRmxvYXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmFuIj5uYW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmVnYXRpdmVaZXJvIj5uZWdhdGl2ZVplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kIj5yb3VuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfcm91bmRfaGFsZl90b19ldmVuIj5yb3VuZF9oYWxmX3RvX2V2ZW48L2E+KGludCBwcmVjaXNpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXMiPnRpbWVzPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5hcnlfbWludXMiPnVuYXJ5X21pbnVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTmVnYXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3plcm8iPnplcm88L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgMDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTRmxvYXQiPlhTRmxvYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0Zsb2F0PC9zdHJvbmc+KGZsb2F0IHgpPC9jb2RlPjwvcD48cD5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTRmxvYXQiPlhTRmxvYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0Zsb2F0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNGbG9hdCI+WFNGbG9hdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTRmxvYXQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbml0KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWJzIj5hYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+YWJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NlaWxpbmciPmNlaWxpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+Y2VpbGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlPC9jb2RlPiAtIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSAgICAgICAgICBudW1iZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGZsb2F0IHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb252ZXJ0QXJnIj5jb252ZXJ0QXJnPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIDxzdHJvbmc+Y29udmVydEFyZzwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGl2Ij5kaXY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+ZGl2PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgZGl2aXNpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBkaXZpc2lvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYWEKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hYTwvY29kZT4gLSBUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG51bWJlci4gRmFsc2UgICAgICAgICAgb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mbG9hdF92YWx1ZSI+ZmxvYXRfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgZmxvYXQgPHN0cm9uZz5mbG9hdF92YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBmbG9hdCB2YWx1ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmZsb2F0PC9jb2RlPiAtIFRoZSBhY3R1YWwgZmxvYXQgdmFsdWUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2Zsb29yIj5mbG9vcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5mbG9vcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgICAgICAgICAgbnVtYmVyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUgICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pZGl2Ij5pZGl2PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmlkaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBpbnRlZ2VyIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyICAgICAgICAgIGRpdmlzaW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5maW5pdGUiPmluZmluaXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pbmZpbml0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgbmVnYXRpdmUgb3IgcG9zaXRpdmUgaW5maW5pdHk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgZ3JlYXRlciBudW1iZXIgdGhhbiB0aGUgICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51cyI+bWludXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bWludXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIHN1YnRyYWN0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9kIj5tb2Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bW9kPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sIHRoZQotIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0Zsb2F0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uYW4iPm5hbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bmFuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmVnYXRpdmVaZXJvIj5uZWdhdGl2ZVplcm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPm5lZ2F0aXZlWmVybzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BsdXMiPnBsdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cGx1czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfcm91bmQiPnJvdW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JvdW5kX2hhbGZfdG9fZXZlbiI+cm91bmRfaGFsZl90b19ldmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSA8c3Ryb25nPnJvdW5kX2hhbGZfdG9fZXZlbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yb3VuZF9oYWxmX3RvX2V2ZW4iPnJvdW5kX2hhbGZfdG9fZXZlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUgPHN0cm9uZz5yb3VuZF9oYWxmX3RvX2V2ZW48L3N0cm9uZz4oaW50IHByZWNpc2lvbik8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJlY2lzaW9uPC9jb2RlPiAtIEFuIGludGVnZXIgcHJlY2lzaW9uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU8L2NvZGU+IC0gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpmbG9hdCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBudW1iZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCAgICAgICAgICBtdWx0aXBsaWNhdGlvbi48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImZsb2F0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGVzIHRoZSBudW1iZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfemVybyI+emVybzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+emVybzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgMDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyAwLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dEYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2MTM4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dEYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0dEYXk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0dEYXk8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dEYXkiPlhTR0RheTwvYT48L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dEYXkiPlhTR0RheTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnRGF5IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kYXkiPmRheTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHRGF5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlX2dEYXkiPnBhcnNlX2dEYXk8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRheSBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dEYXkKLSByZXByZXNlbnRhdGlvbiBvZiBpdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgZGF5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTR0RheSI+WFNHRGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHRGF5PC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF5PC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTR0RheSI+WFNHRGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHRGF5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF5PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhciA8c3Ryb25nPmNhbGVuZGFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4gLSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ0RheSBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnRGF5IGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBkYXk8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RheSI+ZGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmRheTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dEYXk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgWFNHRGF5IHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBkYXkuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0dEYXRhVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFhdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX2dEYXkiPnBhcnNlX2dEYXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR0RheSA8c3Ryb25nPnBhcnNlX2dEYXk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHRGF5Ci0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5PC9jb2RlPiAtIFRoZSBYU0dEYXkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6Z0RheSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBkYXk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJnRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YjRkNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0dNb250aDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTR01vbnRoPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnTW9udGggZGF0YXR5cGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNHTW9udGgiPlhTR01vbnRoPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR01vbnRoIj5YU0dNb250aDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdNb250aCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR01vbnRoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb250aCI+bW9udGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGg8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfZ01vbnRoIj5wYXJzZV9nTW9udGg8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1vbnRoIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR01vbnRoCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTR01vbnRoIj5YU0dNb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTR01vbnRoPC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbW9udGg8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNHTW9udGgiPlhTR01vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHTW9udGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtb250aDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5jYWxlbmRhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4gLSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnTW9udGggaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ01vbnRoIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBtb250aDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXEiPmVxPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dNb250aDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0dNb250aCB0byBjb21wYXJlIHdpdGg8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbW9udGguIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0dEYXRhVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFhdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vbnRoIj5tb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5tb250aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX2dNb250aCI+cGFyc2VfZ01vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aCA8c3Ryb25nPnBhcnNlX2dNb250aDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1vbnRoIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR01vbnRoCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aDwvY29kZT4gLSBUaGUgWFNHTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6Z01vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGg8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJnTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHoiPnR6PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+dHo8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI5MGFhNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTR01vbnRoRGF5PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNHTW9udGhEYXk8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIE1vbnRoRGF5IGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR01vbnRoRGF5Ij5YU0dNb250aERheTwvYT48L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dNb250aERheSI+WFNHTW9udGhEYXk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdNb250aERheSBpbgotIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGF5Ij5kYXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxIj5lcTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR01vbnRoRGF5PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb250aCI+bW9udGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXk8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfZ01vbnRoRGF5Ij5wYXJzZV9nTW9udGhEYXk8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1vbnRoIGFuZCBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcKLSBYU0dNb250aERheSByZXByZXNlbnRhdGlvbiBvZiBpdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGggYW5kIGRheTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eiI+dHo8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0dNb250aERheSI+WFNHTW9udGhEYXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0dNb250aERheTwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXk8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNHTW9udGhEYXkiPlhTR01vbnRoRGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHTW9udGhEYXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtb250aCBhbmQgZGF5PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhciA8c3Ryb25nPmNhbGVuZGFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+IC0gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnTW9udGhEYXkgaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ01vbnRoRGF5IGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBtb250aCBhbmQgZGF5PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kYXkiPmRheTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5kYXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHTW9udGhEYXk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgWFNHTW9udGhEYXkgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoIGFuZCBkYXkuICAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNHRGF0YVR5cGUiPmlzR0RhdGFUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0dEYXRhVHlwZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSBhYXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFhdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vbnRoIj5tb250aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5tb250aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlX2dNb250aERheSI+cGFyc2VfZ01vbnRoRGF5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheSA8c3Ryb25nPnBhcnNlX2dNb250aERheTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1vbnRoIGFuZCBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcKLSBYU0dNb250aERheSByZXByZXNlbnRhdGlvbiBvZiBpdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IChhbmQgb3B0aW9uYWwgICAgICAgICAgICAgdGltZXpvbmUpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXk8L2NvZGU+IC0gVGhlIFhTR01vbnRoRGF5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmdNb250aERheSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGggYW5kIGRheTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dGltZXpvbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImdNb250aERheSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYwMjU4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNHWWVhcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTR1llYXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdNb250aCBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dZZWFyIj5YU0dZZWFyPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTR1llYXIiPlhTR1llYXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FsZW5kYXIiPmNhbGVuZGFyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHWWVhcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzR0RhdGFUeXBlIj5pc0dEYXRhVHlwZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgYWF0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfZ1llYXIiPnBhcnNlX2dZZWFyPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB5ZWFyIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR1llYXIKLSByZXByZXNlbnRhdGlvbiBvZiBpdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eiI+dHo8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3llYXIiPnllYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0dZZWFyIj5YU0dZZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHWWVhcjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTR1llYXIiPlhTR1llYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0dZZWFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5jYWxlbmRhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPiAtIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXIgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ1llYXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXI8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHWWVhcjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0dZZWFyIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyLiBGYWxzZSAgICAgICAgICBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzR0RhdGFUeXBlIj5pc0dEYXRhVHlwZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aXNHRGF0YVR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgYWF0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hYXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9nWWVhciI+cGFyc2VfZ1llYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIgPHN0cm9uZz5wYXJzZV9nWWVhcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHWWVhcgotIHJlcHJlc2VudGF0aW9uIG9mIGl0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyPC9jb2RlPiAtIFRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmdZZWFyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz50aW1lem9uZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgZm9yIHdoZXRoZXIgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiZ1llYXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHoiPnR6PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIDxzdHJvbmc+dHo8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvY29kZT4gLSB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF95ZWFyIj55ZWFyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnllYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gVGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhck1vbnRoLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBjMmE2OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0dZZWFyTW9udGg8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0dZZWFyTW9udGg8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFllYXJNb250aCBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dZZWFyTW9udGgiPlhTR1llYXJNb250aDwvYT48L3N0cm9uZz4oamF2YS51dGlsLkNhbGVuZGFyIGNhbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gdHopPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0dZZWFyTW9udGgiPlhTR1llYXJNb250aDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5DYWxlbmRhcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyTW9udGggaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyTW9udGg8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0dEYXRhVHlwZSI+aXNHRGF0YVR5cGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIGFhdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vbnRoIj5tb250aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGg8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfZ1llYXJNb250aCI+cGFyc2VfZ1llYXJNb250aDwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcKLSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgaXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIgYW5kIG1vbnRoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R6Ij50ejwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfeWVhciI+eWVhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTR1llYXJNb250aCI+WFNHWWVhck1vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNHWWVhck1vbnRoPC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgeWVhciBhbmQgbW9udGg8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNHWWVhck1vbnRoIj5YU0dZZWFyTW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0dZZWFyTW9udGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB5ZWFyIGFuZCBtb250aDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgPHN0cm9uZz5jYWxlbmRhcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4gLSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnWWVhck1vbnRoIGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyTW9udGggaXMgdG8gYmUgICAgICAgICAgICAgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIgYW5kIG1vbnRoPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR1llYXJNb250aDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU0dZZWFyTW9udGggdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIHllYXIgYW5kIG1vbnRoLiAgICAgICAgICBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzR0RhdGFUeXBlIj5pc0dEYXRhVHlwZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aXNHRGF0YVR5cGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgYWF0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hYXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb250aCI+bW9udGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bW9udGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV9nWWVhck1vbnRoIj5wYXJzZV9nWWVhck1vbnRoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGggPHN0cm9uZz5wYXJzZV9nWWVhck1vbnRoPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcKLSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggKGFuZCBvcHRpb25hbCAgICAgICAgICAgICB0aW1lem9uZSk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGg8L2NvZGU+IC0gVGhlIFhTR1llYXJNb250aCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpnWWVhck1vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhciBhbmQgbW9udGg8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhciBhbmQgbW9udGg8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXpvbmVkIj50aW1lem9uZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnRpbWV6b25lZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJnWWVhck1vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R6Ij50ejwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnR6PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+IC0gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfeWVhciI+eWVhcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz55ZWFyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSGV4QmluYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0hleEJpbmFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjAzZDMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSGV4QmluYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNIZXhCaW5hcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0hleEJpbmFyeTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHhzOmhleEJpbmFyeSBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0hleEJpbmFyeSI+WFNIZXhCaW5hcnk8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTSGV4QmluYXJ5Ij5YU0hleEJpbmFyeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBoZXhCaW5hcnkgdmFsdWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSBoZXhCaW5hcnk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGhleEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTSGV4QmluYXJ5Ij5YU0hleEJpbmFyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSGV4QmluYXJ5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNIZXhCaW5hcnkiPlhTSGV4QmluYXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNIZXhCaW5hcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gbnVsbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBoZXhCaW5hcnkgdmFsdWU8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgaGV4QmluYXJ5IHZhbHVlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyBoZXhCaW5hcnkgdmFsdWU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgaGV4QmluYXJ5PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmhleEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0QmluYXJ5IHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGhleEJpbmFyeSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAiaGV4QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBoZXhCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gVGhlIGhleEJpbmFyeSBzdG9yZWQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTRhMTU0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSUQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0lEPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNJRDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRCI+WFNJRDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRCI+WFNJRDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0lEIj5YU0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJRDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNJRCI+WFNJRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzI4NzI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSURSRUYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0lEUkVGPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNJRFJFRjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRFJFRiI+WFNJRFJFRjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJRFJFRiI+WFNJRFJFRjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0lEUkVGIj5YU0lEUkVGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJRFJFRjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNJRFJFRiI+WFNJRFJFRjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSURSRUY8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ODQ2YmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0ludDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTSW50PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmc8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJbnQiPlhTSW50PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0ludCI+WFNJbnQ8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdpbnQnIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNJbnQiPlhTSW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTSW50Ij5YU0ludDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSW50PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBpbnQgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJ2ludCcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgaW50IGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnaW50JyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6aW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gImludCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzE2YWY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTSW50ZWdlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTSW50ZWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgSW50ZWdlciBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0ludGVnZXIiPlhTSW50ZWdlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNJbnRlZ2VyIj5YU0ludGVnZXI8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0ludGVnZXIiPlhTSW50ZWdlcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hYnMiPmFiczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFic29sdXRlcyB0aGUgaW50ZWdlciBzdG9yZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGludGVnZXIgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29udmVydEFyZyI+Y29udmVydEFyZzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGl2Ij5kaXY8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLm1hdGguQmlnSW50ZWdlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnRfdmFsdWUiPmludF92YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYWN0dWFsIGludGVnZXIgdmFsdWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNMZXhpY2FsVmFsdWUiPmlzTGV4aWNhbFZhbHVlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnVzIj5taW51czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb2QiPm1vZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BsdXMiPnBsdXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldF9pbnQiPnNldF9pbnQ8L2E+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0cyB0aGUgaW50ZWdlciBzdG9yZWQgdG8gdGhhdCBzdXBwbGllZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lcyI+dGltZXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5lZ2F0ZXMgdGhlIGludGVnZXIgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfemVybyI+emVybzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIHdoZXRoZXIgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgaXMgMDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTSW50ZWdlciI+WFNJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNJbnRlZ2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0ludGVnZXIiPlhTSW50ZWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSW50ZWdlcjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50ZWdlcjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU0ludGVnZXIiPlhTSW50ZWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTSW50ZWdlcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBpbnRlZ2VyPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWJzIj5hYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIDxzdHJvbmc+YWJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFic29sdXRlcyB0aGUgaW50ZWdlciBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTwvY29kZT4gLSBOZXcgWFNJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIGludGVnZXIgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBpbnRlZ2VyIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGludGVnZXIgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnZlcnRBcmciPmNvbnZlcnRBcmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgPHN0cm9uZz5jb252ZXJ0QXJnPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXYiPmRpdjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5kaXY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW50X3ZhbHVlIj5pbnRfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5tYXRoLkJpZ0ludGVnZXIgPHN0cm9uZz5pbnRfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBhY3R1YWwgaW50ZWdlciB2YWx1ZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9jb2RlPiAtIFRoZSBhY3R1YWwgaW50ZWdlciB2YWx1ZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNMZXhpY2FsVmFsdWUiPmlzTGV4aWNhbFZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc0xleGljYWxWYWx1ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YWx1ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21pbnVzIj5taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5taW51czwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsICAgICAgICAgIHN1YnRyYWN0aW9uLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9kIj5tb2Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bW9kPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wbHVzIj5wbHVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnBsdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgYWRkaXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRfaW50Ij5zZXRfaW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRfaW50PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5TZXRzIHRoZSBpbnRlZ2VyIHN0b3JlZCB0byB0aGF0IHN1cHBsaWVkPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54PC9jb2RlPiAtIEludGVnZXIgdG8gYmUgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdGltZXMiPnRpbWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnRpbWVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJpbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuYXJ5X21pbnVzIj51bmFyeV9taW51czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz51bmFyeV9taW51czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5OZWdhdGVzIHRoZSBpbnRlZ2VyIHN0b3JlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfemVybyI+emVybzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+emVybzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DaGVjayB3aGV0aGVyIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGlzIDA8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNMb25nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxNGQ1My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xvbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xvbmc8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xvbmciPlhTTG9uZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMb25nIj5YU0xvbmc8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGxvbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xvbmciPlhTTG9uZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTG9uZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNMb25nIj5YU0xvbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xvbmc8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGxvbmcgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbG9uZyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBsb25nIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbG9uZycgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOmxvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAibG9uZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlNjllOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTkNOYW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNOQ05hbWU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTkNOYW1lIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTkNOYW1lIj5YU05DTmFtZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNOQ05hbWUiPlhTTkNOYW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIE5DTmFtZSB3aXRoaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU05DTmFtZSI+WFNOQ05hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU05DTmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTTkNOYW1lIj5YU05DTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTkNOYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIG51bGw8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgTkNOYW1lIHdpdGhpbgotIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIE5DTmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOQ05hbWUgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOk5DTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJOQ05hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOZWdhdGl2ZUludGVnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTmVnYXRpdmVJbnRlZ2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNTgzNDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOZWdhdGl2ZUludGVnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU05lZ2F0aXZlSW50ZWdlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTmVnYXRpdmVJbnRlZ2VyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU05lZ2F0aXZlSW50ZWdlciI+WFNOZWdhdGl2ZUludGVnZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTmVnYXRpdmVJbnRlZ2VyIj5YU05lZ2F0aXZlSW50ZWdlcjwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbmVnYXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNOZWdhdGl2ZUludGVnZXIiPlhTTmVnYXRpdmVJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNOZWdhdGl2ZUludGVnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAtMTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU05lZ2F0aXZlSW50ZWdlciI+WFNOZWdhdGl2ZUludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU05lZ2F0aXZlSW50ZWdlcjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbmVnYXRpdmVJbnRlZ2VyIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIG5lZ2F0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBuZWdhdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICduZWdhdGl2ZUludGVnZXInIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpuZWdhdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAibmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vbk5lZ2F0aXZlSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDY3NDhmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNOb25OZWdhdGl2ZUludGVnZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTm9uTmVnYXRpdmVJbnRlZ2VyIj5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNOb25OZWdhdGl2ZUludGVnZXIiPlhTTm9uTmVnYXRpdmVJbnRlZ2VyPC9hPjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25OZWdhdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU05vbk5lZ2F0aXZlSW50ZWdlciI+WFNOb25OZWdhdGl2ZUludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU05vbk5lZ2F0aXZlSW50ZWdlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNOb25OZWdhdGl2ZUludGVnZXIiPlhTTm9uTmVnYXRpdmVJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNOb25OZWdhdGl2ZUludGVnZXI8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vbk5lZ2F0aXZlSW50ZWdlciB2YWx1ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25OZWdhdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uTmVnYXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbm9uTmVnYXRpdmVJbnRlZ2VyJyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gIm5vbk5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25Qb3NpdGl2ZUludGVnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5MTljZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTm9uUG9zaXRpdmVJbnRlZ2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNOb25Qb3NpdGl2ZUludGVnZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU05vblBvc2l0aXZlSW50ZWdlciI+WFNOb25Qb3NpdGl2ZUludGVnZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTm9uUG9zaXRpdmVJbnRlZ2VyIj5YU05vblBvc2l0aXZlSW50ZWdlcjwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uUG9zaXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNOb25Qb3NpdGl2ZUludGVnZXIiPlhTTm9uUG9zaXRpdmVJbnRlZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNOb25Qb3NpdGl2ZUludGVnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTTm9uUG9zaXRpdmVJbnRlZ2VyIj5YU05vblBvc2l0aXZlSW50ZWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTm9uUG9zaXRpdmVJbnRlZ2VyPC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBub25Qb3NpdGl2ZUludGVnZXIgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uUG9zaXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vblBvc2l0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ25vblBvc2l0aXZlSW50ZWdlcicgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOm5vblBvc2l0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJub25Qb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWZhYWEwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm90YXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU05vdGF0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNOb3RhdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU05vdGF0aW9uIj5YU05vdGF0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNOb3RhdGlvbiI+WFNOb3RhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTm90YXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTUG9zaXRpdmVJbnRlZ2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Bvc2l0aXZlSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTM4MjljLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTUG9zaXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNQb3NpdGl2ZUludGVnZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1Bvc2l0aXZlSW50ZWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNQb3NpdGl2ZUludGVnZXIiPlhTUG9zaXRpdmVJbnRlZ2VyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Bvc2l0aXZlSW50ZWdlciI+WFNQb3NpdGl2ZUludGVnZXI8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHBvc2l0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTUG9zaXRpdmVJbnRlZ2VyIj5YU1Bvc2l0aXZlSW50ZWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTUG9zaXRpdmVJbnRlZ2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMTwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1Bvc2l0aXZlSW50ZWdlciI+WFNQb3NpdGl2ZUludGVnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Bvc2l0aXZlSW50ZWdlcjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgcG9zaXRpdmVJbnRlZ2VyIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHBvc2l0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBwb3NpdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdwb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpwb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAicG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4ODFkZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNTaG9ydDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTU2hvcnQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTU2hvcnQiPlhTU2hvcnQ8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTU2hvcnQiPlhTU2hvcnQ8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdzaG9ydCcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU1Nob3J0Ij5YU1Nob3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNTaG9ydDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNTaG9ydCI+WFNTaG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTU2hvcnQ8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHNob3J0IHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICdzaG9ydCcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgc2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdzaG9ydCcgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOnNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDJmYTkzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNTdHJpbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1N0cmluZzwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFN0cmluZyBkYXRhdHlwZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1N0cmluZyI+WFNTdHJpbmc8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTU3RyaW5nIj5YU1N0cmluZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBTdHJpbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcSI+ZXE8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSBTdHJpbmc8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0gdHlwZSBTdHJpbmc8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sdCI+bHQ8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0gdHlwZSBTdHJpbmc8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmcgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTU3RyaW5nIj5YU1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTU3RyaW5nPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNTdHJpbmciPlhTU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNTdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gbnVsbDwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBTdHJpbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBTdHJpbmc8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgU3RyaW5nPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIFN0cmluZzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBvZiB0aGUgc2FtZSBTdHJpbmcuIEZhbHNlICAgICAgICAgIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ3QiPmd0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5ndDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0gdHlwZSBTdHJpbmc8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGF0ICAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBsZXNzIHRoYW4gdGhhdCBzdXBwbGllZC4gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czpzdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ192YWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFRoZSBTdHJpbmcgc3RvcmVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInN0cmluZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIFRoZSBTdHJpbmcgc3RvcmVkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNjVkMzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNUaW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNUaW1lPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU8L3ByZT5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUaW1lIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVGltZSI+WFNUaW1lPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuQ2FsZW5kYXIgY2FsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiB0eik8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVGltZSI+WFNUaW1lPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbGVuZGFyIj5jYWxlbmRhcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyBhIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xvbmUiPmNsb25lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSB0aW1lIChhbmQgdGltZXpvbmUpIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBmcm9tIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ3QiPmd0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ob3VyIj5ob3VyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBob3VyIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbHQiPmx0PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIGJldHdlZW4gdGhpcyB0aW1lIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gcmVwcmVzZW50YXRpb24uIFRoaXMgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiBlaXRoZXIgdHlwZQotIFhTVGltZSAoaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IGlzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UKLSB0d28gdGltZXMpIG9yIGEgWFNEYXlUaW1lRHVyYXRpb24gKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgdGltZQotIHdoZW4gdGhpcyBkdXJhdGlvbiBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIHRpbWUgc3RvcmVkKS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21pbnV0ZSI+bWludXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBtaW51dGUgc3RvcmVkIGFzIGFuIGludGVnZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VfdGltZSI+cGFyc2VfdGltZTwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgc3VwcGxpZWQgdGltZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIHRpbWUgc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQgdGltZQotIGR1cmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBkb3VibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2Vjb25kIj5zZWNvbmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHNlY29uZHMgc3RvcmVkIGFzIGFuIGludGVnZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RpbWV6b25lZCI+dGltZXpvbmVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgZm9yIHdoZXRoZXIgdGhlIHRpbWUgc3RvcmVkIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHoiPnR6PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbWUgc3RvcmVkIGFzIGEgZHVyYXRpb24gb2YKLSB0aW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGRvdWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZSI+dmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTVGltZSI+WFNUaW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNUaW1lPC9zdHJvbmc+KGphdmEudXRpbC5DYWxlbmRhciBjYWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIHR6KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gdGhlIHN1cHBsaWVkIHRpbWUgYW5kIHRpbWV6b25lPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1hTVGltZSI+WFNUaW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNUaW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpc2VzIHRvIHRoZSBjdXJyZW50IHRpbWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYWxlbmRhciI+Y2FsZW5kYXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNhbGVuZGFyIDxzdHJvbmc+Y2FsZW5kYXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGltZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhcjwvY29kZT4gLSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xvbmUiPmNsb25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5jbG9uZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIHRpbWUgKGFuZCB0aW1lem9uZSkgc3RvcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIE5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBjb3B5IG9mIHRoZSB0aW1lIGFuZCB0aW1lem9uZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBmcm9tIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgdGltZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB0aW1lPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcSI+ZXE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgYm90aCBYU1RpbWUncyByZXByZXNlbnQgdGhlIHNhbWUgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ndCI+Z3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmd0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzbnRzIGEgcG9pbnQgaW4gdGltZSBiZWZvcmUgdGhhdCAgICAgICAgICByZXByZXNlbnRlZCBieSB0aGUgdGltZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaG91ciI+aG91cjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5ob3VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgaG91ciBzdG9yZWQgYXMgYW4gaW50ZWdlcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIFRoZSBob3VyIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sdCI+bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmx0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoPC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzbnRzIGEgcG9pbnQgaW4gdGltZSBhZnRlciB0aGF0ICAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51cyI+bWludXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+bWludXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIHJlcHJlc2VudGF0aW9uLiBUaGlzIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgZWl0aGVyIHR5cGUKLSBYU1RpbWUgKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlCi0gdHdvIHRpbWVzKSBvciBhIFhTRGF5VGltZUR1cmF0aW9uIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIHRpbWUKLSB3aGVuIHRoaXMgZHVyYXRpb24gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSB0aW1lIHN0b3JlZCkuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIHJlcHJlc2VudGF0aW9uIHRvIHN1YnRyYWN0IChlaXRoZXIgWFNUaW0gb3IgICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9taW51dGUiPm1pbnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5taW51dGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBtaW51dGUgc3RvcmVkIGFzIGFuIGludGVnZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBUaGUgbWludXRlIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZV90aW1lIj5wYXJzZV90aW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUgPHN0cm9uZz5wYXJzZV90aW1lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBTdHJpbmcgcmVwcmVzZW50ZWQgc3VwcGxpZWQgdGltZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIFN0cmluZyByZXByZXNlbnRlZCB0aW1lIGFuZCB0aW1lem9uZSB0byBiZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU8L2NvZGU+IC0gTmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIHN1cHBsaWVkIHRpbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGx1cyI+cGx1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5wbHVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIHRpbWUgc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQgdGltZQotIGR1cmF0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIEEgWERURGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvICAgICAgICAgICAgIGFkZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIEEgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoaXMgYWRkaXRpb24uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWNvbmQiPnNlY29uZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBkb3VibGUgPHN0cm9uZz5zZWNvbmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBzZWNvbmRzIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5kb3VibGU8L2NvZGU+IC0gVGhlIHNlY29uZCBzdG9yZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6dGltZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lem9uZWQiPnRpbWV6b25lZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dGltZXpvbmVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIGZvciB3aGV0aGVyIHRoZSB0aW1lIHN0b3JlZCBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggaXQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgdGltZSBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAidGltZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eiI+dHo8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24gPHN0cm9uZz50ejwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGltZSBzdG9yZWQgYXMgYSBkdXJhdGlvbiBvZgotIHRpbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlIHRpbWUgc3RvcmVkIGFuZCB0aGUgYWN0dWFsIHRpbWUgICAgICAgICAgYWZ0ZXIgdGhlIHRpbWV6b25lIGlzIHRha2VuIGludG8gYWNjb3VudDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgZG91YmxlIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2g8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmRvdWJsZTwvY29kZT4gLSB0aW1lIHN0b3JlZCBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRCeXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkQnl0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDhhZWExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRCeXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNVbnNpZ25lZEJ5dGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1Vuc2lnbmVkQnl0ZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZFNob3J0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW5zaWduZWRCeXRlIj5YU1Vuc2lnbmVkQnl0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNVbnNpZ25lZEJ5dGUiPlhTVW5zaWduZWRCeXRlPC9hPjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZEJ5dGUKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU1Vuc2lnbmVkQnl0ZSI+WFNVbnNpZ25lZEJ5dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Vuc2lnbmVkQnl0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNVbnNpZ25lZEJ5dGUiPlhTVW5zaWduZWRCeXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNVbnNpZ25lZEJ5dGU8L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkQnl0ZSB2YWx1ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZEJ5dGUKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRCeXRlIGlzIHRvIGJlIGV4dHJhY3RlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPiAtIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAndW5zaWduZWRCeXRlJyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6dW5zaWduZWRCeXRlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInVuc2lnbmVkQnl0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkSW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkSW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYjcyMjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEludC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTVW5zaWduZWRJbnQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1Vuc2lnbmVkSW50PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkTG9uZzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Vuc2lnbmVkSW50Ij5YU1Vuc2lnbmVkSW50PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Vuc2lnbmVkSW50Ij5YU1Vuc2lnbmVkSW50PC9hPjwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZEludAotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRJbnQiPlhTVW5zaWduZWRJbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Vuc2lnbmVkSW50PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1Vuc2lnbmVkSW50Ij5YU1Vuc2lnbmVkSW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNVbnNpZ25lZEludDwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRJbnQgdmFsdWU8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+Y29uc3RydWN0b3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRJbnQKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRJbnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZEludCcgc3VwcGxpZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3R5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInhzOnVuc2lnbmVkSW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gInVuc2lnbmVkSW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRMb25nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkTG9uZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzhhM2FhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRMb25nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNVbnNpZ25lZExvbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU1Vuc2lnbmVkTG9uZzwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNVbnNpZ25lZExvbmciPlhTVW5zaWduZWRMb25nPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Vuc2lnbmVkTG9uZyI+WFNVbnNpZ25lZExvbmc8L2E+PC9zdHJvbmc+KGphdmEubWF0aC5CaWdJbnRlZ2VyIHgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkTG9uZwotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRMb25nIj5YU1Vuc2lnbmVkTG9uZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW5zaWduZWRMb25nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1Vuc2lnbmVkTG9uZyI+WFNVbnNpZ25lZExvbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1Vuc2lnbmVkTG9uZzwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRMb25nIHZhbHVlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkTG9uZwotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZExvbmcgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZExvbmcnIHN1cHBsaWVkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czp1bnNpZ25lZExvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnR5cGVfbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAidW5zaWduZWRMb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRTaG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZFNob3J0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YjlhOGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZFNob3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNVbnNpZ25lZFNob3J0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNVbnNpZ25lZFNob3J0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkSW50PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTVW5zaWduZWRTaG9ydCI+WFNVbnNpZ25lZFNob3J0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1Vuc2lnbmVkU2hvcnQiPlhTVW5zaWduZWRTaG9ydDwvYT48L3N0cm9uZz4oamF2YS5tYXRoLkJpZ0ludGVnZXIgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRTaG9ydAotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTVW5zaWduZWRTaG9ydCI+WFNVbnNpZ25lZFNob3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNVbnNpZ25lZFNob3J0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1Vuc2lnbmVkU2hvcnQiPlhTVW5zaWduZWRTaG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW5zaWduZWRTaG9ydDwvc3Ryb25nPihqYXZhLm1hdGguQmlnSW50ZWdlciB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRTaG9ydCB2YWx1ZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZFNob3J0Ci0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkU2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICd1bnNpZ25lZFNob3J0JyBzdXBwbGllZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RyaW5nX3R5cGUiPnN0cmluZ190eXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieHM6dW5zaWduZWRTaG9ydCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ1bnNpZ25lZFNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW50eXBlZEF0b21pYy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYjE5NmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNVbnR5cGVkQXRvbWljPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNVbnR5cGVkQXRvbWljPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlPC9wcmU+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVW50eXBlZEF0b21pYyBkYXRhdHlwZSB3aGljaCBpcyB1c2VkIHRvIHJlcHJlc2VudAotIHVudHlwZWQgYXRvbWljIG5vZGVzLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1VudHlwZWRBdG9taWMiPlhTVW50eXBlZEF0b21pYzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNVbnR5cGVkQXRvbWljIj5YU1VudHlwZWRBdG9taWM8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoaXMgdW50eXBlZCBhdG9taWMKLSBub2RlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHlwZV9uYW1lIj50eXBlX25hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU1VudHlwZWRBdG9taWMiPlhTVW50eXBlZEF0b21pYzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTVW50eXBlZEF0b21pYzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNVbnR5cGVkQXRvbWljIj5YU1VudHlwZWRBdG9taWM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU1VudHlwZWRBdG9taWM8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB4KTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZzwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN0cnVjdG9yIj5jb25zdHJ1Y3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5jb25zdHJ1Y3Rvcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czp1bnR5cGVkQXRvbWljIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0cmluZ192YWx1ZSI+c3RyaW5nX3ZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5zdHJpbmdfdmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIHVudHlwZWQgYXRvbWljCi0gbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoaXMgdW50eXBlZCBhdG9taWMgbm9kZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZV9uYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNZZWFyTW9udGhEdXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjBhZGUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTWWVhck1vbnRoRHVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU1llYXJNb250aER1cmF0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNZZWFyTW9udGhEdXJhdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjwvcHJlPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFllYXJNb250aER1cmF0aW9uIGRhdGF0eXBlPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTWWVhck1vbnRoRHVyYXRpb24iPlhTWWVhck1vbnRoRHVyYXRpb248L2E+PC9zdHJvbmc+KGludCB5ZWFyCi0gICAgICAgICAsCi0gICAgICBpbnQgbW9udGgKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gbmVnYXRpdmUpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU1llYXJNb250aER1cmF0aW9uIj5YU1llYXJNb250aER1cmF0aW9uPC9hPjwvc3Ryb25nPihpbnQgbW9udGhzKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNZZWFyTW9udGhEdXJhdGlvbiI+WFNZZWFyTW9udGhEdXJhdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdHJ1Y3RvciI+Y29uc3RydWN0b3I8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0gZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RpdiI+ZGl2PC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXEiPmVxPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhcmcKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ndCI+Z3Q8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGFyZwotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2x0Ij5sdDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9taW51cyI+bWludXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vbnRoVmFsdWUiPm1vbnRoVmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkIGFzIHRoZSBudW1iZXIgb2YgbW9udGhzIHdpdGhpbiBpdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25lZ2F0aXZlIj5uZWdhdGl2ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotIHRpbWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlWU1EdXJhdGlvbiI+cGFyc2VZTUR1cmF0aW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IFhTWWVhck1vbnRoRHVyYXRpb24gYnkgcGFyc2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0gcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGx1cyI+cGx1czwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0cmluZ190eXBlIj5zdHJpbmdfdHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RyaW5nX3ZhbHVlIj5zdHJpbmdfdmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aW1lcyI+dGltZXM8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90eXBlX25hbWUiPnR5cGVfbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpdmVzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU1llYXJNb250aER1cmF0aW9uIj5YU1llYXJNb250aER1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNZZWFyTW9udGhEdXJhdGlvbjwvc3Ryb25nPihpbnQgeWVhcgotICAgICAgICAgLAotICAgICAgaW50IG1vbnRoCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIG5lZ2F0aXZlKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIHRoZSBudW1iZXIgb2YgbW9udGhzCi0gc3VwcGxpZWQgaXMgbW9yZSB0aGFuIDEyLCB0aGUgbnVtYmVyIG9mIHllYXJzIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YU1llYXJNb250aER1cmF0aW9uIj5YU1llYXJNb250aER1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNZZWFyTW9udGhEdXJhdGlvbjwvc3Ryb25nPihpbnQgbW9udGhzKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBtb250aHM8L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFNZZWFyTW9udGhEdXJhdGlvbiI+WFNZZWFyTW9udGhEdXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTWWVhck1vbnRoRHVyYXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgweWVhcnMgYW5kIDBtb250aHMpPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3RydWN0b3IiPmNvbnN0cnVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmNvbnN0cnVjdG9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZHVyYXRpb24KLSBmcm9tIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3Q8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RpdiI+ZGl2PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPmRpdjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgYXJnKTwvY29kZT48L3A+PHA+TWF0aGVtYXRpY2FsIGRpdmlzaW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiAgICAgICAgICBhZnRlciB0aGUgZGl2aXNpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxIj5lcTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXE8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBkdXJhdGlvbiBvZiB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2d0Ij5ndDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+Z3Q8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQgICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2x0Ij5sdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+bHQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXJnCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFyZzwvY29kZT4gLSBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgbGFyZ2VyIGR1cmF0aW9uIHRoYW4gdGhhdCAgICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWludXMiPm1pbnVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPm1pbnVzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBhcmcpPC9jb2RlPjwvcD48cD5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnPC9jb2RlPiAtIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gICAgICAgICAgYWZ0ZXIgdGhlIHN1YnRyYWN0aW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tb250aFZhbHVlIj5tb250aFZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm1vbnRoVmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gaXQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBOdW1iZXIgb2YgbW9udGhzIG1ha2luZyB1cCB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmVnYXRpdmUiPm5lZ2F0aXZlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5uZWdhdGl2ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgd2hldGhlciB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2gKLSB0aW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoIHRpbWUuICAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZVlNRHVyYXRpb24iPnBhcnNlWU1EdXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiA8c3Ryb25nPnBhcnNlWU1EdXJhdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgWFNZZWFyTW9udGhEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLSByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHI8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uPC9jb2RlPiAtIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSAgICAgICAgICBzdXBwbGllZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wbHVzIj5wbHVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSA8c3Ryb25nPnBsdXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gYWRkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U8L2NvZGU+IC0gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gICAgICAgICAgYWZ0ZXIgdGhlIGFkZGl0aW9uPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdHlwZSI+c3RyaW5nX3R5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0cmluZ190eXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtICJ4czp5ZWFyTW9udGhEdXJhdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdHJpbmdfdmFsdWUiPnN0cmluZ192YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RyaW5nX3ZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aW1lcyI+dGltZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+dGltZXM8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGFyZyk8L2NvZGU+PC9wPjxwPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmc8L2NvZGU+IC0gVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZTwvY29kZT4gLSBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiAgICAgICAgICBhZnRlciB0aGUgbXVsdGlwbGljYXRpb248L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3R5cGVfbmFtZSI+dHlwZV9uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50eXBlX25hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0cml2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSAieWVhck1vbnRoRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQuVXNlckRlZmluZWRDdHJMaWJyYXJ5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZC5Vc2VyRGVmaW5lZEN0ckxpYnJhcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1ZDU0MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZC5Vc2VyRGVmaW5lZEN0ckxpYnJhcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQ8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLnVzZXJkZWZpbmVkPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFVzZXJEZWZpbmVkQ3RyTGlicmFyeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlVzZXJEZWZpbmVkQ3RyTGlicmFyeTwvc3Ryb25nPgotZXh0ZW5kcyBDb25zdHJ1Y3RvckZMPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1VzZXJEZWZpbmVkQ3RyTGlicmFyeSI+VXNlckRlZmluZWRDdHJMaWJyYXJ5PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5zKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVXNlckRlZmluZWRDdHJMaWJyYXJ5Ij5Vc2VyRGVmaW5lZEN0ckxpYnJhcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Vc2VyRGVmaW5lZEN0ckxpYnJhcnk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBucyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db2RlUG9pbnRJdGVyYXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29kZVBvaW50SXRlcmF0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzMmM0OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db2RlUG9pbnRJdGVyYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIENvZGVQb2ludEl0ZXJhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Q29kZVBvaW50SXRlcmF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRE9ORSI+RE9ORTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZW50aW5lbCB2YWx1ZSByZXR1cm5lZCBmcm9tIGl0ZXJhdG9yIHdoZW4gdGhlIGVuZCBpcyByZWFjaGVkLgotIFRoZSB2YWx1ZSBpcyAtMSB3aGljaCB3aWxsIG5ldmVyIGJlIGEgdmFsaWQgY29kZXBvaW50LjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGUgYSBjb3B5IG9mIHRoaXMgY29kZSBwb2ludCBpdGVyYXRvcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3VycmVudCI+Y3VycmVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldHMgdGhlIGNvZGUgcG9pbnQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKGFzIHJldHVybmVkIGJ5IGdldEluZGV4KCkpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmlyc3QiPmZpcnN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmVzZXRzIHRoZSBwb3NpdGlvbiB0byAwIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjb2RlIHBvaW50LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5kZXgiPmdldEluZGV4PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBpbmRleCAoYXMgYSBjb2RlcG9pbnQsIG5vdCBhIHN0cmluZyBpbmRleCkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sYXN0Ij5sYXN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0cyB0aGUgcG9zaXRpb24gdG8gdGhlIGxhc3QgcG9zc2libGUgcG9zaXRpb24gKG9yIDAgaWYgdGhlIHRleHQgaXMgZW1wdHkpCi0gYW5kIHJldHVybnMgdGhlIGNvZGUgcG9pbnQgYXQgdGhhdCBwb3NpdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25leHQiPm5leHQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBJbmNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGNvZGUgcG9pbnQgaW5kZXggYnkgb25lIGFuZCByZXR1cm5zIHRoZSBjb2RlIHBvaW50Ci0gYXQgdGhlIG5ldyBpbmRleC4gIElmIHRoZSByZXN1bHRpbmcgaW5kZXggaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCB0aGUKLSBpbmRleCBpcyBub3QgaW5jcmVtZW50ZWQsIGFuZCBET05FIGlzIHJldHVybmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJldmlvdXMiPnByZXZpb3VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRGVjcmVtZW50cyB0aGUgaXRlcmF0b3IncyBpbmRleCBieSBvbmUgYW5kIHJldHVybnMgdGhlIGNoYXJhY3RlcgotIGF0IHRoZSBuZXcgaW5kZXguIElmIHRoZSBjdXJyZW50IGluZGV4IGlzIDAsIHRoZSBpbmRleAotIHJlbWFpbnMgYXQgMCBhbmQgYSB2YWx1ZSBvZiBET05FIGlzIHJldHVybmVkLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfRE9ORSI+RE9ORTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPkRPTkU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlNlbnRpbmVsIHZhbHVlIHJldHVybmVkIGZyb20gaXRlcmF0b3Igd2hlbiB0aGUgZW5kIGlzIHJlYWNoZWQuCi0gVGhlIHZhbHVlIGlzIC0xIHdoaWNoIHdpbGwgbmV2ZXIgYmUgYSB2YWxpZCBjb2RlcG9pbnQuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmNsb25lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIGNvcHkgb2YgdGhpcyBjb2RlIHBvaW50IGl0ZXJhdG9yPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPiAtIEEgY29weSBvZiB0aGlzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2N1cnJlbnQiPmN1cnJlbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Y3VycmVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXRzIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBnZXRJbmRleCgpKS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgY29kZSBwb2ludCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBjdXJyZW50ICBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgdGV4dC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmlyc3QiPmZpcnN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmZpcnN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJlc2V0cyB0aGUgcG9zaXRpb24gdG8gMCBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY29kZSBwb2ludC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgZmlyc3QgY29kZSBwb2ludCBpbiB0aGUgdGV4dCwgb3IgRE9ORSBpZiB0aGUgdGV4dCBpcyBlbXB0eTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbmRleCI+Z2V0SW5kZXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0SW5kZXg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY3VycmVudCBpbmRleCAoYXMgYSBjb2RlcG9pbnQsIG5vdCBhIHN0cmluZyBpbmRleCkuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIGN1cnJlbnQgaW5kZXguPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xhc3QiPmxhc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bGFzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TZXRzIHRoZSBwb3NpdGlvbiB0byB0aGUgbGFzdCBwb3NzaWJsZSBwb3NpdGlvbiAob3IgMCBpZiB0aGUgdGV4dCBpcyBlbXB0eSkKLSBhbmQgcmV0dXJucyB0aGUgY29kZSBwb2ludCBhdCB0aGF0IHBvc2l0aW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBsYXN0IGNvZGUgcG9pbnQgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIHRleHQgaXMgZW1wdHk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV4dCI+bmV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5uZXh0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkluY3JlbWVudHMgdGhlIGl0ZXJhdG9yJ3MgY29kZSBwb2ludCBpbmRleCBieSBvbmUgYW5kIHJldHVybnMgdGhlIGNvZGUgcG9pbnQKLSBhdCB0aGUgbmV3IGluZGV4LiAgSWYgdGhlIHJlc3VsdGluZyBpbmRleCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHRoZQotIGluZGV4IGlzIG5vdCBpbmNyZW1lbnRlZCwgYW5kIERPTkUgaXMgcmV0dXJuZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIGNvZGUgcG9pbnQgYXQgdGhlIG5ldyBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBuZXcgIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSB0ZXh0IHJhbmdlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmV2aW91cyI+cHJldmlvdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+cHJldmlvdXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RGVjcmVtZW50cyB0aGUgaXRlcmF0b3IncyBpbmRleCBieSBvbmUgYW5kIHJldHVybnMgdGhlIGNoYXJhY3RlcgotIGF0IHRoZSBuZXcgaW5kZXguIElmIHRoZSBjdXJyZW50IGluZGV4IGlzIDAsIHRoZSBpbmRleAotIHJlbWFpbnMgYXQgMCBhbmQgYSB2YWx1ZSBvZiBET05FIGlzIHJldHVybmVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBuZXcgcG9zaXRpb24gKG9yIERPTkUgaWYgdGhlIGN1cnJlbnQgIHBvc2l0aW9uIGlzIDApPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvbXBhcmFibGVUeXBlUHJvbW90ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvbXBhcmFibGVUeXBlUHJvbW90ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVkMzE1Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db21wYXJhYmxlVHlwZVByb21vdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ29tcGFyYWJsZVR5cGVQcm9tb3RlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNvbXBhcmFibGVUeXBlUHJvbW90ZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlNjYWxhclR5cGVQcm9tb3RlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Db21wYXJhYmxlVHlwZVByb21vdGVyIj5Db21wYXJhYmxlVHlwZVByb21vdGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jaGVja0NvbWJpbmF0aW9uIj5jaGVja0NvbWJpbmF0aW9uPC9hPihqYXZhLmxhbmcuQ2xhc3MgbmV3VHlwZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N1YnN0aXR1dGUiPnN1YnN0aXR1dGU8L2E+KGphdmEubGFuZy5DbGFzcyB0eXBlVG9Db25zaWRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Db21wYXJhYmxlVHlwZVByb21vdGVyIj5Db21wYXJhYmxlVHlwZVByb21vdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q29tcGFyYWJsZVR5cGVQcm9tb3Rlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jaGVja0NvbWJpbmF0aW9uIj5jaGVja0NvbWJpbmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5jaGVja0NvbWJpbmF0aW9uPC9zdHJvbmc+KGphdmEubGFuZy5DbGFzcyBuZXdUeXBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdUeXBlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3Vic3RpdHV0ZSI+c3Vic3RpdHV0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5zdWJzdGl0dXRlPC9zdHJvbmc+KGphdmEubGFuZy5DbGFzcyB0eXBlVG9Db25zaWRlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZVRvQ29uc2lkZXI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkxpdGVyYWxVdGlscy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTGl0ZXJhbFV0aWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjE5MDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTGl0ZXJhbFV0aWxzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTGl0ZXJhbFV0aWxzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TGl0ZXJhbFV0aWxzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5TdHJpbmcgbGl0ZXJhbCB1dGlsaXRpZXM8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTGl0ZXJhbFV0aWxzIj5MaXRlcmFsVXRpbHM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91bnF1b3RlIj51bnF1b3RlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHF1b3RlZFN0cmluZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVbnF1b3RlcyBhIHF1b3RlZCBzdHJpbmcsIGNoYW5naW5nIGRvdWJsZSBxdW90ZXMgaW50byBzaW5nbGUgcXVvdGVzIGFzIHdlbGwuCi0gRXhhbXBsZXMgKHN0cmluZyBkZWxpbWl0ZWQgYnkgPiBhbmQgPCk6Ci0gID4iQSI8IGJlY29tZXMgPkE8IAotICA+J0InPCBiZWNvbWVzID5CPCAKLSAgPiJBIiJCIjwgYmVjb21lcyA+QSJCPAotICA+IkEiIkIiPCBiZWNvbWVzID5BIkI8Ci0gID4nQScnJydCJzwgYmVjb21lcyA+QScnQjwKLSAgPiJBJycnJ0IiPCBiZWNvbWVzID5BJycnJ0I8PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTGl0ZXJhbFV0aWxzIj5MaXRlcmFsVXRpbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5MaXRlcmFsVXRpbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfdW5xdW90ZSI+dW5xdW90ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dW5xdW90ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHF1b3RlZFN0cmluZyk8L2NvZGU+PC9wPjxwPlVucXVvdGVzIGEgcXVvdGVkIHN0cmluZywgY2hhbmdpbmcgZG91YmxlIHF1b3RlcyBpbnRvIHNpbmdsZSBxdW90ZXMgYXMgd2VsbC4KLSBFeGFtcGxlcyAoc3RyaW5nIGRlbGltaXRlZCBieSA+IGFuZCA8KToKLSAgPiJBIjwgYmVjb21lcyA+QTwgCi0gID4nQic8IGJlY29tZXMgPkI8IAotICA+IkEiIkIiPCBiZWNvbWVzID5BIkI8Ci0gID4iQSIiQiI8IGJlY29tZXMgPkEiQjwKLSAgPidBJycnJ0InPCBiZWNvbWVzID5BJydCPAotICA+IkEnJycnQiI8IGJlY29tZXMgPkEnJycnQjw8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnF1b3RlZFN0cmluZzwvY29kZT4gLSBBIHF1b3RlZCBzdHJpbmcgcG9zc2libHkgY29udGFpbmluZyBlc2NhcGVkIHF1b3RlczwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB1bnF1b3RlZCBhbmQgdW5lc2NhcGVkIHN0cmluZzwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5OdW1lcmljVHlwZVByb21vdGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5OdW1lcmljVHlwZVByb21vdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ODQ4ZTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTnVtZXJpY1R5cGVQcm9tb3Rlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE51bWVyaWNUeXBlUHJvbW90ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OdW1lcmljVHlwZVByb21vdGVyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTnVtZXJpY1R5cGVQcm9tb3RlciI+TnVtZXJpY1R5cGVQcm9tb3RlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2hlY2tDb21iaW5hdGlvbiI+Y2hlY2tDb21iaW5hdGlvbjwvYT4oamF2YS5sYW5nLkNsYXNzIG5ld1R5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RvUHJvbW90ZSI+ZG9Qcm9tb3RlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSB2YWx1ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N1YnN0aXR1dGUiPnN1YnN0aXR1dGU8L2E+KGphdmEubGFuZy5DbGFzcyB0eXBlVG9Db25zaWRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OdW1lcmljVHlwZVByb21vdGVyIj5OdW1lcmljVHlwZVByb21vdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TnVtZXJpY1R5cGVQcm9tb3Rlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jaGVja0NvbWJpbmF0aW9uIj5jaGVja0NvbWJpbmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5jaGVja0NvbWJpbmF0aW9uPC9zdHJvbmc+KGphdmEubGFuZy5DbGFzcyBuZXdUeXBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdUeXBlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZG9Qcm9tb3RlIj5kb1Byb21vdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgPHN0cm9uZz5kb1Byb21vdGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgdmFsdWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhbHVlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdWJzdGl0dXRlIj5zdWJzdGl0dXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5DbGFzcyA8c3Ryb25nPnN1YnN0aXR1dGU8L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIHR5cGVUb0NvbnNpZGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlVG9Db25zaWRlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbGFzczwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU2NhbGFyVHlwZVByb21vdGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TY2FsYXJUeXBlUHJvbW90ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjZTFkNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TY2FsYXJUeXBlUHJvbW90ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTY2FsYXJUeXBlUHJvbW90ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TY2FsYXJUeXBlUHJvbW90ZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLk51bWVyaWNUeXBlUHJvbW90ZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU2NhbGFyVHlwZVByb21vdGVyIj5TY2FsYXJUeXBlUHJvbW90ZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NoZWNrQ29tYmluYXRpb24iPmNoZWNrQ29tYmluYXRpb248L2E+KGphdmEubGFuZy5DbGFzcyBuZXdUeXBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuQ2xhc3M8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3Vic3RpdHV0ZSI+c3Vic3RpdHV0ZTwvYT4oamF2YS5sYW5nLkNsYXNzIHR5cGVUb0NvbnNpZGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1NjYWxhclR5cGVQcm9tb3RlciI+U2NhbGFyVHlwZVByb21vdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U2NhbGFyVHlwZVByb21vdGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NoZWNrQ29tYmluYXRpb24iPmNoZWNrQ29tYmluYXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmNoZWNrQ29tYmluYXRpb248L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIG5ld1R5cGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1R5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdWJzdGl0dXRlIj5zdWJzdGl0dXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5DbGFzcyA8c3Ryb25nPnN1YnN0aXR1dGU8L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIHR5cGVUb0NvbnNpZGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlVG9Db25zaWRlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbGFzczwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMWZkMzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IiPlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHRleHQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbG9uZSI+Y2xvbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3VycmVudCI+Y3VycmVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IuY3VycmVudCgpIGZvciBTdHJpbmcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXF1YWxzIj5lcXVhbHM8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZpcnN0Ij5maXJzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IuZmlyc3QoKSBmb3IgU3RyaW5nLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5kZXgiPmdldEluZGV4PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9oYXNoQ29kZSI+aGFzaENvZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wdXRlcyBhIGhhc2hjb2RlIGZvciB0aGlzIGl0ZXJhdG9yLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGFzdCI+bGFzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IubGFzdCgpIGZvciBTdHJpbmcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXh0Ij5uZXh0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5uZXh0KCkgZm9yIFN0cmluZy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZXZpb3VzIj5wcmV2aW91czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IucHJldmlvdXMoKSBmb3IgU3RyaW5nLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFRleHQiPnNldFRleHQ8L2E+KGphdmEubGFuZy5TdHJpbmcgdGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXNldCB0aGlzIGl0ZXJhdG9yIHRvIHBvaW50IHRvIGEgbmV3IHN0cmluZy4gIFRoaXMgcGFja2FnZS12aXNpYmxlCi0gbWV0aG9kIGlzIHVzZWQgYnkgb3RoZXIgamF2YS50ZXh0IGNsYXNzZXMgdGhhdCB3YW50IHRvIGF2b2lkIGFsbG9jYXRpbmcKLSBuZXcgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cyBldmVyeSB0aW1lIHRoZWlyIHNldFRleHQgbWV0aG9kCi0gaXMgY2FsbGVkLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIj5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdGV4dCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdHMgYW4gaXRlcmF0b3Igd2l0aCBhbiBpbml0aWFsIGluZGV4IG9mIDAuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2xvbmUiPmNsb25lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5jbG9uZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSBBIGNvcHkgb2YgdGhpczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jdXJyZW50Ij5jdXJyZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmN1cnJlbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5jdXJyZW50KCkgZm9yIFN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXF1YWxzIj5lcXVhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxdWFsczwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iaik8L2NvZGU+PC9wPjxwPkNvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iajwvY29kZT4gLSB0aGUgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGguPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIHRydWUgaWYgdGhlIGdpdmVuIG9iaiBpcyB0aGUgc2FtZSBhcyB0aGlzICBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3Q7IGZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmlyc3QiPmZpcnN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmZpcnN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IuZmlyc3QoKSBmb3IgU3RyaW5nLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbmRleCI+Z2V0SW5kZXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0SW5kZXg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc2hDb2RlIj5oYXNoQ29kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5oYXNoQ29kZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Db21wdXRlcyBhIGhhc2hjb2RlIGZvciB0aGlzIGl0ZXJhdG9yLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIEEgaGFzaCBjb2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xhc3QiPmxhc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+bGFzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5JbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmxhc3QoKSBmb3IgU3RyaW5nLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXh0Ij5uZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPm5leHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5uZXh0KCkgZm9yIFN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJldmlvdXMiPnByZXZpb3VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPnByZXZpb3VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IucHJldmlvdXMoKSBmb3IgU3RyaW5nLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRUZXh0Ij5zZXRUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRUZXh0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdGV4dCk8L2NvZGU+PC9wPjxwPlJlc2V0IHRoaXMgaXRlcmF0b3IgdG8gcG9pbnQgdG8gYSBuZXcgc3RyaW5nLiAgVGhpcyBwYWNrYWdlLXZpc2libGUKLSBtZXRob2QgaXMgdXNlZCBieSBvdGhlciBqYXZhLnRleHQgY2xhc3NlcyB0aGF0IHdhbnQgdG8gYXZvaWQgYWxsb2NhdGluZwotIG5ldyBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3RzIGV2ZXJ5IHRpbWUgdGhlaXIgc2V0VGV4dCBtZXRob2QKLSBpcyBjYWxsZWQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZXh0PC9jb2RlPiAtIFRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlcjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3Rlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2IxNDZhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3Rlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFR5cGVQcm9tb3RlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlR5cGVQcm9tb3Rlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+R2VuZXJpYyB0eXBlIHByb21vdGVyIGZvciBoYW5kbGluZyBzdWJ0eXBlIHN1YnN0aXR1dGlvbiBhbmQgdHlwZSBwcm9tb3Rpb25zIGZvciBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVHlwZVByb21vdGVyIj5UeXBlUHJvbW90ZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hdG9taXplIj5hdG9taXplPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSBhdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jaGVja0NvbWJpbmF0aW9uIj5jaGVja0NvbWJpbmF0aW9uPC9hPihqYXZhLmxhbmcuQ2xhc3MgbmV3VHlwZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zaWRlclNlcXVlbmNlIj5jb25zaWRlclNlcXVlbmNlPC9hPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2Ugc2VxdWVuY2VUb0NvbnNpZGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnNpZGVyVHlwZSI+Y29uc2lkZXJUeXBlPC9hPihqYXZhLmxhbmcuQ2xhc3MgdHlwZVRvQ29uc2lkZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc2lkZXJUeXBlcyI+Y29uc2lkZXJUeXBlczwvYT4oamF2YS51dGlsLkNvbGxlY3Rpb24gdHlwZXNUb0NvbnNpZGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnNpZGVyVmFsdWUiPmNvbnNpZGVyVmFsdWU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGF0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kb1Byb21vdGUiPmRvUHJvbW90ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUgdmFsdWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUYXJnZXRUeXBlIj5nZXRUYXJnZXRUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Byb21vdGUiPnByb21vdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIHZhbHVlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFRhcmdldFR5cGUiPnNldFRhcmdldFR5cGU8L2E+KGphdmEubGFuZy5DbGFzcyBjbGFzczEpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdWJzdGl0dXRlIj5zdWJzdGl0dXRlPC9hPihqYXZhLmxhbmcuQ2xhc3MgdHlwZVRvQ29uc2lkZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVHlwZVByb21vdGVyIj5UeXBlUHJvbW90ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UeXBlUHJvbW90ZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYXRvbWl6ZSI+YXRvbWl6ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSA8c3Ryb25nPmF0b21pemU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUgYXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NoZWNrQ29tYmluYXRpb24iPmNoZWNrQ29tYmluYXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmNoZWNrQ29tYmluYXRpb248L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIG5ld1R5cGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1R5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zaWRlclNlcXVlbmNlIj5jb25zaWRlclNlcXVlbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jb25zaWRlclNlcXVlbmNlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBzZXF1ZW5jZVRvQ29uc2lkZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNlcXVlbmNlVG9Db25zaWRlcjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnNpZGVyVHlwZSI+Y29uc2lkZXJUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jb25zaWRlclR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIHR5cGVUb0NvbnNpZGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlVG9Db25zaWRlcjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnNpZGVyVHlwZXMiPmNvbnNpZGVyVHlwZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbnNpZGVyVHlwZXM8L3N0cm9uZz4oamF2YS51dGlsLkNvbGxlY3Rpb24gdHlwZXNUb0NvbnNpZGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlc1RvQ29uc2lkZXI8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zaWRlclZhbHVlIj5jb25zaWRlclZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jb25zaWRlclZhbHVlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIGF0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RvUHJvbW90ZSI+ZG9Qcm9tb3RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIDxzdHJvbmc+ZG9Qcm9tb3RlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIHZhbHVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YWx1ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGFyZ2V0VHlwZSI+Z2V0VGFyZ2V0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5nZXRUYXJnZXRUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcm9tb3RlIj5wcm9tb3RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIDxzdHJvbmc+cHJvbW90ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSB2YWx1ZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFsdWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFRhcmdldFR5cGUiPnNldFRhcmdldFR5cGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldFRhcmdldFR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIGNsYXNzMSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2xhc3MxPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdWJzdGl0dXRlIj5zdWJzdGl0dXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5DbGFzcyA8c3Ryb25nPnN1YnN0aXR1dGU8L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIHR5cGVUb0NvbnNpZGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlVG9Db25zaWRlcjwvY29kZT4gLSBUaGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbGFzczwvY29kZT4gLSBUaGUgc3VwZXJ0eXBlIHRvIHRyZWF0IGl0IGFzIChpLmUuIGlmIGEgeHM6bm9uTmVnYXRpdmVJbnRlZ2VyIGlzIHRyZWF0ZWQgYXMgeHM6bnVtYmVyKTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWwueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvamVsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I1ZTQ5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3MzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxqZWw+Ci0JPGFkbWluIGNyZWF0aW9uPSJNb24gQXByIDEyIDE1OjQxOjQ0IFBEVCAyMDEwIiB4c2R2ZXJzaW9uPSIxLjAuMCIgdmVyc2lvbj0iMS4wLjAiIC8+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgaW50ZXJmYWNlPSJ0cnVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkNvbGxhdGlvblByb3ZpZGVyIiB0eXBlPSJDb2xsYXRpb25Qcm92aWRlciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlNlcnZpY2UgcHJvdmlkZXIgaW50ZXJmYWNlIGZvciBsb29raW5nIHVwIGNvbGxhdGlvbnMgZnJvbSB3aXRoaW4gdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X2NvbGxhdGlvbiIgcmV0dXJuY29tbWVudD0iVGhlIGNvbGxhdGlvbiB0byB1c2UsIG9yIG51bGwgaWYgbm8gc3VjaCBjb2xsYXRpb24gZXhpc3RzIGJ5IHRoaXMgcHJvdmlkZXIiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29tcGFyYXRvciIgdHlwZT0iQ29tcGFyYXRvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXRzIHRoZSBuYW1lZCBjb2xsYXRvci4gVzNDIGRvZXMgbm90IGRlZmluZSBjb2xsYXRpb24gbmFtZXMgKHlldD8pIHNvIHdlIGFyZSBjb25zdHJhaW5lZCB0byB1c2luZyBhbgotIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbmFtaW5nIHNjaGVtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZSBBIFVSSSBkZXNpZ25hdGluZyB0aGUgY29sbGF0aW9uIHRvIHVzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBjb2xsYXRpb24gdG8gdXNlLCBvciBudWxsIGlmIG5vIHN1Y2ggY29sbGF0aW9uIGV4aXN0cyBieSB0aGlzIHByb3ZpZGVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJBIFVSSSBkZXNpZ25hdGluZyB0aGUgY29sbGF0aW9uIHRvIHVzZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUJ1aWxkZXIiIHR5cGU9IkRPTUJ1aWxkZXIiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIiIHR5cGU9IkRPTUxvYWRlciIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgRE9NIGJ1aWxkZXIgbG9hZHMgYW4gRE9NIGZyb20gYW4gSW5wdXRTdHJlYW0uIFRoZSBsb2FkaW5nIGlzIGFsd2F5cyBuYW1lc3BhY2UgYXdhcmUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iX3ZhbGlkYXRpbmciIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iX25hbWVzcGFjZV9hd2FyZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPTUJ1aWxkZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIERPTSBidWlsZGVyLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsb2FkIiByZXR1cm5jb21tZW50PSJUaGUgbG9hZGVkIGRvY3VtZW50LiIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLkRvY3VtZW50IiB0eXBlPSJEb2N1bWVudCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Mb2FkcyBUaGUgWE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pbgotICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ET01Mb2FkZXJFeGNlcHRpb24KLSAgICAgICAgICAgICBET00gbG9hZGVyIGV4Y2VwdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbG9hZGVkIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW4iIGNvbW1lbnQ9ImlzIHRoZSBpbnB1dCBzdHJlYW0uIiBmdWxsdHlwZT0iamF2YS5pby5JbnB1dFN0cmVhbSIgdHlwZT0iSW5wdXRTdHJlYW0iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iRE9NIGxvYWRlciBleGNlcHRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUxvYWRlckV4Y2VwdGlvbiIgdHlwZT0iRE9NTG9hZGVyRXhjZXB0aW9uIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF92YWxpZGF0aW5nIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgdmFsaWRhdGluZyBib29sZWFuLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyIiB0eXBlPSJET01Mb2FkZXIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgRE9NIGxvYWRlciBsb2FkcyB0aGUgWE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibG9hZCIgcmV0dXJuY29tbWVudD0iVGhlIGxvYWRlZCBkb2N1bWVudC4gVGhlIGRvY3VtZW50IGlzIGFsd2F5cyBsb2FkZWQgYXMgbmFtZXNwYWNlLWF3YXJlIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRG9jdW1lbnQiIHR5cGU9IkRvY3VtZW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBET00gbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdWVtbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aW4KLSAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBzdHJlYW0uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RE9NTG9hZGVyRXhjZXB0aW9uCi0gICAgICAgICAgICAgRE9NIGxvYWRlciBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGxvYWRlZCBkb2N1bWVudC4gVGhlIGRvY3VtZW50IGlzIGFsd2F5cyBsb2FkZWQgYXMgbmFtZXNwYWNlLWF3YXJlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpbiIgY29tbWVudD0iaXMgdGhlIGlucHV0IHN0cmVhbS4iIGZ1bGx0eXBlPSJqYXZhLmlvLklucHV0U3RyZWFtIiB0eXBlPSJJbnB1dFN0cmVhbSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSJET00gbG9hZGVyIGV4Y2VwdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIiB0eXBlPSJET01Mb2FkZXJFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X3ZhbGlkYXRpbmciIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCB2YWxpZGF0aW5nIGJvb2xlYW4uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbAotICAgICAgICAgICAgaXMgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhbCIgY29tbWVudD0iaXMgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbi4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aEV4Y2VwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIiB0eXBlPSJET01Mb2FkZXJFeGNlcHRpb24iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5FeGNlcHRpb24gY2F1c2VkIGJ5IERPTSBsb2FkZXIuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPTUxvYWRlckV4Y2VwdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRE9NIGxvYWRlciBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlYXNvbgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGV4Y2VwdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGV4Y2VwdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRGVmYXVsdFN0YXRpY0NvbnRleHQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZWZhdWx0U3RhdGljQ29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQiIHR5cGU9IkRlZmF1bHREeW5hbWljQ29udGV4dCI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIER5bmFtaWMgQ29udGV4dC4KLSAKLSBJbml0aWFsaXplcyBhbmQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBvZiBhIGR5bmFtaWMgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlCi0gWFBhdGggMi4wIHNwZWNpZmljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHREeW5hbWljQ29udGV4dCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3Rvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c2NoZW1hCi0gICAgICAgICAgICBTY2hlbWEgaW5mb3JtYXRpb24gb2YgZG9jdW1lbnQuIE1heSBiZSBudWxsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kb2MKLSAgICAgICAgICAgIERvY3VtZW50IFtyb290XSBub2RlIG9mIFhNTCBzb3VyY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzY2hlbWEiIGNvbW1lbnQ9IlNjaGVtYSBpbmZvcm1hdGlvbiBvZiBkb2N1bWVudC4gTWF5IGJlIG51bGwiIGZ1bGx0eXBlPSJvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsIiB0eXBlPSJYU01vZGVsIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZG9jIiBjb21tZW50PSJEb2N1bWVudCBbcm9vdF0gbm9kZSBvZiBYTUwgc291cmNlLiIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLkRvY3VtZW50IiB0eXBlPSJEb2N1bWVudCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9ImFuIHhzOmludGVnZXIgX3R6IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFuIHhzOmludGVnZXIgX3R6PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjdXJyZW50X2RhdGVfdGltZSIgZnVsbHR5cGU9ImphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciIgdHlwZT0iR3JlZ29yaWFuQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0cyB0aGUgQ3VycmVudCBzdGFibGUgZGF0ZSB0aW1lIGZyb20gdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNlZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0I2dldF9jdXJyZW50X3RpbWUoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9mb2N1cyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hhbmdlcyB0aGUgY3VycmVudCBmb2N1cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZgotICAgICAgICAgICAgZm9jdXMgdG8gc2V0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJmIiBjb21tZW50PSJmb2N1cyB0byBzZXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9jdXMiIHR5cGU9IkZvY3VzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZm9jdXMiIHJldHVybmNvbW1lbnQ9Il9mb2N1cyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyIgdHlwZT0iRm9jdXMiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJuIHRoZSBmb2N1czwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+X2ZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29udGV4dF9pdGVtIiByZXR1cm5jb21tZW50PSJhbiBBbnlUeXBlIHJlc3VsdCBmcm9tIF9mb2N1cy5jb250ZXh0X2l0ZW0oKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIGNvbnRleHQgaXRlbSB0aGF0IGlzIGluIGZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBBbnlUeXBlIHJlc3VsdCBmcm9tIF9mb2N1cy5jb250ZXh0X2l0ZW0oKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnRleHRfcG9zaXRpb24iIHJldHVybmNvbW1lbnQ9ImFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLnBvc2l0aW9uKCkiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5wb3NpdGlvbigpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibGFzdCIgcmV0dXJuY29tbWVudD0iYW4gaW50ZWdlciByZXN1bHQgZnJvbSBfZm9jdXMubGFzdCgpIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGZvY3VzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBpbnRlZ2VyIHJlc3VsdCBmcm9tIF9mb2N1cy5sYXN0KCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfdmFyaWFibGUiIHJldHVybmNvbW1lbnQ9ImFuIEFueVR5cGUgcmVzdWx0IGZyb20gZ2V0X3ZhcihuYW1lKSBvciByZXR1cm4gTlVMTCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSB2YXJpYWJsZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbiBBbnlUeXBlIHJlc3VsdCBmcm9tIGdldF92YXIobmFtZSkgb3IgcmV0dXJuIE5VTEw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXZhbHVhdGVfZnVuY3Rpb24iIHJldHVybmNvbW1lbnQ9ImEgUmVzdWx0U2VxdWVuY2UgZnJvbSBmdW5jdC5ldmFsdWF0ZShhcmdzKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgUmVzdWx0U2VxdWVuY2UgZnJvbSBmdW5jdC5ldmFsdWF0ZShhcmdzKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmdzIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZGRfZnVuY3Rpb25fbGlicmFyeSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWRkcyBmdW5jdGlvbiBkZWZpbml0aW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZmwKLSAgICAgICAgICAgIEZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZmwiIGNvbW1lbnQ9IkZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLiIgZnVsbHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgdHlwZT0iRnVuY3Rpb25MaWJyYXJ5IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X2RvYyIgcmV0dXJuY29tbWVudD0iYSBSZXN1bHRTZXF1ZW5jZSBmcm9tIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmdldCBkb2N1bWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBSZXN1bHRTZXF1ZW5jZSBmcm9tIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icmVzb2x2ZWQiIGZ1bGx0eXBlPSJqYXZhLm5ldC5VUkkiIHR5cGU9IlVSSSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlc29sdmVfdXJpIiBmdWxsdHlwZT0iamF2YS5uZXQuVVJJIiB0eXBlPSJVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1cmkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfdmFyaWFibGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcgotICAgICAgICAgICAgVmFyaWFibGUgbmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbAotICAgICAgICAgICAgVmFyaWFibGUgdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGNvbW1lbnQ9IlZhcmlhYmxlIG5hbWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhbCIgY29tbWVudD0iVmFyaWFibGUgdmFsdWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfZGVmYXVsdF9jb2xsYXRpb24iIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iX2RlZmF1bHRfY29sbGF0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGVmYXVsdF9jb2xsYXRpb25fbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfY29sbGF0aW9uIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbXBhcmF0b3IiIHR5cGU9IkNvbXBhcmF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1cmkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfY29sbGF0aW9uX3Byb3ZpZGVyIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcm92aWRlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcm92aWRlciIgY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkNvbGxhdGlvblByb3ZpZGVyIiB0eXBlPSJDb2xsYXRpb25Qcm92aWRlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vZGVfcG9zaXRpb24iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Vc2UgZm9jdXMoKS5wb3NpdGlvbigpIHRvIHJldHJpZXZlIHRoZSB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBkZXByZWNhdGVkIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHVzZSBmb2N1cygpLnBvc2l0aW9uKCkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uTm9kZSIgdHlwZT0iTm9kZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IiIHR5cGU9IkRlZmF1bHRFdmFsdWF0b3IiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yIiB0eXBlPSJFdmFsdWF0b3IiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RGVmYXVsdCBldmFsdWF0b3IgaW50ZXJmYWNlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHRFdmFsdWF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+c2V0IHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGMKLSAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kb2MKLSAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRjIiBjb21tZW50PSJpcyB0aGUgZHluYW1pYyBjb250ZXh0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkb2MiIGNvbW1lbnQ9ImlzIHRoZSBkb2N1bWVudC4iIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Eb2N1bWVudCIgdHlwZT0iRG9jdW1lbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImV2YWx1YXRlIiByZXR1cm5jb21tZW50PSJyZXN1bHQgc2VxdWVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5ldmFsdWF0ZSB0aGUgeHBhdGggbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgeHBhdGggbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5keW5hbWljCi0gICAgICAgICAgICAgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVzdWx0IHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIHhwYXRoIG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIHR5cGU9IlhQYXRoTm9kZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJyZXN1bHQgc2VxdWVuY2UuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPml0ZXJhdGUgdGhyb3VnaCB4cGF0aCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnhwCi0gICAgICAgICAgICBpcyB0aGUgeHBhdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVzdWx0IHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieHAiIGNvbW1lbnQ9ImlzIHRoZSB4cGF0aC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIiB0eXBlPSJYUGF0aCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZm9yIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZmV4Ci0gICAgICAgICAgICBpcyB0aGUgZm9yIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJmZXgiIGNvbW1lbnQ9ImlzIHRoZSBmb3IgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvckV4cHIiIHR5cGU9IkZvckV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24gb3IgbnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgcXVhbnRpZmllZCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnFleAotICAgICAgICAgICAgaXMgdGhlIHF1YW50aWZpZWQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbiBvciBudWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icWV4IiBjb21tZW50PSJpcyB0aGUgcXVhbnRpZmllZCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIiIHR5cGU9IlF1YW50aWZpZWRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgaWZleC50aGVuX2NsYXVzZSgpLmFjY2VwdCh0aGlzKS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaWYgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pZmV4Ci0gICAgICAgICAgICBpcyB0aGUgaWYgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIGlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcykuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpZmV4IiBjb21tZW50PSJpcyB0aGUgaWYgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwciIgdHlwZT0iSWZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IG9yIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+b3JleAotICAgICAgICAgICAgaXMgdGhlIG9yIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im9yZXgiIGNvbW1lbnQ9ImlzIHRoZSBvciBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIiB0eXBlPSJPckV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgYW5kIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YW5kZXgKLSAgICAgICAgICAgIGlzIHRoZSBhbmQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYW5kZXgiIGNvbW1lbnQ9ImlzIHRoZSBhbmQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFuZEV4cHIiIHR5cGU9IkFuZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24gb3IgbnVsbCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBjb21wYXJlIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y21wZXgKLSAgICAgICAgICAgIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24gb3IgbnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY21wZXgiIGNvbW1lbnQ9ImlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIiB0eXBlPSJDbXBFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHJhbmdlIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmV4Ci0gICAgICAgICAgICBpcyB0aGUgcmFuZ2UgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icmV4IiBjb21tZW50PSJpcyB0aGUgcmFuZ2UgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJhbmdlRXhwciIgdHlwZT0iUmFuZ2VFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGFuZCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFkZGV4Ci0gICAgICAgICAgICBpcyB0aGUgYW5kIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFkZGV4IiBjb21tZW50PSJpcyB0aGUgYW5kIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BZGRFeHByIiB0eXBlPSJBZGRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHN1YiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN1YmV4Ci0gICAgICAgICAgICBpcyB0aGUgc3ViIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN1YmV4IiBjb21tZW50PSJpcyB0aGUgc3ViIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByIiB0eXBlPSJTdWJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IG11bHRpcGx5IGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXVsZXgKLSAgICAgICAgICAgIGlzIHRoZSBtdWwgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGNvbW1lbnQ9ImlzIHRoZSBtdWwgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIiIHR5cGU9Ik11bEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZGl2aXNpb24gZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGRpdmlzaW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgZGl2aXNpb24gZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHIiIHR5cGU9IkRpdkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgY29tbWVudD0iaXMgdGhlIGludGVnZXIgZGl2aXNpb24gZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIiB0eXBlPSJJRGl2RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBtb2R1bGFyIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXVsZXgKLSAgICAgICAgICAgIGlzIHRoZSBtb2R1bGFyIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgbW9kdWxhciBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTW9kRXhwciIgdHlwZT0iTW9kRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCB1bmlvbiBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVuZXgKLSAgICAgICAgICAgIGlzIHRoZSB1bmlvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1bmV4IiBjb21tZW50PSJpcyB0aGUgdW5pb24gZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciIgdHlwZT0iVW5pb25FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHBpcGUgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5waXBleAotICAgICAgICAgICAgaXMgdGhlIHBpcGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icGlwZXgiIGNvbW1lbnQ9ImlzIHRoZSBwaXBlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwciIgdHlwZT0iUGlwZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaW50ZXJzZWN0IGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aWV4cHIKLSAgICAgICAgICAgIGlzIHRoZSBpbnRlcnNlY3QgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaWV4cHIiIGNvbW1lbnQ9ImlzIHRoZSBpbnRlcnNlY3QgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHIiIHR5cGU9IkludGVyc2VjdEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZXhjZXB0IGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZWV4cHIKLSAgICAgICAgICAgIGlzIHRoZSBleGNlcHQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZWV4cHIiIGNvbW1lbnQ9ImlzIHRoZSBleGNlcHQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIiIHR5cGU9IkV4Y2VwdEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pb2V4cAotICAgICAgICAgICAgaXMgdGhlIGluc3RhbmNlIG9mIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlvZXhwIiBjb21tZW50PSJpcyB0aGUgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHIiIHR5cGU9Ikluc3RPZkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgdHJlYXQtYXMgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50YWV4cAotICAgICAgICAgICAgaXMgdGhlIHRyZWF0LWFzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InRhZXhwIiBjb21tZW50PSJpcyB0aGUgdHJlYXQtYXMgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByIiB0eXBlPSJUcmVhdEFzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBjYXN0YWJsZSBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNleHAKLSAgICAgICAgICAgIGlzIHRoZSBjYXN0YWJsZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjZXhwIiBjb21tZW50PSJpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RhYmxlRXhwciIgdHlwZT0iQ2FzdGFibGVFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGNhc3QgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jZXhwCi0gICAgICAgICAgICBpcyB0aGUgY2FzdCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjZXhwIiBjb21tZW50PSJpcyB0aGUgY2FzdCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIiIHR5cGU9IkNhc3RFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IG1pbnVzIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIG1pbnVzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBtaW51cyBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByIiB0eXBlPSJNaW51c0V4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgcGx1cyBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBwbHVzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBwbHVzIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwciIgdHlwZT0iUGx1c0V4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgWFBhdGggZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgWFBhdGggZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIFhQYXRoIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIiIHR5cGU9IlhQYXRoRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBhIGZvcndhcmQgc3RlcCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBmb3J3YXJkIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBmb3J3YXJkIHN0ZXAuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCIgdHlwZT0iRm9yd2FyZFN0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgYSByZXZlcnNlIHN0ZXAgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgcmV2ZXJzZSBzdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgcmV2ZXJzZSBzdGVwLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXAiIHR5cGU9IlJldmVyc2VTdGVwIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGEgbmFtZSB0ZXN0IGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlbmFtZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGVuYW1lIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCIgdHlwZT0iTmFtZVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgdmFyaWFibGUgcmVmZXJlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYiIHR5cGU9IlZhclJlZiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBzdHJpbmcgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHN0cmluZyBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgc3RyaW5nIGxpdGVyYWwuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdHJpbmdMaXRlcmFsIiB0eXBlPSJTdHJpbmdMaXRlcmFsIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGludGVnZXIgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGludGVnZXIgbGl0ZXJhbC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVnZXJMaXRlcmFsIiB0eXBlPSJJbnRlZ2VyTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBkb3VibGUgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGRvdWJsZSBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZG91YmxlIGxpdGVyYWwuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsIiB0eXBlPSJEb3VibGVMaXRlcmFsIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGRlY2ltYWwgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGRlY2ltYWwgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGRlY2ltYWwgbGl0ZXJhbC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsIiB0eXBlPSJEZWNpbWFsTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBwYXJlbnQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgcGFyZW50IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByIiB0eXBlPSJQYXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGNvbnRleHQgaXRlbSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNudHhJdGVtRXhwciIgdHlwZT0iQ250eEl0ZW1FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uIG9yIG51bGwiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgZnVuY3Rpb24gY2FsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGZ1bmN0aW9uIGNhbGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24gb3IgbnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGZ1bmN0aW9uIGNhbGwuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GdW5jdGlvbkNhbGwiIHR5cGU9IkZ1bmN0aW9uQ2FsbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHNpbmdsZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgc2luZ2xlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNpbmdsZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSIgdHlwZT0iU2luZ2xlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHNlcXVlbmNlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBzZXF1ZW5jZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBzZXF1ZW5jZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIiB0eXBlPSJTZXF1ZW5jZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBpdGVtIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBpdGVtIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGl0ZW0gdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkl0ZW1UeXBlIiB0eXBlPSJJdGVtVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBhbnkga2luZCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgYW55IGtpbmQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGFueSBraW5kIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCIgdHlwZT0iQW55S2luZFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0icmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGRvY3VtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGRvY3VtZW50IHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QiIHR5cGU9IkRvY3VtZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCB0ZXh0IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSB0ZXh0IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSB0ZXh0IHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCIgdHlwZT0iVGV4dFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgY29tbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgdGV4dCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgdGV4dCB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QiIHR5cGU9IkNvbW1lbnRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgYXJndW1lbnQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgUEkgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIFBJIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBhcmd1bWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIFBJIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3QiIHR5cGU9IlBJVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgYXR0cmlidXRlIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyaWJ1dGVUZXN0IiB0eXBlPSJBdHRyaWJ1dGVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUF0dHJUZXN0IiB0eXBlPSJTY2hlbWFBdHRyVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBlbGVtZW50IHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FbGVtZW50VGVzdCIgdHlwZT0iRWxlbWVudFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dmlzaXQgc2NoZW1hIGVsZW1lbnQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBzY2hlbWEgZWxlbWVudCB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hRWxlbVRlc3QiIHR5cGU9IlNjaGVtYUVsZW1UZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnZpc2l0IGF4aXMgc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGF4aXMgc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGF4aXMgc3RlcC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF4aXNTdGVwIiB0eXBlPSJBeGlzU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj52aXNpdCBmaWx0ZXIgZXhwcmVzc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZmlsdGVyIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHIiIHR5cGU9IkZpbHRlckV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRXJyb3IiIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLkVycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvciIgdHlwZT0iRGVmYXVsdEV2YWx1YXRvci5EdW1teUVycm9yIj4KLQkJCTxtZXRob2RzPgotCQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvciI+Ci0JCQkJCTxwYXJhbXM+Ci0JCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8L3BhcmFtcz4KLQkJCQk8L2NvbnN0cnVjdG9yPgotCQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8L21ldGhvZHM+Ci0JCTwvamVsY2xhc3M+Ci0JCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5QYWlyIiB0eXBlPSJEZWZhdWx0RXZhbHVhdG9yLlBhaXIiPgotCQkJPGZpZWxkcz4KLQkJCQk8ZmllbGQgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJfb25lIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0IiAvPgotCQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Il90d28iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiIC8+Ci0JCQk8L2ZpZWxkcz4KLQkJCTxtZXRob2RzPgotCQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHRFdmFsdWF0b3IuUGFpciI+Ci0JCQkJCTxwYXJhbXM+Ci0JCQkJCQk8cGFyYW0gbmFtZT0ibyIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCIgLz4KLQkJCQkJCTxwYXJhbSBuYW1lPSJ0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0IiAvPgotCQkJCQk8L3BhcmFtcz4KLQkJCQk8L2NvbnN0cnVjdG9yPgotCQkJPC9tZXRob2RzPgotCQk8L2plbGNsYXNzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkVycm9yIiB2aXNpYmlsaXR5PSJwYWNrYWdlLXByaXZhdGUiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5FcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3IiIHR5cGU9IkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvciI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRGVmYXVsdEV2YWx1YXRvci5EdW1teUVycm9yIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5QYWlyIiB0eXBlPSJEZWZhdWx0RXZhbHVhdG9yLlBhaXIiPgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iX29uZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCIgLz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Il90d28iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHRFdmFsdWF0b3IuUGFpciI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im8iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgaW50ZXJmYWNlPSJ0cnVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiIHR5cGU9IlN0YXRpY0NvbnRleHQiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+SW50ZXJmYWNlIGZvciBkeW5hbWljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucy9jb2xsYXRpb24vY29kZXBvaW50IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNPREVQT0lOVF9DT0xMQVRJT04iIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMvY29sbGF0aW9uL2NvZGVwb2ludCZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5UaGUgZGVmYXVsdCBjb2xsYXRpb24gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgaW1wbGVtZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnRleHRfaXRlbSIgcmV0dXJuY29tbWVudD0idGhlIGNvbnRleHQgaXRlbS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgY29udGV4dCBpdGVtLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGNvbnRleHQgaXRlbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb250ZXh0X3Bvc2l0aW9uIiByZXR1cm5jb21tZW50PSJwb3NpdGlvbiBvZiBjb250ZXh0IG5vZGUuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0IGNvbnRleHQgbm9kZSBwb3NpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnBvc2l0aW9uIG9mIGNvbnRleHQgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsYXN0IiByZXR1cm5jb21tZW50PSJsYXN0IGl0ZW0gcG9zaXRpb24uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0IHBvc2l0aW9uIG9mIGxhc3QgaXRlbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmxhc3QgaXRlbSBwb3NpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfdmFyaWFibGUiIHJldHVybmNvbW1lbnQ9InZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkdldCB2YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfdmFyaWFibGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCB2YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dmFyCi0gICAgICAgICAgICBpcyBuYW1lIG9mIHRoZSB2YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbAotICAgICAgICAgICAgaXMgdGhlIHZhbHVlIHRvIGJlIHNldCBmb3IgdGhlIHZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFyIiBjb21tZW50PSJpcyBuYW1lIG9mIHRoZSB2YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsIiBjb21tZW50PSJpcyB0aGUgdmFsdWUgdG8gYmUgc2V0IGZvciB0aGUgdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJldmFsdWF0ZV9mdW5jdGlvbiIgcmV0dXJuY29tbWVudD0icmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBldmFsdWF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXZhbHVhdGUgdGhlIGZ1bmN0aW9uIG9mIHRoZSBhcmd1bWVudHMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJncwotICAgICAgICAgICAgYXJlIHRoZSBhcmd1bWVudHMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yCi0gICAgICAgICAgICAgZHluYW1pYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGV2YWx1YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgbmFtZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJncyIgY29tbWVudD0iYXJlIHRoZSBhcmd1bWVudHMuIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iZHluYW1pYyBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9ImN1cnJlbnQgZGF0ZSB0aW1lIGFuZCBpbXBsaWNpdCB0aW1lem9uZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZWFkcyB0aGUgZGF5IGZyb20gYSBUaW1lRHVyYXRpb24gdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y3VycmVudCBkYXRlIHRpbWUgYW5kIGltcGxpY2l0IHRpbWV6b25lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X2RvYyIgcmV0dXJuY29tbWVudD0iZG9jdW1lbnQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVyaQotICAgICAgICAgICAgaXMgdGhlIFVSSSBvZiB0aGUgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InVyaSIgY29tbWVudD0iaXMgdGhlIFVSSSBvZiB0aGUgZG9jdW1lbnQuIiBmdWxsdHlwZT0iamF2YS5uZXQuVVJJIiB0eXBlPSJVUkkiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZXNvbHZlX3VyaSIgcmV0dXJuY29tbWVudD0idGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuIiBmdWxsdHlwZT0iamF2YS5uZXQuVVJJIiB0eXBlPSJVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmVzb2x2ZSBhbiBVUkk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dXJpCi0gICAgICAgICAgICBpcyB0aGUgcG9zc2libHkgcmVsYXRpdmUgVVJJIHRvIHJlc29sdmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgYWJzb2x1dGl6ZWQsIHJlc29sdmVkIFVSSS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idXJpIiBjb21tZW50PSJpcyB0aGUgcG9zc2libHkgcmVsYXRpdmUgVVJJIHRvIHJlc29sdmUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjdXJyZW50X2RhdGVfdGltZSIgcmV0dXJuY29tbWVudD0iVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgd2hpY2ggd2lsbCBhbHdheXMgYmUgc2FtZSBmb3IgdGhlIGR5bmFtaWMgY29udGV4dC4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIiIHR5cGU9IkdyZWdvcmlhbkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGN1cnJlbnQgZGF0ZSB0aW1lIHVzaW5nIHRoZSBHcmVnb3JpYW5DYWxlbmRhci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUsIHdoaWNoIHdpbGwgYWx3YXlzIGJlIHNhbWUgZm9yIHRoZSBkeW5hbWljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfZm9jdXMiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBmb2N1cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Zm9jdXMKLSAgICAgICAgICAgIGlzIGZvY3VzIHRvIGJlIHNldC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImZvY3VzIiBjb21tZW50PSJpcyBmb2N1cyB0byBiZSBzZXQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzIiB0eXBlPSJGb2N1cyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZvY3VzIiByZXR1cm5jb21tZW50PSJGb2N1cyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyIgdHlwZT0iRm9jdXMiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJuIGZvY3VzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Rm9jdXM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfY29sbGF0aW9uIiByZXR1cm5jb21tZW50PSJBIEphYSBjb2xsYXRvciwgb3IgbnVsbCwgaWYgbm8gc3VjaCBDb2xsYXRvciBleGlzdHMiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29tcGFyYXRvciIgdHlwZT0iQ29tcGFyYXRvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm4gYSB1c2VmdWwgY29sbGF0b3IgZm9yIHRoZSBzcGVjaWZpZWQgVVJJPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVyaTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgSmFhIGNvbGxhdG9yLCBvciBudWxsLCBpZiBubyBzdWNoIENvbGxhdG9yIGV4aXN0czwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1cmkiIGNvbW1lbnQ9IiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlZmF1bHRfY29sbGF0aW9uX25hbWUiIHJldHVybmNvbW1lbnQ9IlRoZSBkZWZhdWx0IG5hbWUgdG8gdXNlIGFzIHRoZSBjb2xsYXRvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjdXJyZW50IGRlZmF1bHQgY29sbGF0b3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBkZWZhdWx0IG5hbWUgdG8gdXNlIGFzIHRoZSBjb2xsYXRvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV9wb3NpdGlvbiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAZGVwcmVjYXRlZCIgLz4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Ob2RlIiB0eXBlPSJOb2RlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aEV4Y2VwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljIEVycm9yIGxpa2UgZGl2aXNpb24gYnkgMCBvciB0eXBlIGVycm9ycy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBEeW5hbWljIEVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jb2RlCi0gICAgICAgICAgICBpcyB0aGUgY29kZSB0aGF0IGlzIHNldC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY29kZSIgY29tbWVudD0iaXMgdGhlIGNvZGUgdGhhdCBpcyBzZXQuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRHluYW1pYyBFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGUKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvciB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idGUiIGNvbW1lbnQ9ImlzIHRoZSBlcnJvciB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IiIHR5cGU9IlR5cGVFcnJvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29kZSIgcmV0dXJuY29tbWVudD0idGhlIGNvZGUuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIHN0cmluZyBvZiB0aGUgY29kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBjb2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2FudF9jYXN0IiByZXR1cm5jb21tZW50PSJ0aGUgRHluYW1pY0Vycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lcnIKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlcnIiIGNvbW1lbnQ9ImlzIHRoZSBlcnJvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGhyb3dfdHlwZV9lcnJvciIgcmV0dXJuY29tbWVudD0idGhlIER5bmFtaWNFcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcgotICAgICAgICAgICAgIGEgRHluYW1pYyBFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9ImEgRHluYW1pYyBFcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFyZ3VtZW50X3R5cGVfZXJyb3IiIHJldHVybmNvbW1lbnQ9InRoZSBEeW5hbWljRXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR5cGUgVHlwZSBmb3VuZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9IlR5cGUgZm91bmQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbnZhbGlkVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlucHV0VG9MYXJnZUZvckRlY2ltYWwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1c2VyX2Vycm9yIiByZXR1cm5jb21tZW50PSJ0aGUgRHluYW1pY0Vycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kZXNjCi0gICAgICAgICAgICBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibnMiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb2RlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGVzYyIgY29tbWVudD0iaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idXNlcl9lcnJvciIgcmV0dXJuY29tbWVudD0idGhlIER5bmFtaWNFcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyCi0gICAgICAgICAgICBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmVnZXhfZmxhZ3NfZXJyb3IiIHJldHVybmNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiIgLz4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlZ2V4X2Vycm9yIiByZXR1cm5jb21tZW50PSJ0aGUgRHluYW1pY0Vycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lcnIKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlcnIiIGNvbW1lbnQ9ImlzIHRoZSBlcnJvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmVnZXhfbWF0Y2hfemVyb19sZW5ndGgiIHJldHVybmNvbW1lbnQ9InRoZSBEeW5hbWljRXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgZXJyb3IiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InVuc3VwcG9ydGVkX2NvZGVwb2ludCIgcmV0dXJuY29tbWVudD0idGhlIER5bmFtaWNFcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgVW5pY29kZSBjb2RlcG9pbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyCi0gICAgICAgICAgICBpcyB0aGUgZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgRHluYW1pY0Vycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlcnIiIGNvbW1lbnQ9ImlzIHRoZSBlcnJvciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idW5zdXBwb3J0ZWRfY29sbGF0aW9uIiByZXR1cm5jb21tZW50PSJ0aGUgRHluYW1pY0Vycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yIGZvciBhbiB1bnN1cHBvcnRlZCBub3JtYWxpemF0aW9uIGZvcm08L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y29sbGF0aW9uTmFtZQotICAgICAgICAgICAgaXMgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIER5bmFtaWNFcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY29sbGF0aW9uTmFtZSIgY29tbWVudD0iaXMgdGhlIGVycm9yIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0iIHJldHVybmNvbW1lbnQ9InRoZSBEeW5hbWljRXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIG5vcm1hbGl6YXRpb24gZm9ybTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lcnIKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBEeW5hbWljRXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iaXMgdGhlIGVycm9yIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsZXhpY2FsX2Vycm9yIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgYW4gSW52YWxpZCBsZXhpY2FsIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm90X2NtcCIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEl0ZW1zIG5vdCBjb21wYXJhYmxlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9yZV9vbmVfaXRlbSIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tc2cKLSAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIG1ha2VfZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1zZyIgY29tbWVudD0iaXMgdGhlIG1lc3NhZ2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVtcHR5X3NlcSIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tc2cKLSAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIG1ha2VfZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1zZyIgY29tbWVudD0iaXMgdGhlIG1lc3NhZ2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vdF9vbmUiIHJldHVybmNvbW1lbnQ9InRoZSBtYWtlX2Vycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtc2ciIGNvbW1lbnQ9ImlzIHRoZSBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50IiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgSW52YWxpZCBhcmd1bWVudCB0byBmbjpjb2xsZWN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbnZhbGlkX2RvYyIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46ZG9jPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZG9jX25vdF9mb3VuZCIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIGZuOmRvYyBjYW5ub3QgbG9hZCBpdHMgZG9jdW1lbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXNnCi0gICAgICAgICAgICBpcyB0aGUgbWVzc2FnZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtYWtlX2Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1zZyIgY29tbWVudD0iaXMgdGhlIG1lc3NhZ2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRpdl96ZXJvIiByZXR1cm5jb21tZW50PSJ0aGUgbWFrZV9lcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gcmVhZHMgYSBEaXZpc2lvbiBieSB6ZXJvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXNnIiBjb21tZW50PSJpcyB0aGUgbWVzc2FnZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibnVtZXJpY19vdmVyZmxvdyIgcmV0dXJuY29tbWVudD0idGhlIG1ha2VfZXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TnVtZXJpYyBvcGVyYXRpb24gb3ZlcmZsb3cvdW5kZXJmbG93PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZwotICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbWFrZV9lcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtc2ciIGNvbW1lbnQ9ImlzIHRoZSBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb250ZXh0VW5kZWZpbmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iRk9SRzAwMDEiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGF0YSBpcyBpbnZhbGlkIGZvciBjYXN0aW5nIG9yIHRoZSBkYXRhIHR5cGUgY29uc3RydWN0b3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1zZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkZPUkcwMDAxPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImludmFsaWRQcmVmaXgiIHJldHVybmNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5ObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iIC8+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vQ29udGV4dERvYyIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk5vIGNvbnRleHQgZG9jdW1lbnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iIC8+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vQmFzZVVSSSIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk5vIGJhc2UtdXJpIGRlZmluZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIiAvPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcnJvclJlc29sdmluZ1VSSSIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVycm9yIHJlc29sdmluZyByZWxhdGl2ZSB1cmkgYWdhaW5zdCBiYXNlLXVyaS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iIC8+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImludmFsaWRUaW1lem9uZSIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkludmFsaWQgVGltZXpvbmUgdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIiAvPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJvdmVyZmxvd1VuZGVyZmxvdyIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIiAvPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW4iIHJldHVybmNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5PdmVyZmxvdy91bmRlcmZsb3cgaW4gZHVyYXRpb24gb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiIgLz4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW52YWxpZExleGljYWxWYWx1ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbnZhbGlkIGxleGljYWwgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJvdmVyZmxvd0RhdGVUaW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk92ZXJmbG93L3VuZGVyZmxvdyBpbiBkYXRlL3RpbWUgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW5jb25zaXN0ZW50VGltZVpvbmUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHR3byBhcmd1bWVudHMgdG8gZm46ZGF0ZVRpbWUgaGF2ZSBpbmNvbnNpc3RlbnQgdGltZXpvbmVzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yIiB0eXBlPSJFdmFsdWF0b3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5pbnRlcmZhY2UgdG8gRXZhbHVhdG9yPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJldmFsdWF0ZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIGV2YWx1YXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FdmFsdWF0ZSB0aGUgcm9vdCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yb290Ci0gICAgICAgICAgICBpcyB0aGUgWFBhdGggbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3IKLSAgICAgICAgICAgICBkeW5hbWljIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBldmFsdWF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icm9vdCIgY29tbWVudD0iaXMgdGhlIFhQYXRoIG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIHR5cGU9IlhQYXRoTm9kZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSJkeW5hbWljIGVycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5KRmxleEN1cFBhcnNlciIgdHlwZT0iSkZsZXhDdXBQYXJzZXIiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlciIgdHlwZT0iWFBhdGhQYXJzZXIiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+SkZsZXhDdXBQYXJzZXIgcGFyc2VzIHRoZSB4cGF0aCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkpGbGV4Q3VwUGFyc2VyIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlIiByZXR1cm5jb21tZW50PSJ0aGUgeHBhdGggdmFsdWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCIgdHlwZT0iWFBhdGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VHJpZXMgdG8gcGFyc2UgdGhlIHhwYXRoIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eHBhdGgKLSAgICAgICAgICAgIGlzIHRoZSB4cGF0aCBzdHJpbmcuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+WFBhdGhQYXJzZXJFeGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHhwYXRoIHZhbHVlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieHBhdGgiIGNvbW1lbnQ9ImlzIHRoZSB4cGF0aCBzdHJpbmcuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXJFeGNlcHRpb24iIHR5cGU9IlhQYXRoUGFyc2VyRXhjZXB0aW9uIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5JbnRlcmZhY2UgdG8gdGhlIG1ldGhvZHMgb2YgcmFuZ2Ugb2YgcmVzdWx0IHNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZGQiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmFkZCBpdGVtPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPml0ZW0KLSAgICAgICAgICAgIGlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpdGVtIiBjb21tZW50PSJpcyBhbiBpdGVtIG9mIGFueSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbmNhdCIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Y29uY2F0aW5hdGUgZnJvbSByczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ycwotICAgICAgICAgICAgaXMgYSBSZXN1bHQgU2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgY29tbWVudD0iaXMgYSBSZXN1bHQgU2VxdWVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgZnVsbHR5cGU9ImphdmEudXRpbC5MaXN0SXRlcmF0b3IiIHR5cGU9Ikxpc3RJdGVyYXRvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5MaXN0IEl0ZXJhdG9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmdldCBpdGVtIGluIGluZGV4IGk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aQotICAgICAgICAgICAgaXMgdGhlIHBvc2l0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaSIgY29tbWVudD0iaXMgdGhlIHBvc2l0aW9uLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNpemUiIHJldHVybmNvbW1lbnQ9InRoZSBzaXplLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmdldCB0aGUgc2l6ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHNpemUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNsZWFyIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5jbGVhcjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZV9uZXciIHJldHVybmNvbW1lbnQ9ImEgbmV3IHJlc3VsdCBzZXF1ZW5jZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmNyZWF0ZSBhIG5ldyByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IHJlc3VsdCBzZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJmaXJzdCIgcmV0dXJuY29tbWVudD0idGhlIGZpcnN0IGl0ZW0uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+cmV0cmlldmUgdGhlIGZpcnN0IGl0ZW08L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBmaXJzdCBpdGVtLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVtcHR5IiByZXR1cm5jb21tZW50PSJib29sZWFuLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Y2hlY2sgaXMgdGhlIHNlcXVlbmNlIGlzIGVtcHR5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZyIgcmV0dXJuY29tbWVudD0icmVzdWx0IHN0cmluZyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5yZXRyaWV2ZSBpdGVtcyBpbiBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVzdWx0IHN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlbGVhc2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnJlbGVhc2UgdGhlIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeSIgdHlwZT0iUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+UmVzdWx0IHNlcXVlbmNlIGZhY3Rvcnk8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUmVzdWx0U2VxdWVuY2VGYWN0b3J5IiAvPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJmYWN0X2NyZWF0ZV9uZXciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJmYWN0X3JlbGVhc2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZmFjdF9jcmVhdGVfbmV3IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Iml0ZW0iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImZhY3RfcHJpbnRfZGVidWciIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIiAvPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY3JlYXRlX25ldyIgcmV0dXJuY29tbWVudD0idGhlIGNyZWF0aW9uIG9mIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBjcmVhdGlvbiBvZiBhIG5ldyByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZV9uZXciIHJldHVybmNvbW1lbnQ9ImZhY3RvcnkgY3JlYXRpbmcgbmV3IGl0ZW0iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPml0ZW0KLSAgICAgICAgICAgIGlzIGFuIGl0ZW0gb2YgYW55IHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZmFjdG9yeSBjcmVhdGluZyBuZXcgaXRlbTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaXRlbSIgY29tbWVudD0iaXMgYW4gaXRlbSBvZiBhbnkgdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmVsZWFzZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cnMKLSAgICAgICAgICAgIGlzIHRoZSByZXN1bHQgc2VxdWVuY2UgZmFjdG9yeSByZWxlYXNlIHJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgY29tbWVudD0iaXMgdGhlIHJlc3VsdCBzZXF1ZW5jZSBmYWN0b3J5IHJlbGVhc2UgcnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmludF9kZWJ1ZyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+ZmFjdG9yeSBkZWJ1ZzwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIGludGVyZmFjZT0idHJ1ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDaGVja2VyIiB0eXBlPSJTdGF0aWNDaGVja2VyIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+SW50ZXJmYWNlIHRvIHN0YXRpYyBjaGVja2VyLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2hlY2siIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmNoZWNrcyBYUGF0aE5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0YXRpYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJvb3QKLSAgICAgICAgICAgIGlzIGFuIFhQYXRoIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyb290IiBjb21tZW50PSJpcyBhbiBYUGF0aCBub2RlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIiB0eXBlPSJYUGF0aE5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvciIgdHlwZT0iU3RhdGljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIGludGVyZmFjZT0idHJ1ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IiB0eXBlPSJTdGF0aWNDb250ZXh0Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+aW50ZXJmYWNlIHRvIHN0YXRpYyBjb250ZXh0PC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ4cGF0aDFfY29tcGF0aWJsZSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aXMgaXQgeHBhdGggMS4wIGNvbXBhdGlibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJlZml4X2V4aXN0cyIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+bmFtZXNwYWNlcyBkb2VzIHRoZSBwcmVmaXggZXhpc3Q8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlZml4Ci0gICAgICAgICAgICBpcyB0aGUgcHJlZml4PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icHJlZml4IiBjb21tZW50PSJpcyB0aGUgcHJlZml4IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmVzb2x2ZV9wcmVmaXgiIHJldHVybmNvbW1lbnQ9InN0cmluZyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVmaXgKLSAgICAgICAgICAgIGlzIHRoZSBwcmVmaXg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWZpeCIgY29tbWVudD0iaXMgdGhlIHByZWZpeCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlZmF1bHRfbmFtZXNwYWNlIiByZXR1cm5jb21tZW50PSJzdHJpbmciIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGRlZmF1bHQgbmFtZXNwYWNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZSIgcmV0dXJuY29tbWVudD0ic3RyaW5nIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBkZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYXR0cmlidXRlX3R5cGVfZGVmaW5pdGlvbiIgcmV0dXJuY29tbWVudD0iYXR0cmlidXRlcyZhcG9zO3MgdHlwZSBkZWZpbml0aW9uIiBmdWxsdHlwZT0ib3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiIgdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hdHRyCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWUgdmFyaWFibGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hdHRyaWJ1dGVzJmFwb3M7cyB0eXBlIGRlZmluaXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImF0dHIiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSB2YXJpYWJsZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbGVtZW50X3R5cGVfZGVmaW5pdGlvbiIgcmV0dXJuY29tbWVudD0iZWxlbWVudCZhcG9zO3MgdHlwZSBkZWZpbml0aW9uIiBmdWxsdHlwZT0ib3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiIgdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lbGVtCi0gICAgICAgICAgICBpcyB0aGUgZWxlbSBvZiB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lbGVtZW50JmFwb3M7cyB0eXBlIGRlZmluaXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVsZW0iIGNvbW1lbnQ9ImlzIHRoZSBlbGVtIG9mIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhdHRyaWJ1dGVfZGVjbGFyZWQiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmlzIHRoZSBhdHRyaWJ1dGUgZGVjbGFyZWQ/PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0dHIKLSAgICAgICAgICAgIGlzIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXR0ciIgY29tbWVudD0iaXMgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgcW5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZWxlbWVudF9kZWNsYXJlZCIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aXMgdGhlIGVsZW1lbnQgZGVjbGFyZWQ/PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVsZW0KLSAgICAgICAgICAgIGlzIHRoZSBlbGVtIG9mIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVsZW0iIGNvbW1lbnQ9ImlzIHRoZSBlbGVtIG9mIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJmdW5jdGlvbl9leGlzdHMiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmlzIHRoZSBlbGVtZW50IGRlY2xhcmVkPzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJpdHkKLSAgICAgICAgICAgIGludGVnZXIgb2YgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgcW5hbWUgbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcml0eSIgY29tbWVudD0iaW50ZWdlciBvZiBxbmFtZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYmFzZV91cmkiIHJldHVybmNvbW1lbnQ9InVyaSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSSIgdHlwZT0iWFNBbnlVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+YmFzZSB1cmk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVyaTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5ld19zY29wZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+bmV3IHNjb3BlPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkZXN0cm95X3Njb3BlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5kZXN0cm95IHNjb3BlPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZGRfdmFyaWFibGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmFkZCB2YXJpYWJsZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkZWxfdmFyaWFibGUiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4gaWYgZGVsZXRlZCB2YXJpYWJsZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+ZGVsZXRlIHRoZSB2YXJpYWJsZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuIGlmIGRlbGV0ZWQgdmFyaWFibGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YXJpYWJsZV9leGlzdHMiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4gaWYgdmFyaWFibGUgZXhpc3RzIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuIGlmIHZhcmlhYmxlIGV4aXN0czwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhcmlhYmxlX2luX3Njb3BlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52YXIKLSAgICAgICAgICAgIGlzIHRoZSB2YXJpYWJsZSBvZiBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFyIiBjb21tZW50PSJpcyB0aGUgdmFyaWFibGUgb2YgcW5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9kZWZpbmVkIiByZXR1cm5jb21tZW50PSJib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlcml2ZXNfZnJvbSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXQKLSAgICAgICAgICAgIHRoZSBub2RlIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmV0Ci0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhdCIgY29tbWVudD0idGhlIG5vZGUgdHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJldCIgY29tbWVudD0iaXMgdGhlIHFuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlcml2ZXNfZnJvbSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXQKLSAgICAgICAgICAgIHRoZSBub2RlIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmV0Ci0gICAgICAgICAgICBpcyB0aGUgWFNUeXBlRGVmaW5pdGlvbiBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImF0IiBjb21tZW50PSJ0aGUgbm9kZSB0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV0IiBjb21tZW50PSJpcyB0aGUgWFNUeXBlRGVmaW5pdGlvbiBvZiB0aGUgbm9kZSIgZnVsbHR5cGU9Im9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb24iIHR5cGU9IlhTVHlwZURlZmluaXRpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZGRfbmFtZXNwYWNlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5hZGQgbmFtZXNwYWNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnByZWZpeAotICAgICAgICAgICAgdGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ucwotICAgICAgICAgICAgaXMgdGhlIFhTVHlwZURlZmluaXRpb24gb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWZpeCIgY29tbWVudD0idGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibnMiIGNvbW1lbnQ9ImlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXhwYW5kX2Z1bmN0aW9uX3FuYW1lIiByZXR1cm5jb21tZW50PSJib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+ZXhwYW5kIGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBxbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmJvb2xlYW4gaWYgZnVuY3Rpb24gY2FuIGJlIGV4cGFuZGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgcW5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmV4cGFuZCBlbGVtZW50IHR5cGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHBhbmRfcW5hbWUiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4gaWYgZnVuY3Rpb24gY2FuIGJlIGV4cGFuZGVkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5leHBhbmQgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIHFuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbiBpZiBmdW5jdGlvbiBjYW4gYmUgZXhwYW5kZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZGRfZnVuY3Rpb25fbGlicmFyeSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+YWRkIGZ1bmN0aW9uIHRvIGxpYnJhcnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZmwKLSAgICAgICAgICAgIGlzIHRoZSBmdW5jdGlvbiBsaWJyYXJ5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJmbCIgY29tbWVudD0iaXMgdGhlIGZ1bmN0aW9uIGxpYnJhcnkiIGZ1bGx0eXBlPSJGdW5jdGlvbkxpYnJhcnkiIHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1ha2VfYXRvbWljIiByZXR1cm5jb21tZW50PSJhbnkgYXRvbWljIHR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgcW5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbnkgYXRvbWljIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImlzIHRoZSBxbmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfYmFzZV91cmkiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldHMgdGhlIGJhc2UgdXJpIGZvciB0aGUgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YmFzZXVyaTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJiYXNldXJpIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfY29sbGVjdGlvbnMiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuTWFwIiB0eXBlPSJNYXAiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2NvbGxlY3Rpb25zIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbGxlY3Rpb25zIiBmdWxsdHlwZT0iamF2YS51dGlsLk1hcCIgdHlwZT0iTWFwIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aEV4Y2VwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IiIHR5cGU9IlN0YXRpY0Vycm9yIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QmFzZSBjbGFzcyBmb3IgYWxsIHN0YXRpYyBlcnJvcnMgYXMgZGVmaW5lZCBieSB0aGUgWFBhdGggMi4wIHNwZWNpZmljYXRpb248L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RhdGljRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIGEgZ2VuZXJpYyBzdGF0aWMgZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y29kZQotICAgICAgICAgICAgVGhlIGVycm9yIGNvZGUgYXMgc3BlY2lmaWVkIGluIFhQYXRoIDIuMDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyCi0gICAgICAgICAgICBIdW1hciByZWFkYWJsZSBlcnJvciBtZXNzYWdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb2RlIiBjb21tZW50PSJUaGUgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gWFBhdGggMi4wIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJIdW1hciByZWFkYWJsZSBlcnJvciBtZXNzYWdlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb2RlIiByZXR1cm5jb21tZW50PSJlcnJvciBjb2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGVycm9yIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lcnJvciBjb2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljTmFtZVJlc29sdmVyIiB0eXBlPSJTdGF0aWNOYW1lUmVzb2x2ZXIiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ2hlY2tlciIgdHlwZT0iU3RhdGljQ2hlY2tlciIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGlzIGNsYXNzIHJlc29sdmVzIHN0YXRpYyBuYW1lcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RhdGljTmFtZVJlc29sdmVyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBzdGF0aWMgbmFtZSByZXNvbHZlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zYwotICAgICAgICAgICAgaXMgdGhlIHN0YXRpYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic2MiIGNvbW1lbnQ9ImlzIHRoZSBzdGF0aWMgY29udGV4dC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIgdHlwZT0iU3RhdGljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2hlY2siIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHRoZSBYUGF0aCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgWFBhdGggbm9kZSB0byBjaGVjay48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdGF0aWNFcnJvcgotICAgICAgICAgICAgIHN0YXRpYyBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9ImlzIHRoZSBYUGF0aCBub2RlIHRvIGNoZWNrLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIiB0eXBlPSJYUGF0aE5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0ic3RhdGljIGVycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvciIgdHlwZT0iU3RhdGljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIFhQYXRoIGJ5IHZpc2l0aW5nIGFsbCB0aGUgbm9kZXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnhwCi0gICAgICAgICAgICBpcyB0aGUgWFBhdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InhwIiBjb21tZW50PSJpcyB0aGUgWFBhdGguIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCIgdHlwZT0iWFBhdGgiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBmb3IgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZmV4Ci0gICAgICAgICAgICBpcyB0aGUgZm9yIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImZleCIgY29tbWVudD0iaXMgdGhlIGZvciBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwciIgdHlwZT0iRm9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHF1YW50aWZpZWQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cWV4Ci0gICAgICAgICAgICBpcyB0aGUgcXVhbnRpZmllZCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJxZXgiIGNvbW1lbnQ9ImlzIHRoZSBxdWFudGlmaWVkIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5RdWFudGlmaWVkRXhwciIgdHlwZT0iUXVhbnRpZmllZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gaWYgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aWZleAotICAgICAgICAgICAgaXMgdGhlIGlmIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlmZXgiIGNvbW1lbnQ9ImlzIHRoZSBpZiBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSWZFeHByIiB0eXBlPSJJZkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmludEJpbkV4cHIiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgYmluYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIGxlZnQgYW5kIHJpZ2h0IGNoaWxkcmVuLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbiBpdHNlbGYuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciIgdHlwZT0iQmluRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBPUiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5vcmV4Ci0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ib3JleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHIiIHR5cGU9Ik9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBBTkQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YW5kZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhbmRleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByIiB0eXBlPSJBbmRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jbXBleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNtcGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNtcEV4cHIiIHR5cGU9IkNtcEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSByYW5nZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZXgiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByIiB0eXBlPSJSYW5nZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gYWRkaXRvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hZGRleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFkZGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIiIHR5cGU9IkFkZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBzdWJ0cmFjdGlvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdWJleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN1YmV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN1YkV4cHIiIHR5cGU9IlN1YkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBtdWx0aXBsaWNhdGlvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIiIHR5cGU9Ik11bEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBkaXZpc2lvbiBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHIiIHR5cGU9IkRpdkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gaW50ZWdlciBkaXZpc29uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIiIHR5cGU9IklEaXZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgbW9kIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm11bGV4Ci0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTW9kRXhwciIgdHlwZT0iTW9kRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHVuaW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnVuZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ1bmV4IiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciIgdHlwZT0iVW5pb25FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgcGlwZWQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cGlwZXgKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwaXBleCIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwciIgdHlwZT0iUGlwZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gaW50ZXJzZWN0aW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmlleHByCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaWV4cHIiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZXJzZWN0RXhwciIgdHlwZT0iSW50ZXJzZWN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBleGNlcHQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZWV4cHIKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlZXhwciIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByIiB0eXBlPSJFeGNlcHRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuICZhcG9zO2luc3RhbmNlIG9mJmFwb3M7IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmlvZXhwCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW9leHAiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwciIgdHlwZT0iSW5zdE9mRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhICZhcG9zO3RyZWF0IGFzJmFwb3M7IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRhZXhwCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idGFleHAiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIiIHR5cGU9IlRyZWF0QXNFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgY2FzdGFibGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2V4cAotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNleHAiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByIiB0eXBlPSJDYXN0YWJsZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBjYXN0IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNleHAKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjZXhwIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByIiB0eXBlPSJDYXN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByaW50VW5FeHByIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHVuYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIG9uZSBjaGlsZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbiBpdHNlbGYuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgbmFtZSBvZiB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbiBpdHNlbGYuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHIiIHR5cGU9IlVuRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIG1pbnVzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwciIgdHlwZT0iTWludXNFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgcGx1cyBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwciIgdHlwZT0iUGx1c0V4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4geHBhdGggZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByIiB0eXBlPSJYUGF0aEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBmb3J3YXJkIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwIiB0eXBlPSJGb3J3YXJkU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHJldmVyc2Ugc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXAiIHR5cGU9IlJldmVyc2VTdGVwIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgbmFtZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCIgdHlwZT0iTmFtZVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSB2YXJpYWJsZSByZWZlcmVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhclJlZiIgdHlwZT0iVmFyUmVmIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgc3RyaW5nIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwiIHR5cGU9IlN0cmluZ0xpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gaW50ZWdlciBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCIgdHlwZT0iSW50ZWdlckxpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBkb3VibGUgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCIgdHlwZT0iRG91YmxlTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGRlY2ltYWwgbGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWwiIHR5cGU9IkRlY2ltYWxMaXRlcmFsIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByIiB0eXBlPSJQYXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNudHhJdGVtRXhwciIgdHlwZT0iQ250eEl0ZW1FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgZnVuY3Rpb24gY2FsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIiB0eXBlPSJGdW5jdGlvbkNhbGwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBzaW5nbGUgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSIgdHlwZT0iU2luZ2xlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHNlcXVlbmNlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZSIgdHlwZT0iU2VxdWVuY2VUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIGl0ZW0gdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUiIHR5cGU9Ikl0ZW1UeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGFuIGFueSBraW5kIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFueUtpbmRUZXN0IiB0eXBlPSJBbnlLaW5kVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGRvY3VtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvY3VtZW50VGVzdCIgdHlwZT0iRG9jdW1lbnRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im51bGwuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZhbGlkYXRlIGEgdGV4dCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCIgdHlwZT0iVGV4dFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBjb21tZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0IiB0eXBlPSJDb21tZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3RpbmcgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0IiB0eXBlPSJQSVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYW4gYXR0cmlidXRlIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QiIHR5cGU9IkF0dHJpYnV0ZVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibnVsbC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmFsaWRhdGUgYSBzY2hlbWEgYXR0cmlidXRlIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUF0dHJUZXN0IiB0eXBlPSJTY2hlbWFBdHRyVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0IiB0eXBlPSJFbGVtZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIHNjaGVtYSBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IiB0eXBlPSJTY2hlbWFFbGVtVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhbiBheGlzIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF4aXNTdGVwIiB0eXBlPSJBeGlzU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WYWxpZGF0ZSBhIGZpbHRlciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5udWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByIiB0eXBlPSJGaWx0ZXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQkJPGplbGNsYXNzIHN1cGVyY2xhc3M9IkVycm9yIiB2aXNpYmlsaXR5PSJwYWNrYWdlLXByaXZhdGUiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5FcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvciIgdHlwZT0iU3RhdGljTmFtZVJlc29sdmVyLkR1bW15RXJyb3IiPgotCQkJPG1ldGhvZHM+Ci0JCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iU3RhdGljTmFtZVJlc29sdmVyLkR1bW15RXJyb3IiIC8+Ci0JCQk8L21ldGhvZHM+Ci0JCTwvamVsY2xhc3M+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRXJyb3IiIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLkVycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yIiB0eXBlPSJTdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvciI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iU3RhdGljTmFtZVJlc29sdmVyLkR1bW15RXJyb3IiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJFeGNlcHRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLkV4Y2VwdGlvbiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aEV4Y2VwdGlvbiIgdHlwZT0iWFBhdGhFeGNlcHRpb24iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGlzIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBhbiBYUGF0aCBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhQYXRoRXhjZXB0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBYUGF0aEV4Y2VwdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZWFzb24KLSAgICAgICAgICAgIElzIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icmVhc29uIiBjb21tZW50PSJJcyB0aGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlYXNvbiIgcmV0dXJuY29tbWVudD0idGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvdy4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXIiIHR5cGU9IlhQYXRoUGFyc2VyIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhpcyBpcyBhbiBpbnRlcmZhY2UgY2xhc3MgZm9yIHRoZSBYUGF0aCBwYXJzZXIuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZSIgcmV0dXJuY29tbWVudD0iVGhlIHBhcnNlZCBYUGF0aC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIiB0eXBlPSJYUGF0aCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgdGhlIFhQYXRoIHBhcnNlciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnhwYXRoCi0gICAgICAgICAgICBpcyB0aGUgaW5wdXQgWFBhdGggdG8gYmUgcGFyc2VkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPlhQYXRoUGFyc2VyRXhjZXB0aW9uCi0gICAgICAgICAgICAgWFBhdGggcGFyc2VyIGV4Y2VwdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgcGFyc2VkIFhQYXRoLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieHBhdGgiIGNvbW1lbnQ9ImlzIHRoZSBpbnB1dCBYUGF0aCB0byBiZSBwYXJzZWQuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IlhQYXRoIHBhcnNlciBleGNlcHRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyRXhjZXB0aW9uIiB0eXBlPSJYUGF0aFBhcnNlckV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlN0YXRpY0Vycm9yIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbiIgdHlwZT0iWFBhdGhQYXJzZXJFeGNlcHRpb24iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGlzIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIFhQYXRoIHBhcnNlci48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxmaWVsZHM+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IlhQU1QwMDAzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IklOVkFMSURfWFBBVEhfRVhQUkVTU0lPTiIgY29uc3RleHByPSImcXVvdDtYUFNUMDAwMyZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5UaGUgdHlwZSBvZiBleGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aFBhcnNlckV4Y2VwdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgWFBhdGhQYXJzZXJFeGNlcHRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlYXNvbgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWGVyY2VzTG9hZGVyIiB0eXBlPSJYZXJjZXNMb2FkZXIiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIiIHR5cGU9IkRPTUxvYWRlciIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5YZXJjZXMgbG9hZGVyIGNsYXNzLiBUaGUgbG9hZGluZyBpcyBhbHdheXMgbmFtZXNwYWNlIGF3YXJlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTkFNRVNQQUNFU19GRUFUVVJFIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJWQUxJREFUSU9OX0ZFQVRVUkUiIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24mcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hLWZ1bGwtY2hlY2tpbmciIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU0NIRU1BX0ZVTExfQ0hFQ0tJTkdfRkVBVFVSRSIgY29uc3RleHByPSImcXVvdDtodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEtZnVsbC1jaGVja2luZyZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vZHluYW1pYyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEWU5BTUlDX1ZBTElEQVRJT05fRkVBVFVSRSIgY29uc3RleHByPSImcXVvdDtodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9keW5hbWljJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvbm9udmFsaWRhdGluZy9sb2FkLWV4dGVybmFsLWR0ZCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ub252YWxpZGF0aW5nL2xvYWQtZXh0ZXJuYWwtZHRkJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9qYXhwL3Byb3BlcnRpZXMvc2NoZW1hTGFuZ3VhZ2UiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iSkFYUF9TQ0hFTUFfTEFOR1VBR0UiIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL2phdmEuc3VuLmNvbS94bWwvamF4cC9wcm9wZXJ0aWVzL3NjaGVtYUxhbmd1YWdlJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJXM0NfWE1MX1NDSEVNQSIgY29uc3RleHByPSImcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvZG9tL2RvY3VtZW50LWNsYXNzLW5hbWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRE9DVU1FTlRfSU1QTEVNRU5UQVRJT05fUFJPUEVSVFkiIGNvbnN0ZXhwcj0iJnF1b3Q7aHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvZG9tL2RvY3VtZW50LWNsYXNzLW5hbWUmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Im9yZy5hcGFjaGUueGVyY2VzLmRvbS5QU1ZJRG9jdW1lbnRJbXBsIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT04iIGNvbnN0ZXhwcj0iJnF1b3Q7b3JnLmFwYWNoZS54ZXJjZXMuZG9tLlBTVklEb2N1bWVudEltcGwmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icGFja2FnZS1wcml2YXRlIiBuYW1lPSJfdmFsaWRhdGluZyIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icGFja2FnZS1wcml2YXRlIiBuYW1lPSJfc2NoZW1hIiBmdWxsdHlwZT0iamF2YXgueG1sLnZhbGlkYXRpb24uU2NoZW1hIiB0eXBlPSJTY2hlbWEiIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhlcmNlc0xvYWRlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgWGVyY2VzIGxvYWRlci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYZXJjZXNMb2FkZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzY2hlbWEiIGZ1bGx0eXBlPSJqYXZheC54bWwudmFsaWRhdGlvbi5TY2hlbWEiIHR5cGU9IlNjaGVtYSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibG9hZCIgcmV0dXJuY29tbWVudD0iVGhlIGxvYWRlZCBkb2N1bWVudC4iIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Eb2N1bWVudCIgdHlwZT0iRG9jdW1lbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFhlcmNlcyBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1bWVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pbgotICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ET01Mb2FkZXJFeGNlcHRpb24KLSAgICAgICAgICAgICBET00gbG9hZGVyIGV4Y2VwdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbG9hZGVkIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW4iIGNvbW1lbnQ9ImlzIHRoZSBpbnB1dCBzdHJlYW0uIiBmdWxsdHlwZT0iamF2YS5pby5JbnB1dFN0cmVhbSIgdHlwZT0iSW5wdXRTdHJlYW0iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iRE9NIGxvYWRlciBleGNlcHRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRPTUxvYWRlckV4Y2VwdGlvbiIgdHlwZT0iRE9NTG9hZGVyRXhjZXB0aW9uIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF92YWxpZGF0aW5nIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgdmFsaWRhdGluZyBib29sZWFuLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFBhdGhOb2RlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoIiB0eXBlPSJYUGF0aCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFhQYXRoLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgWFBhdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmV4cHJzCi0gICAgICAgICAgICBYUGF0aCBleHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV4cHJzIiBjb21tZW50PSJYUGF0aCBleHByZXNzaW9ucy4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29sbGVjdGlvbiIgdHlwZT0iQ29sbGVjdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuSXRlcmF0b3IiIHR5cGU9Ikl0ZXJhdG9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJGdW5jdGlvbkxpYnJhcnkiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uIiBzdXBlcmNsYXNzZnVsbHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeSIgdHlwZT0iRm5GdW5jdGlvbkxpYnJhcnkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5NYWludGFpbnMgYSBsaWJyYXJ5IG9mIGNvcmUgZnVuY3Rpb25zIGFuZCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFBBVEhfRlVOQ1RJT05TX05TIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhdGggdG8geHBhdGggZnVuY3Rpb25zIHNwZWNpZmljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJGbkZ1bmN0aW9uTGlicmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRm5GdW5jdGlvbkxpYnJhcnkuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ29uc3RydWN0b3JGTCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24iIHN1cGVyY2xhc3NmdWxsdHlwZT0iQ29uc3RydWN0b3JGTCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkiIHR5cGU9IlhTQ3RyTGlicmFyeSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlhNTCBTY2hlbWEgY29udHJvbCBsaWJyYXJ5IHN1cHBvcnQuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYTUxfU0NIRU1BX05TIiBjb25zdGV4cHI9IiZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhdGggdG8gdzMub3JnIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTQ3RyTGlicmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgWFNDdHJMaWJyYXJ5LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlBhcmVudEF4aXMiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QYXJlbnRBeGlzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkFuY2VzdG9yQXhpcyIgdHlwZT0iQW5jZXN0b3JBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGUsIHRoaXMgYWx3YXlzIGluY2x1ZGVzIHRoZSByb290Ci0gbm9kZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQW5jZXN0b3JBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSBub2RlcyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkdldCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYwotICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbm9kZXMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIHRoZSBjb250ZXh0IG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlIiBjb21tZW50PSJpcyB0aGUgdHlwZSBvZiBub2RlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkYyIgY29tbWVudD0iaXMgdGhlIGR5bmFtaWMgY29udGV4dC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJSZXZlcnNlQXhpcyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJldmVyc2VBeGlzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkFuY2VzdG9yT3JTZWxmQXhpcyIgdHlwZT0iQW5jZXN0b3JPclNlbGZBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhlIGFuY2VzdG9yLW9yLXNlbGYgYXhpcyBjb250YWlucyB0aGUgY29udGV4dCBub2RlIGFuZCB0aGUgYW5jZXN0b3JzIG9mIHRoZQotIGNvbnRleHQgbm9kZSwgdGhpcyBhbHdheXMgaW5jbHVkZXMgdGhlIHJvb3Qgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQW5jZXN0b3JPclNlbGZBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSBjb250ZXh0IG5vZGUgYW5kIGl0cyBhbmNlc3RvcnMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgYW5jZXN0b3Igbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGNvbnRleHQgbm9kZSBpdHNlbGYuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYwotICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgY29udGV4dCBub2RlIGFuZCBpdHMgYW5jZXN0b3JzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIHR5cGUgb2Ygbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGMiIGNvbW1lbnQ9ImlzIHRoZSBkeW5hbWljIGNvbnRleHQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRm9yd2FyZEF4aXMiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpcyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BdHRyaWJ1dGVBeGlzIiB0eXBlPSJBdHRyaWJ1dGVBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhlIGF0dHJpYnV0ZSBheGlzIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjb250ZXh0IG5vZGUuIFRoZSBheGlzIHdpbGwKLSBiZSBlbXB0eSB1bmxlc3MgdGhlIGNvbnRleHQgbm9kZSBpcyBhbiBlbGVtZW50LjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBdHRyaWJ1dGVBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSBhdHRpYnV0ZXMgb2YgdGhlIGNvbnRleHQgbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJmFwb3M7cyBhdHRyaWJ1dGVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGMKLSAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGF0dGlidXRlcyBvZiB0aGUgY29udGV4dCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIHR5cGUgb2Ygbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGMiIGNvbW1lbnQ9ImlzIHRoZSBkeW5hbWljIGNvbnRleHQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByaW5jaXBhbF9ub2RlX2tpbmQiIHJldHVybmNvbW1lbnQ9IlRoZSB0eXBlIG9mIG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG5vZGUmYXBvcztzIHByaW5jaXBsZSBub2RlIGtpbmQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgdHlwZSBvZiBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQXhpcyIgdHlwZT0iQXhpcyI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoaXMgaXMgdGhlIGludGVyZmFjZSBjbGFzcyBmb3IgYW4gQXhpcy4KLSAKLSBBbiBheGlzIGRlZmluZXMgdGhlICZxdW90O2RpcmVjdGlvbiBvZiBtb3ZlbWVudCZxdW90OyBmb3IgYSBzdGVwIGJldHdlZW4gYSBjb250ZXh0IG5vZGUKLSBhbmQgYW5vdGhlciBub2RlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYXhpcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSByZXN1bHQgc2VxdWVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYwotICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgcmVzdWx0IHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIHR5cGUgb2Ygbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGMiIGNvbW1lbnQ9ImlzIHRoZSBkeW5hbWljIGNvbnRleHQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByaW5jaXBhbF9ub2RlX2tpbmQiIHJldHVybmNvbW1lbnQ9IlRoZSBwcmluY2lwbGUgbm9kZSBraW5kLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0IHRoZSBwcmluY2lwbGUga2luZCBvZiBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHByaW5jaXBsZSBub2RlIGtpbmQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJGb3J3YXJkQXhpcyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNoaWxkQXhpcyIgdHlwZT0iQ2hpbGRBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhlIGNoaWxkIGF4aXMgY29udGFpbnMgdGhlIGNoaWxkcmVuIG9mIHRoZSBjb250ZXh0IG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNoaWxkQXhpcyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRlIiByZXR1cm5jb21tZW50PSJUaGUgY29udGV4dCBub2RlJmFwb3M7cyBjaGlsZHJlbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJmFwb3M7cyBjaGlsZHJlbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZQotICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRjCi0gICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBjb250ZXh0IG5vZGUmYXBvcztzIGNoaWxkcmVuLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIHR5cGUgb2Ygbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGMiIGNvbW1lbnQ9ImlzIHRoZSBkeW5hbWljIGNvbnRleHQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFBhdGhFcnJvciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhFcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5DdXBFcnJvciIgdHlwZT0iQ3VwRXJyb3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5FcnJvciBjYXVzZWQgYnkgQ1VQIFBhcnNlci48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ3VwRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIENVUCBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVhc29uCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iUmVzdWx0U2VxdWVuY2VGYWN0b3J5IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSU0ZhY3RvcnkiIHR5cGU9IkRlZmF1bHRSU0ZhY3RvcnkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5GYWN0b3J5IGltcGxlbWVudGF0aW9uIHdoaWNoIGNyZWF0ZXMgc2VxdWVuY2VzIG9mIHR5cGUgRGVmYXVsdFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNTAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUE9PTF9TSVpFIiBjb25zdGV4cHI9IjUwIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlZmF1bHRSU0ZhY3RvcnkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3Igb2YgZmFjdG9yeS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZmFjdF9jcmVhdGVfbmV3IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJmYWN0X3JlbGVhc2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZmFjdF9wcmludF9kZWJ1ZyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJSZXN1bHRTZXF1ZW5jZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSZXN1bHRTZXF1ZW5jZSIgdHlwZT0iRGVmYXVsdFJlc3VsdFNlcXVlbmNlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlc3VsdCBzZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRGVmYXVsdFJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yLgotIAotIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEZWZhdWx0UmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aXRlbQotICAgICAgICAgICAgaXMgYWRkZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Iml0ZW0iIGNvbW1lbnQ9ImlzIGFkZGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZCIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aXRlbQotICAgICAgICAgICAgaXMgYWRkZWQgdG8gYXJyYXkgX3NlcTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaXRlbSIgY29tbWVudD0iaXMgYWRkZWQgdG8gYXJyYXkgX3NlcSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uY2F0IiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ycwotICAgICAgICAgICAgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBjb21tZW50PSJSZXN1bHRTZXF1ZW5jZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0idGhlIG5leHQgaXRlcmF0aW9uIG9mIGFycmF5IF9zZXEiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yIiB0eXBlPSJMaXN0SXRlcmF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBuZXh0IGl0ZXJhdGlvbiBvZiBhcnJheSBfc2VxPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2l6ZSIgcmV0dXJuY29tbWVudD0iaW50ZWdlciBvZiB0aGUgc2l6ZSBvZiBhcnJheSBfc2VxIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmludGVnZXIgb2YgdGhlIHNpemUgb2YgYXJyYXkgX3NlcTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldCIgcmV0dXJuY29tbWVudD0iaXRlbSBpIGZyb20gYXJyYXkgX3NlcSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmkKLSAgICAgICAgICAgIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXJyYXkgaXRlbSB0aGF0IGlzIHdhbnRlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pdGVtIGkgZnJvbSBhcnJheSBfc2VxPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpIiBjb21tZW50PSJpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGFycmF5IGl0ZW0gdGhhdCBpcyB3YW50ZWQuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJmaXJzdCIgcmV0dXJuY29tbWVudD0iZmlyc3QgaXRlbSBmcm9tIGFycmF5IF9zZXEiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Zmlyc3QgaXRlbSBmcm9tIGFycmF5IF9zZXE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbXB0eSIgcmV0dXJuY29tbWVudD0iYSBib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5XaGV0aGVyIG9yIG5vdCBhcnJheSBfc2VxIGlzIGVtcHR5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIGJvb2xlYW48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbGVhciIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2xlYXJzIHRoZSBzZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZV9uZXciIHJldHVybmNvbW1lbnQ9IlRoZSBuZXcgc2VxdWVuY2UuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGUgYSBuZXcgc2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbmV3IHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRTdGF0aWNDb250ZXh0IiB0eXBlPSJEZWZhdWx0U3RhdGljQ29udGV4dCI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiIHR5cGU9IlN0YXRpY0NvbnRleHQiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIHN0YXRpYyBjb250ZXh0IGFzIGRlc2NyaWJlZCBieSB0aGUgWFBhdGggMi4wCi0gc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRGVmYXVsdFN0YXRpY0NvbnRleHQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNjaGVtYQotICAgICAgICAgICAgU2NoZW1hIGluZm9ybWF0aW9uIGZyb20gZG9jdW1lbnQuIE1heSBiZSBudWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic2NoZW1hIiBjb21tZW50PSJTY2hlbWEgaW5mb3JtYXRpb24gZnJvbSBkb2N1bWVudC4gTWF5IGJlIG51bGwuIiBmdWxsdHlwZT0ib3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCIgdHlwZT0iWFNNb2RlbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEZWZhdWx0U3RhdGljQ29udGV4dCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3Igc2NoZW1hLWxlc3MgZG9jdW1lbnRzLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfY250eHRfaXRlbV90eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9jbnR4dF9pdGVtX3R5cGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY250eHRJdGVtVHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldF9jb2xsZWN0aW9ucyIgZnVsbHR5cGU9ImphdmEudXRpbC5NYXAiIHR5cGU9Ik1hcCIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfY29sbGVjdGlvbnMiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY29sbGVjdGlvbnMiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuTWFwIiB0eXBlPSJNYXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRlZmF1bHRDb2xsZWN0aW9uVHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImJhc2VfdXJpIiByZXR1cm5jb21tZW50PSJYU0FueVVSSSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSSIgdHlwZT0iWFNBbnlVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+cmV0dXJuIHRoZSBiYXNlIFVSSTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+WFNBbnlVUkk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ4cGF0aDFfY29tcGF0aWJsZSIgcmV0dXJuY29tbWVudD0iYm9vbGVhbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aXMgaXQgeHBhdGgxIGNvbXBhdGlibGU/PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ib29sZWFuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWRkX25hbWVzcGFjZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+YWRkcyBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlZml4Ci0gICAgICAgICAgICBuYW1lc3BhY2UgcHJlZml4PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lc3BhY2UKLSAgICAgICAgICAgIG5hbWVzcGFjZSBVUkk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWZpeCIgY29tbWVudD0ibmFtZXNwYWNlIHByZWZpeCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWVzcGFjZSIgY29tbWVudD0ibmFtZXNwYWNlIFVSSSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlZmF1bHRfbmFtZXNwYWNlIiByZXR1cm5jb21tZW50PSJzdHJpbmciIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgd2hlbiBvbmUgaXMgbm90IGFsbG9jYXRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2UiIHJldHVybmNvbW1lbnQ9InN0cmluZyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRlZmF1bCBmdW5jdGlvbiBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZF9mdW5jdGlvbl9saWJyYXJ5IiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5BZGRzIGEgZnVuY3Rpb24gdG8gdGhlIGxpYnJhcnkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmZsCi0gICAgICAgICAgICBGdW5jdGlvbiBsaWJyYXJ5IHRvIGFkZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImZsIiBjb21tZW50PSJGdW5jdGlvbiBsaWJyYXJ5IHRvIGFkZC4iIGZ1bGx0eXBlPSJGdW5jdGlvbkxpYnJhcnkiIHR5cGU9IkZ1bmN0aW9uTGlicmFyeSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZ1bmN0aW9uX2V4aXN0cyIgcmV0dXJuY29tbWVudD0idHJ1ZSBpZiBmdW5jdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciBleGlzdGFuY2Ugb2YgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGZ1bmN0aW9uIG5hbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcml0eQotICAgICAgICAgICAgYXJpdHkgb2YgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHJ1ZSBpZiBmdW5jdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9ImZ1bmN0aW9uIG5hbWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyaXR5IiBjb21tZW50PSJhcml0eSBvZiBmdW5jdGlvbi4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImZ1bmN0aW9uIiBmdWxsdHlwZT0iRnVuY3Rpb24iIHR5cGU9IkZ1bmN0aW9uIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcml0eSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWFrZV9hdG9taWMiIHJldHVybmNvbW1lbnQ9IkF0b21pYyB0eXBlIG9mIGRlc2lyZWQgdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGFuIGF0b21pYyBmcm9tIGEgc3BlY2lmaWMgdHlwZSBuYW1lIGluaXRpYWxpemVkIHdpdGggYSBkZWZhdWx0Ci0gdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIG5hbWUgb2YgdHlwZSB0byBjcmVhdGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BdG9taWMgdHlwZSBvZiBkZXNpcmVkIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJuYW1lIG9mIHR5cGUgdG8gY3JlYXRlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImV4cGFuZF9xbmFtZSIgcmV0dXJuY29tbWVudD0idHJ1ZSBvbiBzdWNjZXNzLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXhwYW5kcyB0aGUgcW5hbWUmYXBvcztzIHByZWZpeCBpbnRvIGEgbmFtZXNwYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHJ1ZSBvbiBzdWNjZXNzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0icW5hbWUgdG8gZXhwYW5kLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHBhbmRfZnVuY3Rpb25fcW5hbWUiIHJldHVybmNvbW1lbnQ9InRydWUgb24gc3VjY2Vzcy4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkV4cGFuZHMgYSBxbmFtZSBhbmQgdXNlcyB0aGUgZGVmYXVsdCBmdW5jdGlvbiBuYW1lc3BhY2UgaWYgdW5wcmVmaXhlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgcW5hbWUgdG8gZXhwYW5kLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRydWUgb24gc3VjY2Vzcy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9InFuYW1lIHRvIGV4cGFuZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSIgcmV0dXJuY29tbWVudD0idHJ1ZSBvbiBzdWNjZXNzLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXhwYW5kcyBhIHFuYW1lIGFuZCB1c2VzIHRoZSBkZWZhdWx0IHR5cGUvZWxlbWVudCBuYW1lc3BhY2UgaWYKLSB1bnByZWZpeGVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHJ1ZSBvbiBzdWNjZXNzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0icW5hbWUgdG8gZXhwYW5kLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX2RlZmluZWQiIHJldHVybmNvbW1lbnQ9InRydWUgaWYgdHlwZSBpcyBkZWZpbmVkLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2tzIHdoZXRoZXIgdGhlIHR5cGUgaXMgZGVmaW5lZCBpbiB0aGUgaW4gc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5xbmFtZQotICAgICAgICAgICAgdHlwZSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRydWUgaWYgdHlwZSBpcyBkZWZpbmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icW5hbWUiIGNvbW1lbnQ9InR5cGUgbmFtZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9kZWZpbmVkIiByZXR1cm5jb21tZW50PSJ0cnVlIGlmIHR5cGUgaXMgZGVmaW5lZC4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrcyB3aGV0aGVyIHRoZSB0eXBlIGlzIGRlZmluZWQgaW4gdGhlIGluIHNjb3BlIHNjaGVtYSBkZWZpbml0aW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnMKLSAgICAgICAgICAgIG5hbWVzcGFjZSBvZiB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZQotICAgICAgICAgICAgbmFtZSBvZiB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRydWUgaWYgdHlwZSBpcyBkZWZpbmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibnMiIGNvbW1lbnQ9Im5hbWVzcGFjZSBvZiB0eXBlLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9Im5hbWUgb2YgdHlwZS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbGVtZW50X2RlY2xhcmVkIiByZXR1cm5jb21tZW50PSJ0cnVlIGlmIGVsZW1lbnQgZGVjbGFyZWQuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5pcyBlbGVtZW50IGRlY2xhcmVkPzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lbGVtCi0gICAgICAgICAgICBuYW1lIG9mIGVsZW1lbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHJ1ZSBpZiBlbGVtZW50IGRlY2xhcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZWxlbSIgY29tbWVudD0ibmFtZSBvZiBlbGVtZW50LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbGVtZW50X3R5cGVfZGVmaW5pdGlvbiIgcmV0dXJuY29tbWVudD0ic2NoZW1hIGRlZmluaXRpb24gb2YgdHlwZSIgZnVsbHR5cGU9Im9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb24iIHR5cGU9IlhTVHlwZURlZmluaXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+T2J0YWlucyBzY2hlbWEgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZSBvZiBhbiBlbGVtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lbGVtCi0gICAgICAgICAgICBuYW1lIG9mIGVsZW1lbnQgd2hvJmFwb3M7cyB0eXBlIGlzIGRlc2lyZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c2NoZW1hIGRlZmluaXRpb24gb2YgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZWxlbSIgY29tbWVudD0ibmFtZSBvZiBlbGVtZW50IHdobyZhcG9zO3MgdHlwZSBpcyBkZXNpcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhdHRyaWJ1dGVfZGVjbGFyZWQiIHJldHVybmNvbW1lbnQ9InRydWUgaWYgYXR0cmlidXRlIGlzIGRlY2xhcmVkLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBpcyBpbiB0aGUgaW4tc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hdHRyCi0gICAgICAgICAgICBuYW1lIG9mIGF0dHJpYnV0ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50cnVlIGlmIGF0dHJpYnV0ZSBpcyBkZWNsYXJlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImF0dHIiIGNvbW1lbnQ9Im5hbWUgb2YgYXR0cmlidXRlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhdHRyaWJ1dGVfdHlwZV9kZWZpbml0aW9uIiByZXR1cm5jb21tZW50PSJzY2hlbWEgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZSBvZiB0aGUgYXR0cmlidXRlIiBmdWxsdHlwZT0ib3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiIgdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgaW4gYW4gZWxlbWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZWxlbQotICAgICAgICAgICAgZWxlbWVudCBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c2NoZW1hIGRlZmluaXRpb24gb2YgdGhlIHR5cGUgb2YgdGhlIGF0dHJpYnV0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZWxlbSIgY29tbWVudD0iZWxlbWVudCBuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByZWZpeF9leGlzdHMiIHJldHVybmNvbW1lbnQ9InRydWUgaWYgaXQgZG9lcy4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmRvZXMgcHJlZml4IGV4aXN0PzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVmCi0gICAgICAgICAgICBwcmVmaXggbmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50cnVlIGlmIGl0IGRvZXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcmVmIiBjb21tZW50PSJwcmVmaXggbmFtZS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyZXNvbHZlX3ByZWZpeCIgcmV0dXJuY29tbWVudD0idXJpIHByZWZpeCBpcyByZXNvbHZlZCB0byBvciBudWxsLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXNvbHZlcyBhIHByZWZpeCBpbnRvIGEgbmFtZXNwYWNlIFVSSS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlZgotICAgICAgICAgICAgcHJlZml4IG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj51cmkgcHJlZml4IGlzIHJlc29sdmVkIHRvIG9yIG51bGwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcmVmIiBjb21tZW50PSJwcmVmaXggbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlcml2ZXNfZnJvbSIgcmV0dXJuY29tbWVudD0idHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVja3MgaWYgYW4gWE1MIG5vZGUgZGVyaXZlcyBmcm9tIGEgc3BlY2lmaWVkIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0Ci0gICAgICAgICAgICBub2RlIGFjdHVhbCB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ldAotICAgICAgICAgICAgbmFtZSBvZiBleHBlY3RlZCB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhdCIgY29tbWVudD0ibm9kZSBhY3R1YWwgdHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJldCIgY29tbWVudD0ibmFtZSBvZiBleHBlY3RlZCB0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlcml2ZXNfZnJvbSIgcmV0dXJuY29tbWVudD0idHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2tzIGlmIGFuIFhNTCBub2RlIGRlcml2ZXMgZnJvbSBhIHNwZWNpZmllZCB0eXBlIGRlZmluaXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0Ci0gICAgICAgICAgICBub2RlIGFjdHVhbCB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXQKLSAgICAgICAgICAgIHR5cGUgZGVmaW5pdGlvbiBvZiBleHBlY3RlZCB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRydWUgaWYgYSBkZXJpdmF0aW9uIGV4aXN0cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImF0IiBjb21tZW50PSJub2RlIGFjdHVhbCB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJldCIgY29tbWVudD0idHlwZSBkZWZpbml0aW9uIG9mIGV4cGVjdGVkIHR5cGUuIiBmdWxsdHlwZT0ib3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiIgdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5ld19zY29wZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBzY29wZSBsZXZlbC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlc3Ryb3lfc2NvcGUiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkRlc3Ryb3lzIGEgc2NvcGUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YXJpYWJsZV9leGlzdHMiIHJldHVybmNvbW1lbnQ9InRydWUgaWYgaXQgZG9lcy4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmRvZXMgdmFyaWFibGUgZXhpc3QgaW4gY3VycmVudCBzY29wZSA/PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcgotICAgICAgICAgICAgdmFyaWFibGUgbmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50cnVlIGlmIGl0IGRvZXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGNvbW1lbnQ9InZhcmlhYmxlIG5hbWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhcmlhYmxlX2luX3Njb3BlIiByZXR1cm5jb21tZW50PSJ0cnVlIGlmIHZhcmlhYmxlIGlzIGluIGN1cnJlbnQgb3IgYWJvdmUgc2NvcGUuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5jaGVja3MgdG8gc2VlIGlmIHZhcmlhYmxlIGlzIGluIHNjb3BlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcgotICAgICAgICAgICAgdmFyaWFibGUgbmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50cnVlIGlmIHZhcmlhYmxlIGlzIGluIGN1cnJlbnQgb3IgYWJvdmUgc2NvcGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGNvbW1lbnQ9InZhcmlhYmxlIG5hbWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZF92YXJpYWJsZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWRkcyBhIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUuCi0gCi0gdXNlZCBmb3Igc3RhdGljIGNoZWNraW5nLi4uLiBpLmUuIHByZXNlbmNlIG9mIHZhcmlhYmxlczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52YXIKLSAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUgdG8gYWRkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFyIiBjb21tZW50PSJ2YXJpYWJsZSBuYW1lIHRvIGFkZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0ic2V0X3ZhcmlhYmxlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YWwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRlbF92YXJpYWJsZSIgcmV0dXJuY29tbWVudD0iZmFsc2UgaWYgdmFyaWFibGUgZG9lc24mYXBvczt0IGV4aXN0LiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGVsZXRlcyBhIHZhcmlhYmxlIGZyb20gY3VycmVudCBzY29wZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dmFyCi0gICAgICAgICAgICB2YXJpYWJsZSBuYW1lIHRvIGRlbGV0ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5mYWxzZSBpZiB2YXJpYWJsZSBkb2VzbiZhcG9zO3QgZXhpc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGNvbW1lbnQ9InZhcmlhYmxlIG5hbWUgdG8gZGVsZXRlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJnZXRfdmFyIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGVidWdfcHJpbnRfdmFycyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGVidWcgZnVuY3Rpb24gd2hpY2ggd2lsbCBwcmludCBjdXJyZW50IHZhcmlhYmxlIHNjb3BlcyBhbmQgaW5mby48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9iYXNlX3VyaSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IHRoZSBCYXNlIFVSSSBmb3IgdGhlIHN0YXRpYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJiYXNldXJpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2RvY3VtZW50cyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJfZG9jdW1lbnRzIiBmdWxsdHlwZT0iamF2YS51dGlsLk1hcCIgdHlwZT0iTWFwIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X2RvY3VtZW50cyIgZnVsbHR5cGU9ImphdmEudXRpbC5NYXAiIHR5cGU9Ik1hcCIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkNoaWxkQXhpcyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNoaWxkQXhpcyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZXNjZW5kYW50QXhpcyIgdHlwZT0iRGVzY2VuZGFudEF4aXMiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgZGVzY2VuZGFudCBheGlzIGNvbnRhaW5zIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlc2NlbmRhbnRBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VXNpbmcgdGhlIGNvbnRleHQgbm9kZSByZXRyaWV2ZSB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYwotICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9ImlzIHRoZSB0eXBlIG9mIG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRjIiBjb21tZW50PSJpcyB0aGUgZHluYW1pYyBjb250ZXh0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkZvcndhcmRBeGlzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9yd2FyZEF4aXMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVzY2VuZGFudE9yU2VsZkF4aXMiIHR5cGU9IkRlc2NlbmRhbnRPclNlbGZBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhlIGRlc2NlbmRhbnQtb3Itc2VsZiBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBkZXNjZW5kYW50cyBvZgotIHRoZSBjb250ZXh0IG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRlc2NlbmRhbnRPclNlbGZBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9IlRoZSBjb250ZXh0IG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cy4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGNvbnRleHQgbm9kZQotIGl0c2VsZi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZQotICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRjCi0gICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBjb250ZXh0IG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9ImlzIHRoZSB0eXBlIG9mIG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRjIiBjb21tZW50PSJpcyB0aGUgZHluYW1pYyBjb250ZXh0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2N1cyIgdHlwZT0iRm9jdXMiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5zZXQgdGhlIGZvY3VzIGZyb20gYSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRm9jdXMiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0cyB0aGUgX3JzIHRvIHJzIGFuZCBjb250ZXh0IHBvc2l0aW9uIHRvIDEuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJzCi0gICAgICAgICAgICBpcyBhIFJlc3VsdFNlcXVlbmNlIGFuZCBpcyBzZXQgdG8gX3JzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGNvbW1lbnQ9ImlzIGEgUmVzdWx0U2VxdWVuY2UgYW5kIGlzIHNldCB0byBfcnMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29udGV4dF9pdGVtIiByZXR1cm5jb21tZW50PSJ0aGUgaXRlbSBmcm9tIF9ycywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBjb250ZXh0IGl0ZW0uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHByZXZpb3VzIGl0ZW0gZnJvbSBjdXJyZW50IGNvbnRleHQgcG9zaXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgaXRlbSBmcm9tIF9ycywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBjb250ZXh0IGl0ZW0uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWR2YW5jZV9jcCIgcmV0dXJuY29tbWVudD0idGhlIGJvb2xlYW4uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVja3MgdG8gc2VlIGlmIHBvc3NpYmxlIHRvIGFkdmFuY2UgcnMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgYm9vbGVhbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwb3NpdGlvbiIgcmV0dXJuY29tbWVudD0idGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgcnMuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+cmV0dXJucyBhbiBpbnRlZ2VyIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgcnMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibGFzdCIgcmV0dXJuY29tbWVudD0idGhlIHNpemUgb2YgcnMuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+cmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgaXRlbSBpbiBycy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBzaXplIG9mIHJzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9wb3NpdGlvbiIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+c2V0cyB0aGUgcG9zaXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnAKLSAgICAgICAgICAgIGlzIHRoZSBwb3NpdGlvbiB0aGF0IGlzIHNldC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InAiIGNvbW1lbnQ9ImlzIHRoZSBwb3NpdGlvbiB0aGF0IGlzIHNldC4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRm9yd2FyZEF4aXMiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpcyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2xsb3dpbmdBeGlzIiB0eXBlPSJGb2xsb3dpbmdBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+dGhlIGZvbGxvd2luZyBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUmYXBvcztzIGZvbGxvd2luZyBzaWJsaW5ncywgdGhvc2UKLSBjaGlsZHJlbiBvZiB0aGUgY29udGV4dCBub2RlJmFwb3M7cyBwYXJlbnQgdGhhdCBvY2N1ciBhZnRlciB0aGUgY29udGV4dCBub2RlIGluCi0gZG9jdW1lbnQgb3JkZXIuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkZvbGxvd2luZ0F4aXMiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlcmF0ZSIgcmV0dXJuY29tbWVudD0iVGhlIHJlc3VsdCBvZiBGb2xsb3dpbmdBeGlzLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJuIHRoZSByZXN1bHQgb2YgRm9sbG93aW5nQXhpcyBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYwotICAgICAgICAgICAgaXMgdGhlIGR5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgcmVzdWx0IG9mIEZvbGxvd2luZ0F4aXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlIiBjb21tZW50PSJpcyB0aGUgdHlwZSBvZiBub2RlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkYyIgY29tbWVudD0iaXMgdGhlIGR5bmFtaWMgY29udGV4dC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJGb3J3YXJkQXhpcyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvbGxvd2luZ1NpYmxpbmdBeGlzIiB0eXBlPSJGb2xsb3dpbmdTaWJsaW5nQXhpcyI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoZSBmb2xsb3dpbmctc2libGluZyBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUmYXBvcztzIGZvbGxvd2luZyBzaWJsaW5ncywKLSB0aG9zZSBjaGlsZHJlbiBvZiB0aGUgY29udGV4dCBub2RlJmFwb3M7cyBwYXJlbnQgdGhhdCBvY2N1ciBhZnRlciB0aGUgY29udGV4dCBub2RlCi0gaW4gZG9jdW1lbnQgb3JkZXI7IGlmIHRoZSBjb250ZXh0IG5vZGUgaXMgYW4gYXR0cmlidXRlIG5vZGVvciBuYW1lc3BhY2Ugbm9kZSwKLSB0aGUgZm9sbG93aW5nLXNpYmxpbmcgYXhpcyBpcyBlbXB0eS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRm9sbG93aW5nU2libGluZ0F4aXMiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlcmF0ZSIgcmV0dXJuY29tbWVudD0iVGhlIHJlc3VsdCBvZiBGb2xsb3dpbmdTaWJsaW5nQXhpcy4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybiB0aGUgcmVzdWx0IG9mIEZvbGxvd2luZ1NpYmxpbmdBeGlzIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZQotICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRjCi0gICAgICAgICAgICBpcyB0aGUgZHluYW1pYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSByZXN1bHQgb2YgRm9sbG93aW5nU2libGluZ0F4aXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlIiBjb21tZW50PSJpcyB0aGUgdHlwZSBvZiBub2RlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkYyIgY29tbWVudD0iaXMgdGhlIGR5bmFtaWMgY29udGV4dC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzIiB0eXBlPSJGb3J3YXJkQXhpcyI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF4aXMiIHR5cGU9IkF4aXMiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QW4gYXhpcyB0aGF0IG9ubHkgZXZlciBjb250YWlucyB0aGUgY29udGV4dCBub2RlIG9yIG5vZGVzIHRoYXQgYXJlIGFmdGVyIHRoZQotIGNvbnRleHQgbm9kZSBpbiBkb2N1bWVudCBvcmRlciBpcyBhIGZvcndhcmQgYXhpcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRm9yd2FyZEF4aXMiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJpbmNpcGFsX25vZGVfa2luZCIgcmV0dXJuY29tbWVudD0iVGhlIGVsZW1lbnQgdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybiB0aGUgbmV3IEVsZW1lbnQgVHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGVsZW1lbnQgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhQYXRoRXJyb3IiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuSkZsZXhFcnJvciIgdHlwZT0iSkZsZXhFcnJvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkVycm9yIGNhdXNlZCBieSBKRmxleDwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJKRmxleEVycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBKRmxleCBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVhc29uCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLk5vcm1hbGl6ZXIiIHR5cGU9Ik5vcm1hbGl6ZXIiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Tm9ybWFsaXplciB0aGF0IHVzZXMgWFBhdGhWaXNpdG9yLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOb3JtYWxpemVyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN0YXRpYyBDb250ZXh0IGlzIHNldCB0byBzYzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zYwotICAgICAgICAgICAgaXMgdGhlIFN0YXRpY0NvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzYyIgY29tbWVudD0iaXMgdGhlIFN0YXRpY0NvbnRleHQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiIHR5cGU9IlN0YXRpY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJ0aGUgeHBhdGggZXhwcmVzc2lvbnMuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdHJlZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54cAotICAgICAgICAgICAgaXMgdGhlIHhwYXRoIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHhwYXRoIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieHAiIGNvbW1lbnQ9ImlzIHRoZSB4cGF0aCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGgiIHR5cGU9IlhQYXRoIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImZleCBleHByZXNzaW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5mZXgKLSAgICAgICAgICAgIGlzIHRoZSBGb3IgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5mZXggZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImZleCIgY29tbWVudD0iaXMgdGhlIEZvciBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwciIgdHlwZT0iRm9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJxZXggZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cWV4Ci0gICAgICAgICAgICBpcyB0aGUgUXVhbnRpZmllZCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnFleCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icWV4IiBjb21tZW50PSJpcyB0aGUgUXVhbnRpZmllZCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUXVhbnRpZmllZEV4cHIiIHR5cGU9IlF1YW50aWZpZWRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImlmZXggZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aWZleAotICAgICAgICAgICAgaXMgdGhlICZhcG9zO2lmJmFwb3M7IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aWZleCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaWZleCIgY29tbWVudD0iaXMgdGhlICZhcG9zO2lmJmFwb3M7IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIiIHR5cGU9IklmRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByaW50QmluRXhwciIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgb2YgYmluYXJ5IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgYmluYXJ5IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJvZiBiaW5hcnkgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgYmluYXJ5IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiB0eXBlPSJCaW5FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im1ha2UgbG9naWMgZXhwcihvcmV4KS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+b3JleAotICAgICAgICAgICAgaXMgdGhlICZhcG9zO29yJmFwb3M7IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bWFrZSBsb2dpYyBleHByKG9yZXgpLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ib3JleCIgY29tbWVudD0iaXMgdGhlICZhcG9zO29yJmFwb3M7IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHIiIHR5cGU9Ik9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJtYWtlIGxvZ2ljIGV4cHIoYW5kZXgpLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hbmRleAotICAgICAgICAgICAgaXMgdGhlICZhcG9zO2FuZCZhcG9zOyBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1ha2UgbG9naWMgZXhwcihhbmRleCkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhbmRleCIgY29tbWVudD0iaXMgdGhlICZhcG9zO2FuZCZhcG9zOyBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwciIgdHlwZT0iQW5kRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJjbXBleC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y21wZXgKLSAgICAgICAgICAgIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y21wZXguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjbXBleCIgY29tbWVudD0iaXMgdGhlIGNvbXBhcmUgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNtcEV4cHIiIHR5cGU9IkNtcEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJleAotICAgICAgICAgICAgaXMgdGhlIHJhbmdlIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZXgiIGNvbW1lbnQ9ImlzIHRoZSByYW5nZSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByIiB0eXBlPSJSYW5nZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFkZGV4Ci0gICAgICAgICAgICBpcyB0aGUgYWRkIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhZGRleCIgY29tbWVudD0iaXMgdGhlIGFkZCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciIgdHlwZT0iQWRkRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3ViZXgKLSAgICAgICAgICAgIGlzIHRoZSBzdWIgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN1YmV4IiBjb21tZW50PSJpcyB0aGUgc3ViIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByIiB0eXBlPSJTdWJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIG11bHRpcGx5IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgY29tbWVudD0iaXMgdGhlIG11bHRpcGx5IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByIiB0eXBlPSJNdWxFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGRpdmlzaW9uIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgY29tbWVudD0iaXMgdGhlIGRpdmlzaW9uIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByIiB0eXBlPSJEaXZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tdWxleAotICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgZGl2aXNpb24gZXhwcmVzc2lvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGFuCi0gICAgICAgICAgICBpbnRlZ2VyLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGNvbW1lbnQ9ImlzIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIGV4cHJlc3Npb24gdGhhdCBhbHdheXMgcmV0dXJucyBhbgotICAgICAgICAgICAgaW50ZWdlci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIiB0eXBlPSJJRGl2RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bXVsZXgKLSAgICAgICAgICAgIGlzIHRoZSBtb2QgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im11bGV4IiBjb21tZW50PSJpcyB0aGUgbW9kIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIiB0eXBlPSJNb2RFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgbmV3IGZ1bmN0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj51bmV4Ci0gICAgICAgICAgICBpcyB0aGUgdW5pb24gZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InVuZXgiIGNvbW1lbnQ9ImlzIHRoZSB1bmlvbiBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByIiB0eXBlPSJVbmlvbkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnBpcGV4Ci0gICAgICAgICAgICBpcyB0aGUgcGlwZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgbmV3IGZ1bmN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icGlwZXgiIGNvbW1lbnQ9ImlzIHRoZSBwaXBlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwciIgdHlwZT0iUGlwZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iYSBuZXcgZnVuY3Rpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmlleHByCi0gICAgICAgICAgICBpcyB0aGUgaW50ZXJzZWN0IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSBuZXcgZnVuY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpZXhwciIgY29tbWVudD0iaXMgdGhlIGludGVyc2VjdCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZXJzZWN0RXhwciIgdHlwZT0iSW50ZXJzZWN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIG5ldyBmdW5jdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZWV4cHIKLSAgICAgICAgICAgIGlzIHRoZSBleGNlcHQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIG5ldyBmdW5jdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVleHByIiBjb21tZW50PSJpcyB0aGUgZXhjZXB0IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByIiB0eXBlPSJFeGNlcHRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImEgaW9leHAuIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmlvZXhwCi0gICAgICAgICAgICBpcyB0aGUgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hIGlvZXhwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW9leHAiIGNvbW1lbnQ9ImlzIHRoZSBpbnN0YW5jZSBvZiBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwciIgdHlwZT0iSW5zdE9mRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJhIHRhZXhwLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50YWV4cAotICAgICAgICAgICAgaXMgdGhlIHRyZWF0IGFzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSB0YWV4cC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InRhZXhwIiBjb21tZW50PSJpcyB0aGUgdHJlYXQgYXMgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByIiB0eXBlPSJUcmVhdEFzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJjZXhwLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jZXhwCi0gICAgICAgICAgICBpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jZXhwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2V4cCIgY29tbWVudD0iaXMgdGhlIGNhc3RhYmxlIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHIiIHR5cGU9IkNhc3RhYmxlRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJjZXhwLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jZXhwCi0gICAgICAgICAgICBpcyB0aGUgY2FzdCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNleHAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjZXhwIiBjb21tZW50PSJpcyB0aGUgY2FzdCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIiIHR5cGU9IkNhc3RFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJpbnRVbkV4cHIiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIGlzIHRoZSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIFVuIEV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJpcyB0aGUgbmFtZS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgVW4gRXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwciIgdHlwZT0iVW5FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im5ldyBzdWIgZXhwcmVzc2lvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgbWludXMgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uZXcgc3ViIGV4cHJlc3Npb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBtaW51cyBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTWludXNFeHByIiB0eXBlPSJNaW51c0V4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0ibmV3IGFkZCBleHByZXNzaW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBwbHVzIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmV3IGFkZCBleHByZXNzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgcGx1cyBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHIiIHR5cGU9IlBsdXNFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9InJlc3VsdC4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHhwYXRoIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVzdWx0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHhwYXRoIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIiIHR5cGU9IlhQYXRoRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBmb3J3YXJkIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGZvcndhcmQgc3RlcC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwIiB0eXBlPSJGb3J3YXJkU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSByZXZlcnNlIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHJldmVyc2Ugc3RlcC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJldmVyc2VTdGVwIiB0eXBlPSJSZXZlcnNlU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBOYW1lIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIE5hbWUgdGVzdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5hbWVUZXN0IiB0eXBlPSJOYW1lVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSB2ZXJpYWJsZSByZWZlcmVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHZlcmlhYmxlIHJlZmVyZW5jZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhclJlZiIgdHlwZT0iVmFyUmVmIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHN0cmluZyBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBzdHJpbmcgbGl0ZXJhbC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwiIHR5cGU9IlN0cmluZ0xpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBsaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBpbnRlZ2VyIGxpdGVyYWwuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbCIgdHlwZT0iSW50ZWdlckxpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZG91YmxlIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGRvdWJsZSBsaXRlcmFsLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCIgdHlwZT0iRG91YmxlTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBkZWNpbWFsIGxpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGRlY2ltYWwgbGl0ZXJhbC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRlY2ltYWxMaXRlcmFsIiB0eXBlPSJEZWNpbWFsTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBwYXIgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgcGFyIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByIiB0eXBlPSJQYXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9Im5ldyBmdW5jdGlvbiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgQ250eCBJdGVtIEV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmV3IGZ1bmN0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgQ250eCBJdGVtIEV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIiIHR5cGU9IkNudHhJdGVtRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBmdWNudGlvbiBjYWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBmdWNudGlvbiBjYWxsLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIiB0eXBlPSJGdW5jdGlvbkNhbGwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgc2luZ2xlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNpbmdsZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSIgdHlwZT0iU2luZ2xlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBzZXF1ZW5jZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBzZXF1ZW5jZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIiB0eXBlPSJTZXF1ZW5jZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgaXRlbSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBpdGVtIHR5cGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSIgdHlwZT0iSXRlbVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgYW55IGtpbmQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgYW55IGtpbmQgdGVzdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFueUtpbmRUZXN0IiB0eXBlPSJBbnlLaW5kVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBkb2N1bWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBkb2N1bWVudCB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0IiB0eXBlPSJEb2N1bWVudFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgdGV4dCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSB0ZXh0IHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCIgdHlwZT0iVGV4dFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgY29tbW9uIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGNvbW1vbiB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QiIHR5cGU9IkNvbW1lbnRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIFBJIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIFBJIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3QiIHR5cGU9IlBJVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiByZXR1cm5jb21tZW50PSJlIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIGlzIHRoZSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgYXR0cmlidXRlIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyaWJ1dGVUZXN0IiB0eXBlPSJBdHRyaWJ1dGVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QiIHR5cGU9IlNjaGVtYUF0dHJUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIGVsZW1lbnQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBjb21tZW50PSJpcyB0aGUgZWxlbWVudCB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QiIHR5cGU9IkVsZW1lbnRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIHJldHVybmNvbW1lbnQ9ImUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdCIgdHlwZT0iU2NoZW1hRWxlbVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgYXhpcyBzdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9ImlzIHRoZSBheGlzIHN0ZXAuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCIgdHlwZT0iQXhpc1N0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgcmV0dXJuY29tbWVudD0iZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBpcyB0aGUgZmlsdGVyIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgdGhlIGZpbHRlciBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRmlsdGVyRXhwciIgdHlwZT0iRmlsdGVyRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iUmV2ZXJzZUF4aXMiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SZXZlcnNlQXhpcyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QYXJlbnRBeGlzIiB0eXBlPSJQYXJlbnRBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+dGhlIHBhcmVudCBheGlzIGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSByZXR1cm5lZCBieSB0aGUgZG06cGFyZW50IGFjY2Vzc29yIGluLAotIHdoaWNoIHJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgY29udGV4dCBub2RlLCBvciBhbiBlbXB0eSBzZXF1ZW5jZSBpZiB0aGUKLSBjb250ZXh0IG5vZGUgaGFzIG5vIHBhcmVudDwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJQYXJlbnRBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9InRoZSBhY2Nlc3NvcnMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5yZXR1cm5zIHBhcmVudCBhY2Nlc3NvcnMgb2YgdGhlIGNvbnRleHQgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgbm9kZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRjCi0gICAgICAgICAgICAgaXMgdGhlIER5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgYWNjZXNzb3JzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZSIgY29tbWVudD0iaXMgdGhlIG5vZGUgdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJSZXZlcnNlQXhpcyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJldmVyc2VBeGlzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlByZWNlZGluZ0F4aXMiIHR5cGU9IlByZWNlZGluZ0F4aXMiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj50aGUgcHJlY2VkaW5nIGF4aXMgY29udGFpbnMgYWxsIG5vZGVzIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IG9mIHRoZQotIHRyZWUgaW4gd2hpY2ggdGhlIGNvbnRleHQgbm9kZSBpcyBmb3VuZDwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJQcmVjZWRpbmdBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9InRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5yZXR1cm5zIHByZWNlZGluZyBub2RlcyBvZiB0aGUgY29udGV4dCBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIGlzIHRoZSBub2RlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGMKLSAgICAgICAgICAgICBpcyB0aGUgRHluYW1pYyBjb250ZXh0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBkZXNjZW5kYW50cyBvZiB0aGUgY29udGV4dCBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlIiBjb21tZW50PSJpcyB0aGUgbm9kZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJkYyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlJldmVyc2VBeGlzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUHJlY2VkaW5nU2libGluZ0F4aXMiIHR5cGU9IlByZWNlZGluZ1NpYmxpbmdBeGlzIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+dGhlIHByZWNlZGluZyBheGlzIGNvbnRhaW5zIGFsbCBub2RlcyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0aGUgcm9vdCBvZiB0aGUKLSB0cmVlIGluIHdoaWNoIHRoZSBjb250ZXh0IG5vZGUgaXMgZm91bmQgaW5jbHVkaW5nIHRoZSBjb250ZXh0IG5vZGUgaXRzZWxmPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlByZWNlZGluZ1NpYmxpbmdBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9InRoZSBkZXNjZW5kYW50cyBhbmQgdGhlIGNvbnRleHQgbm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+cmV0dXJucyBwcmVjZWRpbmcgbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBpcyB0aGUgbm9kZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRjCi0gICAgICAgICAgICAgaXMgdGhlIER5bmFtaWMgY29udGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgZGVzY2VuZGFudHMgYW5kIHRoZSBjb250ZXh0IG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9ImlzIHRoZSBub2RlIHR5cGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRjIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iUmVzdWx0U2VxdWVuY2UiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SYW5nZVJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSYW5nZVJlc3VsdFNlcXVlbmNlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByYW5nZSBleHByZXNzaW9uIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlCi0gaW50ZWdlcnMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlJhbmdlUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+c2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RhcnQKLSAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiByYW5nZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVuZAotICAgICAgICAgICAgaXMgdGhlIGludGVnZXIgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiByYW5nZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0YXJ0IiBjb21tZW50PSJpcyB0aGUgaW50ZWdlciBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgcmFuZ2UuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlbmQiIGNvbW1lbnQ9ImlzIHRoZSBpbnRlZ2VyIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgcmFuZ2UuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFkZCIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aXRlbSBpcyBhbiBpbnRlZ2VyIHRvIGFkZCB0byB0aGUgcmFuZ2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPml0ZW0KLSAgICAgICAgICAgIGlzIGFuIGludGVnZXIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpdGVtIiBjb21tZW50PSJpcyBhbiBpbnRlZ2VyLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uY2F0IiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5yZW1vdmUgdGhlIHRhaWwgZnJvbSB0aGUgcmFuZ2UgZ2l2ZW4uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJzCi0gICAgICAgICAgICBpcyB0aGUgcmFuZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBjb21tZW50PSJpcyB0aGUgcmFuZ2UiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlcmF0b3IiIHJldHVybmNvbW1lbnQ9InRhaWwiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yIiB0eXBlPSJMaXN0SXRlcmF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+aW50ZXJhdGUgdGhyb3VnaCByYW5nZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRhaWw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXQiIHJldHVybmNvbW1lbnQ9Iml0ZW0gZnJvbSByYW5nZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pdGVtIGZyb20gcmFuZ2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImkiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNpemUiIHJldHVybmNvbW1lbnQ9InNpemUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c2l6ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNsZWFyIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5jbGVhciByYW5nZTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY3JlYXRlX25ldyIgcmV0dXJuY29tbWVudD0ibnVsbCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Y3JlYXRlIG5ldyByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJmaXJzdCIgcmV0dXJuY29tbWVudD0iZmlyc3QgaXRlbSBpbiByYW5nZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5maXJzdCBpdGVtIGluIHJhbmdlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZW1wdHkiIHJldHVybmNvbW1lbnQ9ImJvb2xlYW4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmFza3MgaWYgdGhlIHJhbmdlIGlzIGVtcHR5PzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Ym9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlbGVhc2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnJlbGVhc2U8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SZXZlcnNlQXhpcyIgdHlwZT0iUmV2ZXJzZUF4aXMiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BeGlzIiB0eXBlPSJBeGlzIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkFuIGF4aXMgdGhhdCBvbmx5IGV2ZXIgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBvciBub2RlcyB0aGF0IGFyZSBiZWZvcmUgdGhlCi0gY29udGV4dCBub2RlIGluIGRvY3VtZW50IG9yZGVyIGlzIGEgcmV2ZXJzZSBheGlzLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJSZXZlcnNlQXhpcyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmluY2lwYWxfbm9kZV9raW5kIiByZXR1cm5jb21tZW50PSJuZXcgZWxlbWVudCB0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmV3IGVsZW1lbnQgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRm9yd2FyZEF4aXMiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpcyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZWxmQXhpcyIgdHlwZT0iU2VsZkF4aXMiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DcmVhdGUgYSByZXN1bHQgc2VxdWVuY2UgdGhhdCBjb250YWlucyB0aGUgY29udGV4dCBub2RlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNlbGZBeGlzIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdGUiIHJldHVybmNvbW1lbnQ9InJzIGNvbnRhaW5pbmcgbm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Y3JlYXRlIG5ldyBycyBhbmQgYWRkIHRoZSBjb250ZXh0IG5vZGUgdG8gaXQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZQotICAgICAgICAgICAgaXMgdGhlIG5vZGUgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZGMKLSAgICAgICAgICAgIGlzIHRoZSBkeW5hbWljIGNvbnRleHQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ycyBjb250YWluaW5nIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9ImlzIHRoZSBub2RlIHR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZGMiIGNvbW1lbnQ9ImlzIHRoZSBkeW5hbWljIGNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZSIgdHlwZT0iU2VxVHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPnJlcHJlc2VudHMgYSBTZXF1ZW5jZSB0eXBlcyB1c2VkIGZvciBtYXRjaGluZyBleHBlY3RlZCBhcmd1bWVudHMgb2YgZnVuY3Rpb25zPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik9DQ19OT05FIiBjb25zdGV4cHI9IjAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJPQ0NfU1RBUiIgY29uc3RleHByPSIxIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjIiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iT0NDX1BMVVMiIGNvbnN0ZXhwcj0iMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik9DQ19RTUFSSyIgY29uc3RleHByPSIzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iT0NDX0VNUFRZIiBjb25zdGV4cHI9IjQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWE1MX1NDSEVNQV9OUyIgY29uc3RleHByPSImcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTZXFUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPnNlcXVlbmNlIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dAotICAgICAgICAgICAgaXMgYW55IHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm9jYwotICAgICAgICAgICAgaXMgYW4gaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0IiBjb21tZW50PSJpcyBhbnkgdHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ib2NjIiBjb21tZW50PSJpcyBhbiBpbnRlZ2VyIGluIHRoZSBzZXF1ZW5jZS4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTZXFUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm9jYwotICAgICAgICAgICAgaXMgYW4gaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJvY2MiIGNvbW1lbnQ9ImlzIGFuIGludGVnZXIgaW4gdGhlIHNlcXVlbmNlLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNlcVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZV9jbGFzcwotICAgICAgICAgICAgaXMgYSBjbGFzcyB3aGljaCByZXByZXNlbnRzIHRoZSBleHBlY3RlZCB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5vY2MKLSAgICAgICAgICAgIGlzIGFuIGludGVnZXIgaW4gdGhlIHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZV9jbGFzcyIgY29tbWVudD0iaXMgYSBjbGFzcyB3aGljaCByZXByZXNlbnRzIHRoZSBleHBlY3RlZCB0eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im9jYyIgY29tbWVudD0iaXMgYW4gaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU2VxVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdAotICAgICAgICAgICAgaXMgYSBzZXF1ZW5jZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c2MKLSAgICAgICAgICAgIGlzIGEgc3RhdGljIGNvbnRleHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdCIgY29tbWVudD0iaXMgYSBzZXF1ZW5jZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIiB0eXBlPSJTZXF1ZW5jZVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzYyIgY29tbWVudD0iaXMgYSBzdGF0aWMgY29udGV4dC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCIgdHlwZT0iU3RhdGljQ29udGV4dCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTZXFUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnQKLSAgICAgICAgICAgIGlzIGFuIGFueSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idCIgY29tbWVudD0iaXMgYW4gYW55IHR5cGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im9jY3VyZW5jZSIgcmV0dXJuY29tbWVudD0iYW4gaW50ZWdlci4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YW4gaW50ZWdlci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlIiByZXR1cm5jb21tZW50PSJhIHR5cGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtYXRjaCIgcmV0dXJuY29tbWVudD0iYSByZXN1bHQgc2VxdWVuY2UiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPm1hdGNoZXMgYXJnczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmdzCi0gICAgICAgICAgICBpcyBhIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPmEKLSAgICAgICAgICAgICBkeW5hbWljIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YSByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZ3MiIGNvbW1lbnQ9ImlzIGEgcmVzdWx0IHNlcXVlbmNlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RhdGljTmFtZUVycm9yIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljQXR0ck5hbWVFcnJvciIgdHlwZT0iU3RhdGljQXR0ck5hbWVFcnJvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkVycm9yIGNhdXNlZCBieSBzdGF0aWMgYXR0cmlidXRlIG5hbWUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlN0YXRpY0F0dHJOYW1lRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBhdHRyaWJ1dGUgbmFtZSBlcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZWFzb24KLSAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJTdGF0aWNOYW1lRXJyb3IiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05hbWVFcnJvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNFbGVtTmFtZUVycm9yIiB0eXBlPSJTdGF0aWNFbGVtTmFtZUVycm9yIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBlbGVtZW50IG5hbWUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlN0YXRpY0VsZW1OYW1lRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBlbGVtZW50IG5hbWUgZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVhc29uCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RhdGljTmFtZUVycm9yIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljRnVuY3ROYW1lRXJyb3IiIHR5cGU9IlN0YXRpY0Z1bmN0TmFtZUVycm9yIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBmdW5jdGlvbiBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iWFBTVDAwMTciIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRlVOQ1RJT05fTk9UX0ZPVU5EIiBjb25zdGV4cHI9IiZxdW90O1hQU1QwMDE3JnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTdGF0aWNGdW5jdE5hbWVFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3Igc3RhdGljIGZ1bmN0aW9uIG5hbWUgZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVhc29uCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RhdGljRXJyb3IiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05hbWVFcnJvciIgdHlwZT0iU3RhdGljTmFtZUVycm9yIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+RXJyb3IgY2F1c2VkIGJ5IHN0YXRpYyBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iWFBTVDAwMDgiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTkFNRV9OT1RfRk9VTkQiIGNvbnN0ZXhwcj0iJnF1b3Q7WFBTVDAwMDgmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IlhQU1QwMDgxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlBSRUZJWF9OT1RfRk9VTkQiIGNvbnN0ZXhwcj0iJnF1b3Q7WFBTVDAwODEmcXVvdDsiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlN0YXRpY05hbWVFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgZXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y29kZQotICAgICAgICAgICAgaXMgdGhlIGNvZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZWFzb24KLSAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvZGUiIGNvbW1lbnQ9ImlzIHRoZSBjb2RlLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTdGF0aWNOYW1lRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIHN0YXRpYyBuYW1lIGVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlYXNvbgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icmVhc29uIiBjb21tZW50PSJpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlN0YXRpY05hbWVFcnJvciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTmFtZUVycm9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yIiB0eXBlPSJTdGF0aWNOc05hbWVFcnJvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN0YXRpYyBuYW1lc3BhY2UgbmFtZSBlcnJvciBjbGFzcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RhdGljTnNOYW1lRXJyb3IiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idW5rbm93bl9wcmVmaXgiIHJldHVybmNvbW1lbnQ9InRoZSBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTnNOYW1lRXJyb3IiIHR5cGU9IlN0YXRpY05zTmFtZUVycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVmCi0gICAgICAgICAgICBpcyB0aGUgdW5rbm93biBwcmVmaXguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icHJlZiIgY29tbWVudD0iaXMgdGhlIHVua25vd24gcHJlZml4LiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RhdGljTmFtZUVycm9yIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVHlwZU5hbWVFcnJvciIgdHlwZT0iU3RhdGljVHlwZU5hbWVFcnJvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN0YXRpYyB0eXBlIG5hbWUgZXJyb3IgY2xhc3MuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJYUFNUMDA1MSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJUWVBFX05PVF9GT1VORCIgY29uc3RleHByPSImcXVvdDtYUFNUMDA1MSZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RhdGljVHlwZU5hbWVFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3Rvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cmVhc29uCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFzb24iIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RhdGljTmFtZUVycm9yIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc2VyaWFsaXphYmxlPSJ0cnVlIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVmFyTmFtZUVycm9yIiB0eXBlPSJTdGF0aWNWYXJOYW1lRXJyb3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5TdGF0aWMgdmFyaWFibGUgbmFtZSBlcnJvciBjbGFzcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RhdGljVmFyTmFtZUVycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZWFzb24KLSAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aEV4Y2VwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yIiB0eXBlPSJUeXBlRXJyb3IiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5FcnJvciBjYXVzZWQgYnkgYmFkIHR5cGVzLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJUeXBlRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIHR5cGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNvZGUKLSAgICAgICAgICAgIGlzIHRoZSBlcnJvciBjb2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb2RlIiBjb21tZW50PSJpcyB0aGUgZXJyb3IgY29kZS4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlcnIiIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvZGUiIHJldHVybmNvbW1lbnQ9IlRoZSBlcnJvciBjb2RlLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgdGhlIGVycm9yIGNvZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgZXJyb3IgY29kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNpX25vdF9ub2RlIiByZXR1cm5jb21tZW50PSJ0aGUgZXJyb3IuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvciIgdHlwZT0iVHlwZUVycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O0ZhY3RvcnkmcXVvdDsgZm9yIGJ1aWxkaW5nIGVycm9yczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lcnIKLSAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlcnIiIGNvbW1lbnQ9ImlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1peGVkX3ZhbHMiIHJldHVybmNvbW1lbnQ9InRoZSBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yIiB0eXBlPSJUeXBlRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7RmFjdG9yeSZxdW90OyBmb3IgYnVpbGRpbmcgZXJyb3JzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RlcF9jb25hdGluc19hdG9tcyIgcmV0dXJuY29tbWVudD0idGhlIGVycm9yLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3IiIHR5cGU9IlR5cGVFcnJvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtGYWN0b3J5JnF1b3Q7IGZvciBidWlsZGluZyBlcnJvcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXJyCi0gICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZXJyIiBjb21tZW50PSJpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbnZhbGlkX3R5cGUiIHJldHVybmNvbW1lbnQ9InRoZSBlcnJvci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yIiB0eXBlPSJUeXBlRXJyb3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7RmFjdG9yeSZxdW90OyBmb3IgYnVpbGRpbmcgZXJyb3JzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmVycgotICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBlcnJvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVyciIgY29tbWVudD0iaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iUGx1Z2luIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJQbHVnaW4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGgyUGx1Z2luIiB0eXBlPSJYUGF0aDJQbHVnaW4iPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhQYXRoMlBsdWdpbiIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9ImxyX3BhcnNlciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhDdXAiIHR5cGU9IlhQYXRoQ3VwIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q1VQIHYwLjEwayBnZW5lcmF0ZWQgcGFyc2VyLjwvZGVzY3JpcHRpb24+Ci0JCQk8YXR0cmlidXRlIG5hbWU9IkB2ZXJzaW9uIj4KLQkJCQk8ZGVzY3JpcHRpb24+TW9uIERlYyAxNCAwMjowMjoyMiBDRVQgMjAwOTwvZGVzY3JpcHRpb24+Ci0JCQk8L2F0dHJpYnV0ZT4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iX3Byb2R1Y3Rpb25fdGFibGUiIGZ1bGx0eXBlPSJzaG9ydFtdW10iIHR5cGU9InNob3J0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlByb2R1Y3Rpb24gdGFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iX2FjdGlvbl90YWJsZSIgZnVsbHR5cGU9InNob3J0W11bXSIgdHlwZT0ic2hvcnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2UtYWN0aW9uIHRhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il9yZWR1Y2VfdGFibGUiIGZ1bGx0eXBlPSJzaG9ydFtdW10iIHR5cGU9InNob3J0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPiZsdDtjb2RlJmd0O3JlZHVjZV9nb3RvJmx0Oy9jb2RlJmd0OyB0YWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJhY3Rpb25fb2JqIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNVUCRYUGF0aEN1cCRhY3Rpb25zIiB0eXBlPSJDVVAkWFBhdGhDdXAkYWN0aW9ucyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbnN0YW5jZSBvZiBhY3Rpb24gZW5jYXBzdWxhdGlvbiBjbGFzcy48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhQYXRoQ3VwIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkRlZmF1bHQgY29uc3RydWN0b3IuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFBhdGhDdXAiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3Igd2hpY2ggc2V0cyB0aGUgZGVmYXVsdCBzY2FubmVyLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzIiBmdWxsdHlwZT0iamF2YV9jdXAucnVudGltZS5TY2FubmVyIiB0eXBlPSJqYXZhX2N1cC5ydW50aW1lLlNjYW5uZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByb2R1Y3Rpb25fdGFibGUiIGZ1bGx0eXBlPSJzaG9ydFtdW10iIHR5cGU9InNob3J0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkFjY2VzcyB0byBwcm9kdWN0aW9uIHRhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWN0aW9uX3RhYmxlIiBmdWxsdHlwZT0ic2hvcnRbXVtdIiB0eXBlPSJzaG9ydCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5BY2Nlc3MgdG8gcGFyc2UtYWN0aW9uIHRhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmVkdWNlX3RhYmxlIiBmdWxsdHlwZT0ic2hvcnRbXVtdIiB0eXBlPSJzaG9ydCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5BY2Nlc3MgdG8gJmx0O2NvZGUmZ3Q7cmVkdWNlX2dvdG8mbHQ7L2NvZGUmZ3Q7IHRhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaW5pdF9hY3Rpb25zIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5BY3Rpb24gZW5jYXBzdWxhdGlvbiBvYmplY3QgaW5pdGlhbGl6ZXIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkb19hY3Rpb24iIGZ1bGx0eXBlPSJqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCIgdHlwZT0iamF2YV9jdXAucnVudGltZS5TeW1ib2wiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW52b2tlIGEgdXNlciBzdXBwbGllZCBwYXJzZSBhY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFjdF9udW0iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InBhcnNlciIgZnVsbHR5cGU9ImphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyIiB0eXBlPSJqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0YWNrIiBmdWxsdHlwZT0iamF2YS51dGlsLlN0YWNrIiB0eXBlPSJTdGFjayIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InRvcCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJqYXZhLmxhbmcuRXhjZXB0aW9uIiB0eXBlPSJFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RhcnRfc3RhdGUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbmRpY2F0ZXMgc3RhcnQgc3RhdGUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdGFydF9wcm9kdWN0aW9uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5kaWNhdGVzIHN0YXJ0IHByb2R1Y3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJFT0Zfc3ltIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Jmx0O2NvZGUmZ3Q7RU9GJmx0Oy9jb2RlJmd0OyBTeW1ib2wgaW5kZXguPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcnJvcl9zeW0iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj4mbHQ7Y29kZSZndDtlcnJvciZsdDsvY29kZSZndDsgU3ltYm9sIGluZGV4LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmVwb3J0X2Vycm9yIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1lc3NhZ2UiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpbmZvIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ1VQJFhQYXRoQ3VwJGFjdGlvbnMiIHR5cGU9IkNVUCRYUGF0aEN1cCRhY3Rpb25zIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q3VwIGdlbmVyYXRlZCBjbGFzcyB0byBlbmNhcHN1bGF0ZSB1c2VyIHN1cHBsaWVkIGFjdGlvbiBjb2RlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icGFja2FnZS1wcml2YXRlIiBuYW1lPSJDVVAkWFBhdGhDdXAkYWN0aW9ucyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvcjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwYXJzZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhDdXAiIHR5cGU9IlhQYXRoQ3VwIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgZmluYWw9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ1VQJFhQYXRoQ3VwJGRvX2FjdGlvbiIgZnVsbHR5cGU9ImphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sIiB0eXBlPSJqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NZXRob2Qgd2l0aCB0aGUgYWN0dWFsIGdlbmVyYXRlZCBhY3Rpb24gY29kZS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iQ1VQJFhQYXRoQ3VwJGFjdF9udW0iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9IkNVUCRYUGF0aEN1cCRwYXJzZXIiIGZ1bGx0eXBlPSJqYXZhX2N1cC5ydW50aW1lLmxyX3BhcnNlciIgdHlwZT0iamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJDVVAkWFBhdGhDdXAkc3RhY2siIGZ1bGx0eXBlPSJqYXZhLnV0aWwuU3RhY2siIHR5cGU9IlN0YWNrIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iQ1VQJFhQYXRoQ3VwJHRvcCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJqYXZhLmxhbmcuRXhjZXB0aW9uIiB0eXBlPSJFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJFcnJvciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwiIHNlcmlhbGl6YWJsZT0idHJ1ZSIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuRXJyb3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhFcnJvciIgdHlwZT0iWFBhdGhFcnJvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoaXMgZXJyb3IgaXMgdGhyb3duIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYW4gWFBhdGggZXhjZXB0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aEVycm9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBYUGF0aEVycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlYXNvbgotICAgICAgICAgICAgSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJlYXNvbiIgY29tbWVudD0iSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJlYXNvbiIgcmV0dXJuY29tbWVudD0idGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93LiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5UaGUgcmVhc29uIHdoeSB0aGUgZXJyb3IgaGFzIGJlZW4gdGhyb3duLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoRmxleCIgdHlwZT0iWFBhdGhGbGV4Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhpcyBjbGFzcyBpcyBhIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IAotICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5qZmxleC5kZS8mcXVvdDsmZ3Q7SkZsZXgmbHQ7L2EmZ3Q7IDEuNC4zCi0gb24gMTIvMTQvMDkgMjowMiBBTSBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uIGZpbGUKLSAmbHQ7dHQmZ3Q7L1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLTMuNU01L29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXgmbHQ7L3R0Jmd0OzwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iLTEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWVlFT0YiIGNvbnN0ZXhwcj0iLTEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5UaGlzIGNoYXJhY3RlciBkZW5vdGVzIHRoZSBlbmQgb2YgZmlsZTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJZWUlOSVRJQUwiIGNvbnN0ZXhwcj0iMCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmxleGljYWwgc3RhdGVzPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNPTU1FTlQiIGNvbnN0ZXhwcj0iMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aEZsZXgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBzY2FubmVyCi0gVGhlcmUgaXMgYWxzbyBhIGphdmEuaW8uSW5wdXRTdHJlYW0gdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pbiAgdGhlIGphdmEuaW8uUmVhZGVyIHRvIHJlYWQgaW5wdXQgZnJvbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImluIiBjb21tZW50PSJ0aGUgamF2YS5pby5SZWFkZXIgdG8gcmVhZCBpbnB1dCBmcm9tLiIgZnVsbHR5cGU9ImphdmEuaW8uUmVhZGVyIiB0eXBlPSJSZWFkZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InBhY2thZ2UtcHJpdmF0ZSIgbmFtZT0iWFBhdGhGbGV4Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgc2Nhbm5lci4KLSBUaGVyZSBpcyBhbHNvIGphdmEuaW8uUmVhZGVyIHZlcnNpb24gb2YgdGhpcyBjb25zdHJ1Y3Rvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aW4gIHRoZSBqYXZhLmlvLklucHV0c3RyZWFtIHRvIHJlYWQgaW5wdXQgZnJvbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImluIiBjb21tZW50PSJ0aGUgamF2YS5pby5JbnB1dHN0cmVhbSB0byByZWFkIGlucHV0IGZyb20uIiBmdWxsdHlwZT0iamF2YS5pby5JbnB1dFN0cmVhbSIgdHlwZT0iSW5wdXRTdHJlYW0iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImxpbmVubyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbG5vIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8bWV0aG9kIGZpbmFsPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inl5Y2xvc2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNsb3NlcyB0aGUgaW5wdXQgc3RyZWFtLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJqYXZhLmlvLklPRXhjZXB0aW9uIiB0eXBlPSJJT0V4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgZmluYWw9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ieXlyZXNldCIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmVzZXRzIHRoZSBzY2FubmVyIHRvIHJlYWQgZnJvbSBhIG5ldyBpbnB1dCBzdHJlYW0uCi0gRG9lcyBub3QgY2xvc2UgdGhlIG9sZCByZWFkZXIuCi0KLSBBbGwgaW50ZXJuYWwgdmFyaWFibGVzIGFyZSByZXNldCwgdGhlIG9sZCBpbnB1dCBzdHJlYW0gCi0gJmx0O2ImZ3Q7Y2Fubm90Jmx0Oy9iJmd0OyBiZSByZXVzZWQgKGludGVybmFsIGJ1ZmZlciBpcyBkaXNjYXJkZWQgYW5kIGxvc3QpLgotIExleGljYWwgc3RhdGUgaXMgc2V0IHRvICZsdDt0dCZndDtaWl9JTklUSUFMJmx0Oy90dCZndDsuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJlYWRlciAgIHRoZSBuZXcgaW5wdXQgc3RyZWFtPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyZWFkZXIiIGNvbW1lbnQ9InRoZSBuZXcgaW5wdXQgc3RyZWFtIiBmdWxsdHlwZT0iamF2YS5pby5SZWFkZXIiIHR5cGU9IlJlYWRlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBmaW5hbD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ5eXN0YXRlIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGZpbmFsPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inl5YmVnaW4iIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVudGVycyBhIG5ldyBsZXhpY2FsIHN0YXRlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5ld1N0YXRlIHRoZSBuZXcgbGV4aWNhbCBzdGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmV3U3RhdGUiIGNvbW1lbnQ9InRoZSBuZXcgbGV4aWNhbCBzdGF0ZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGZpbmFsPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inl5dGV4dCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIGN1cnJlbnQgcmVndWxhciBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGZpbmFsPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inl5Y2hhcmF0IiByZXR1cm5jb21tZW50PSJ0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIHBvcyIgZnVsbHR5cGU9ImNoYXIiIHR5cGU9ImNoYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uICZsdDt0dCZndDtwb3MmbHQ7L3R0Jmd0OyBmcm9tIHRoZSAKLSBtYXRjaGVkIHRleHQuIAotIAotIEl0IGlzIGVxdWl2YWxlbnQgdG8geXl0ZXh0KCkuY2hhckF0KHBvcyksIGJ1dCBmYXN0ZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cG9zIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHRvIGZldGNoLiAKLSAgICAgICAgICAgIEEgdmFsdWUgZnJvbSAwIHRvIHl5bGVuZ3RoKCktMS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIHBvczwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icG9zIiBjb21tZW50PSJ0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciB0byBmZXRjaC4gCi0gICAgICAgICAgICBBIHZhbHVlIGZyb20gMCB0byB5eWxlbmd0aCgpLTEuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgZmluYWw9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ieXlsZW5ndGgiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCByZWdpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ5eXB1c2hiYWNrIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QdXNoZXMgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBiYWNrIGludG8gdGhlIGlucHV0IHN0cmVhbS4KLQotIFRoZXkgd2lsbCBiZSByZWFkIGFnYWluIGJ5IHRoZW4gbmV4dCBjYWxsIG9mIHRoZSBzY2FubmluZyBtZXRob2Q8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVtYmVyICB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVhZCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4geXlsZW5ndGgoKSE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im51bWJlciIgY29tbWVudD0idGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlYWQgYWdhaW4uCi0gICAgICAgICAgICAgICAgVGhpcyBudW1iZXIgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHl5bGVuZ3RoKCkhIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuZXh0X3Rva2VuIiByZXR1cm5jb21tZW50PSJ0aGUgbmV4dCB0b2tlbiIgZnVsbHR5cGU9ImphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sIiB0eXBlPSJqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXN1bWVzIHNjYW5uaW5nIHVudGlsIHRoZSBuZXh0IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLAotIHRoZSBlbmQgb2YgaW5wdXQgaXMgZW5jb3VudGVyZWQgb3IgYW4gSS9PLUVycm9yIG9jY3Vycy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBuZXh0IHRva2VuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQGV4Y2VwdGlvbiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+amF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9ImphdmEuaW8uSU9FeGNlcHRpb24iIHR5cGU9IklPRXhjZXB0aW9uIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iT2JqZWN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhwYXRoU3ltIiB0eXBlPSJYcGF0aFN5bSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNVUCBnZW5lcmF0ZWQgY2xhc3MgY29udGFpbmluZyBzeW1ib2wgY29uc3RhbnRzLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMzIiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iREVTQ0VOREFOVF9PUl9TRUxGIiBjb25zdGV4cHI9IjMyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjU2IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFTIiBjb25zdGV4cHI9IjU2IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQ1IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkdUIiBjb25zdGV4cHI9IjQ1IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjM0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkZPTExPV0lORyIgY29uc3RleHByPSIzNCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxOSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJGT1JXQVJEX1NMQVNIU0xBU0giIGNvbnN0ZXhwcj0iMTkiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMzYiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUEFSRU5UIiBjb25zdGV4cHI9IjM2IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQ2IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkdFIiBjb25zdGV4cHI9IjQ2IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Ijc1IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPQ1VNRU5UX05PREUiIGNvbnN0ZXhwcj0iNzUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMzUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTkFNRVNQQUNFIiBjb25zdGV4cHI9IjM1IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjE4IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkZPUldBUkRfU0xBU0giIGNvbnN0ZXhwcj0iMTgiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNTUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVFJFQVQiIGNvbnN0ZXhwcj0iNTUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNzQiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTk9ERSIgY29uc3RleHByPSI3NCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyNCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDT01NQSIgY29uc3RleHByPSIyNCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzNyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBTkNFU1RPUiIgY29uc3RleHByPSIzNyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI0MyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMVCIgY29uc3RleHByPSI0MyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI4MyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJTlRFR0VSIiBjb25zdGV4cHI9IjgzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Ijg0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPVUJMRSIgY29uc3RleHByPSI4NCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyOCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDSElMRCIgY29uc3RleHByPSIyOCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzMyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJGT0xMT1dJTkdfU0lCTElORyIgY29uc3RleHByPSIzMyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI2NiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJFVkVSWSIgY29uc3RleHByPSI2NiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzMSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTRUxGIiBjb25zdGV4cHI9IjMxIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQ0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkxFIiBjb25zdGV4cHI9IjQ0IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjgwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkVMRU1FTlQiIGNvbnN0ZXhwcj0iODAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNzYiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVEVYVCIgY29uc3RleHByPSI3NiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI1MyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJTlNUQU5DRSIgY29uc3RleHByPSI1MyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxMSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOT1RFUVVBTFMiIGNvbnN0ZXhwcj0iMTEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNjgiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVEhFTiIgY29uc3RleHByPSI2OCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI4MSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTQ0hFTUFfRUxFTUVOVCIgY29uc3RleHByPSI4MSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI3OSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTQ0hFTUFfQVRUUklCVVRFIiBjb25zdGV4cHI9Ijc5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFOQ0VTVE9SX09SX1NFTEYiIGNvbnN0ZXhwcj0iNDAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNDEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRVEiIGNvbnN0ZXhwcj0iNDEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMzkiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUFJFQ0VESU5HIiBjb25zdGV4cHI9IjM5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQ5IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik1PRCIgY29uc3RleHByPSI0OSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyMSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBVF9TWU0iIGNvbnN0ZXhwcj0iMjEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMjUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRE9MTEFSIiBjb25zdGV4cHI9IjI1IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjUyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkVYQ0VQVCIgY29uc3RleHByPSI1MiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxMiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMRVNTVEhBTiIgY29uc3RleHByPSIxMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI5IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlBJUEUiIGNvbnN0ZXhwcj0iOSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxMyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMRVNTRVFVQUwiIGNvbnN0ZXhwcj0iMTMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMjciIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUVVFU1RJT05NQVJLIiBjb25zdGV4cHI9IjI3IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjYiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUExVUyIgY29uc3RleHByPSI2IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQ4IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IklESVYiIGNvbnN0ZXhwcj0iNDgiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMUEFSIiBjb25zdGV4cHI9IjQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNTAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVU5JT04iIGNvbnN0ZXhwcj0iNTAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMTUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iR1JFQVRFUkVRVUFMIiBjb25zdGV4cHI9IjE1IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Ijg1IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRFQ0lNQUwiIGNvbnN0ZXhwcj0iODUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNjAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRk9SIiBjb25zdGV4cHI9IjYwIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjgiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU1RBUiIgY29uc3RleHByPSI4IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjE0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkdSRUFURVIiIGNvbnN0ZXhwcj0iMTQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMzgiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUFJFQ0VESU5HX1NJQkxJTkciIGNvbnN0ZXhwcj0iMzgiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNDciIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRElWIiBjb25zdGV4cHI9IjQ3IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjYyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlJFVFVSTiIgY29uc3RleHByPSI2MiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI2OSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJFTFNFIiBjb25zdGV4cHI9IjY5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjIyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkRPVERPVCIgY29uc3RleHByPSIyMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyNiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJET1QiIGNvbnN0ZXhwcj0iMjYiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJFT0YiIGNvbnN0ZXhwcj0iMCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI4NyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOQ05BTUUiIGNvbnN0ZXhwcj0iODciIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNzciIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ09NTUVOVCIgY29uc3RleHByPSI3NyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI1MSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJTlRFUlNFQ1QiIGNvbnN0ZXhwcj0iNTEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJSUEFSIiBjb25zdGV4cHI9IjUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNzMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iSVRFTSIgY29uc3RleHByPSI3MyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI3MiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJFTVBUWV9TRVFVRU5DRSIgY29uc3RleHByPSI3MiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI1NyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDQVNUQUJMRSIgY29uc3RleHByPSI1NyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI1OSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJUyIgY29uc3RleHByPSI1OSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI3IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik1JTlVTIiBjb25zdGV4cHI9IjciIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNzgiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUFJPQ0VTU0lOR19JTlNUUlVDVElPTiIgY29uc3RleHByPSI3OCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI2MSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJTiIgY29uc3RleHByPSI2MSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI3MSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJPUiIgY29uc3RleHByPSI3MSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVycm9yIiBjb25zdGV4cHI9IjEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMzAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQVRUUklCVVRFIiBjb25zdGV4cHI9IjMwIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjY3IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IklGIiBjb25zdGV4cHI9IjY3IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjgyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlRZUEVTV0lUQ0giIGNvbnN0ZXhwcj0iODIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNTgiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ0FTVCIgY29uc3RleHByPSI1OCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI1NCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJPRiIgY29uc3RleHByPSI1NCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyMyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDT0xPTiIgY29uc3RleHByPSIyMyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyOSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJERVNDRU5EQU5UIiBjb25zdGV4cHI9IjI5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjY1IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNPTUUiIGNvbnN0ZXhwcj0iNjUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJSQlJBQ0tFVCIgY29uc3RleHByPSIzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjIwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNPTE9OQ09MT04iIGNvbnN0ZXhwcj0iMjAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMTciIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iR1JFQVRFUl9HUkVBVEVSIiBjb25zdGV4cHI9IjE3IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9Ijg2IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNUUklORyIgY29uc3RleHByPSI4NiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI2MyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTQVRJU0ZJRVMiIGNvbnN0ZXhwcj0iNjMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNzAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQU5EIiBjb25zdGV4cHI9IjcwIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjY0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlRPIiBjb25zdGV4cHI9IjY0IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjIiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTEJSQUNLRVQiIGNvbnN0ZXhwcj0iMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI0MiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJORSIgY29uc3RleHByPSI0MiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxNiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMRVNTX0xFU1MiIGNvbnN0ZXhwcj0iMTYiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMTAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRVFVQUxTIiBjb25zdGV4cHI9IjEwIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhwYXRoU3ltIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQmluRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciIgdHlwZT0iQWRkRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBiaW5hcnkgb3BlcmF0aW9uIEFkZCwgdGFrZXMgMiBpbnB1dHMgYW5kIHJldHVybnMgdGhlIGNvbWJpbmVkCi0gdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFkZEV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEFkZEV4cHI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bAotICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yCi0gICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImwiIGNvbW1lbnQ9ImlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InIiIGNvbW1lbnQ9ImlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkJpbkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFuZEV4cHIiIHR5cGU9IkFuZEV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgYmluYXJ5IG9wZXJhdGlvbiBBbmQuIFRoZSB2YWx1ZSBvZiBhbiBhbmQtZXhwcmVzc2lvbiBpcyBkZXRlcm1pbmVkCi0gYnkgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlcyAoRUJWJmFwb3M7cykgb2YgaXRzIG9wZXJhbmRzLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBbmRFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBBbmRFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0iaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iciIgY29tbWVudD0iaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iS2luZFRlc3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCIgdHlwZT0iQW55S2luZFRlc3QiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyB0byB0ZXN0IGEgdHlwZSBvZiBhbnkga2luZC4gVGhpcyBtYXRjaGVzIGFueSBub2RlIGluIHRoZSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBbnlLaW5kVGVzdCIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZVRlc3RUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc1dpbGQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldFhETUNsYXNzVHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iS2luZFRlc3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyRWxlbVRlc3QiIHR5cGU9IkF0dHJFbGVtVGVzdCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNvbW1vbiBiYXNlIGNsYXNzIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkF0dHJFbGVtVGVzdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIDMgaW5wdXRzLAotIE5hbWUsIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkgYW5kIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIFFOYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+d2lsZAotICAgICAgICAgICAgV2lsZGNhcmQgdGVzdD8gVHJ1ZS9GYWxzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR5cGUKLSAgICAgICAgICAgIFFOYW1lIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJRTmFtZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0id2lsZCIgY29tbWVudD0iV2lsZGNhcmQgdGVzdD8gVHJ1ZS9GYWxzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgY29tbWVudD0iUU5hbWUgdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkF0dHJFbGVtVGVzdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lCi0gYW5kIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIFFOYW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+d2lsZAotICAgICAgICAgICAgV2lsZGNhcmQgdGVzdD8gVHJ1ZS9GYWxzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9IlFOYW1lLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ3aWxkIiBjb21tZW50PSJXaWxkY2FyZCB0ZXN0PyBUcnVlL0ZhbHNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQXR0ckVsZW1UZXN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkRlZmF1bHQgQ29uc3RydWN0b3IgZm9yIEF0dHJpYnV0ZSBhbmQgRWxlbWVudCB0ZXN0cy4gVGhpcyB0YWtlcyBpbiBubwotIGlucHV0cy48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0id2lsZCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIHdpbGRjYXJkIHRlc3QuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciB3aWxkY2FyZCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIHdpbGRjYXJkIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmFtZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIG5hbWUgdGVzdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIG5hbWUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBuYW1lIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIHR5cGUgdGVzdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIHR5cGUgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiB0eXBlIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZ2V0RGVydmlhdGlvblR5cGVzIiBmdWxsdHlwZT0ic2hvcnQiIHR5cGU9InNob3J0IiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQXR0ckVsZW1UZXN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyRWxlbVRlc3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QiIHR5cGU9IkF0dHJpYnV0ZVRlc3QiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyB1c2VkIHRvIG1hdGNoIGFuIGF0dHJpYnV0ZSBub2RlIGJ5IGl0cyBuYW1lIGFuZC9vciB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBdHRyaWJ1dGVUZXN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGVUZXN0LiBUaGlzIG9uZSB0YWtlcyBpbiAzIGlucHV0cywgTmFtZSwgd2lsZGNhcmQKLSB0ZXN0KHRydWUvZmFsc2UpIGFuZCB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBRTmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPndpbGQKLSAgICAgICAgICAgIFdpbGRjYXJkIHRlc3QsIFRydWUvRmFsc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50eXBlCi0gICAgICAgICAgICBRTmFtZSB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iUU5hbWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9IndpbGQiIGNvbW1lbnQ9IldpbGRjYXJkIHRlc3QsIFRydWUvRmFsc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9IlFOYW1lIHR5cGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBdHRyaWJ1dGVUZXN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGVUZXN0LiBUaGlzIG9uZSB0YWtlcyBpbiAyIGlucHV0cywgTmFtZSBhbmQKLSB3aWxkY2FyZCB0ZXN0KHRydWUvZmFsc2UpLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uYW1lCi0gICAgICAgICAgICBRTmFtZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPndpbGQKLSAgICAgICAgICAgIFdpbGRjYXJkIHRlc3QsIFRydWUvRmFsc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJRTmFtZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0id2lsZCIgY29tbWVudD0iV2lsZGNhcmQgdGVzdCwgVHJ1ZS9GYWxzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkF0dHJpYnV0ZVRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGVmYXVsdCBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjcmVhdGVUZXN0VHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNXaWxkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRYRE1DbGFzc1R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RlcEV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCIgdHlwZT0iQXhpc1N0ZXAiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgQXhpc1N0ZXAsIHRoaXMgZ2VuZXJhdGVzIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlIG5vZGVzLiBUaGVzZQotIG5vZGVzIGFyZSBhbHdheXMgcmV0dXJuZWQgaW4gRG9jdW1lbnQgT3JkZXIuIFRoaXMgY2FuIGJlIEZvcndhcmQgU3RlcCBvcgotIFJldmVyc2UgU3RlcC48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQXhpc1N0ZXAiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEF4aXNTdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdGVwCi0gICAgICAgICAgICBEZWZpbmVzIGZvcndhcmQvcmV2ZXJzZSBzdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXhwcnMKLSAgICAgICAgICAgIENvbGxlY3Rpb24gb2YgeHBhdGggZXhwcmVzc2lvbnMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdGVwIiBjb21tZW50PSJEZWZpbmVzIGZvcndhcmQvcmV2ZXJzZSBzdGVwLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCIgdHlwZT0iU3RlcCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV4cHJzIiBjb21tZW50PSJDb2xsZWN0aW9uIG9mIHhwYXRoIGV4cHJlc3Npb25zLiIgZnVsbHR5cGU9ImphdmEudXRpbC5Db2xsZWN0aW9uIiB0eXBlPSJDb2xsZWN0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0ZXAiIHJldHVybmNvbW1lbnQ9IlByZXZpb3VzIHN0ZXAuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwIiB0eXBlPSJTdGVwIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkFkdmFuY2VzIHRvIG5leHQgc3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlByZXZpb3VzIHN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X3N0ZXAiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCB0aGUgc3RlcCBkaXJlY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXAiIHR5cGU9IlN0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iSXRlcmF0ZWQgZXhwcmVzc2lvbnMuIiBmdWxsdHlwZT0iamF2YS51dGlsLkl0ZXJhdG9yIiB0eXBlPSJJdGVyYXRvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbnRlcmF0b3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5JdGVyYXRlZCBleHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmVkaWNhdGVfY291bnQiIHJldHVybmNvbW1lbnQ9IlNpemUgb2YgZXhwcmVzc2lvbnMuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGV0ZXJtaW5lcyBzaXplIG9mIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U2l6ZSBvZiBleHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJFeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiB0eXBlPSJCaW5FeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QWJzdHJhY3QgY2xhc3MgZm9yIGEgQmluYXJ5IG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQmluRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgQmluRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bAotICAgICAgICAgICAgbGVmdCB4cGF0aCBub2RlIGZvciB0aGUgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgcmlnaHQgeHBhdGggbm9kZSBmb3IgdGhlIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImwiIGNvbW1lbnQ9ImxlZnQgeHBhdGggbm9kZSBmb3IgdGhlIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgdHlwZT0iWFBhdGhOb2RlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iciIgY29tbWVudD0icmlnaHQgeHBhdGggbm9kZSBmb3IgdGhlIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgdHlwZT0iWFBhdGhOb2RlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsZWZ0IiByZXR1cm5jb21tZW50PSJMZWZ0IG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIHR5cGU9IlhQYXRoTm9kZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5MZWZ0IHhwYXRoIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5MZWZ0IG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icmlnaHQiIHJldHVybmNvbW1lbnQ9IlJpZ2h0IG5vZGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIHR5cGU9IlhQYXRoTm9kZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SaWdodCB4cGF0aCBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmlnaHQgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfbGVmdCIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IHRoZSBsZWZ0IHhwYXRoIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm4KLSAgICAgICAgICAgIExlZnQgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im4iIGNvbW1lbnQ9IkxlZnQgbm9kZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgdHlwZT0iWFBhdGhOb2RlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X3JpZ2h0IiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgdGhlIHJpZ2h0IHhwYXRoIG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm4KLSAgICAgICAgICAgIFJpZ2h0IG5vZGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuIiBjb21tZW50PSJSaWdodCBub2RlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIiB0eXBlPSJYUGF0aE5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkJpbkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByIiB0eXBlPSJDYXN0RXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgY2xhc3MgdGhhdCBjcmVhdGVzIGEgbmV3IHZhbHVlIG9mIGEgc3BlY2lmaWMgdHlwZSBiYXNlZCBvbiBhbiBleGlzdGluZwotIHZhbHVlLiBBIGNhc3QgZXhwcmVzc2lvbiB0YWtlcyB0d28gb3BlcmFuZHM6IGFuIGlucHV0IGV4cHJlc3Npb24gYW5kIGEgdGFyZ2V0Ci0gdHlwZS4gVGhlIHR5cGUgb2YgdGhlIGlucHV0IGV4cHJlc3Npb24gaXMgY2FsbGVkIHRoZSBpbnB1dCB0eXBlLiBUaGUgdGFyZ2V0Ci0gdHlwZSBtdXN0IGJlIGEgbmFtZWQgYXRvbWljIHR5cGUsIHJlcHJlc2VudGVkIGJ5IGEgUU5hbWUsIG9wdGlvbmFsbHkgZm9sbG93ZWQKLSBieSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgPyBpZiBhbiBlbXB0eSBzZXF1ZW5jZSBpcyBwZXJtaXR0ZWQuIElmIHRoZQotIHRhcmdldCB0eXBlIGhhcyBubyBuYW1lc3BhY2UgcHJlZml4LCBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBkZWZhdWx0Ci0gZWxlbWVudC90eXBlIG5hbWVzcGFjZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ2FzdEV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIENhc3RFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBpbnB1dCB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgU2luZ2xlVHlwZSB0byBjYXN0IGwgdG8uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJpbnB1dCB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InIiIGNvbW1lbnQ9IlNpbmdsZVR5cGUgdG8gY2FzdCBsIHRvLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSIgdHlwZT0iU2luZ2xlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkJpbkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RhYmxlRXhwciIgdHlwZT0iQ2FzdGFibGVFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSBjbGFzcyB0aGF0IHRlc3RzIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBjYXN0YWJsZSBpbnRvIGEgZ2l2ZW4gdHlwZS4gVGhpcwotIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSB0eXBlIGZvciBwcm9jZXNzaW5nIGEgZ2l2ZW4gdmFsdWUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNhc3RhYmxlRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBvZiBDYXN0YWJsZUV4cHI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bAotICAgICAgICAgICAgaW5wdXQgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIFNpbmdsZVR5cGUgdG8gY2hlY2sgbCBhZ2FpbnN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0iaW5wdXQgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJTaW5nbGVUeXBlIHRvIGNoZWNrIGwgYWdhaW5zdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNpbmdsZVR5cGUiIHR5cGU9IlNpbmdsZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIiB0eXBlPSJDbXBFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhlIGNvbXBhcmlzb24gb2YgZXhwcmVzc2lvbiBvcGVyYXRvciB0YWtlcyB0aGUgdmFsdWUgb2YgaXRzIGxlZnQgb3BlcmFuZCBhbmQKLSBjb21wYXJlcyAoZGVwZW5kYW50IG9uIHR5cGUpIGFnYWluc3QgaXRzIHJpZ2h0IG9wZXJhbmQsIGFjY29yZGluZyB0byB0aGUKLSBydWxlcyBvZiB0aGUgcGFydGljdWxhciBjb21wYXJpc29uIHJ1bGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxmaWVsZHM+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRVFVQUxTIiBjb25zdGV4cHI9IjAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEVRVUFMUyBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik5PVEVRVUFMUyIgY29uc3RleHByPSIxIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBOT1RFUVVBTFMgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMRVNTVEhBTiIgY29uc3RleHByPSIyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTVEhBTiBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkxFU1NFUVVBTCIgY29uc3RleHByPSIzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTRVFVQUwgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJHUkVBVEVSIiBjb25zdGV4cHI9IjQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVIgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJHUkVBVEVSRVFVQUwiIGNvbnN0ZXhwcj0iNSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1JFQVRFUkVRVUFMIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjYiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRVEiIGNvbnN0ZXhwcj0iNiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVEgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNyIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJORSIgY29uc3RleHByPSI3IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBORSBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI4IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkxUIiBjb25zdGV4cHI9IjgiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExUIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjkiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTEUiIGNvbnN0ZXhwcj0iOSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEUgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMTAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iR1QiIGNvbnN0ZXhwcj0iMTAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdUIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjExIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkdFIiBjb25zdGV4cHI9IjExIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBHRSBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxMiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJUyIgY29uc3RleHByPSIxMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgSVMgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMTMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTEVTU19MRVNTIiBjb25zdGV4cHI9IjEzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBMRVNTX0xFU1Mgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMTQiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iR1JFQVRFUl9HUkVBVEVSIiBjb25zdGV4cHI9IjE0IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBHUkVBVEVSX0dSRUFURVIgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ21wRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgQ21wRXhwcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBpbnB1dCB4cGF0aCBsZWZ0IGV4cHJlc3Npb24vdmFyaWFibGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIGlucHV0IHhwYXRoIHJpZ2h0IGV4cHJlc3Npb24vdmFyaWFibGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR5cGUKLSAgICAgICAgICAgIHdoYXQgY29tcGFyaXNvbiB0byB1c2UgbCBhZ2FpbnN0IHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJpbnB1dCB4cGF0aCBsZWZ0IGV4cHJlc3Npb24vdmFyaWFibGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJpbnB1dCB4cGF0aCByaWdodCBleHByZXNzaW9uL3ZhcmlhYmxlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgY29tbWVudD0id2hhdCBjb21wYXJpc29uIHRvIHVzZSBsIGFnYWluc3Qgci4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlIiByZXR1cm5jb21tZW50PSJjb21wYXJpc29uIHR5cGUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y29tcGFyaXNvbiB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJQcmltYXJ5RXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNudHhJdGVtRXhwciIgdHlwZT0iQ250eEl0ZW1FeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIENvbnRleHQgSXRlbSBFeHByZXNpb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJDbnR4SXRlbUV4cHIiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IktpbmRUZXN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QiIHR5cGU9IkNvbW1lbnRUZXN0Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIENvbW1lbnQgdGVzdGluZy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ29tbWVudFRlc3QiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjcmVhdGVUZXN0VHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNXaWxkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRYRE1DbGFzc1R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iTnVtZXJpY0xpdGVyYWwiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk51bWVyaWNMaXRlcmFsIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbCIgdHlwZT0iRGVjaW1hbExpdGVyYWwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgdmFsdWUgb2YgYSBudW1lcmljIGxpdGVyYWwgY29udGFpbmluZyAmcXVvdDsuJnF1b3Q7IGJ1dCBubyBlIG9yIEUgY2hhcmFjdGVyIGlzIGFuCi0gYXRvbWljIHZhbHVlIG9mIHR5cGUgeHM6ZGVjaW1hbDwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEZWNpbWFsTGl0ZXJhbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRGVjaW1hbExpdGVyYWw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dmFsdWUKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsdWUiIGNvbW1lbnQ9ImRvdWJsZSB2YWx1ZSIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdEZWNpbWFsIiB0eXBlPSJCaWdEZWNpbWFsIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJ4czpkZWNpbWFsIHZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbCIgdHlwZT0iWFNEZWNpbWFsIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54czpkZWNpbWFsIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByIiB0eXBlPSJEaXZFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIERpdmlzaW9uIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEaXZFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBEaXZFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0iaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iciIgY29tbWVudD0iaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iS2luZFRlc3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QiIHR5cGU9IkRvY3VtZW50VGVzdCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBEb2N1bWVudCB0ZXN0aW5nLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOT05FIiBjb25zdGV4cHI9IjAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5PTkUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkVMRU1FTlQiIGNvbnN0ZXhwcj0iMSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRUxFTUVOVC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjIiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU0NIRU1BX0VMRU1FTlQiIGNvbnN0ZXhwcj0iMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU0NIRU1BX0VMRU1FTlQuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEb2N1bWVudFRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIERvY3VtZW50VGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZQotICAgICAgICAgICAgVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIHhwYXRoIG9iamVjdCB0byB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgY29tbWVudD0iVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9InhwYXRoIG9iamVjdCB0byB0ZXN0LiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJEb2N1bWVudFRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGVmYXVsdCBDb25zdHJ1Y3RvciBmb3IgRG9jdW1lbnRUZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGUiIHJldHVybmNvbW1lbnQ9IlR5cGUgb2YgdGVzdC4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXQgdGVzdCB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHlwZSBvZiB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVsZW1fdGVzdCIgcmV0dXJuY29tbWVudD0iRWxlbWVudCB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0ckVsZW1UZXN0IiB0eXBlPSJBdHRyRWxlbVRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RWxlbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RWxlbWVudCB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNjaGVtYV9lbGVtX3Rlc3QiIHJldHVybmNvbW1lbnQ9IlNjaGVtYSBlbGVtZW50IHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdCIgdHlwZT0iU2NoZW1hRWxlbVRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2NoZW1hIGVsZW1lbnQgdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlNjaGVtYSBlbGVtZW50IHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY3JlYXRlVGVzdFR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5hbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzV2lsZCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0WERNQ2xhc3NUeXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik51bWVyaWNMaXRlcmFsIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OdW1lcmljTGl0ZXJhbCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCIgdHlwZT0iRG91YmxlTGl0ZXJhbCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nIGFuIGUgb3IgRSBjaGFyYWN0ZXIgaXMgYW4gYXRvbWljCi0gdmFsdWUgb2YgdHlwZSB4czpkb3VibGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRG91YmxlTGl0ZXJhbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRG91YmxlaXRlcmFsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhbHVlCi0gICAgICAgICAgICBkb3VibGUgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhbHVlIiBjb21tZW50PSJkb3VibGUgdmFsdWUiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0ieHM6ZG91YmxlIHZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlIiB0eXBlPSJYU0RvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eHM6ZG91YmxlIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJBdHRyRWxlbVRlc3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJFbGVtVGVzdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3QiIHR5cGU9IkVsZW1lbnRUZXN0Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIEVsZW1lbnQgdGVzdGluZy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRWxlbWVudFRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDQgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotIHRlc3QodHJ1ZS9mYWxzZSksIHR5cGUgYW5kIHF1ZXN0aW9uIG1hcmsgdGVzdCh0cnVlL2ZhbHNlKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj53aWxkCi0gICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50eXBlCi0gICAgICAgICAgICBUeXBlIG9mIGVsZW1lbnQgdG8gdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnFtYXJrCi0gICAgICAgICAgICBOaWxsZWQgcHJvcGVydHkgKHRydWUvZmFsc2UpLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9IndpbGQiIGNvbW1lbnQ9IldpbGRjYXJkIHRlc3Q/ICh0cnVlL2ZhbHNlKS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZSIgY29tbWVudD0iVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InFtYXJrIiBjb21tZW50PSJOaWxsZWQgcHJvcGVydHkgKHRydWUvZmFsc2UpLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRWxlbWVudFRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDMgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotIHRlc3QodHJ1ZS9mYWxzZSlhbmQgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj53aWxkCi0gICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50eXBlCi0gICAgICAgICAgICBUeXBlIG9mIGVsZW1lbnQgdG8gdGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9Ik5hbWUgb2YgZWxlbWVudCB0byB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ3aWxkIiBjb21tZW50PSJXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9IlR5cGUgb2YgZWxlbWVudCB0byB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRWxlbWVudFRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotIHRlc3QodHJ1ZS9mYWxzZSkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIE5hbWUgb2YgZWxlbWVudCB0byB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+d2lsZAotICAgICAgICAgICAgV2lsZGNhcmQgdGVzdD8gKHRydWUvZmFsc2UpLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmFtZSIgY29tbWVudD0iTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9IndpbGQiIGNvbW1lbnQ9IldpbGRjYXJkIHRlc3Q/ICh0cnVlL2ZhbHNlKS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkVsZW1lbnRUZXN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkRlZmF1bHQgQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InFtYXJrIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2Ygb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IG5pbGxlZCBwcm9wZXJ0eS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY3JlYXRlVGVzdFR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzV2lsZCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0WERNQ2xhc3NUeXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkJpbkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4Y2VwdEV4cHIiIHR5cGU9IkV4Y2VwdEV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgZXhjZXB0IG9wZXJhdG9yIHRha2VzIHR3byBub2RlIHNlcXVlbmNlcyBhcyBvcGVyYW5kcyBhbmQgcmV0dXJucyBhCi0gc2VxdWVuY2UgY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gdGhlIGZpcnN0IG9wZXJhbmQgYnV0IG5vdCBpbgotIHRoZSBzZWNvbmQgb3BlcmFuZC48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRXhjZXB0RXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRXhjZXB0RXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bAotICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yCi0gICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImwiIGNvbW1lbnQ9ImlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InIiIGNvbW1lbnQ9ImlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJYUGF0aE5vZGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBub3JtYWwgZXhwcmVzc2lvbnMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkV4cHIiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJTdGVwRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHIiIHR5cGU9IkZpbHRlckV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIGZpbHRlciBleHByZXNzaW9uIGNvbnNpc3RzIHNpbXBseSBvZiBhIHByaW1hcnkgZXhwcmVzc2lvbiBmb2xsb3dlZCBieSB6ZXJvCi0gb3IgbW9yZSBwcmVkaWNhdGVzLiBUaGUgcmVzdWx0IG9mIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBjb25zaXN0cyBvZiBhbGwgdGhlCi0gaXRlbXMgcmV0dXJuZWQgYnkgdGhlIHByaW1hcnkgZXhwcmVzc2lvbiBmb3Igd2hpY2ggYWxsIHRoZSBwcmVkaWNhdGVzIGFyZQotIHRydWUuIElmIG5vIHByZWRpY2F0ZXMgYXJlIHNwZWNpZmllZCwgdGhlIHJlc3VsdCBpcyBzaW1wbHkgdGhlIHJlc3VsdCBvZiB0aGUKLSBwcmltYXJ5IGV4cHJlc3Npb24uIFRoaXMgcmVzdWx0IG1heSBjb250YWluIG5vZGVzLCBhdG9taWMgdmFsdWVzLCBvciBhbnkKLSBjb21iaW5hdGlvbiBvZiB0aGVzZS4gVGhlIG9yZGVyaW5nIG9mIHRoZSBpdGVtcyByZXR1cm5lZCBieSBhIGZpbHRlcgotIGV4cHJlc3Npb24gaXMgdGhlIHNhbWUgYXMgdGhlaXIgb3JkZXIgaW4gdGhlIHJlc3VsdCBvZiB0aGUgcHJpbWFyeQotIGV4cHJlc3Npb24uIENvbnRleHQgcG9zaXRpb25zIGFyZSBhc3NpZ25lZCB0byBpdGVtcyBiYXNlZCBvbiB0aGVpciBvcmRpbmFsCi0gcG9zaXRpb24gaW4gdGhlIHJlc3VsdCBzZXF1ZW5jZS4gVGhlIGZpcnN0IGNvbnRleHQgcG9zaXRpb24gaXMgMS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRmlsdGVyRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBvZiBGaWx0ZXJFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wZXhwcgotICAgICAgICAgICAgaXMgY29waWVkIHRvIF9wZXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmV4cHJzCi0gICAgICAgICAgICBpcyBjb3BpZWQgdG8gX2V4cHJzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icGV4cHIiIGNvbW1lbnQ9ImlzIGNvcGllZCB0byBfcGV4cHIuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QcmltYXJ5RXhwciIgdHlwZT0iUHJpbWFyeUV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJleHBycyIgY29tbWVudD0iaXMgY29waWVkIHRvIF9leHBycy4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29sbGVjdGlvbiIgdHlwZT0iQ29sbGVjdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmltYXJ5IiByZXR1cm5jb21tZW50PSJUaGUgcHJpbWFyeSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiIHR5cGU9IlByaW1hcnlFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkdldCB0aGUgcHJpbWFyeSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIHByaW1hcnkgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iVGhlIG5leHQgcHJlZGljYXRlLiIgZnVsbHR5cGU9ImphdmEudXRpbC5JdGVyYXRvciIgdHlwZT0iSXRlcmF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+R2V0IHRoZSBuZXh0IHByZWRpY2F0ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBuZXh0IHByZWRpY2F0ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfcHJpbWFyeSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGEgbmV3IHByaW1hcnkgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZQotICAgICAgICAgICAgaXMgc2V0IGFzIHRoZSBuZXcgcHJpbWFyeSBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iaXMgc2V0IGFzIHRoZSBuZXcgcHJpbWFyeSBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiIHR5cGU9IlByaW1hcnlFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJlZGljYXRlX2NvdW50IiByZXR1cm5jb21tZW50PSJUaGUgc2l6ZSBvZiB0aGUgY29sbGVjdGlvbiBvZiBwcmVkaWNhdGVzLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvdW50IHRoZSBudW1iZXIgb2YgcHJlZGljYXRlcy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBzaXplIG9mIHRoZSBjb2xsZWN0aW9uIG9mIHByZWRpY2F0ZXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJFeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByIiB0eXBlPSJGb3JFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIHRoZSBGb3IgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRm9yRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRm9yRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dmFyZXhwCi0gICAgICAgICAgICBFeHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnJldAotICAgICAgICAgICAgUmV0dXJuIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YXJleHAiIGNvbW1lbnQ9IkV4cHJlc3Npb25zLiIgZnVsbHR5cGU9ImphdmEudXRpbC5Db2xsZWN0aW9uIiB0eXBlPSJDb2xsZWN0aW9uIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0icmV0IiBjb21tZW50PSJSZXR1cm4gZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlcmF0b3IiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS51dGlsLkl0ZXJhdG9yIiB0eXBlPSJJdGVyYXRvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImV4cHIiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgRXhwciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X2V4cHIiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBFeHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBFeHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iRXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0cnVuY2F0ZV9wYWlycyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Tm9ybWFsaXphdGlvbiBvZiBleHByZXNzaW9uIHBhaXJzLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmVfcGFpcnMiIHJldHVybmNvbW1lbnQ9IkV4cHJlc3Npb24gcGFpcnMuIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5FeHByZXNzaW9uIHBhaXJzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iU3RlcCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yd2FyZFN0ZXAiIHR5cGU9IkZvcndhcmRTdGVwIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIEZvcndhcmQgc3RlcHBpbmcgc3VwcG9ydCBmb3IgU3RlcCBvcGVyYXRpb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMCIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOT05FIiBjb25zdGV4cHI9IjAiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5PTkUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkNISUxEIiBjb25zdGV4cHI9IjEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIENISUxELjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJERVNDRU5EQU5UIiBjb25zdGV4cHI9IjIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIERFU0NFTkRBTlQuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFUVFJJQlVURSIgY29uc3RleHByPSIzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBBVFRSSUJVVEUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNFTEYiIGNvbnN0ZXhwcj0iNCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU0VMRi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iREVTQ0VOREFOVF9PUl9TRUxGIiBjb25zdGV4cHI9IjUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIERFU0NFTkRBTlRfT1JfU0VMRi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjYiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRk9MTE9XSU5HX1NJQkxJTkciIGNvbnN0ZXhwcj0iNiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRk9MTE9XSU5HX1NJQkxJTkcuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI3IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkZPTExPV0lORyIgY29uc3RleHByPSI3IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBGT0xMT1dJTkcuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI4IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik5BTUVTUEFDRSIgY29uc3RleHByPSI4IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBOQU1FU1BBQ0UuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSI5IiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFUX1NZTSIgY29uc3RleHByPSI5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBBVF9TWU0uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJGb3J3YXJkU3RlcCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgRm9yd2FyZFN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF4aXMKLSAgICAgICAgICAgIEF4aXMgbnVtYmVyLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZV90ZXN0Ci0gICAgICAgICAgICBOb2RlIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJheGlzIiBjb21tZW50PSJBeGlzIG51bWJlci4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGVfdGVzdCIgY29tbWVudD0iTm9kZSB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QiIHR5cGU9Ik5vZGVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImF4aXMiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBBeGlzIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBBeGlzIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBBeGlzIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfYXhpcyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IEF4aXMgdG8gY3VycmVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXhpcwotICAgICAgICAgICAgQXhpcyB0byBzZXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJheGlzIiBjb21tZW50PSJBeGlzIHRvIHNldC4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdG9yIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpcyIgdHlwZT0iRm9yd2FyZEF4aXMiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlByaW1hcnlFeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QcmltYXJ5RXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIiB0eXBlPSJGdW5jdGlvbkNhbGwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgRnVuY3Rpb24gQ2FsbCBzdXBwb3J0LjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJGdW5jdGlvbkNhbGwiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEZ1bmN0aW9uQ2FsbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgUU5hbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmdzCi0gICAgICAgICAgICBDb2xsZWN0aW9uIG9mIGFyZ3VtZW50cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5hbWUiIGNvbW1lbnQ9IlFOYW1lLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmdzIiBjb21tZW50PSJDb2xsZWN0aW9uIG9mIGFyZ3VtZW50cy4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29sbGVjdGlvbiIgdHlwZT0iQ29sbGVjdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuSXRlcmF0b3IiIHR5cGU9Ikl0ZXJhdG9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYXJpdHkiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBBcml0eSBvcGVyYXRpb24uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgQXJpdHkgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIEFyaXR5IG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkJpbkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklEaXZFeHByIiB0eXBlPSJJRGl2RXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEludGVnZXIgZGl2aXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IklEaXZFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBJRGl2RXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bAotICAgICAgICAgICAgbGVmdCB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIHJpZ2h0IHZhbHVlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0ibGVmdCB2YWx1ZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJyaWdodCB2YWx1ZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJFeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIiIHR5cGU9IklmRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIElGIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJZkV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIElmRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXhwcwotICAgICAgICAgICAgQ29uZGl0aW9uIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dAotICAgICAgICAgICAgSWYgdHJ1ZSBleHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmUKLSAgICAgICAgICAgIElmIGZhbHNlL2Vsc2UgZXhwcmVzc2lvbnMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJleHBzIiBjb21tZW50PSJDb25kaXRpb24gZXhwcmVzc2lvbnMuIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0IiBjb21tZW50PSJJZiB0cnVlIGV4cHJlc3Npb25zLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGNvbW1lbnQ9IklmIGZhbHNlL2Vsc2UgZXhwcmVzc2lvbnMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Iml0ZXJhdG9yIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEudXRpbC5JdGVyYXRvciIgdHlwZT0iSXRlcmF0b3IiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aGVuX2NsYXVzZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbHNlX2NsYXVzZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkJpbkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkJpbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHIiIHR5cGU9Ikluc3RPZkV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgYm9vbGVhbiBvcGVyYXRvciAmYXBvcztpbnN0YW5jZSBvZiZhcG9zOyB0YWtlcyB0aGUgdmFsdWUgb2YgaXRzIGZpcnN0IG9wZXJhbmQgYW5kCi0gbWF0Y2hlcyBpdHMgdHlwZSB0byB0aGUgU2VxdWVuY2VUeXBlIGluIGl0cyBzZWNvbmQgb3BlcmFuZCwgYWNjb3JkaW5nIHRvIHRoZQotIHJ1bGVzIGZvciBTZXF1ZW5jZVR5cGUgbWF0Y2hpbmcuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ikluc3RPZkV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEluc3RPZkV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmwKLSAgICAgICAgICAgIGlucHV0IHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yCi0gICAgICAgICAgICBTZXF1ZW5jZVR5cGUgdG8gY2hlY2sgbCBhZ2FpbnN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0iaW5wdXQgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJTZXF1ZW5jZVR5cGUgdG8gY2hlY2sgbCBhZ2FpbnN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIiB0eXBlPSJTZXF1ZW5jZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOdW1lcmljTGl0ZXJhbCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTnVtZXJpY0xpdGVyYWwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVnZXJMaXRlcmFsIiB0eXBlPSJJbnRlZ2VyTGl0ZXJhbCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nIG5vICZxdW90Oy4mcXVvdDsgYW5hZCBubyBlIG9yIEUgY2hhcmFjdGVyIGlzCi0gYW4gYXRvbWljIHZhbHVlIG9mIHR5cGUgeHM6aW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJJbnRlZ2VyTGl0ZXJhbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgSW50ZWdlckxpdGVyYWw8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aQotICAgICAgICAgICAgaW50ZWdlciB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaSIgY29tbWVudD0iaW50ZWdlciB2YWx1ZSIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJ4czppbnRlZ2VyIHZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIgdHlwZT0iWFNJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54czppbnRlZ2VyIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByIiB0eXBlPSJJbnRlcnNlY3RFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+VGhlIGludGVyc2VjdCBvcGVyYXRvciB0YWtlcyB0d28gbm9kZSBzZXF1ZW5jZXMgYXMgb3BlcmFuZHMgYW5kIHJldHVybnMgYQotIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIHRoZSBub2RlcyB0aGF0IG9jY3VyIGluIGJvdGggb3BlcmFuZHMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkludGVyc2VjdEV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEludGVyc2VjdEV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmwKLSAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aE5vZGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUiIHR5cGU9Ikl0ZW1UeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgSXRlbSBub2RlIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IklURU0iIGNvbnN0ZXhwcj0iMCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgSVRFTS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUU5BTUUiIGNvbnN0ZXhwcj0iMSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUU5BTUUuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IktJTkRURVNUIiBjb25zdGV4cHI9IjIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEtJTkRURVNULjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iSXRlbVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIEl0ZW1UeXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50eXBlCi0gICAgICAgICAgICBUeXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dmFsdWUKLSAgICAgICAgICAgIE9iamVjdCB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9IlR5cGUuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YWx1ZSIgY29tbWVudD0iT2JqZWN0IHZhbHVlLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVHlwZSBvcGVyYXRpb24uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVHlwZSBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVHlwZSBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icW5hbWUiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImtpbmRfdGVzdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEtpbmRUZXN0IG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0IiB0eXBlPSJLaW5kVGVzdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IEtpbmRUZXN0IGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBLaW5kVGVzdCBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iTm9kZVRlc3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5vZGVUZXN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdCIgdHlwZT0iS2luZFRlc3QiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgS2luZFRlc3Qgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJLaW5kVGVzdCIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY3JlYXRlVGVzdFR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNXaWxkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0WERNQ2xhc3NUeXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJQcmltYXJ5RXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkxpdGVyYWwiIHR5cGU9IkxpdGVyYWwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5MaXRlcmFsIGlzIGVpdGhlciBhIE51bWVyaWNMaXRlcmFsIG9yIGEgU3RyaW5nTGl0ZXJhbDwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMaXRlcmFsIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iVW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwciIgdHlwZT0iTWludXNFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIE1pbnVzIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJNaW51c0V4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIE1pbnVzRXhwcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJhcmd1bWVudCBleHByZXNzaW9ucy4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByIiB0eXBlPSJNb2RFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgZm9yIE1vZHVsYXIgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJNb2RFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBNb2RFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0iaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iciIgY29tbWVudD0iaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQmluRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTXVsRXhwciIgdHlwZT0iTXVsRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBNdWx0aXBseSBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik11bEV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIE11bEV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmwKLSAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVGVzdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5hbWVUZXN0IiB0eXBlPSJOYW1lVGVzdCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBOYW1lIHRlc3Qgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOYW1lVGVzdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgTmFtZVRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5hbWUKLSAgICAgICAgICAgIFFOYW1lIHRvIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJRTmFtZSB0byB0ZXN0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmFtZSIgcmV0dXJuY29tbWVudD0iUmVzdWxmIG9mIFFOYW1lIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsZiBvZiBRTmFtZSBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iWFBhdGhOb2RlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5vZGVUZXN0IiB0eXBlPSJOb2RlVGVzdCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBOb2RlIHRlc3Qgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJOb2RlVGVzdCIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJMaXRlcmFsIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5MaXRlcmFsIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OdW1lcmljTGl0ZXJhbCIgdHlwZT0iTnVtZXJpY0xpdGVyYWwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5OdW1lcmljTGl0ZXJhbCBpcyBhIHZhbHVlIG9mIHR5cHBlIHhzOmludGVnZXIsIHhzOmRlY2ltYWwgb3IgeHM6ZG91YmxlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik51bWVyaWNMaXRlcmFsIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQmluRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIiB0eXBlPSJPckV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgT3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJPckV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIE9yRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bAotICAgICAgICAgICAgbGVmdCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgcmlnaHQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImwiIGNvbW1lbnQ9ImxlZnQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJyaWdodCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bGYgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWxmIG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IktpbmRUZXN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0IiB0eXBlPSJQSVRlc3QiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbiBzdXBwb3J0LjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJQSVRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFBJVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBpbnN0cnVjdGlvbiBhcmd1bWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iaW5zdHJ1Y3Rpb24gYXJndW1lbnQuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlBJVGVzdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5EZWZhdWx0IENvbnN0cnVjdG9yIGZvciBQSVRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYXJnIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgU3RyaW5nIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgU3RyaW5nIGFyZ3VtZW50cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBTdHJpbmcgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZVRlc3RUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc1dpbGQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldFhETUNsYXNzVHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJQcmltYXJ5RXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBhckV4cHIiIHR5cGU9IlBhckV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgcGFyZXRoZXNpemVkIGV4cHJlc3Npb25zIHN1cHBvcnQuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlBhckV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFBhckV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmV4cHJzCi0gICAgICAgICAgICBFeHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV4cHJzIiBjb21tZW50PSJFeHByZXNzaW9ucy4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29sbGVjdGlvbiIgdHlwZT0iQ29sbGVjdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuSXRlcmF0b3IiIHR5cGU9Ikl0ZXJhdG9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwciIgdHlwZT0iUGlwZUV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgUGlwZWQgZXhwcmVzc2lvbnMgc3VwcG9ydC48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUGlwZUV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFBpcGVFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBMZWZ0IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yCi0gICAgICAgICAgICBSaWdodCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibCIgY29tbWVudD0iTGVmdCBleHByZXNzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InIiIGNvbW1lbnQ9IlJpZ2h0IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iVW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByIiB0eXBlPSJQbHVzRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBQbHVzIGV4cHJlc3Npb24gc3VwcG9ydC48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUGx1c0V4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFBsdXNFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIEFyZ3VtZW50cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iQXJndW1lbnRzLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJYUGF0aE5vZGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiIHR5cGU9IlByaW1hcnlFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgQmFzaWMgcHJpbWl0aXZlIGxhbmd1YWdlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJQcmltYXJ5RXhwciIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByIiB0eXBlPSJRdWFudGlmaWVkRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFF1YW50aWZpZWQgZXhwcmVzc2lvbnMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNPTUUiIGNvbnN0ZXhwcj0iMCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU09NRS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQUxMIiBjb25zdGV4cHI9IjEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFMTC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCTwvZmllbGRzPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlF1YW50aWZpZWRFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBRdWFudGlmaWVkRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZQotICAgICAgICAgICAgVHlwZSAoMCBmb3IgU09NRSwgMSBmb3IgQUxMKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnZhcmV4cAotICAgICAgICAgICAgRXhwcmVzc2lvbnMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yZXQKLSAgICAgICAgICAgIFJldHVybmVkIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlIiBjb21tZW50PSJUeXBlICgwIGZvciBTT01FLCAxIGZvciBBTEwpLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idmFyZXhwIiBjb21tZW50PSJFeHByZXNzaW9ucy4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ29sbGVjdGlvbiIgdHlwZT0iQ29sbGVjdGlvbiIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InJldCIgY29tbWVudD0iUmV0dXJuZWQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZSIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEludCBvcGVyYXRpb24uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgSW50ZWdlciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgSW50IG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpdGVyYXRvciIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLnV0aWwuSXRlcmF0b3IiIHR5cGU9Ikl0ZXJhdG9yIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHByIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9leHByIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgbmV4dCBleHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5lCi0gICAgICAgICAgICBFeHByZXNzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgY29tbWVudD0iRXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0cnVuY2F0ZV9wYWlycyIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Tm9ybWFsaXphdGlvbiBvZiBleHByZXNzaW9uIHBhaXJzLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmVfcGFpcnMiIHJldHVybmNvbW1lbnQ9IkV4cHJlc3Npb24gcGFpcnMuIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5FeHByZXNzaW9uIHBhaXJzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQmluRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByIiB0eXBlPSJSYW5nZUV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBSYW5nZSBleHByZXNzaW9ucy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUmFuZ2VFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBSYW5nZUV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmwKLSAgICAgICAgICAgIGxlZnQgZXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnIKLSAgICAgICAgICAgIHJpZ2h0IGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJsZWZ0IGV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iciIgY29tbWVudD0icmlnaHQgZXhwcmVzc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJTdGVwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCIgdHlwZT0iUmV2ZXJzZVN0ZXAiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgUmV2ZXJzZSBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIwIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlBBUkVOVCIgY29uc3RleHByPSIwIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBQQVJFTlQuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFOQ0VTVE9SIiBjb25zdGV4cHI9IjEiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFOQ0VTVE9SLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iMiIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJQUkVDRURJTkdfU0lCTElORyIgY29uc3RleHByPSIyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkdfU0lCTElORy48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjMiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUFJFQ0VESU5HIiBjb25zdGV4cHI9IjMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFBSRUNFRElORy48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQU5DRVNUT1JfT1JfU0VMRiIgY29uc3RleHByPSI0IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBBTkNFU1RPUl9PUl9TRUxGLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iNSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJET1RET1QiIGNvbnN0ZXhwcj0iNSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRE9URE9ULjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUmV2ZXJzZVN0ZXAiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFJldmVyc2VTdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5heGlzCi0gICAgICAgICAgICBBeGlzIG51bWJlci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGVfdGVzdAotICAgICAgICAgICAgTm9kZSB0ZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXhpcyIgY29tbWVudD0iQXhpcyBudW1iZXIuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlX3Rlc3QiIGNvbW1lbnQ9Ik5vZGUgdGVzdC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5vZGVUZXN0IiB0eXBlPSJOb2RlVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJheGlzIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgQXhpcyBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlcmF0b3IiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJldmVyc2VBeGlzIiB0eXBlPSJSZXZlcnNlQXhpcyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iS2luZFRlc3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFBdHRyVGVzdCIgdHlwZT0iU2NoZW1hQXR0clRlc3QiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBTY2hlbWEgQXR0cmlidXRlIHRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNjaGVtYUF0dHJUZXN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBTY2hlbWFBdHRyVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBRTmFtZSBhcmd1bWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iUU5hbWUgYXJndW1lbnQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhcmciIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNyZWF0ZVRlc3RUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc1dpbGQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldFhETUNsYXNzVHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJLaW5kVGVzdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuS2luZFRlc3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IiB0eXBlPSJTY2hlbWFFbGVtVGVzdCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFNjaGVtYSBFbGVtZW50IFRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNjaGVtYUVsZW1UZXN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBTY2hlbWFFbGVtVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBRTmFtZSBhcmd1bWVudC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iUU5hbWUgYXJndW1lbnQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuYW1lIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjcmVhdGVUZXN0VHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNXaWxkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRYRE1DbGFzc1R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFBhdGhOb2RlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZSIgdHlwZT0iU2VxdWVuY2VUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgU2VxdWVuY2UgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxmaWVsZHM+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjAiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRU1QVFkiIGNvbnN0ZXhwcj0iMCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRU1QVFkuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIxIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik5PTkUiIGNvbnN0ZXhwcj0iMSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjIiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUVVFU1RJT04iIGNvbnN0ZXhwcj0iMiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUVVFU1RJT04uPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSIzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlNUQVIiIGNvbnN0ZXhwcj0iMyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU1RBUi48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvZmllbGQ+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IjQiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUExVUyIgY29uc3RleHByPSI0IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0IGludGVybmFsIHZhbHVlIGZvciBQTFVTLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9maWVsZD4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU2VxdWVuY2VUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBTZXF1ZW5jZVR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm9jYwotICAgICAgICAgICAgT2NjdXJlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aXQKLSAgICAgICAgICAgIEl0ZW0gdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im9jYyIgY29tbWVudD0iT2NjdXJlbmNlLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iaXQiIGNvbW1lbnQ9Ikl0ZW0gdHlwZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkl0ZW1UeXBlIiB0eXBlPSJJdGVtVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJvY2N1cnJlbmNlIiByZXR1cm5jb21tZW50PSJSZXN1bHQgZnJvbSBJbnQgb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkdldCBvY2N1cmVuY2Ugb2YgaXRlbS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBmcm9tIEludCBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXRlbV90eXBlIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgSXRlbVR5cGUgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUiIHR5cGU9Ikl0ZW1UeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEl0ZW1UeXBlIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBJdGVtVHlwZSBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYUGF0aE5vZGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZSIgdHlwZT0iU2luZ2xlVHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFNpbmdsZSB0eXBlcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU2luZ2xlVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgU2luZ2xlVHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZQotICAgICAgICAgICAgUU5hbWUgdHlwZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnFtYXJrCi0gICAgICAgICAgICBvcHRpb25hbCB0eXBlPyAodHJ1ZS9mYWxzZSkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlIiBjb21tZW50PSJRTmFtZSB0eXBlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJxbWFyayIgY29tbWVudD0ib3B0aW9uYWwgdHlwZT8gKHRydWUvZmFsc2UpLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU2luZ2xlVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5EZWZhdWx0IENvbnN0cnVjdG9yIGZvciBTaW5nbGVUeXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJxbWFyayIgcmV0dXJuY29tbWVudD0ib3B0aW9uYWwgdHlwZSB2YWx1ZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldCBvcHRpb25hbCB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+b3B0aW9uYWwgdHlwZSB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJYUGF0aE5vZGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCIgdHlwZT0iU3RlcCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFN0ZXAgb3BlcmF0aW9ucy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RlcCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgU3RlcC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZV90ZXN0Ci0gICAgICAgICAgICBOb2RlcyBmb3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZV90ZXN0IiBjb21tZW50PSJOb2RlcyBmb3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QiIHR5cGU9Ik5vZGVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX3Rlc3QiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBOb2RlVGVzdCBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Ob2RlVGVzdCIgdHlwZT0iTm9kZVRlc3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgTm9kZVRlc3QgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIE5vZGVUZXN0IG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJFeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwRXhwciIgdHlwZT0iU3RlcEV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBTdGVwIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTdGVwRXhwciIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkxpdGVyYWwiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkxpdGVyYWwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwiIHR5cGU9IlN0cmluZ0xpdGVyYWwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGUgdmFsdWUgb2YgYSBzdHJpbmcgbGl0ZXJhbCBpcyBhbiBhdG9taWMgdmFsdWUgd2hvc2UgdHlwZSBpcyB4czpzdHJpbmcgYW5kCi0gd2hvc2UgdmFsdWUgaXMgdGhlIHN0cmluZyBkZW5vdGVkIGJ5IHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGRlbGltaXRpbmcKLSBhcG9zdHJvcGhlcyBvciBxdW90YXRpb24gbWFya3MuIElmIHRoZSBsaXRlcmFsIGlzIGRlbGltaXRlZCBieSBhcG9zdHJvcGhlcywKLSB0d28gYWRqYWNlbnQgYXBvc3Ryb3BoZXMgd2l0aGluIHRoZSBsaXRlcmFsIGFyZSBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZQotIGFwb3N0cm9waGUuIFNpbWlsYXJseSwgaWYgdGhlIGxpdGVyYWwgaXMgZGVsaW1pdGVkIGJ5IHF1b3RhdGlvbiBtYXJrcywgdHdvCi0gYWRqYWNlbnQgcXVvdGF0aW9uIG1hcmtzIHdpdGhpbiB0aGUgbGl0ZXJhbCBhcmUgaW50ZXJwcmV0ZWQgYXMgb25lIHF1b3RhdGlvbgotIG1hcms8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU3RyaW5nTGl0ZXJhbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgU3RyaW5nTGl0ZXJhbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52YWx1ZQotICAgICAgICAgICAgc3RyaW5nIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YWx1ZSIgY29tbWVudD0ic3RyaW5nIHZhbHVlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZyIgcmV0dXJuY29tbWVudD0ic3RyaW5nIHZhbHVlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHJpbmcgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0ieHM6c3RyaW5nIHZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nIiB0eXBlPSJYU1N0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eHM6c3RyaW5nIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByIiB0eXBlPSJTdWJFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgU3VidHJhY3Rpb24gb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTdWJFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBTdWJFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sCi0gICAgICAgICAgICBsZWZ0IGlucHV0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgcmlnaHQgaW5wdXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJsZWZ0IGlucHV0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InIiIGNvbW1lbnQ9InJpZ2h0IGlucHV0LiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IktpbmRUZXN0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVGV4dFRlc3QiIHR5cGU9IlRleHRUZXN0Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+Q2xhc3MgdG8gbWF0Y2ggYW55IHRleHQgbm9kZS48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVGV4dFRlc3QiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIiB0eXBlPSJYUGF0aFZpc2l0b3IiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjcmVhdGVUZXN0VHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNXaWxkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRYRE1DbGFzc1R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQmluRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIiIHR5cGU9IlRyZWF0QXNFeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVHJlYXQgb3BlcmF0aW9uLiBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQsCi0gcmF0aGVyIGl0IGVuc3VlcyB0aGUgb3BlcmFuZCBoYXMgYSBjb3JyZWN0IHR5cGUgYXQgZXZhbHVhdGlvbiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJUcmVhdEFzRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgVHJlYXRBc0V4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmwKLSAgICAgICAgICAgIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5yCi0gICAgICAgICAgICBTZXF1ZW5jZVR5cGUgdG8gdHJlYXQgYXMuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJ4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgdHlwZT0iRXhwciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InIiIGNvbW1lbnQ9IlNlcXVlbmNlVHlwZSB0byB0cmVhdCBhcy4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZSIgdHlwZT0iU2VxdWVuY2VUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9IkV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwciIgdHlwZT0iVW5FeHByIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVW5hcnkgZXhwcmVzc2lvbnMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlVuRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RvciBmb3IgVW5FeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIGV4cHJlc3Npb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9ImV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhcmciIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJCaW5FeHByIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbmlvbkV4cHIiIHR5cGU9IlVuaW9uRXhwciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlRoZSB1bmlvbiBjbGFzcyB0YWtlcyB0d28gbm9kZSBzZXF1ZW5jZXMgYXMgb3BlcmFuZHMgYW5kIHJldHVybiBhIHNlcXVlbmNlCi0gY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gZWl0aGVyIG9mIHRoZSBvcGVyYW5kcy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVW5pb25FeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbnN0cnVjdG9yIGZvciBVbmlvbkV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmwKLSAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cgotICAgICAgICAgICAgdW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsIiBjb21tZW50PSJpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJyIiBjb21tZW50PSJ1bnB1dDIgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiIHR5cGU9IkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJFeHByUGFpciIgdHlwZT0iVmFyRXhwclBhaXIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5DbGFzcyBmb3IgVmFyaWFibGUgRXhwcmVzc2lvbiBQYWlycy48L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVmFyRXhwclBhaXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFZhckV4cHJQYWlyLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52YXIKLSAgICAgICAgICAgIFFOYW1lIHZhcmlhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+ZXhwcgotICAgICAgICAgICAgRXhwcmVzc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhciIgY29tbWVudD0iUU5hbWUgdmFyaWFibGUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV4cHIiIGNvbW1lbnQ9IkV4cHJlc3Npb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YXJuYW1lIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJleHByIiByZXR1cm5jb21tZW50PSJSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByIiB0eXBlPSJFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iUHJpbWFyeUV4cHIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlByaW1hcnlFeHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYiIHR5cGU9IlZhclJlZiI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZhcmlhYmxlIFJlZmVyZW5jZS4gQSBRTmFtZSBwcmVjZWRlZCBieSBhICQtc2lnbiBpcyBhIHZhcmlhYmxlCi0gcmVmZXJlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJWYXJSZWYiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29uc3RydWN0b3IgZm9yIFZhclJlZi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmFtZQotICAgICAgICAgICAgUU5hbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuYW1lIiBjb21tZW50PSJRTmFtZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhY2NlcHQiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5hbWUiIHJldHVybmNvbW1lbnQ9IlJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5SZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iRXhwciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0IiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByIiB0eXBlPSJYUGF0aEV4cHIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5QYXRoIGV4cHJlc3Npb24gd2Fsa3MgdHJpZXMgdG8gd2FsayB0aGUgcGF0aCBzcGVjaWZpZWQgaW4gaXRzIGFyZ3VtZW50PC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhQYXRoRXhwciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zbGFzaGVzCi0gICAgICAgICAgICBpcyBjb3BpZWQgdG8gX3NsYXNoZXM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmV4cHIKLSAgICAgICAgICAgIGlzIGNvcGllZCB0byBfZXhwciBfbmV4dCBpcyBtYWRlIG51bGwgYXMgYSByZXN1bHQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzbGFzaGVzIiBjb21tZW50PSJpcyBjb3BpZWQgdG8gX3NsYXNoZXMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImV4cHIiIGNvbW1lbnQ9ImlzIGNvcGllZCB0byBfZXhwciBfbmV4dCBpcyBtYWRlIG51bGwgYXMgYSByZXN1bHQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwRXhwciIgdHlwZT0iU3RlcEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFjY2VwdCIgcmV0dXJuY29tbWVudD0iUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLiIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvciIgdHlwZT0iWFBhdGhWaXNpdG9yIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWRkX3RhaWwiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkFkZCB0byB0YWlsIG9mIHBhdGg8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic2xhc2hlcyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iZXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIiIHR5cGU9IlN0ZXBFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X3NsYXNoZXMiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNvdW50Ci0gICAgICAgICAgICBpcyBjb3BpZWQgdG8gX3NsYXNoZXM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvdW50IiBjb21tZW50PSJpcyBjb3BpZWQgdG8gX3NsYXNoZXMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5leHQiIHJldHVybmNvbW1lbnQ9IlhQYXRoIGV4cHJlc3Npb24gX25leHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciIgdHlwZT0iWFBhdGhFeHByIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5YUGF0aCBleHByZXNzaW9uIF9uZXh0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2V0X25leHQiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPmFuIFhQYXRoIGV4cHJlc3Npb24sIG4gaXMgY29waWVkIHRvIF9uZXh0PC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciIgdHlwZT0iWFBhdGhFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXhwciIgcmV0dXJuY29tbWVudD0iU3RlcCBleHByZXNzaW9uIF9leHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwRXhwciIgdHlwZT0iU3RlcEV4cHIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0ZXAgZXhwcmVzc2lvbiBfZXhwcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNsYXNoZXMiIHJldHVybmNvbW1lbnQ9ImludCBfc2xhc2hlcyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pbnQgX3NsYXNoZXM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUiIHR5cGU9IlhQYXRoTm9kZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNsYXNzIGZvciBhIFhQYXRoTm9kZSBvYmplY3QuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhQYXRoTm9kZSIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWNjZXB0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdCIgaW50ZXJmYWNlPSJ0cnVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IiIHR5cGU9IlhQYXRoVmlzaXRvciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlZpc2l0b3IgY2xhc3MgZm9yIFhQYXRoIGV4cHJlc3Npb25zLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgWFBhdGguPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InhwIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCIgdHlwZT0iWFBhdGgiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBGb3JFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJmZXgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvckV4cHIiIHR5cGU9IkZvckV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBRdWFudGlmaWVkRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icWV4IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5RdWFudGlmaWVkRXhwciIgdHlwZT0iUXVhbnRpZmllZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBJZkV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImlmZXgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwciIgdHlwZT0iSWZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgT3JFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJvcmV4IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHIiIHR5cGU9Ik9yRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IEFuZEV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFuZGV4IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByIiB0eXBlPSJBbmRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgQ21wRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY21wZXgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNtcEV4cHIiIHR5cGU9IkNtcEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBSYW5nZUV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJleCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByIiB0eXBlPSJSYW5nZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBBZGRFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhZGRleCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciIgdHlwZT0iQWRkRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IFN1YkV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN1YmV4IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByIiB0eXBlPSJTdWJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgTXVsRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk11bEV4cHIiIHR5cGU9Ik11bEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBEaXZFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGl2RXhwciIgdHlwZT0iRGl2RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IElEaXZFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJtdWxleCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIiIHR5cGU9IklEaXZFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgTW9kRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibXVsZXgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHIiIHR5cGU9Ik1vZEV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBVbmlvbkV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InVuZXgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwciIgdHlwZT0iVW5pb25FeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgUGlwZUV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InBpcGV4IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwciIgdHlwZT0iUGlwZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBJbnRlcnNlY3RFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpZXhwciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZXJzZWN0RXhwciIgdHlwZT0iSW50ZXJzZWN0RXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IEV4Y2VwdEV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImVleHByIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByIiB0eXBlPSJFeGNlcHRFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgSW5zdE9mRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iaW9leHAiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHIiIHR5cGU9Ikluc3RPZkV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBUcmVhdEFzRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idGFleHAiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByIiB0eXBlPSJUcmVhdEFzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IENhc3RhYmxlRXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2V4cCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByIiB0eXBlPSJDYXN0YWJsZUV4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBDYXN0RXhwci48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2V4cCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHIiIHR5cGU9IkNhc3RFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgTWludXNFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NaW51c0V4cHIiIHR5cGU9Ik1pbnVzRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IFBsdXNFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwciIgdHlwZT0iUGx1c0V4cHIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBYUGF0aEV4cHIuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwciIgdHlwZT0iWFBhdGhFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgRm9yd2FyZFN0ZXAuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwIiB0eXBlPSJGb3J3YXJkU3RlcCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IFJldmVyc2VTdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCIgdHlwZT0iUmV2ZXJzZVN0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBOYW1lVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTmFtZVRlc3QiIHR5cGU9Ik5hbWVUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgVmFyUmVmLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYiIHR5cGU9IlZhclJlZiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IFN0cmluZ0xpdGVyYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwiIHR5cGU9IlN0cmluZ0xpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBJbnRlZ2VyTGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZWdlckxpdGVyYWwiIHR5cGU9IkludGVnZXJMaXRlcmFsIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgRG91YmxlTGl0ZXJhbC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbCIgdHlwZT0iRG91YmxlTGl0ZXJhbCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IERlY2ltYWxMaXRlcmFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbCIgdHlwZT0iRGVjaW1hbExpdGVyYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBQYXJFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByIiB0eXBlPSJQYXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgQ250eEl0ZW1FeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIiIHR5cGU9IkNudHhJdGVtRXhwciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IEZ1bmN0aW9uQ2FsbC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsIiB0eXBlPSJGdW5jdGlvbkNhbGwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBTaW5nbGVUeXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlIiB0eXBlPSJTaW5nbGVUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgU2VxdWVuY2VUeXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUiIHR5cGU9IlNlcXVlbmNlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IEl0ZW1UeXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZSIgdHlwZT0iSXRlbVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBBbnlLaW5kVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW55S2luZFRlc3QiIHR5cGU9IkFueUtpbmRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgRG9jdW1lbnRUZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3QiIHR5cGU9IkRvY3VtZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IFRleHRUZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCIgdHlwZT0iVGV4dFRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBDb21tZW50VGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3QiIHR5cGU9IkNvbW1lbnRUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgUElUZXN0LjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3QiIHR5cGU9IlBJVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IEF0dHJpYnV0ZVRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJpYnV0ZVRlc3QiIHR5cGU9IkF0dHJpYnV0ZVRlc3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBTY2hlbWFBdHRyVGVzdC48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QiIHR5cGU9IlNjaGVtYUF0dHJUZXN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmlzaXQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VmlzaXQgRWxlbWVudFRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0IiB0eXBlPSJFbGVtZW50VGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IFNjaGVtRWxlbVRlc3QuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0IiB0eXBlPSJTY2hlbWFFbGVtVGVzdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZpc2l0IiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlZpc2l0IEF4aXNTdGVwLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCIgdHlwZT0iQXhpc1N0ZXAiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2aXNpdCIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5WaXNpdCBGaWx0ZXJFeHByLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByIiB0eXBlPSJGaWx0ZXJFeHByIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iQW55U2ltcGxlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVNpbXBsZVR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNvbW1vbiBiYXNlIGZvciBldmVyeSBhdG9taWMgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJBbnlBdG9taWNUeXBlIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9IkFueVR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVNpbXBsZVR5cGUiIHR5cGU9IkFueVNpbXBsZVR5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5Db21tb24gYmFzZSBmb3IgZXZlcnkgc2ltcGxlIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQW55U2ltcGxlVHlwZSIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIGFic3RyYWN0PSJ0cnVlIiBzdXBlcmNsYXNzPSJPYmplY3QiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkNvbW1vbiBiYXNlIGZvciBldmVyeSB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkFueVR5cGUiIC8+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSJEYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IkRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkF0dHJUeXBlIiB0eXBlPSJBdHRyVHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIEF0dHJpYnV0ZVR5cGUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQXR0clR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gbnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkF0dHJUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj52Ci0gICAgICAgICAgICBUaGUgYXR0cmlidXRlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBjb21tZW50PSJUaGUgYXR0cmlidXRlIGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uQXR0ciIgdHlwZT0iQXR0ciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2F0dHJpYnV0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7YXR0cmlidXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZWRfdmFsdWUiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV9uYW1lIiByZXR1cm5jb21tZW50PSJOYW1lIG9mIHRoZSBub2RlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5hbWUgb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJpc0F0dHJUeXBlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVOYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlIiB0eXBlPSJDYWxlbmRhclR5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5Db21tb24gYmFzZSBmb3IgYWxsIENhbGVuZGFyIGJhc2VkIGNsYXNzZXM8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ2FsZW5kYXJUeXBlIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vcm1hbGl6ZUNhbGVuZGFyIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNhbCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0aW1lem9uZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNHRGF0YVR5cGUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYWF0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik5vZGVUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ29tbWVudFR5cGUiIHR5cGU9IkNvbW1lbnRUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ29tbWVudFR5cGUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ29tbWVudFR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZSBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dgotICAgICAgICAgICAgVGhlIGNvbW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InYiIGNvbW1lbnQ9IlRoZSBjb21tZW50IGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uQ29tbWVudCIgdHlwZT0iQ29tbWVudCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2NvbW1lbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2NvbW1lbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgY29tbWVudCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9Im51bGwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlVuc3VwcG9ydGVkIG1ldGhvZCBmb3IgdGhpcyBub2RlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSUQiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImlzSURSRUYiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9IkFueUF0b21pY1R5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIHR5cGU9IkN0clR5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDdHJUeXBlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkN0clR5cGUiIC8+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJUaGUgcmVzdWx0aW5nIFJlc3VsdFNlcXVlbmNlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Vc2VkIGZvciBjb25zdHJ1Y3RvciBmdW5jdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBFaXRoZXIgYW4gZW1wdHkgc2VxdWVuY2Ugb3IgMSBhdG9taWMgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSByZXN1bHRpbmcgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iRWl0aGVyIGFuIGVtcHR5IHNlcXVlbmNlIG9yIDEgYXRvbWljIHR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkRvY1R5cGUiIHR5cGU9IkRvY1R5cGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEb2N1bWVudFR5cGUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRG9jVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dgotICAgICAgICAgICAgVGhlIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBjb21tZW50PSJUaGUgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Eb2N1bWVudCIgdHlwZT0iRG9jdW1lbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJBY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Eb2N1bWVudCIgdHlwZT0iRG9jdW1lbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkFjdHVhbCBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDtkb2N1bWVudCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7ZG9jdW1lbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb2N1bWVudCBiZWluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9IlFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRFJFRiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlIiB0eXBlPSJFbGVtZW50VHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIEVsZW1lbnRUeXBlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IkVsZW1lbnRUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIGEgbnVsbCBlbGVtZW50PC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRWxlbWVudFR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnYKLSAgICAgICAgICAgIFRoZSBlbGVtZW50IGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBjb21tZW50PSJUaGUgZWxlbWVudCBiZWluZyByZXByZXNlbnRlZCIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLkVsZW1lbnQiIHR5cGU9IkVsZW1lbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRWxlbWVudFR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VGhpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIEFkb3B0ZXJzIG5lZWQgdG8gdXNlCi0gRWxlbWVudFR5cGUoRWxlbWVudCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+djwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bm9kZVBvc2l0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQGRlcHJlY2F0ZWQiPgotCQkJCQkJPGRlc2NyaXB0aW9uPlVzZSBFbGVtZW50VHlwZShFbGVtZW50IHYpIGluc3RlYWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5FbGVtZW50IiB0eXBlPSJFbGVtZW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibm9kZVBvc2l0aW9uIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idmFsdWUiIHJldHVybmNvbW1lbnQ9IkFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uRWxlbWVudCIgdHlwZT0iRWxlbWVudCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BY3R1YWwgZWxlbWVudCB2YWx1ZSBiZWluZyByZXByZXNlbnRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDtlbGVtZW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtlbGVtZW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGJlaW5nIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgYmVpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZWRfdmFsdWUiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBlbGVtZW50IHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBlbGVtZW50IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0ZXh0bm9kZV9zdHJpbmdzIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgc3VwcGxpZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgVGV4dE5vZGUgc3RyaW5nczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5ub2RlCi0gICAgICAgICAgICBOb2RlIHRvIHJlY3Vyc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGNvbW1lbnQ9Ik5vZGUgdG8gcmVjdXJzZSIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLk5vZGUiIHR5cGU9Ik5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9IlFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmlsbGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJpc0VsZW1lbnRUeXBlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVOYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iQW55VHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiBhIE5vZGUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxmaWVsZHM+Ci0JCQk8ZmllbGQgZmluYWw9InRydWUiIHN0YXRpYz0idHJ1ZSIgY29uc3Q9IklEUkVGIiB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9IlNDSEVNQV9UWVBFX0lEUkVGIiBjb25zdGV4cHI9IiZxdW90O0lEUkVGJnF1b3Q7IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPGZpZWxkIGZpbmFsPSJ0cnVlIiBzdGF0aWM9InRydWUiIGNvbnN0PSJJRCIgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJTQ0hFTUFfVFlQRV9JRCIgY29uc3RleHByPSImcXVvdDtJRCZxdW90OyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJPC9maWVsZHM+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTm9kZVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5vZGUKLSAgICAgICAgICAgIFRoZSBOb2RlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kb2N1bWVudF9vcmRlcgotICAgICAgICAgICAgVGhlIGRvY3VtZW50IG9yZGVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJub2RlIiBjb21tZW50PSJUaGUgTm9kZSBiZWluZyByZXByZXNlbnRlZCIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLk5vZGUiIHR5cGU9Ik5vZGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vZGVfdmFsdWUiIHJldHVybmNvbW1lbnQ9IkFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uTm9kZSIgdHlwZT0iTm9kZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iQWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5vZGVfbmFtZSIgcmV0dXJuY29tbWVudD0iUU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG5vZGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UU5hbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuaWxsZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZG9tX3RvX3hwYXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5vZGUiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Ob2RlIiB0eXBlPSJOb2RlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlbGltaW5hdGVfZHVwcyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJycyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNvcnRfZG9jdW1lbnRfb3JkZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzYW1lIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImEiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iYiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJiZWZvcmUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHdvIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYmVmb3JlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImEiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iYiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIgdHlwZT0iTm9kZVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZnRlciIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0d28iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhZnRlciIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiB0eXBlPSJOb2RlVHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUiIHR5cGU9Ik5vZGVUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZ2V0VHlwZWRWYWx1ZUZvclByaW1pdGl2ZVR5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlRGVmIiBmdWxsdHlwZT0ib3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbiIgdHlwZT0iWFNUeXBlRGVmaW5pdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRFJFRiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNUeXBlIiByZXR1cm5jb21tZW50PSIiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlV0aWxpdHkgbWV0aG9kIHRvIGNoZWNrIHRvIHNlZSBpZiBhIHBhcnRpY3VsYXIgVHlwZUluZm8gbWF0Y2hlcy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZUluZm88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR5cGVOYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiIgLz4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVJbmZvIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5UeXBlSW5mbyIgdHlwZT0iVHlwZUluZm8iIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlTmFtZSIgY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBhYnN0cmFjdD0idHJ1ZSIgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTnVtZXJpY1R5cGUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iTnVtZXJpY1R5cGUiIC8+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inplcm8iIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgbm9kZSByZXByZXNudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayB3aGV0aGVyIG5vZGUgcmVwcmVzbnRzIDA8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgbm9kZSByZXByZXNudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InVuYXJ5X21pbnVzIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIKLSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImFicyIgcmV0dXJuY29tbWVudD0iTmV3IE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2VpbGluZyIgcmV0dXJuY29tbWVudD0iQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmxvb3IiIHJldHVybmNvbW1lbnQ9IkEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGFic3RyYWN0PSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kIiByZXR1cm5jb21tZW50PSJBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmRfaGFsZl90b19ldmVuIiByZXR1cm5jb21tZW50PSJBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmRfaGFsZl90b19ldmVuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWNpc2lvbiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iZ2V0X3NpbmdsZV9hcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InJzIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0X3NpbmdsZV90eXBlIiByZXR1cm5jb21tZW50PSJUaGUgbm9kZSBiZWluZyB0ZXN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayB3aGV0aGVyIHRoZSBzdXBwbGllZCBub2RlIGlzIG9mIHRoZSBzdXBwbGllZCB0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0Ci0gICAgICAgICAgICBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR5cGUKLSAgICAgICAgICAgIFRoZSB0eXBlIGV4cGVjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIG5vZGUgYmVpbmcgdGVzdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yCi0gICAgICAgICAgICAgSWYgbm9kZSBiZWluZyB0ZXN0ZWQgaXMgbm90IG9mIGV4cGVjdGVkIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImF0IiBjb21tZW50PSJUaGUgbm9kZSBiZWluZyB0ZXN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGUiIGNvbW1lbnQ9IlRoZSB0eXBlIGV4cGVjdGVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSJJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldF9zaW5nbGVfdHlwZSIgcmV0dXJuY29tbWVudD0iVGhlIG5vZGUgYmVpbmcgdGVzdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgd2hldGhlciBmaXJzdCBub2RlIGluIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIGlzIG9mIHRoZSBzdXBwbGllZAotIHR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cnMKLSAgICAgICAgICAgIFRoZSBub2RlIGJlaW5nIHRlc3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHlwZQotICAgICAgICAgICAgVGhlIHR5cGUgZXhwZWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgbm9kZSBiZWluZyB0ZXN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3IKLSAgICAgICAgICAgICBJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icnMiIGNvbW1lbnQ9IlRoZSBub2RlIGJlaW5nIHRlc3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlIiBjb21tZW50PSJUaGUgdHlwZSBleHBlY3RlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iSWYgbm9kZSBiZWluZyB0ZXN0ZWQgaXMgbm90IG9mIGV4cGVjdGVkIHR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZSIgdHlwZT0iUElUeXBlIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlBJVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dgotICAgICAgICAgICAgVGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmRvY19vcmRlcgotICAgICAgICAgICAgVGhlIGRvY3VtZW50IG9yZGVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2IiBjb21tZW50PSJUaGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cyIgZnVsbHR5cGU9Im9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbiIgdHlwZT0iUHJvY2Vzc2luZ0luc3RydWN0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iQWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHMiIGZ1bGx0eXBlPSJvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iIHR5cGU9IlByb2Nlc3NpbmdJbnN0cnVjdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRoaXMgbm9kZSByZXByZXNlbnRzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50czwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDtwcm9jZXNzaW5nLWluc3RydWN0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtwcm9jZXNzaW5nLWluc3RydWN0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSAgICAgICAgIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0gc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotICAgICAgICAgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibm9kZV9uYW1lIiByZXR1cm5jb21tZW50PSJBIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIiB0eXBlPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RzIHRoZSBub2RlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRFJFRiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIGEgUU5hbWUgZGF0YXR5cGUgKG5hbWUgb2YgYSBub2RlKTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVmaXgKLSAgICAgICAgICAgIFByZWZpeCBvZiB0aGUgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sb2NhbF9wYXJ0Ci0gICAgICAgICAgICBUaGUgbm9kZSBuYW1lIGl0c2VsZjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnMKLSAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBub2RlbmFtZSBiZWxvbmdzIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwcmVmaXgiIGNvbW1lbnQ9IlByZWZpeCBvZiB0aGUgbm9kZSBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibG9jYWxfcGFydCIgY29tbWVudD0iVGhlIG5vZGUgbmFtZSBpdHNlbGYiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJucyIgY29tbWVudD0iVGhlIG5hbWVzcGFjZSB0aGlzIG5vZGVuYW1lIGJlbG9uZ3MgdG8iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+cHJlZml4Ci0gICAgICAgICAgICBQcmVmaXggb2YgdGhlIG5vZGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bG9jYWxfcGFydAotICAgICAgICAgICAgVGhlIG5vZGUgbmFtZSBpdHNlbGY8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWZpeCIgY29tbWVudD0iUHJlZml4IG9mIHRoZSBub2RlIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJsb2NhbF9wYXJ0IiBjb21tZW50PSJUaGUgbm9kZSBuYW1lIGl0c2VsZiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyBvbmx5IHRoZSBub2RlIG5hbWUgKG5vIHByZWZpeCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bG9jYWxfcGFydAotICAgICAgICAgICAgVGhlIG5vZGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibG9jYWxfcGFydCIgY29tbWVudD0iVGhlIG5vZGUgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJRTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB3aXRoIGEgbnVsbCBwcmVmaXggYW5kIG51bGwgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfUU5hbWUiIHJldHVybmNvbW1lbnQ9Im51bGwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWUiIHR5cGU9IlFOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUU5hbWUgYnkgcGFyc2luZyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFFOYW1lIHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFFOYW1lIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIGV4dHJhY3QgZnJvbTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBRTmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gZXh0cmFjdCBmcm9tIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZygpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpRTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6UU5hbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtRTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7UU5hbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZ192YWx1ZSgpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImV4cGFuZGVkX25hbWUiIHJldHVybmNvbW1lbnQ9IkZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIG5hbWVzcGFjZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aG5hbWUgaW5jbHVkaW5nIHRoZSBuYW1lc3BhY2UuIFRoaXMgbWV0aG9kIG11c3Qgbm90Ci0gYmUgY2FsbGVkIGlmIGEgbmFtZXNwYWNlIGRvZXMgZXhpc3QgZm9yIHRoaXMgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RnVsbCBwYXRobmFtZSBpbmNsdWRpbmcgbmFtZXNwYWNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icHJlZml4IiByZXR1cm5jb21tZW50PSJQcmVmaXggb2YgdGhlIG5vZGUmYXBvcztzIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgcHJlZml4IG9mIHRoZSBub2RlJmFwb3M7cyBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+UHJlZml4IG9mIHRoZSBub2RlJmFwb3M7cyBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9uYW1lc3BhY2UiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldHMgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm4KLSAgICAgICAgICAgIE5hbWVzcGFjZSB0aGlzIG5vZGUgYmVsb25ncyBpbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibiIgY29tbWVudD0iTmFtZXNwYWNlIHRoaXMgbm9kZSBiZWxvbmdzIGluIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmFtZXNwYWNlIiByZXR1cm5jb21tZW50PSJOYW1lc3BhY2UgdGhhdCB0aGlzIG5vZGUgYmVsb25ncyBpbiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluLiBUaGlzIG1ldGhvZCBtdXN0IG5vdAotIGJlIGNhbGxlZCBpZiB0aGUgbm9kZSBkb2VzIG5vdCBiZWxvbmcgaW4gYSBuYW1lc3BhY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibG9jYWwiIHJldHVybmNvbW1lbnQ9Ik5vZGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBub2RlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5Ob2RlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXhwYW5kZWQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgYSBuYW1lc3BhY2UgaGFzIGJlZW4gZGVmaW5lZCBmb3Igbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGlzIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSBuYW1lc3BhY2UgaGFzIGJlZW4gZGVmaW5lZCBmb3Igbm9kZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXF1YWxzIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIGEgc3VwcGxpZWQgUU5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+b2JqCi0gICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGNvbXBhcmUgd2l0aC4gU2hvdWxkIGJlIG9mIHR5cGUgUU5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ib2JqIiBjb21tZW50PSJUaGUgb2JqZWN0IHRvIGNvbXBhcmUgd2l0aC4gU2hvdWxkIGJlIG9mIHR5cGUgUU5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJoYXNoQ29kZSIgcmV0dXJuY29tbWVudD0iVGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNhbGN1bGF0ZXMgdGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgUU5hbWUgYW5kIHRoZSBzdXBwbGllZCBRTmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBRTmFtZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUU5hbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idG9TdHJpbmciIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOb2RlVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlRleHRUeXBlIiB0eXBlPSJUZXh0VHlwZSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFRleHRUeXBlIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlRleHRUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnYKLSAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgVGV4dFR5cGUgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idiIgY29tbWVudD0iVGhlIHZhbHVlIG9mIHRoZSBUZXh0VHlwZSBub2RlIiBmdWxsdHlwZT0ib3JnLnczYy5kb20uVGV4dCIgdHlwZT0iVGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3RleHQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3RleHQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlZF92YWx1ZSIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVGV4dCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJub2RlX25hbWUiIHJldHVybmNvbW1lbnQ9Im51bGwgKG5vIHVzZXIgZGVmaW5lZCBuYW1lIGZvciB0aGlzIG5vZGUgZ2V0cyBkZWZpbmVkKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZSIgdHlwZT0iUU5hbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+VW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGV0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bnVsbCAobm8gdXNlciBkZWZpbmVkIG5hbWUgZm9yIHRoaXMgbm9kZSBnZXRzIGRlZmluZWQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaXNJRCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+V2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlOzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc0lEUkVGIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkRlY2ltYWxGb3JtYXQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzZXJpYWxpemFibGU9InRydWUiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0IiB0eXBlPSJYUGF0aERlY2ltYWxGb3JtYXQiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5UaGlzIGlzIGFuIFhQYXRoIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIERlY2ltYWxGb3JtYXQgdG8gaGFuZGxlCi0gc29tZSBvZiB0aGUgeHBhdGggc3BlY2lmaWMgZm9ybWF0dGluZyByZXF1aXJlbWVudHMuICAgU3BlY2lmaWNhbGx5Ci0gaXQgYWxsb3dzIGZvciBFIyB0byBiZSByZXByZXNlbnRlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHBvbmVudCB2YWx1ZQotIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlIGFsbCBleGlzdGluZyBEZWNpbWFsRm9ybWF0IHBhdHRlcm5zIGFyZSBoYW5kbGVkCi0gYXMgaXMuPC9kZXNjcmlwdGlvbj4KLQkJCTxhdHRyaWJ1dGUgbmFtZT0iQGF1dGhvciI+Ci0JCQkJPGRlc2NyaXB0aW9uPmRjYXJ2ZXI8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCQk8YXR0cmlidXRlIG5hbWU9IkBzZWUiPgotCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYUGF0aERlY2ltYWxGb3JtYXQiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJwYXR0ZXJuIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ4cGF0aEZvcm1hdCIgcmV0dXJuY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkZvcm1hdHMgdGhlIHN0cmluZyBkcm9wcGluZyBhIFplcm8gRXhwb25lbnQgVmFsdWUgaWYgaXQgZXhpc3RzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5vYmo8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIiAvPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ib2JqIiBjb21tZW50PSIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJIiB0eXBlPSJYU0FueVVSSSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlJlcHJlc2VudHMgYSBVbml2ZXJzYWwgUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSByZWZlcmVuY2U8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNBbnlVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QXJpdHkgMSBDb25zdHJ1Y3RvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVSSTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNBbnlVUkkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QXJpdHkgMCBDb25zdHJ1Y3Rvci4gSW5pdGlhdGVzIFVSSSB0byBudWxsLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6YW55VVJJJnF1b3Q7LCB0aGUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgZnVsbCB0eXBlIHBhdGhuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmFueVVSSSZxdW90OywgdGhlIGZ1bGwgdHlwZSBwYXRobmFtZSBvZiB0aGlzIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDthbnlVUkkmcXVvdDssIHRoZSB0eXBlIG5hbWUgb2YgdGhpcyBkYXRhdHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0eXBlIG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7YW55VVJJJnF1b3Q7LCB0aGUgdHlwZSBuYW1lIG9mIHRoaXMgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9InRoZSBVUkkgdmFsdWUgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoZSBVUkkgZGF0YXR5cGUgYXMgYQotICAgICAgICAgU3RyaW5nIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlRyYW5zZm9ybXMgYW5kIHJldHJpZXZlcyB0aGUgVVJJIHZhbHVlIG9mIHRoaXMgVVJJIGRhdGF0eXBlIGluIFN0cmluZwotIGZvcm1hdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIFVSSSB2YWx1ZSBoZWxkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgdGhlIFVSSSBkYXRhdHlwZSBhcyBhCi0gICAgICAgICBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0ibmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0aW9uIG9mIGEgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYSBVUkkgZnJvbSBhIHByZXZpb3VzIHJlc3VsdAotIHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIHByZXZpb3VzIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVVJJIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9InByZXZpb3VzIHJlc3VsdCBzZXF1ZW5jZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkdyZWF0ZXIgdGhhbiBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIHhzOmFueVVSSSAob3IsIGJ5IHByb21vdGlvbiBvZiB0aGlzLCB4czpzdHJpbmcpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCQkJPGRlc2NyaXB0aW9uPjEuMTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5MZXNzIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQmFzZTY0QmluYXJ5IiB0eXBlPSJYU0Jhc2U2NEJpbmFyeSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Jhc2U2NEJpbmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTQmFzZTY0QmluYXJ5Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIG51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmJhc2U2NEJpbmFyeSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6YmFzZTY0QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7YmFzZTY0QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtiYXNlNjRCaW5hcnkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYmFzZTY0QmluYXJ5IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyBiYXNlNjRCaW5hcnkgdmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYmFzZTY0QmluYXJ5IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGJhc2U2NEJpbmFyeSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgYmFzZTY0QmluYXJ5IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBiYXNlNjRCaW5hcnkgdmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBzYW1lLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIGJhc2U2NEJpbmFyeTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuIiB0eXBlPSJYU0Jvb2xlYW4iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJ1ZSBvciBhIGZhbHNlIHZhbHVlLjwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Jvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhdGVzIHRoZSBuZXcgcmVwcmVzZW50YXRpb24gdG8gdGhlIGJvb2xlYW4gc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgIEluaXRpYWxpemVzIHRoaXMgZGF0YXR5cGUgdG8gcmVwcmVzZW50IHRoaXMgYm9vbGVhbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iSW5pdGlhbGl6ZXMgdGhpcyBkYXRhdHlwZSB0byByZXByZXNlbnQgdGhpcyBib29sZWFuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Jvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhdGVzIHRvIGEgZGVmYXVsdCByZXByZXNlbnRhdGlvbiBvZiBmYWxzZS48L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmJvb2xlYW4mcXVvdDssIHRoZSBmdWxsIGRhdGF0eXBlIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6Ym9vbGVhbiZxdW90OywgdGhlIGZ1bGwgZGF0YXR5cGUgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2Jvb2xlYW4mcXVvdDssIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBuYW1lLiIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgZGF0YXR5cGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7Ym9vbGVhbiZxdW90Oywgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIG5hbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJ0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0idGhlIGFjdHVhbCBib29sZWFuIHZhbHVlIHN0b3JlZCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBhY3R1YWwgYm9vbGVhbiB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBib29sZWFuIHZhbHVlCi0gaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBib29sZWFuIHZhbHVlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBib29sZWFuIHZhbHVlIHN1cHBsaWVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgYm9vbGVhbiB2YWx1ZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iTmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkKLSAgICAgICAgIGNvbXBhcmlzb24iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gZm9yIGVxdWFsaXR5IGJldHdlZW4gdGhlIHN1cHBsaWVkIGFuZCB0aGlzIGJvb2xlYW4KLSByZXByZXNlbnRhdGlvbi4gUmV0dXJucyB0cnVlIGlmIGJvdGggcmVwcmVzZW50IHNhbWUgYm9vbGVhbiB2YWx1ZSwgZmFsc2UKLSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgIHdpdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkKLSAgICAgICAgIGNvbXBhcmlzb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0gICAgICAgICAgICB3aXRoLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotICAgICAgICAgY29tcGFyaXNvbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIHRydWUgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0gcmVwcmVzZW50cyBmYWxzZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgIHdpdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUKLSAgICAgICAgIGNvbXBhcmlzb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0gICAgICAgICAgICB3aXRoLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiByZXR1cm5jb21tZW50PSJOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotICAgICAgICAgY29tcGFyaXNvbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0gdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIGZhbHNlIGFuZCB0aGF0IFhTQm9vbGVhbiBzdXBwbGllZAotIHJlcHJlc2VudHMgdHJ1ZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgIHdpdGguPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUKLSAgICAgICAgIGNvbXBhcmlzb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0gICAgICAgICAgICB3aXRoLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNTaG9ydCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlIiB0eXBlPSJYU0J5dGUiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTQnl0ZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0J5dGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgYnl0ZSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBCeXRlIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iQnl0ZSB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmJ5dGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmJ5dGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtieXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtieXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7Ynl0ZSZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAmYXBvcztieXRlJmFwb3M7IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGJ5dGUgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO2J5dGUmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGJ5dGUgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlIiB0eXBlPSJYU0RhdGUiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9ImphdmEubGFuZy5DbG9uZWFibGUiIHR5cGU9IkNsb25lYWJsZSIgLz4KLQkJPC9pbXBsZW1lbnRzPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5SZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgb2YgdGhlIGZvcm0geWVhci1tb250aC1kYXkgYW5kIG9wdGlvbmFsIHRpbWV6b25lPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF0ZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiBhIHN1cHBsaWVkIGRhdGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2FsCi0gICAgICAgICAgICBUaGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50egotICAgICAgICAgICAgVGhlIHRpbWUgem9uZSBvZiB0aGUgZGF0ZSB0byBiZSBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjYWwiIGNvbW1lbnQ9IlRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHoiIGNvbW1lbnQ9IlRoZSB0aW1lIHpvbmUgb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF0ZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7ZGF0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7ZGF0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2xvbmUiIHJldHVybmNvbW1lbnQ9IkEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb24iIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBkYXRlIHJlcHJlc2VudGF0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIGNvcHkgb2YgdGhpcyBkYXRlIHJlcHJlc2VudGF0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iIHR5cGU9IkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZGF0ZSIgcmV0dXJuY29tbWVudD0iVGhlIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGUiIHR5cGU9IlhTRGF0ZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIChvZiB0aGUgZm9ybSB5ZWFyLW1vbnRoLWRheSBvcgotIHllYXItbW9udGgtZGF5K3RpbWV6b25lKSBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YKLSBpdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9IkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkYXRlIHZhbHVlIHN1cHBsaWVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGF0ZSB2YWx1ZSBpbgotIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZGF0ZSB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSB2YWx1ZSBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgdmFsdWUuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ieWVhciIgcmV0dXJuY29tbWVudD0idGhlIHllYXIgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1vbnRoIiByZXR1cm5jb21tZW50PSJ0aGUgbW9udGggdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgbW9udGggdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGF5IiByZXR1cm5jb21tZW50PSJ0aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZXJlIGlzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZS4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZGF0ZSBoYXMgYW4gb3B0aW9uYWwgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIGl0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZXJlIGlzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZS4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpkYXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpdmUgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmRhdGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYWxlbmRhciIgcmV0dXJuY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSB0d28gZGF0ZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdCBwb2ludCBpbiB0aW1lLgotICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50bwotIGFjY291bnQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gZGF0ZXMgYXJlIHJlcHJlc2VudCB0aGUgc2FtZSBleGFjdCBwb2ludCBpbiB0aW1lLgotICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0byIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGxpZXMgYmVmb3JlIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0byIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGFmdGVyIHRoZSBkYXRlIHN1cHBsaWVkLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlLiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgKHRha2luZyB0aW1lem9uZXMgaW50byBhY2NvdW50KTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgbGllcyBhZnRlciB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3VycmVudGx5IHVuc3VwcG9ydGVkIG1ldGhvZC4gUmV0cmlldmVzIHRoZSBkYXRlIGluIG1pbGxpc2Vjb25kcyBzaW5jZQotIHRoZSBiZWdpbmluZyBvZiBlcG9jaDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbWludXMgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG1pbnVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhTRGF0ZSwgWFNZZWFyTW9udGhEdXJhdGlvbiBhbmQgWFNEYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkKLSB2YWxpZCBvbmVzKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0gICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGUsIHRoZSByZXN1bHQgd2lsbCBiZSBhCi0gICAgICAgICAgICBYU0RheVRpbWVEdXJhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlIHR3bwotICAgICAgICAgICAgZGF0ZXMuIElmIGFyZyBpcyBhbiBYU1llYXJNb250aER1cmF0aW9uIG9yIGFuCi0gICAgICAgICAgICBYU0RheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotICAgICAgICAgICAgWFNEYXlUaW1lRHVyYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSB0d28KLSAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWFNZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotICAgICAgICAgICAgWFNEYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAgIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbWludXMgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkgdmFsaWQKLSBvbmVzKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0gICAgICAgICAgICBvcGVyYXRvci4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQKLSAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLSAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGUgb2YgdGhlIHJlc3VsdAotICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZSIgdHlwZT0iWFNEYXRlVGltZSI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lYWJsZSIgdHlwZT0iQ2xvbmVhYmxlIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF0ZVRpbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhdGVzIGEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIGEgc3VwcGxpZWQgZGF0ZSBhbmQgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIFRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR6Ci0gICAgICAgICAgICBUaGUgdGltZXpvbmUgb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJUaGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaGUgdGltZXpvbmUgb2YgdGhlIGRhdGUgdG8gYmUgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF0ZVRpbWUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGl0YXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNsb25lIiByZXR1cm5jb21tZW50PSJBIGNvcHkgb2YgdGhpcyBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBjb3B5IG9mIHRoaXMgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiB0eXBlPSJDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2RhdGVUaW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRheXBlIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkYXRlVGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpc19kaWdpdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIG51bWVyaWMuIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIHRvIHNlZSBpZiBhIGNoYXJhY3RlciBpcyBudW1lcmljPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIENoYXJhY3RlciB0byBiZSB0ZXN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgbnVtZXJpYy4gRmFsc2Ugb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iQ2hhcmFjdGVyIHRvIGJlIHRlc3RlZCIgZnVsbHR5cGU9ImNoYXIiIHR5cGU9ImNoYXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlX2RhdGUiIHJldHVybmNvbW1lbnQ9IkludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgaXMgdGhlIHllYXIsIGVsZW1lbnQgMiBpcyB0aGUKLSAgICAgICAgIG1vbnRoIGFuZCBlbGVtZW50IDMgaXMgdGhlIGRheSIgZnVsbHR5cGU9ImludFtdIiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZSB5ZWFyLAotIG1vbnRoIGFuZCBkYXkgZnJvbSBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5JbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSB5ZWFyLCBlbGVtZW50IDIgaXMgdGhlCi0gICAgICAgICBtb250aCBhbmQgZWxlbWVudCAzIGlzIHRoZSBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfdGltZSIgcmV0dXJuY29tbWVudD0iSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSBpcyB0aGUgaG91ciwgZWxlbWVudCAyIGlzIHRoZQotICAgICAgICAgbWludXRlIGFuZCBlbGVtZW50IDMgaXMgdGhlIHNlY29uZHMiIGZ1bGx0eXBlPSJkb3VibGVbXSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgaG91ciwKLSBtaW51dGUgYW5kIHNlY29uZHMgZnJvbSBpdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5JbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSBob3VyLCBlbGVtZW50IDIgaXMgdGhlCi0gICAgICAgICBtaW51dGUgYW5kIGVsZW1lbnQgMyBpcyB0aGUgc2Vjb25kczwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV90aW1lem9uZSIgcmV0dXJuY29tbWVudD0iSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSByZXByZXNlbnRzIHdoZXRoZXIgdGhlCi0gICAgICAgICB0aW1lem9uZSBpcyBhaGVhZCBvciBiZWhpbmQgR01ULCBlbGVtZW50IDIgaXMgdGhlIGhvdXIKLSAgICAgICAgIGRpc3BsYWNlbWVudCBhbmQgZWxlbWVudCAzIGlzIHRoZSBtaW51dGUgZGlzcGxhY2VtZW50LiIgZnVsbHR5cGU9ImludFtdIiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZQotIHRpbWV6b25lIGZyb20gaXQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+SW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSByZXByZXNlbnRzIHdoZXRoZXIgdGhlCi0gICAgICAgICB0aW1lem9uZSBpcyBhaGVhZCBvciBiZWhpbmQgR01ULCBlbGVtZW50IDIgaXMgdGhlIGhvdXIKLSAgICAgICAgIGRpc3BsYWNlbWVudCBhbmQgZWxlbWVudCAzIGlzIHRoZSBtaW51dGUgZGlzcGxhY2VtZW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZURhdGVUaW1lIiByZXR1cm5jb21tZW50PSJUaGUgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSAoYW5kIG9wdGlvbmFsCi0gICAgICAgICB0aW1lem9uZSkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZSIgdHlwZT0iWFNEYXRlVGltZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNEYXRlVGltZSBvYmplY3QgdXNpbmcgdGhhdCBpbmZvcm1hdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSAoYW5kIG9wdGlvbmFsCi0gICAgICAgICB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSBhbmQgdGltZSB2YWx1ZQotICAgICAgICAgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkYXRlIGFuZCB0aW1lCi0gdmFsdWUgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIGFuZCB0aW1lCi0gICAgICAgICAgICB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSBhbmQgdGltZSB2YWx1ZQotICAgICAgICAgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkYXRlIGFuZCB0aW1lCi0gICAgICAgICAgICB2YWx1ZS4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ5ZWFyIiByZXR1cm5jb21tZW50PSJ0aGUgeWVhciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHllYXIgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9udGgiIHJldHVybmNvbW1lbnQ9InRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgbW9udGggZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkYXkiIHJldHVybmNvbW1lbnQ9InRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmUgdGhlIGRheSBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGRheSB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJob3VyIiByZXR1cm5jb21tZW50PSJ0aGUgaG91ciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgaG91ciBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGhvdXIgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibWludXRlIiByZXR1cm5jb21tZW50PSJ0aGUgbWludXRlIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlIHRoZSBtaW51dGUgZnJvbSB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBtaW51dGUgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2Vjb25kIiByZXR1cm5jb21tZW50PSJ0aGUgc2Vjb25kcyB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZSB0aGUgc2Vjb25kcyBmcm9tIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHNlY29uZHMgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiIgLz4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhZF9pbnQiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFkZGVkIGludGVnZXIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFkcyB0aGUgc3VwcGxpZWQgbnVtYmVyIHRvIHRoZSBzdXBwbGllZCBudW1iZXIgb2YgZGlnaXRzIGJ5IGFkZGluZyAwJmFwb3M7cwotIGluIGZyb250IG9mIGl0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm51bQotICAgICAgICAgICAgTnVtYmVyIHRoYXQgc2kgdG8gYmUgcGFkZGVkIChpZiBuZWNjZXNzYXkpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5sZW4KLSAgICAgICAgICAgIERlc2lyZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhZGRlZCBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJudW0iIGNvbW1lbnQ9Ik51bWJlciB0aGF0IHNpIHRvIGJlIHBhZGRlZCAoaWYgbmVjY2Vzc2F5KSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibGVuIiBjb21tZW50PSJEZXNpcmVkIGxlbmd0aCBhZnRlciBwYWRkaW5nIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpkYXRlVGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpkYXRlVGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5DYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFuZCB0aW1lcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0Ci0gICAgICAgICBwb2ludCBpbiB0aW1lLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZwotIHRpbWV6b25lcyBpbnRvIGFjY291bnQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFuZCB0aW1lcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0Ci0gICAgICAgICBwb2ludCBpbiB0aW1lLiBGYWxzZSBvdGhlcndpc2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0byIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBhbmQgdGltZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBhbmQgdGltZQotICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotIGludG8gYWNjb3VudCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBhbmQgdGltZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBhbmQgdGltZQotICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgaW4gdGltZSwgdGhpcyBkYXRlIGFuZCB0aW1lIGxpZXMgYWZ0ZXIgdGhlIGRhdGUgYW5kIHRpbWUKLSAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyBhbmQgdGltZXMgKHRha2luZyB0aW1lem9uZXMKLSBpbnRvIGFjY291bnQpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBhZnRlciB0aGUgZGF0ZSBhbmQgdGltZQotICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iWFNEYXRlVGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbmluZyBvZiB0aGUgZXBvY2giIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DdXJyZW50bHkgdW5zdXBwb3J0ZWQgbWV0aG9kLiBSZXRyaWV2ZXMgdGhlIGRhdGUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlCi0gdGhlIGJlZ2luaW5nIG9mIGVwb2NoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbmluZyBvZiB0aGUgZXBvY2g8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtaW51cyBvcGVyYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbWludXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGF0ZVRpbWUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0gc2VxdWVuY2UgKFhTRGF0ZVRpbWUsIFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlCi0gb25seSB2YWxpZCBvbmVzKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0gICAgICAgICAgICBvcGVyYXRvci4gSWYgdGhpcyBpcyBhbiBYU0RhdGVUaW1lLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlc2UgdHdvCi0gICAgICAgICAgICBkYXRlcy4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0gICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlVGltZSBvZiB0aGUKLSAgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY3VycmVudCBkYXRlIG1pbnVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0gICAgICAgICAgICBzdXBwbGllZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlVGltZSwgdGhlIHJlc3VsdCB3aWxsIGJlIGEKLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlIHR3bwotICAgICAgICAgICAgZGF0ZXMuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlCi0gICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZQotICAgICAgICAgICAgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbWludXMgb3BlcmF0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGVUaW1lIGFuZCBhIHN1cHBsaWVkCi0gcmVzdWx0IHNlcXVlbmNlIChYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0gdmFsaWQgb25lcykuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotICAgICAgICAgICAgb3BlcmF0b3IuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlCi0gICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZQotICAgICAgICAgICAgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBtaW51cyBvcGVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLSAgICAgICAgICAgIG9wZXJhdG9yLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGVUaW1lIG9mIHRoZQotICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSAgICAgICAgICAgIHN1cHBsaWVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTRHVyYXRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uIiB0eXBlPSJYU0RheVRpbWVEdXJhdGlvbiI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lYWJsZSIgdHlwZT0iQ2xvbmVhYmxlIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheVRpbWVEdXJhdGlvbiBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RheVRpbWVEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0gc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY29yZGluZ2x5LiBUaGUgc2FtZSBvY2N1cnMgZm9yCi0gbWludXRlcyBhbmQgc2Vjb25kczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYXlzCi0gICAgICAgICAgICBOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmhvdXJzCi0gICAgICAgICAgICBOdW1iZXIgb2YgaG91cnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5taW51dGVzCi0gICAgICAgICAgICBOdW1iZXIgb2YgbWludXRlcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNlY29uZHMKLSAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmVnYXRpdmUKLSAgICAgICAgICAgIFRydWUgaWYgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIHJlcHJlc2VudHMgYSBiYWNrd2FyZHMgcGFzc2FnZQotICAgICAgICAgICAgdGhyb3VnaCB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRheXMiIGNvbW1lbnQ9Ik51bWJlciBvZiBkYXlzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iaG91cnMiIGNvbW1lbnQ9Ik51bWJlciBvZiBob3VycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1pbnV0ZXMiIGNvbW1lbnQ9Ik51bWJlciBvZiBtaW51dGVzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ic2Vjb25kcyIgY29tbWVudD0iTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuZWdhdGl2ZSIgY29tbWVudD0iVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0gICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEYXlUaW1lRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNlY3MKLSAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzZWNzIiBjb21tZW50PSJOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGF5VGltZUR1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIGEgZHVyYXRpb24gb2Ygbm8gdGltZSAoMGRheXMsIDBob3VycywgMG1pbnV0ZXMsIDBzZWNvbmRzKTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbG9uZSIgcmV0dXJuY29tbWVudD0iTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIGNvcHkgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIHRpbWUgZHVyYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiB0eXBlPSJDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZURURHVyYXRpb24iIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2RheVRpbWVEdXJhdGlvbiZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cml2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkYXlUaW1lRHVyYXRpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmRheVRpbWVEdXJhdGlvbiZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6ZGF5VGltZUR1cmF0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotICAgICAgICAgdGhlIGFkZGl0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBhZGQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLSAgICAgICAgIHRoZSBhZGRpdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBhZGQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgc3VidHJhY3Rpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgc3VidHJhY3Rpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gc3VidHJhY3QiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0aW1lcyIgcmV0dXJuY29tbWVudD0iTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgbXVsdGlwbGljYXRpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLSBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0gICAgICAgICB0aGUgbXVsdGlwbGljYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkaXYiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotICAgICAgICAgdGhlIGRpdmlzaW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU0RheVRpbWVEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLSAgICAgICAgIHRoZSBkaXZpc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik51bWVyaWNUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsIiB0eXBlPSJYU0RlY2ltYWwiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRGVjaW1hbCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwLjA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RlY2ltYWwiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG51bWJlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBOdW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJOdW1iZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0RlY2ltYWwiIHR5cGU9IkJpZ0RlY2ltYWwiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEZWNpbWFsIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmRlY2ltYWwmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmRlY2ltYWwmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtkZWNpbWFsJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtkZWNpbWFsJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iemVybyIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgaWYgdGhpcyBYU0RlY2ltYWwgcmVwcmVzZW50cyAwPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoaXMgWFNEZWNpbWFsIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9IkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkZWNpbWFsIG51bWJlciBzdXBwbGllZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRlY2ltYWwKLSBudW1iZXIgaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkZWNpbWFsIG51bWJlci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGVjaW1hbCBudW1iZXIgc3VwcGxpZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkZWNpbWFsIG51bWJlci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJpc0xleGljYWxWYWx1ZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YWx1ZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRvdWJsZV92YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQGRlcHJlY2F0ZWQiPgotCQkJCQkJPGRlc2NyaXB0aW9uPlVzZSBnZXRWYWx1ZSgpIGluc3RlYWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ2V0VmFsdWUiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnRGVjaW1hbCIgdHlwZT0iQmlnRGVjaW1hbCIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRfZG91YmxlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5TZXRzIHRoZSBudW1iZXIgc3RvcmVkIHRvIHRoYXQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgTnVtYmVyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iTnVtYmVyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb24gcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmF0Ci0gICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RlY2ltYWwpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgMiByZXByZXNlbnRhdGlvbiByZXByZXNlbnQgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhdCIgY29tbWVudD0iUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEZWNpbWFsKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLSAgICAgICAgICAgIFhTRGVjaW1hbCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgc21hbGxlciB0aGFuIHRoaXMKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RlY2ltYWwpIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImNvbnZlcnRBcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcwotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RlY2ltYWwpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEZWNpbWFsKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwbHVzIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgYWRkaXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sIHRoZQotIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBhZGRpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBzdWJ0cmFjdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWVzIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG11bHRpcGxpY2F0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG11bHRpcGxpY2F0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGl2IiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgZGl2aXNpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIGRpdmlzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIGRpdmlzaW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaWRpdiIgcmV0dXJuY29tbWVudD0iQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLSB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyCi0gICAgICAgICBkaXZpc2lvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1vZCIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idW5hcnlfbWludXMiIHJldHVybmNvbW1lbnQ9IkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhpcyBYU0RlY2ltYWwiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWJzIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5BYnNvbHV0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjZWlsaW5nIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmxvb3IiIHJldHVybmNvbW1lbnQ9IkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZCIgcmV0dXJuY29tbWVudD0iQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZF9oYWxmX3RvX2V2ZW4iIHJldHVybmNvbW1lbnQ9IkEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmRfaGFsZl90b19ldmVuIiByZXR1cm5jb21tZW50PSJBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVjaXNpb24gQW4gaW50ZWdlciBwcmVjaXNpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWNpc2lvbiIgY29tbWVudD0iQW4gaW50ZWdlciBwcmVjaXNpb24iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iTnVtZXJpY1R5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZSIgdHlwZT0iWFNEb3VibGUiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEb3VibGUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIE51bWJlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9Ik51bWJlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJkb3VibGUiIHR5cGU9ImRvdWJsZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0RvdWJsZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyBhIFN0cmluZyByZXByZXNlbnRlZCBudW1iZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aW5pdAotICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpbml0IiBjb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZG91YmxlIiByZXR1cm5jb21tZW50PSJOZXcgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGUiIHR5cGU9IlhTRG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFN0cmluZyByZXByZXNlbnRlZCBudW1iZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+aQotICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJpIiBjb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGRvdWJsZSBudW1iZXIgc3VwcGxpZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkb3VibGUgbnVtYmVyCi0gaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkb3VibGUgbnVtYmVyLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkb3VibGUgbnVtYmVyIHN1cHBsaWVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZG91YmxlIG51bWJlci4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6ZG91YmxlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpkb3VibGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtkb3VibGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2RvdWJsZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5hbiIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbmZpbml0ZSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBhbiBpbmZpbml0ZSBudW1iZXIgKG5lZ2F0aXZlIG9yIHBvc2l0aXZlKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ6ZXJvIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAwLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5lZ2F0aXZlWmVybyIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZG91YmxlX3ZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgMiByZXByZXNlbnRhdGlvbnMgcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLSAgICAgICAgIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFhCi0gICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RvdWJsZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSAyIHJlcHJlc2VudGF0aW9ucyByZXByZXNlbnQgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFhIiBjb21tZW50PSJSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RvdWJsZSkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcwotICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RvdWJsZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgc21hbGxlciB0aGFuIHRoaXMKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0gICAgICAgICAgICBYU0RvdWJsZSkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iY29udmVydEFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBDdXJyZW50bHkKLSBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIGV4aXN0cyBzbyB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gbXVzdCBiZQotIG9mIHR5cGUgWFNEb3VibGUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEb3VibGUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGlzCi0gICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotICAgICAgICAgICAgWFNEb3VibGUpIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBsdXMiIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgYWRkaXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgc3VidHJhY3Rpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBzdWJ0cmFjdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgc3VidHJhY3Rpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIHN1YnRyYWN0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXMiIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG11bHRpcGxpY2F0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sCi0gdGhlIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RvdWJsZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBtdWx0aXBsaWNhdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIG11bHRpcGxpY2F0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGl2IiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RvdWJsZSBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gZGl2aXNpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgZGl2aXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGRpdmlzaW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaWRpdiIgcmV0dXJuY29tbWVudD0iQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLSAgICAgICAgIGRpdmlzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9kIiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bmFyeV9taW51cyIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5OZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWJzIiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2VpbGluZyIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJmbG9vciIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICBudW1iZXIgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZCIgcmV0dXJuY29tbWVudD0iQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icm91bmRfaGFsZl90b19ldmVuIiByZXR1cm5jb21tZW50PSJBIFhTRG91YmxlIHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZF9oYWxmX3RvX2V2ZW4iIHJldHVybmNvbW1lbnQ9IkEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIiB0eXBlPSJOdW1lcmljVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQgd2l0aCB0aGUgc3BlY2lmaWVkCi0gcHJlY2lzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5wcmVjaXNpb24KLSAgICAgICAgICAgIEFuIGludGVnZXIgcHJlY2lzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWNpc2lvbiIgY29tbWVudD0iQW4gaW50ZWdlciBwcmVjaXNpb24iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lYWJsZSIgdHlwZT0iQ2xvbmVhYmxlIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4gT3RoZXIgZHVyYXRpb24gaW1wbGVtZW50YXRpb25zCi0gc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzIGltcGxlbWVudGF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJPGRlc2NyaXB0aW9uPjEuMSBUaGlzIHVzZWQgdG8gYmUgYW4gYWJzdHJhY3QgY2xhc3MgYnV0IHdhcyBpbmNvcnJlY3RseSBpbXBsZW1lbnRlZAotICAgICAgICBhcyBzdWNoLjwvZGVzY3JpcHRpb24+Ci0JCQk8L2F0dHJpYnV0ZT4KLQkJPC9jb21tZW50PgotCQk8ZmllbGRzPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iX3llYXIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il9tb250aCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iX2RheXMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il9ob3VycyIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJPGZpZWxkIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iX21pbnV0ZXMiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCTxmaWVsZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9Il9zZWNvbmRzIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiIC8+Ci0JCQk8ZmllbGQgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJfbmVnYXRpdmUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIiAvPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0R1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLiBJZiBtb3JlIHRoYW4gMjQgaG91cnMgaXMKLSBzdXBwbGllZCwgdGhlIG51bWJlciBvZiBkYXlzIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LiBUaGUgc2FtZSBvY2N1cnMgZm9yCi0gbWludXRlcyBhbmQgc2Vjb25kczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj55ZWFycwotICAgICAgICAgICAgTnVtYmVyIG9mIHllYXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPm1vbnRocwotICAgICAgICAgICAgTnVtYmVyIG9mIG1vbnRocyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5kYXlzCi0gICAgICAgICAgICBOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmhvdXJzCi0gICAgICAgICAgICBOdW1iZXIgb2YgaG91cnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5taW51dGVzCi0gICAgICAgICAgICBOdW1iZXIgb2YgbWludXRlcyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnNlY29uZHMKLSAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bmVnYXRpdmUKLSAgICAgICAgICAgIFRydWUgaWYgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIHJlcHJlc2VudHMgYSBiYWNrd2FyZHMgcGFzc2FnZQotICAgICAgICAgICAgdGhyb3VnaCB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InllYXJzIiBjb21tZW50PSJOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lLiIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibW9udGhzIiBjb21tZW50PSJOdW1iZXIgb2YgbW9udGhzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZS4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImRheXMiIGNvbW1lbnQ9Ik51bWJlciBvZiBkYXlzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iaG91cnMiIGNvbW1lbnQ9Ik51bWJlciBvZiBob3VycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1pbnV0ZXMiIGNvbW1lbnQ9Ik51bWJlciBvZiBtaW51dGVzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ic2Vjb25kcyIgY29tbWVudD0iTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuZWdhdGl2ZSIgY29tbWVudD0iVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0gICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c2VjcwotICAgICAgICAgICAgTnVtYmVyIG9mIHNlY29uZHMgaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InNlY3MiIGNvbW1lbnQ9Ik51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDBkYXlzLCAwaG91cnMsIDBtaW51dGVzLCAwc2Vjb25kcyk8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGF5cyIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIGRheXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnV0ZXMiIHJldHVybmNvbW1lbnQ9Ik51bWJlciBvZiBtaW51dGVzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtaW51dGVzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIG1pbnV0ZXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImhvdXJzIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgaG91cnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGhvdXJzIChtYXggMjQpIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk51bWJlciBvZiBob3VycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic2Vjb25kcyIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgKG1heCA2MCkgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0gc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2Ygc2Vjb25kcyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBkdXJhdGlvbiBvZiB0aW1lLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLSAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGR1cmF0aW9uIG9mIHRpbWUuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgbGFyZ2VyIGR1cmF0aW9uIHRoYW4gdGhhdAotICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIHNtYWxsZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJuZWdhdGl2ZSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0gdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2Ygc2Vjb25kcyBtYWtpbmcgdXAgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGl0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2Ygc2Vjb25kcyBtYWtpbmcgdXAgdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZV92YWx1ZSIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBkdXJhdGlvbgotIGZyb20gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZURURHVyYXRpb24iIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbG9uZSIgZnVsbHR5cGU9ImphdmEubGFuZy5PYmplY3QiIHR5cGU9Ik9iamVjdCI+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9ImphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgdHlwZT0iQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ieWVhciIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIHllYXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiB5ZWFycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OdW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1vbnRoIiByZXR1cm5jb21tZW50PSJOdW1iZXIgb2YgbW9udGhzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNDYXN0YWJsZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhYXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNOQ05hbWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0VudGl0eSIgdHlwZT0iWFNFbnRpdHkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5CdWlsdCBpbiBEYXRhIFR5cGUgZm9yIHhzOkVudGl0eTwvZGVzY3JpcHRpb24+Ci0JCQk8YXR0cmlidXRlIG5hbWU9IkBhdXRob3IiPgotCQkJCTxkZXNjcmlwdGlvbj5kY2FydmVyPC9kZXNjcmlwdGlvbj4KLQkJCTwvYXR0cmlidXRlPgotCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2luY2UiPgotCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0VudGl0eSIgLz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTRW50aXR5Ij4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsdWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIEVOVElUWSBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgd2l0aGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAgVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoaXMKLSBpcyByZWxheGVkIGZyb20gdGhlIFhNTCBTY2hlbWEgcmVxdWlyZW1lbnQuICBUaGUgRU5USVRZIGRvZXMKLSBub3QgaGF2ZSB0byBiZSBsb2NhdGVkIG9yIGV4cGFuZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kCi0gZXZhbHVhdGlvbiBmb3IgY2FzdGluZy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBFTlRJVFk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgRU5USVRZIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIEVOVElUWSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iTnVtZXJpY1R5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0IiB0eXBlPSJYU0Zsb2F0Ij4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRmxvYXQgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNGbG9hdCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFRoZSBudW1iZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJUaGUgbnVtYmVyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImZsb2F0IiB0eXBlPSJmbG9hdCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Zsb2F0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0Zsb2F0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIGEgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5pbml0Ci0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImluaXQiIGNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmZsb2F0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpmbG9hdCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2Zsb2F0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtmbG9hdCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBudW1iZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG51bWJlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5hbiIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaXMgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIE5hTi4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaW5maW5pdGUiIHJldHVybmNvbW1lbnQ9IlRydWUgaXMgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIGluZmluaXR5LiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBpbmZpbml0eTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Inplcm8iIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDA8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBkYXRhdHlwZSByZXByZXNlbnRzIDAuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5lZ2F0aXZlWmVybyIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBmbG9hdCBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBmbG9hdCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGZsb2F0IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsb2F0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmxvYXRfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgZmxvYXQgdmFsdWUgc3RvcmVkIiBmdWxsdHlwZT0iZmxvYXQiIHR5cGU9ImZsb2F0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBmbG9hdCB2YWx1ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YWEKLSAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBudW1iZXIuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFhIiBjb21tZW50PSJUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZ3QiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgZ3JlYXRlciBudW1iZXIgdGhhbiB0aGUKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgZ3JlYXRlciBudW1iZXIgdGhhbiB0aGUKLSAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZGF0YXR5cGUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGx1cyIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnVzIiByZXR1cm5jb21tZW50PSJBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLSBSZXN1bHRTZXF1ZW5jZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIHN1YnRyYWN0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXMiIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJkaXYiIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBkaXZpc2lvbi4iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIGRpdmlzaW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaWRpdiIgcmV0dXJuY29tbWVudD0iQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgaW50ZWdlcgotICAgICAgICAgZGl2aXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb2QiIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNGbG9hdC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bmFyeV9taW51cyIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk5lZ2F0ZXMgdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iYWJzIiByZXR1cm5jb21tZW50PSJBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+QWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNlaWxpbmciIHJldHVybmNvbW1lbnQ9IkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZsb29yIiByZXR1cm5jb21tZW50PSJBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotICAgICAgICAgbnVtYmVyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAgIG51bWJlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJyb3VuZCIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kX2hhbGZfdG9fZXZlbiIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InJvdW5kX2hhbGZfdG9fZXZlbiIgcmV0dXJuY29tbWVudD0iQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZSIgdHlwZT0iTnVtZXJpY1R5cGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnByZWNpc2lvbiBBbiBpbnRlZ2VyIHByZWNpc2lvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InByZWNpc2lvbiIgY29tbWVudD0iQW4gaW50ZWdlciBwcmVjaXNpb24iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImNvbnZlcnRBcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5IiB0eXBlPSJYU0dEYXkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEYXkgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHRGF5Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50egotICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjYWwiIGNvbW1lbnQ9IkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dEYXkiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtnRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtnRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZ0RheSIgcmV0dXJuY29tbWVudD0iVGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dEYXkiIHR5cGU9IlhTR0RheSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHRGF5Ci0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IChhbmQgb3B0aW9uYWwgdGltZXpvbmUpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFhTR0RheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ic3RyIiBjb21tZW50PSJUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIGRheSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnRGF5IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdEYXkgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ0RheSBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJpc0dEYXRhVHlwZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhYXQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRheSIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlciIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpnRGF5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgZGF5LiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR0RheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBYU0dEYXkgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgZGF5LiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU0dEYXkgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBzaW5jZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+MS4xPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDYWxlbmRhclR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGgiIHR5cGU9IlhTR01vbnRoIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTR01vbnRoIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNhbAotICAgICAgICAgICAgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHoKLSAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjYWwiIGNvbW1lbnQ9IkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHoiIGNvbW1lbnQ9IlRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHTW9udGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2dNb250aCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7Z01vbnRoJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZ01vbnRoIiByZXR1cm5jb21tZW50PSJUaGUgWFNHTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGgiIHR5cGU9IlhTR01vbnRoIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1vbnRoIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR01vbnRoCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggKGFuZCBvcHRpb25hbCB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgWFNHTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggKGFuZCBvcHRpb25hbCB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdNb250aCBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnTW9udGggaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnTW9udGggaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNHRGF0YVR5cGUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYWF0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUiIHR5cGU9IkFueUF0b21pY1R5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aCIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnTW9udGgmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmdNb250aCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYWxlbmRhciIgcmV0dXJuY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5DYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR01vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTR01vbnRoIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU0dNb250aCB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eiIgcmV0dXJuY29tbWVudD0idGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjE8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkNhbGVuZGFyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheSIgdHlwZT0iWFNHTW9udGhEYXkiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNb250aERheSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dNb250aERheSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBtb250aCBhbmQgZGF5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmNhbAotICAgICAgICAgICAgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50egotICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9udGggYW5kIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHoiIGNvbW1lbnQ9IlRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoIGFuZCBkYXkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dNb250aERheSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoIGFuZCBkYXk8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtnTW9udGhEYXkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2dNb250aERheSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2Qgc3RhdGljPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InBhcnNlX2dNb250aERheSIgcmV0dXJuY29tbWVudD0iVGhlIFhTR01vbnRoRGF5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoRGF5IiB0eXBlPSJYU0dNb250aERheSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5QYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb250aCBhbmQgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSAoYW5kIG9wdGlvbmFsCi0gICAgICAgICAgICB0aW1lem9uZSk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSAoYW5kIG9wdGlvbmFsCi0gICAgICAgICAgICB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ01vbnRoRGF5IGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdNb250aERheSBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgbW9udGggYW5kIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ01vbnRoRGF5IGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImlzR0RhdGFUeXBlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFhdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiB0eXBlPSJBbnlBdG9taWNUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9udGgiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlciIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRheSIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBkYXkgYXMgYW4gaW50ZWdlciIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgYWN0dWFsIGRheSBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGggYW5kIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGggYW5kIGRheTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnTW9udGhEYXkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmdNb250aERheSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYWxlbmRhciIgcmV0dXJuY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGFuZCBkYXkgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIG1vbnRoIGFuZCBkYXkuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHTW9udGhEYXk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNHTW9udGhEYXkgdG8gY29tcGFyZSB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbW9udGggYW5kIGRheS4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNHTW9udGhEYXkgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9InRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ2FsZW5kYXJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ2FsZW5kYXJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIiIHR5cGU9IlhTR1llYXIiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnTW9udGggZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNHWWVhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR6Ci0gICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9InR6IiBjb21tZW50PSJUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTR1llYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB5ZWFyPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7Z1llYXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2dZZWFyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VfZ1llYXIiIHJldHVybmNvbW1lbnQ9IlRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXIiIHR5cGU9IlhTR1llYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0dZZWFyCi0gcmVwcmVzZW50YXRpb24gb2YgaXQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdHIiIGNvbW1lbnQ9IlRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ1llYXIgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ1llYXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImlzR0RhdGFUeXBlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFhdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiB0eXBlPSJBbnlBdG9taWNUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ieWVhciIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXIiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnWWVhciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6Z1llYXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2FsZW5kYXIiIHJldHVybmNvbW1lbnQ9IkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0gcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR1llYXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNHWWVhciB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU0dZZWFyIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR6IiByZXR1cm5jb21tZW50PSJ0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkNhbGVuZGFyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGgiIHR5cGU9IlhTR1llYXJNb250aCI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFllYXJNb250aCBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dZZWFyTW9udGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgeWVhciBhbmQgbW9udGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Y2FsCi0gICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50egotICAgICAgICAgICAgVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgeWVhciBhbmQgbW9udGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNhbCIgY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgYW5kIG1vbnRoIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEudXRpbC5DYWxlbmRhciIgdHlwZT0iQ2FsZW5kYXIiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eiIgY29tbWVudD0iVGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgeWVhciBhbmQgbW9udGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0dZZWFyTW9udGgiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB5ZWFyIGFuZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2dZZWFyTW9udGgmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2dZZWFyTW9udGgmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV9nWWVhck1vbnRoIiByZXR1cm5jb21tZW50PSJUaGUgWFNHWWVhck1vbnRoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aCIgdHlwZT0iWFNHWWVhck1vbnRoIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgYW5kIG1vbnRoIGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0gWFNHWWVhck1vbnRoIHJlcHJlc2VudGF0aW9uIG9mIGl0LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5zdHIKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgYW5kIG1vbnRoIChhbmQgb3B0aW9uYWwKLSAgICAgICAgICAgIHRpbWV6b25lKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRhdGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggKGFuZCBvcHRpb25hbAotICAgICAgICAgICAgdGltZXpvbmUpIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnWWVhck1vbnRoIGluCi0gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyTW9udGggaXMgdG8gYmUKLSAgICAgICAgICAgIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB5ZWFyIGFuZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ1llYXJNb250aCBpcyB0byBiZQotICAgICAgICAgICAgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNHRGF0YVR5cGUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYWF0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUiIHR5cGU9IkFueUF0b21pY1R5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ5ZWFyIiByZXR1cm5jb21tZW50PSJUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlciIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCB5ZWFyIGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtb250aCIgcmV0dXJuY29tbWVudD0iVGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idGltZXpvbmVkIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZC4gRmFsc2Ugb3RoZXJ3aXNlIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIgYW5kIG1vbnRoIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIgYW5kIG1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCB5ZWFyIGFuZCBtb250aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpnWWVhck1vbnRoJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpnWWVhck1vbnRoJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNhbGVuZGFyIiByZXR1cm5jb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkNhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhciBhbmQgbW9udGguCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLSByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHWWVhck1vbnRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTR1llYXJNb250aCB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSB5ZWFyIGFuZCBtb250aC4KLSAgICAgICAgIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNHWWVhck1vbnRoIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR6IiByZXR1cm5jb21tZW50PSJ0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkN0clR5cGUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSGV4QmluYXJ5IiB0eXBlPSJYU0hleEJpbmFyeSI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHhzOmhleEJpbmFyeSBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0hleEJpbmFyeSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSGV4QmluYXJ5Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIG51bGw8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOmhleEJpbmFyeSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6aGV4QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7aGV4QmluYXJ5JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtoZXhCaW5hcnkmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgaGV4QmluYXJ5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgaGV4QmluYXJ5IHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InZhbHVlIiByZXR1cm5jb21tZW50PSJUaGUgaGV4QmluYXJ5IHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGhleEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0gZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGhleEJpbmFyeSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyBoZXhCaW5hcnkgdmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgaGV4QmluYXJ5IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGhleEJpbmFyeSB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgaGV4QmluYXJ5IHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBoZXhCaW5hcnkgdmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBzYW1lLiBGYWxzZSBvdGhlcndpc2UuIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5FcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoCi0gbXVzdCBiZSBvZiB0eXBlIGhleEJpbmFyeTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNOQ05hbWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0lEIiB0eXBlPSJYU0lEIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0lEIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0lEIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU05DTmFtZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTkNOYW1lIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSURSRUYiIHR5cGU9IlhTSURSRUYiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSURSRUYiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSURSRUYiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTTG9uZyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTG9uZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludCIgdHlwZT0iWFNJbnQiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTSW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGludCB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBJbnQgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJJbnQgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czppbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOmludCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2ludCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7aW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7aW50JmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICZhcG9zO2ludCZhcG9zOyBpbiB0aGUKLSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO2ludCZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgaW50IGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNEZWNpbWFsIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEZWNpbWFsIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIgdHlwZT0iWFNJbnRlZ2VyIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgSW50ZWdlciBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU0ludGVnZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgSW50ZWdlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IkludGVnZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgSW50ZWdlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IkludGVnZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6aW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6aW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2ludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2ludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ6ZXJvIiByZXR1cm5jb21tZW50PSJUcnVlIGlzIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGlzIDAuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q2hlY2sgd2hldGhlciB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlzIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGlzIDAuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgaW50ZWdlciBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBpbnRlZ2VyIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGludGVnZXIgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iaXNMZXhpY2FsVmFsdWUiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsdWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJpbnRfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlRoZSBhY3R1YWwgaW50ZWdlciB2YWx1ZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InNldF9pbnQiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNldHMgdGhlIGludGVnZXIgc3RvcmVkIHRvIHRoYXQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgSW50ZWdlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IkludGVnZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwbHVzIiByZXR1cm5jb21tZW50PSJBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgYWRkaXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBhZGRpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIHN1YnRyYWN0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0ludGVnZXIgYW5kIHRoZSBzdXBwbGllZAotIFJlc3VsdFNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0gICAgICAgICBzdWJ0cmFjdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWVzIiByZXR1cm5jb21tZW50PSJBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotICAgICAgICAgbXVsdGlwbGljYXRpb24uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLSAgICAgICAgIG11bHRpcGxpY2F0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG11bHRpcGxpY2F0aW9uIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9kIiByZXR1cm5jb21tZW50PSJBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIG1vZHVsdXMgb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0gUmVzdWx0U2VxdWVuY2UuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bmFyeV9taW51cyIgcmV0dXJuY29tbWVudD0iTmV3IFhTSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoZSBpbnRlZ2VyIHN0b3JlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TmVnYXRlcyB0aGUgaW50ZWdlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhYnMiIHJldHVybmNvbW1lbnQ9Ik5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgaW50ZWdlciBzdG9yZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGUiIHR5cGU9Ik51bWVyaWNUeXBlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkFic29sdXRlcyB0aGUgaW50ZWdlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgaW50ZWdlciBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iY29udmVydEFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZGl2IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTSW50ZWdlciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmciIHR5cGU9IlhTTG9uZyI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNMb25nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTG9uZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBsb25nIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIExvbmcgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJMb25nIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6bG9uZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6bG9uZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O2xvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O2xvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztsb25nJmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGxvbmcgaW4gdGhlCi0gc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbG9uZyBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7bG9uZyZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbG9uZyBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTU3RyaW5nIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWUiIHR5cGU9IlhTTkNOYW1lIj4KLQkJPGNvbW1lbnQ+Ci0JCQk8ZGVzY3JpcHRpb24+QSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTkNOYW1lIGRhdGF0eXBlPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTkNOYW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmc8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgU3RyaW5nIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iU3RyaW5nIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05DTmFtZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBudWxsPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpOQ05hbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOk5DTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O05DTmFtZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7TkNOYW1lJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgTkNOYW1lIHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIE5DTmFtZSB3aXRoaW4KLSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBOQ05hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgTkNOYW1lIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIE5DTmFtZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNOb25Qb3NpdGl2ZUludGVnZXIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05lZ2F0aXZlSW50ZWdlciIgdHlwZT0iWFNOZWdhdGl2ZUludGVnZXIiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTmVnYXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgLTE8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05lZ2F0aXZlSW50ZWdlciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBuZWdhdGl2ZUludGVnZXIgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgbmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0ibmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6bmVnYXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpuZWdhdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDtuZWdhdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O25lZ2F0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO25lZ2F0aXZlSW50ZWdlciZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBuZWdhdGl2ZUludGVnZXIKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbmVnYXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztuZWdhdGl2ZUludGVnZXImYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTSW50ZWdlciIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vbk5lZ2F0aXZlSW50ZWdlciIgdHlwZT0iWFNOb25OZWdhdGl2ZUludGVnZXIiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTm9uTmVnYXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTTm9uTmVnYXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vbk5lZ2F0aXZlSW50ZWdlciB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBub25OZWdhdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJub25OZWdhdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpub25OZWdhdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOm5vbk5lZ2F0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O25vbk5lZ2F0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7bm9uTmVnYXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7bm9uTmVnYXRpdmVJbnRlZ2VyJmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIG5vbk5lZ2F0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBub25OZWdhdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO25vbk5lZ2F0aXZlSW50ZWdlciZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uTmVnYXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNJbnRlZ2VyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uUG9zaXRpdmVJbnRlZ2VyIiB0eXBlPSJYU05vblBvc2l0aXZlSW50ZWdlciI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNOb25Qb3NpdGl2ZUludGVnZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNOb25Qb3NpdGl2ZUludGVnZXIiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbm9uUG9zaXRpdmVJbnRlZ2VyIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIG5vblBvc2l0aXZlSW50ZWdlciB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9Im5vblBvc2l0aXZlSW50ZWdlciB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOm5vblBvc2l0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6bm9uUG9zaXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7bm9uUG9zaXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtub25Qb3NpdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztub25Qb3NpdGl2ZUludGVnZXImYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uUG9zaXRpdmVJbnRlZ2VyCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vblBvc2l0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7bm9uUG9zaXRpdmVJbnRlZ2VyJmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBub25Qb3NpdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vdGF0aW9uIiB0eXBlPSJYU05vdGF0aW9uIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU05vdGF0aW9uIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNOb25OZWdhdGl2ZUludGVnZXIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vbk5lZ2F0aXZlSW50ZWdlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Bvc2l0aXZlSW50ZWdlciIgdHlwZT0iWFNQb3NpdGl2ZUludGVnZXIiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTUG9zaXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMTwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTUG9zaXRpdmVJbnRlZ2VyIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHBvc2l0aXZlSW50ZWdlciB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBwb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJwb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpwb3NpdGl2ZUludGVnZXImcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOnBvc2l0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3Bvc2l0aXZlSW50ZWdlciZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7cG9zaXRpdmVJbnRlZ2VyJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7cG9zaXRpdmVJbnRlZ2VyJmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHBvc2l0aXZlSW50ZWdlcgotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBwb3NpdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Bvc2l0aXZlSW50ZWdlciZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgcG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNJbnQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0IiB0eXBlPSJYU1Nob3J0Ij4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Nob3J0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMDwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTU2hvcnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgc2hvcnQgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgU2hvcnQgdG8gYmUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ4IiBjb21tZW50PSJTaG9ydCB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOnNob3J0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czpzaG9ydCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3Nob3J0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDtzaG9ydCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Nob3J0JmFwb3M7IHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlICZhcG9zO3Nob3J0JmFwb3M7IGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvcztzaG9ydCZhcG9zOyBzdXBwbGllZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgc2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJDdHJUeXBlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZyIgdHlwZT0iWFNTdHJpbmciPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBTdHJpbmcgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICBUaGUgU3RyaW5nIHRvIGluaXRpYWxpc2UgdG88L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9IlRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0byIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1N0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byBudWxsPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czpzdHJpbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOnN0cmluZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3N0cmluZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7c3RyaW5nJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ192YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIFN0cmluZyBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmcgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdmFsdWUoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIFN0cmluZyBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0iVGhlIFN0cmluZyBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmcgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBTdHJpbmcgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBTdHJpbmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgU3RyaW5nIGluIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIFN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBTdHJpbmciIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJlcSIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBvZiB0aGUgc2FtZSBTdHJpbmcuIEZhbHNlCi0gICAgICAgICBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLSBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbiBhcmUgb2YgdGhlIHNhbWUgU3RyaW5nLiBGYWxzZQotICAgICAgICAgb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFN0cmluZyBpcyBsZXhvZ3JhcGhpY2FsbHkgZ3JlYXRlciB0aGFuIHRoYXQKLSAgICAgICAgIHN1cHBsaWVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGF0Ci0gICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsdCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGlzIFN0cmluZyBpcyBsZXhvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIHRoYXQgc3VwcGxpZWQuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2ggbXVzdCBiZSBvZgotIHR5cGUgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGxlc3MgdGhhbiB0aGF0IHN1cHBsaWVkLgotICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IkNhbGVuZGFyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1RpbWUiIHR5cGU9IlhTVGltZSI+Ci0JCTxpbXBsZW1lbnRzPgotCQkJPGludGVyZmFjZSBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lYWJsZSIgdHlwZT0iQ2xvbmVhYmxlIiAvPgotCQk8L2ltcGxlbWVudHM+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFRpbWUgZGF0YXR5cGU8L2Rlc2NyaXB0aW9uPgotCQk8L2NvbW1lbnQ+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNUaW1lIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHRvIHRoZSBzdXBwbGllZCB0aW1lIGFuZCB0aW1lem9uZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5jYWwKLSAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dHoKLSAgICAgICAgICAgIFRoZSB0aW1lem9uZSAocG9zc2libHkgbnVsbCkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iY2FsIiBjb21tZW50PSJDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLnV0aWwuQ2FsZW5kYXIiIHR5cGU9IkNhbGVuZGFyIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0idHoiIGNvbW1lbnQ9IlRoZSB0aW1lem9uZSAocG9zc2libHkgbnVsbCkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGltZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiB0eXBlPSJYU0R1cmF0aW9uIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVGltZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byB0aGUgY3VycmVudCB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNsb25lIiByZXR1cm5jb21tZW50PSJOZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgY29weSBvZiB0aGUgdGltZSBhbmQgdGltZXpvbmUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSB0aW1lIChhbmQgdGltZXpvbmUpIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIGNvcHkgb2YgdGhlIHRpbWUgYW5kIHRpbWV6b25lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiB0eXBlPSJDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3RpbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3RpbWUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwYXJzZV90aW1lIiByZXR1cm5jb21tZW50PSJOZXcgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgc3VwcGxpZWQgdGltZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGUiIHR5cGU9IkNhbGVuZGFyVHlwZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5DcmVhdGVzIGEgbmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIFN0cmluZyByZXByZXNlbnRlZCBzdXBwbGllZCB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnN0cgotICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGVkIHRpbWUgYW5kIHRpbWV6b25lIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBzdXBwbGllZCB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJzdHIiIGNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRlZCB0aW1lIGFuZCB0aW1lem9uZSB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHRpbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBmcm9tIHRoZQotIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIHRpbWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJob3VyIiByZXR1cm5jb21tZW50PSJUaGUgaG91ciBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGhvdXIgc3RvcmVkIGFzIGFuIGludGVnZXI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBob3VyIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnV0ZSIgcmV0dXJuY29tbWVudD0iVGhlIG1pbnV0ZSBzdG9yZWQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIG1pbnV0ZSBzdG9yZWQgYXMgYW4gaW50ZWdlcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+VGhlIG1pbnV0ZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZWNvbmQiIHJldHVybmNvbW1lbnQ9IlRoZSBzZWNvbmQgc3RvcmVkIiBmdWxsdHlwZT0iZG91YmxlIiB0eXBlPSJkb3VibGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBzZWNvbmRzIHN0b3JlZCBhcyBhbiBpbnRlZ2VyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UaGUgc2Vjb25kIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWV6b25lZCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgdGltZSBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNoZWNrIGZvciB3aGV0aGVyIHRoZSB0aW1lIHN0b3JlZCBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggaXQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHRpbWUgaGFzIGEgdGltZXpvbmUgYXNzb2NpYXRlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3ZhbHVlIiByZXR1cm5jb21tZW50PSJTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6dGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6dGltZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjYWxlbmRhciIgcmV0dXJuY29tbWVudD0iQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS51dGlsLkNhbGVuZGFyIiB0eXBlPSJDYWxlbmRhciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgYSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgc3RvcmVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHoiIHJldHVybmNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlIHRpbWUgc3RvcmVkIGFuZCB0aGUgYWN0dWFsIHRpbWUKLSAgICAgICAgIGFmdGVyIHRoZSB0aW1lem9uZSBpcyB0YWtlbiBpbnRvIGFjY291bnQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbiIgdHlwZT0iWFNEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGltZSBzdG9yZWQgYXMgYSBkdXJhdGlvbiBvZgotIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlIHRpbWUgc3RvcmVkIGFuZCB0aGUgYWN0dWFsIHRpbWUKLSAgICAgICAgIGFmdGVyIHRoZSB0aW1lem9uZSBpcyB0YWtlbiBpbnRvIGFjY291bnQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ2YWx1ZSIgcmV0dXJuY29tbWVudD0idGltZSBzdG9yZWQgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCIgZnVsbHR5cGU9ImRvdWJsZSIgdHlwZT0iZG91YmxlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aW1lIHN0b3JlZCBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZXEiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgYm90aCBYU1RpbWUmYXBvcztzIHJlcHJlc2VudCB0aGUgc2FtZSB0aW1lLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFhTVGltZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIGJvdGggWFNUaW1lJmFwb3M7cyByZXByZXNlbnQgdGhlIHNhbWUgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibHQiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzbnRzIGEgcG9pbnQgaW4gdGltZSBhZnRlciB0aGF0Ci0gICAgICAgICByZXByZXNlbnRlZCBieSB0aGUgdGltZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzbnRzIGEgcG9pbnQgaW4gdGltZSBhZnRlciB0aGF0Ci0gICAgICAgICByZXByZXNlbnRlZCBieSB0aGUgdGltZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJndCIgcmV0dXJuY29tbWVudD0iVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGJlZm9yZSB0aGF0Ci0gICAgICAgICByZXByZXNlbnRlZCBieSB0aGUgdGltZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb248L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzbnRzIGEgcG9pbnQgaW4gdGltZSBiZWZvcmUgdGhhdAotICAgICAgICAgcmVwcmVzZW50ZWQgYnkgdGhlIHRpbWUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFhTVGltZSB0byBjb21wYXJlIHdpdGgiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIgdHlwZT0iQW55VHlwZSIgLz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNvbnRleHQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQiIHR5cGU9IkR5bmFtaWNDb250ZXh0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJtaW51cyIgcmV0dXJuY29tbWVudD0iQSBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24iIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPk1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIHJlcHJlc2VudGF0aW9uLiBUaGlzIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgZWl0aGVyIHR5cGUKLSBYU1RpbWUgKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlCi0gdHdvIHRpbWVzKSBvciBhIFhTRGF5VGltZUR1cmF0aW9uIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIHRpbWUKLSB3aGVuIHRoaXMgZHVyYXRpb24gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSB0aW1lIHN0b3JlZCkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIHN1YnRyYWN0IChlaXRoZXIgWFNUaW0gb3IKLSAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBzdWJ0cmFjdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgcmVwcmVzZW50YXRpb24gdG8gc3VidHJhY3QgKGVpdGhlciBYU1RpbSBvcgotICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uKSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwbHVzIiByZXR1cm5jb21tZW50PSJBIFhTVGltZSByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGlzIGFkZGl0aW9uLiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyB0aW1lIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkIHRpbWUKLSBkdXJhdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBBIFhEVERheVRpbWVEdXJhdGlvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSB0bwotICAgICAgICAgICAgYWRkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+QSBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhpcyBhZGRpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iQSBYRFREYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8KLSAgICAgICAgICAgIGFkZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iWFNVbnNpZ25lZFNob3J0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZFNob3J0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRCeXRlIiB0eXBlPSJYU1Vuc2lnbmVkQnl0ZSI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnNpZ25lZEJ5dGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnNpZ25lZEJ5dGUiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgdW5zaWduZWRCeXRlIHZhbHVlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIHVuc2lnbmVkQnl0ZSB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9InVuc2lnbmVkQnl0ZSB0byBiZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLm1hdGguQmlnSW50ZWdlciIgdHlwZT0iQmlnSW50ZWdlciIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ic3RyaW5nX3R5cGUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3hzOnVuc2lnbmVkQnl0ZSZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6dW5zaWduZWRCeXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7dW5zaWduZWRCeXRlJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt1bnNpZ25lZEJ5dGUmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIHJldHVybmNvbW1lbnQ9Ik5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvczt1bnNpZ25lZEJ5dGUmYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRCeXRlCi0gaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkQnl0ZSBpcyB0byBiZSBleHRyYWN0ZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7dW5zaWduZWRCeXRlJmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZEJ5dGUgaXMgdG8gYmUgZXh0cmFjdGVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJYU1Vuc2lnbmVkTG9uZyIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRMb25nIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQiIHR5cGU9IlhTVW5zaWduZWRJbnQiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVW5zaWduZWRJbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnNpZ25lZEludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZEludCB2YWx1ZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj54Ci0gICAgICAgICAgICB1bnNpZ25lZEludCB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9InVuc2lnbmVkSW50IHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6dW5zaWduZWRJbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3hzOnVuc2lnbmVkSW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7dW5zaWduZWRJbnQmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3Vuc2lnbmVkSW50JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJmFwb3M7dW5zaWduZWRJbnQmYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRJbnQKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRJbnQgaXMgdG8gYmUgZXh0cmFjdGVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Vuc2lnbmVkSW50JmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZEludCBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTTm9uTmVnYXRpdmVJbnRlZ2VyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZExvbmciIHR5cGU9IlhTVW5zaWduZWRMb25nIj4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkTG9uZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDA8L2Rlc2NyaXB0aW9uPgotCQkJCTwvY29tbWVudD4KLQkJCTwvY29uc3RydWN0b3I+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkTG9uZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCB1bnNpZ25lZExvbmcgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgdW5zaWduZWRMb25nIHRvIGJlIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0idW5zaWduZWRMb25nIHRvIGJlIHN0b3JlZCIgZnVsbHR5cGU9ImphdmEubWF0aC5CaWdJbnRlZ2VyIiB0eXBlPSJCaWdJbnRlZ2VyIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6dW5zaWduZWRMb25nJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czp1bnNpZ25lZExvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0idHlwZV9uYW1lIiByZXR1cm5jb21tZW50PSImcXVvdDt1bnNpZ25lZExvbmcmcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBuYW1lIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3Vuc2lnbmVkTG9uZyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Vuc2lnbmVkTG9uZyZhcG9zOyBzdXBwbGllZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZExvbmcKLSBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRMb25nIGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvczt1bnNpZ25lZExvbmcmYXBvczsgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkTG9uZyBpcyB0byBiZSBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGNvbW1lbnQ9IiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTVW5zaWduZWRJbnQiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkSW50IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRTaG9ydCIgdHlwZT0iWFNVbnNpZ25lZFNob3J0Ij4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1Vuc2lnbmVkU2hvcnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNVbnNpZ25lZFNob3J0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkU2hvcnQgdmFsdWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eAotICAgICAgICAgICAgdW5zaWduZWRTaG9ydCB0byBiZSBzdG9yZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9IngiIGNvbW1lbnQ9InVuc2lnbmVkU2hvcnQgdG8gYmUgc3RvcmVkIiBmdWxsdHlwZT0iamF2YS5tYXRoLkJpZ0ludGVnZXIiIHR5cGU9IkJpZ0ludGVnZXIiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czp1bnNpZ25lZFNob3J0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4mcXVvdDt4czp1bnNpZ25lZFNob3J0JnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7dW5zaWduZWRTaG9ydCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7dW5zaWduZWRTaG9ydCZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zdHJ1Y3RvciIgcmV0dXJuY29tbWVudD0iTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICZhcG9zO3Vuc2lnbmVkU2hvcnQmYXBvczsgc3VwcGxpZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRTaG9ydAotIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZFNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAmYXBvczt1bnNpZ25lZFNob3J0JmFwb3M7IHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZFNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ3RyVHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiIHN1cGVyY2xhc3NmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljIiB0eXBlPSJYU1VudHlwZWRBdG9taWMiPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVbnR5cGVkQXRvbWljIGRhdGF0eXBlIHdoaWNoIGlzIHVzZWQgdG8gcmVwcmVzZW50Ci0gdW50eXBlZCBhdG9taWMgbm9kZXMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVW50eXBlZEF0b21pYyIgLz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTVW50eXBlZEF0b21pYyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPngKLSAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSB1bnR5cGVkIGF0b21pYwotICAgICAgICAgICAgbm9kZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieCIgY29tbWVudD0iVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhlIHVudHlwZWQgYXRvbWljCi0gICAgICAgICAgICBub2RlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdHlwZSIgcmV0dXJuY29tbWVudD0iJnF1b3Q7eHM6dW50eXBlZEF0b21pYyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6dW50eXBlZEF0b21pYyZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhpcyB1bnR5cGVkIGF0b21pYyBub2RlIiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhpcyB1bnR5cGVkIGF0b21pYwotIG5vZGU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhpcyB1bnR5cGVkIGF0b21pYyBub2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc3RydWN0b3IiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InR5cGVfbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9IlhTRHVyYXRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTWWVhck1vbnRoRHVyYXRpb24iIHR5cGU9IlhTWWVhck1vbnRoRHVyYXRpb24iPgotCQk8Y29tbWVudD4KLQkJCTxkZXNjcmlwdGlvbj5BIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBZZWFyTW9udGhEdXJhdGlvbiBkYXRhdHlwZTwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJYU1llYXJNb250aER1cmF0aW9uIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLiBJZiB0aGUgbnVtYmVyIG9mIG1vbnRocwotIHN1cHBsaWVkIGlzIG1vcmUgdGhhbiAxMiwgdGhlIG51bWJlciBvZiB5ZWFycyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+eWVhcgotICAgICAgICAgICAgTnVtYmVyIG9mIHllYXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+bW9udGgKLSAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5uZWdhdGl2ZQotICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0gICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ieWVhciIgY29tbWVudD0iTnVtYmVyIG9mIHllYXJzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCQk8cGFyYW0gbmFtZT0ibW9udGgiIGNvbW1lbnQ9Ik51bWJlciBvZiBtb250aHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuZWdhdGl2ZSIgY29tbWVudD0iVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0gICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iWFNZZWFyTW9udGhEdXJhdGlvbiI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Jbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1vbnRoczwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5tb250aHMKLSAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im1vbnRocyIgY29tbWVudD0iTnVtYmVyIG9mIG1vbnRocyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlhTWWVhck1vbnRoRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgweWVhcnMgYW5kIDBtb250aHMpPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQkJPG1ldGhvZCBzdGF0aWM9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGFyc2VZTUR1cmF0aW9uIiByZXR1cm5jb21tZW50PSJOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIG9mIHRpbWUKLSAgICAgICAgIHN1cHBsaWVkIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24iIHR5cGU9IlhTRHVyYXRpb24iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIG5ldyBYU1llYXJNb250aER1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+c3RyCi0gICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZQotICAgICAgICAgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InN0ciIgY29tbWVudD0iU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ0eXBlX25hbWUiIHJldHVybmNvbW1lbnQ9IiZxdW90O3llYXJNb250aER1cmF0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZSIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXRyaXZlcyB0aGUgZGF0YXR5cGUmYXBvcztzIG5hbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPiZxdW90O3llYXJNb250aER1cmF0aW9uJnF1b3Q7IHdoaWNoIGlzIHRoZSBkYXRhdHlwZSZhcG9zO3MgbmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnN0cnVjdG9yIiByZXR1cm5jb21tZW50PSJOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UiIHR5cGU9IlJlc3VsdFNlcXVlbmNlIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdGltZSBkdXJhdGlvbgotIGZyb20gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPmFyZwotICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibmVnYXRpdmUiIHJldHVybmNvbW1lbnQ9IlRydWUgaWYgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoIHRpbWUuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZHVyYXRpb24gcmVwcmVzZW50cyBhIGJhY2t3YXJkIHBhc3NhZ2UgdGhyb3VnaAotIHRpbWU8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoIHRpbWUuCi0gICAgICAgICBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzdHJpbmdfdmFsdWUiIHJldHVybmNvbW1lbnQ9IlN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InN0cmluZ190eXBlIiByZXR1cm5jb21tZW50PSImcXVvdDt4czp5ZWFyTW9udGhEdXJhdGlvbiZxdW90OyB3aGljaCBpcyB0aGUgZGF0YXR5cGUmYXBvcztzIGZ1bGwgcGF0aG5hbWUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkYXRhdHlwZSZhcG9zO3MgZnVsbCBwYXRobmFtZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+JnF1b3Q7eHM6eWVhck1vbnRoRHVyYXRpb24mcXVvdDsgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJmFwb3M7cyBmdWxsIHBhdGhuYW1lPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0ibW9udGhWYWx1ZSIgcmV0dXJuY29tbWVudD0iTnVtYmVyIG9mIG1vbnRocyBtYWtpbmcgdXAgdGhpcyBkdXJhdGlvbiBvZiB0aW1lIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gaXQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPk51bWJlciBvZiBtb250aHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxIiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIGR1cmF0aW9uIG9mIHRpbWUuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imx0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBsYXJnZXIgZHVyYXRpb24gdGhhbiB0aGF0Ci0gICAgICAgICBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZSIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLSAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCQk8cGFyYW0gbmFtZT0iY29udGV4dCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIgdHlwZT0iRHluYW1pY0NvbnRleHQiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imd0IiByZXR1cm5jb21tZW50PSJUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBzbWFsbGVyIGR1cmF0aW9uIHRoYW4gdGhhdAotICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UiIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGg8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5UcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc2VudHMgYSBzbWFsbGVyIGR1cmF0aW9uIHRoYW4gdGhhdAotICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2U8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAdGhyb3dzIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5EeW5hbWljRXJyb3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImFyZyIgY29tbWVudD0iVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gY29tcGFyZSB3aXRoIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJCTxwYXJhbSBuYW1lPSJjb250ZXh0IiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IiB0eXBlPSJEeW5hbWljQ29udGV4dCIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBjb21tZW50PSIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0icGx1cyIgcmV0dXJuY29tbWVudD0iTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLSAgICAgICAgIGFmdGVyIHRoZSBhZGRpdGlvbiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBhZGQ8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIGFkZGl0aW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGFkZCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im1pbnVzIiByZXR1cm5jb21tZW50PSJOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIHN1YnRyYWN0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLSAgICAgICAgIGFmdGVyIHRoZSBzdWJ0cmFjdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBzdWJ0cmFjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InRpbWVzIiByZXR1cm5jb21tZW50PSJOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIG11bHRpcGxpY2F0aW9uIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIiB0eXBlPSJSZXN1bHRTZXF1ZW5jZSI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5NYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0gZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5hcmcKLSAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5PC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+TmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLSAgICAgICAgIGFmdGVyIHRoZSBtdWx0aXBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkB0aHJvd3MiPgotCQkJCQkJPGRlc2NyaXB0aW9uPkR5bmFtaWNFcnJvcjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0iYXJnIiBjb21tZW50PSJUaGUgZHVyYXRpb24gb2YgdGltZSB0byBtdWx0aXBseSBieSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRpdiIgcmV0dXJuY29tbWVudD0iTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLSAgICAgICAgIGFmdGVyIHRoZSBkaXZpc2lvbiIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+TWF0aGVtYXRpY2FsIGRpdmlzaW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbik8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+YXJnCi0gICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBkaXZpZGUgYnk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5OZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotICAgICAgICAgYWZ0ZXIgdGhlIGRpdmlzaW9uPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHRocm93cyI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+RHluYW1pY0Vycm9yPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhcmciIGNvbW1lbnQ9IlRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGRpdmlkZSBieSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gY29tbWVudD0iIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iQ29uc3RydWN0b3JGTCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQiIHN1cGVyY2xhc3NmdWxsdHlwZT0iQ29uc3RydWN0b3JGTCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZC5Vc2VyRGVmaW5lZEN0ckxpYnJhcnkiIHR5cGU9IlVzZXJEZWZpbmVkQ3RyTGlicmFyeSI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iVXNlckRlZmluZWRDdHJMaWJyYXJ5Ij4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibnMiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0eXBlPSJTdHJpbmciIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L2NvbnN0cnVjdG9yPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzIiBpbnRlcmZhY2U9InRydWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29kZVBvaW50SXRlcmF0b3IiIHR5cGU9IkNvZGVQb2ludEl0ZXJhdG9yIj4KLQkJPGltcGxlbWVudHM+Ci0JCQk8aW50ZXJmYWNlIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xvbmVhYmxlIiB0eXBlPSJDbG9uZWFibGUiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPGZpZWxkcz4KLQkJCTxmaWVsZCBmaW5hbD0idHJ1ZSIgc3RhdGljPSJ0cnVlIiBjb25zdD0iLTEiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iRE9ORSIgY29uc3RleHByPSItMSIgZnVsbHR5cGU9ImludCIgdHlwZT0iaW50Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPlNlbnRpbmVsIHZhbHVlIHJldHVybmVkIGZyb20gaXRlcmF0b3Igd2hlbiB0aGUgZW5kIGlzIHJlYWNoZWQuCi0gVGhlIHZhbHVlIGlzIC0xIHdoaWNoIHdpbGwgbmV2ZXIgYmUgYSB2YWxpZCBjb2RlcG9pbnQuPC9kZXNjcmlwdGlvbj4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L2ZpZWxkPgotCQk8L2ZpZWxkcz4KLQkJPG1ldGhvZHM+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZmlyc3QiIHJldHVybmNvbW1lbnQ9InRoZSBmaXJzdCBjb2RlIHBvaW50IGluIHRoZSB0ZXh0LCBvciBET05FIGlmIHRoZSB0ZXh0IGlzIGVtcHR5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmVzZXRzIHRoZSBwb3NpdGlvbiB0byAwIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjb2RlIHBvaW50LjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGZpcnN0IGNvZGUgcG9pbnQgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIHRleHQgaXMgZW1wdHk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJsYXN0IiByZXR1cm5jb21tZW50PSJ0aGUgbGFzdCBjb2RlIHBvaW50IGluIHRoZSB0ZXh0LCBvciBET05FIGlmIHRoZSB0ZXh0IGlzIGVtcHR5IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+U2V0cyB0aGUgcG9zaXRpb24gdG8gdGhlIGxhc3QgcG9zc2libGUgcG9zaXRpb24gKG9yIDAgaWYgdGhlIHRleHQgaXMgZW1wdHkpCi0gYW5kIHJldHVybnMgdGhlIGNvZGUgcG9pbnQgYXQgdGhhdCBwb3NpdGlvbi48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBsYXN0IGNvZGUgcG9pbnQgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIHRleHQgaXMgZW1wdHk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2VlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4jZ2V0RW5kSW5kZXgoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImN1cnJlbnQiIHJldHVybmNvbW1lbnQ9InRoZSBjb2RlIHBvaW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKLSBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgdGV4dC4iIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5HZXRzIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBnZXRJbmRleCgpKS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnRoZSBjb2RlIHBvaW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKLSBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgdGV4dC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2VlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4jZ2V0SW5kZXgoKTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5leHQiIHJldHVybmNvbW1lbnQ9InRoZSBjb2RlIHBvaW50IGF0IHRoZSBuZXcgcG9zaXRpb24gb3IgRE9ORSBpZiB0aGUgbmV3Ci0gcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIHRleHQgcmFuZ2UuIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW5jcmVtZW50cyB0aGUgaXRlcmF0b3ImYXBvcztzIGNvZGUgcG9pbnQgaW5kZXggYnkgb25lIGFuZCByZXR1cm5zIHRoZSBjb2RlIHBvaW50Ci0gYXQgdGhlIG5ldyBpbmRleC4gIElmIHRoZSByZXN1bHRpbmcgaW5kZXggaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCB0aGUKLSBpbmRleCBpcyBub3QgaW5jcmVtZW50ZWQsIGFuZCBET05FIGlzIHJldHVybmVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHJldHVybiI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+dGhlIGNvZGUgcG9pbnQgYXQgdGhlIG5ldyBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBuZXcKLSBwb3NpdGlvbiBpcyBhZnRlciB0aGUgdGV4dCByYW5nZS48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJwcmV2aW91cyIgcmV0dXJuY29tbWVudD0idGhlIGNvZGUgcG9pbnQgYXQgdGhlIG5ldyBwb3NpdGlvbiAob3IgRE9ORSBpZiB0aGUgY3VycmVudAotIHBvc2l0aW9uIGlzIDApIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+RGVjcmVtZW50cyB0aGUgaXRlcmF0b3ImYXBvcztzIGluZGV4IGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgY2hhcmFjdGVyCi0gYXQgdGhlIG5ldyBpbmRleC4gSWYgdGhlIGN1cnJlbnQgaW5kZXggaXMgMCwgdGhlIGluZGV4Ci0gcmVtYWlucyBhdCAwIGFuZCBhIHZhbHVlIG9mIERPTkUgaXMgcmV0dXJuZWQuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgY29kZSBwb2ludCBhdCB0aGUgbmV3IHBvc2l0aW9uIChvciBET05FIGlmIHRoZSBjdXJyZW50Ci0gcG9zaXRpb24gaXMgMCk8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRJbmRleCIgcmV0dXJuY29tbWVudD0idGhlIGN1cnJlbnQgaW5kZXguIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+UmV0dXJucyB0aGUgY3VycmVudCBpbmRleCAoYXMgYSBjb2RlcG9pbnQsIG5vdCBhIHN0cmluZyBpbmRleCkuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50aGUgY3VycmVudCBpbmRleC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjbG9uZSIgcmV0dXJuY29tbWVudD0iQSBjb3B5IG9mIHRoaXMiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuT2JqZWN0IiB0eXBlPSJPYmplY3QiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q3JlYXRlIGEgY29weSBvZiB0aGlzIGNvZGUgcG9pbnQgaXRlcmF0b3I8L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgY29weSBvZiB0aGlzPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJTY2FsYXJUeXBlUHJvbW90ZXIiIHZpc2liaWxpdHk9InB1YmxpYyIgcGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzIiBzdXBlcmNsYXNzZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TY2FsYXJUeXBlUHJvbW90ZXIiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29tcGFyYWJsZVR5cGVQcm9tb3RlciIgdHlwZT0iQ29tcGFyYWJsZVR5cGVQcm9tb3RlciI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iQ29tcGFyYWJsZVR5cGVQcm9tb3RlciIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJjaGVja0NvbWJpbmF0aW9uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5ld1R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0ic3Vic3RpdHV0ZSIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlVG9Db25zaWRlciIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJPC9tZXRob2RzPgotCTwvamVsY2xhc3M+Ci0JPGplbGNsYXNzIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5MaXRlcmFsVXRpbHMiIHR5cGU9IkxpdGVyYWxVdGlscyI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPlN0cmluZyBsaXRlcmFsIHV0aWxpdGllczwvZGVzY3JpcHRpb24+Ci0JCTwvY29tbWVudD4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJMaXRlcmFsVXRpbHMiIC8+Ci0JCQk8bWV0aG9kIHN0YXRpYz0idHJ1ZSIgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJ1bnF1b3RlIiByZXR1cm5jb21tZW50PSJ1bnF1b3RlZCBhbmQgdW5lc2NhcGVkIHN0cmluZyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5VbnF1b3RlcyBhIHF1b3RlZCBzdHJpbmcsIGNoYW5naW5nIGRvdWJsZSBxdW90ZXMgaW50byBzaW5nbGUgcXVvdGVzIGFzIHdlbGwuCi0gRXhhbXBsZXMgKHN0cmluZyBkZWxpbWl0ZWQgYnkgJmd0OyBhbmQgJmx0Oyk6Ci0gICZndDsmcXVvdDtBJnF1b3Q7Jmx0OyBiZWNvbWVzICZndDtBJmx0OyAKLSAgJmd0OyZhcG9zO0ImYXBvczsmbHQ7IGJlY29tZXMgJmd0O0ImbHQ7IAotICAmZ3Q7JnF1b3Q7QSZxdW90OyZxdW90O0ImcXVvdDsmbHQ7IGJlY29tZXMgJmd0O0EmcXVvdDtCJmx0OwotICAmZ3Q7JnF1b3Q7QSZxdW90OyZxdW90O0ImcXVvdDsmbHQ7IGJlY29tZXMgJmd0O0EmcXVvdDtCJmx0OwotICAmZ3Q7JmFwb3M7QSZhcG9zOyZhcG9zOyZhcG9zOyZhcG9zO0ImYXBvczsmbHQ7IGJlY29tZXMgJmd0O0EmYXBvczsmYXBvcztCJmx0OwotICAmZ3Q7JnF1b3Q7QSZhcG9zOyZhcG9zOyZhcG9zOyZhcG9zO0ImcXVvdDsmbHQ7IGJlY29tZXMgJmd0O0EmYXBvczsmYXBvczsmYXBvczsmYXBvcztCJmx0OzwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5xdW90ZWRTdHJpbmcgQSBxdW90ZWQgc3RyaW5nIHBvc3NpYmx5IGNvbnRhaW5pbmcgZXNjYXBlZCBxdW90ZXM8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj51bnF1b3RlZCBhbmQgdW5lc2NhcGVkIHN0cmluZzwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0icXVvdGVkU3RyaW5nIiBjb21tZW50PSJBIHF1b3RlZCBzdHJpbmcgcG9zc2libHkgY29udGFpbmluZyBlc2NhcGVkIHF1b3RlcyIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3Mgc3VwZXJjbGFzcz0iVHlwZVByb21vdGVyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuVHlwZVByb21vdGVyIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLk51bWVyaWNUeXBlUHJvbW90ZXIiIHR5cGU9Ik51bWVyaWNUeXBlUHJvbW90ZXIiPgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Ik51bWVyaWNUeXBlUHJvbW90ZXIiIC8+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0iY2hlY2tDb21iaW5hdGlvbiIgZnVsbHR5cGU9ImJvb2xlYW4iIHR5cGU9ImJvb2xlYW4iPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJuZXdUeXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImRvUHJvbW90ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiB0eXBlPSJBbnlBdG9taWNUeXBlIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idmFsdWUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9InN1YnN0aXR1dGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZVRvQ29uc2lkZXIiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotCTxqZWxjbGFzcyBzdXBlcmNsYXNzPSJOdW1lcmljVHlwZVByb21vdGVyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscyIgc3VwZXJjbGFzc2Z1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTnVtZXJpY1R5cGVQcm9tb3RlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TY2FsYXJUeXBlUHJvbW90ZXIiIHR5cGU9IlNjYWxhclR5cGVQcm9tb3RlciI+Ci0JCTxtZXRob2RzPgotCQkJPGNvbnN0cnVjdG9yIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iU2NhbGFyVHlwZVByb21vdGVyIiAvPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwcm90ZWN0ZWQiIG5hbWU9ImNoZWNrQ29tYmluYXRpb24iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ibmV3VHlwZSIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJzdWJzdGl0dXRlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVUb0NvbnNpZGVyIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgZmluYWw9InRydWUiIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvciIgdHlwZT0iU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IiPgotCQk8aW1wbGVtZW50cz4KLQkJCTxpbnRlcmZhY2UgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db2RlUG9pbnRJdGVyYXRvciIgdHlwZT0iQ29kZVBvaW50SXRlcmF0b3IiIC8+Ci0JCTwvaW1wbGVtZW50cz4KLQkJPG1ldGhvZHM+Ci0JCQk8Y29uc3RydWN0b3IgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5Db25zdHJ1Y3RzIGFuIGl0ZXJhdG9yIHdpdGggYW4gaW5pdGlhbCBpbmRleCBvZiAwLjwvZGVzY3JpcHRpb24+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0ZXh0IiBmdWxsdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHlwZT0iU3RyaW5nIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9jb25zdHJ1Y3Rvcj4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJzZXRUZXh0IiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5SZXNldCB0aGlzIGl0ZXJhdG9yIHRvIHBvaW50IHRvIGEgbmV3IHN0cmluZy4gIFRoaXMgcGFja2FnZS12aXNpYmxlCi0gbWV0aG9kIGlzIHVzZWQgYnkgb3RoZXIgamF2YS50ZXh0IGNsYXNzZXMgdGhhdCB3YW50IHRvIGF2b2lkIGFsbG9jYXRpbmcKLSBuZXcgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cyBldmVyeSB0aW1lIHRoZWlyIHNldFRleHQgbWV0aG9kCi0gaXMgY2FsbGVkLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHBhcmFtIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50ZXh0ICAgVGhlIFN0cmluZyB0byBiZSBpdGVyYXRlZCBvdmVyPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNpbmNlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj4xLjI8L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQk8L2NvbW1lbnQ+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InRleHQiIGNvbW1lbnQ9IlRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlciIgZnVsbHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHR5cGU9IlN0cmluZyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImZpcnN0IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5maXJzdCgpIGZvciBTdHJpbmcuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2VlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5Db2RlUG9pbnRJdGVyYXRvciNmaXJzdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Imxhc3QiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmxhc3QoKSBmb3IgU3RyaW5nLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNlZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q29kZVBvaW50SXRlcmF0b3IjbGFzdDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImN1cnJlbnQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmN1cnJlbnQoKSBmb3IgU3RyaW5nLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNlZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q29kZVBvaW50SXRlcmF0b3IjY3VycmVudDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9Im5leHQiIGZ1bGx0eXBlPSJpbnQiIHR5cGU9ImludCI+Ci0JCQkJPGNvbW1lbnQ+Ci0JCQkJCTxkZXNjcmlwdGlvbj5JbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLm5leHQoKSBmb3IgU3RyaW5nLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTxhdHRyaWJ1dGUgbmFtZT0iQHNlZSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+Q29kZVBvaW50SXRlcmF0b3IjbmV4dDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByZXZpb3VzIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5wcmV2aW91cygpIGZvciBTdHJpbmcuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2VlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5Db2RlUG9pbnRJdGVyYXRvciNwcmV2aW91czwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImdldEluZGV4IiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+SW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAc2VlIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5Db2RlUG9pbnRJdGVyYXRvciNnZXRJbmRleDwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImVxdWFscyIgcmV0dXJuY29tbWVudD0idHJ1ZSBpZiB0aGUgZ2l2ZW4gb2JqIGlzIHRoZSBzYW1lIGFzIHRoaXMKLSBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3Q7IGZhbHNlIG90aGVyd2lzZS4iIGZ1bGx0eXBlPSJib29sZWFuIiB0eXBlPSJib29sZWFuIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cy48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkBwYXJhbSI+Ci0JCQkJCQk8ZGVzY3JpcHRpb24+b2JqIHRoZSBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aC48L2Rlc2NyaXB0aW9uPgotCQkJCQk8L2F0dHJpYnV0ZT4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj50cnVlIGlmIHRoZSBnaXZlbiBvYmogaXMgdGhlIHNhbWUgYXMgdGhpcwotIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIG9iamVjdDsgZmFsc2Ugb3RoZXJ3aXNlLjwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0ib2JqIiBjb21tZW50PSJ0aGUgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGguIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0IiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iaGFzaENvZGUiIHJldHVybmNvbW1lbnQ9IkEgaGFzaCBjb2RlIiBmdWxsdHlwZT0iaW50IiB0eXBlPSJpbnQiPgotCQkJCTxjb21tZW50PgotCQkJCQk8ZGVzY3JpcHRpb24+Q29tcHV0ZXMgYSBoYXNoY29kZSBmb3IgdGhpcyBpdGVyYXRvci48L2Rlc2NyaXB0aW9uPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPkEgaGFzaCBjb2RlPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY2xvbmUiIHJldHVybmNvbW1lbnQ9IkEgY29weSBvZiB0aGlzIiBmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgdHlwZT0iT2JqZWN0Ij4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGRlc2NyaXB0aW9uPkNyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgaXRlcmF0b3IuPC9kZXNjcmlwdGlvbj4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcmV0dXJuIj4KLQkJCQkJCTxkZXNjcmlwdGlvbj5BIGNvcHkgb2YgdGhpczwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCTwvY29tbWVudD4KLQkJCTwvbWV0aG9kPgotCQk8L21ldGhvZHM+Ci0JPC9qZWxjbGFzcz4KLQk8amVsY2xhc3MgYWJzdHJhY3Q9InRydWUiIHN1cGVyY2xhc3M9Ik9iamVjdCIgdmlzaWJpbGl0eT0icHVibGljIiBwYWNrYWdlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMiIHN1cGVyY2xhc3NmdWxsdHlwZT0iamF2YS5sYW5nLk9iamVjdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXIiIHR5cGU9IlR5cGVQcm9tb3RlciI+Ci0JCTxjb21tZW50PgotCQkJPGRlc2NyaXB0aW9uPkdlbmVyaWMgdHlwZSBwcm9tb3RlciBmb3IgaGFuZGxpbmcgc3VidHlwZSBzdWJzdGl0dXRpb24gYW5kIHR5cGUgcHJvbW90aW9ucyBmb3IgZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMuPC9kZXNjcmlwdGlvbj4KLQkJPC9jb21tZW50PgotCQk8bWV0aG9kcz4KLQkJCTxjb25zdHJ1Y3RvciB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9IlR5cGVQcm9tb3RlciIgLz4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iZG9Qcm9tb3RlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUiIHR5cGU9IkFueUF0b21pY1R5cGUiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ2YWx1ZSIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlIiB0eXBlPSJBbnlBdG9taWNUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIGZpbmFsPSJ0cnVlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9InByb21vdGUiIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIgdHlwZT0iQW55QXRvbWljVHlwZSI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InZhbHVlIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUiIHR5cGU9IkFueVR5cGUiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgYWJzdHJhY3Q9InRydWUiIHZpc2liaWxpdHk9InByb3RlY3RlZCIgbmFtZT0ic3Vic3RpdHV0ZSIgcmV0dXJuY29tbWVudD0iVGhlIHN1cGVydHlwZSB0byB0cmVhdCBpdCBhcyAoaS5lLiBpZiBhIHhzOm5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0cmVhdGVkIGFzIHhzOm51bWJlcikiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIj4KLQkJCQk8Y29tbWVudD4KLQkJCQkJPGF0dHJpYnV0ZSBuYW1lPSJAcGFyYW0iPgotCQkJCQkJPGRlc2NyaXB0aW9uPnR5cGVUb0NvbnNpZGVyIFRoZTwvZGVzY3JpcHRpb24+Ci0JCQkJCTwvYXR0cmlidXRlPgotCQkJCQk8YXR0cmlidXRlIG5hbWU9IkByZXR1cm4iPgotCQkJCQkJPGRlc2NyaXB0aW9uPlRoZSBzdXBlcnR5cGUgdG8gdHJlYXQgaXQgYXMgKGkuZS4gaWYgYSB4czpub25OZWdhdGl2ZUludGVnZXIgaXMgdHJlYXRlZCBhcyB4czpudW1iZXIpPC9kZXNjcmlwdGlvbj4KLQkJCQkJPC9hdHRyaWJ1dGU+Ci0JCQkJPC9jb21tZW50PgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJ0eXBlVG9Db25zaWRlciIgY29tbWVudD0iVGhlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCBhYnN0cmFjdD0idHJ1ZSIgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJjaGVja0NvbWJpbmF0aW9uIiBmdWxsdHlwZT0iYm9vbGVhbiIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9Im5ld1R5cGUiIGZ1bGx0eXBlPSJqYXZhLmxhbmcuQ2xhc3MiIHR5cGU9IkNsYXNzIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc2lkZXJUeXBlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InR5cGVUb0NvbnNpZGVyIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCQk8L3BhcmFtcz4KLQkJCQk8ZXhjZXB0aW9ucz4KLQkJCQkJPGV4Y2VwdGlvbiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvciIgdHlwZT0iRHluYW1pY0Vycm9yIiAvPgotCQkJCTwvZXhjZXB0aW9ucz4KLQkJCTwvbWV0aG9kPgotCQkJPG1ldGhvZCB2aXNpYmlsaXR5PSJwdWJsaWMiIG5hbWU9ImNvbnNpZGVyVHlwZXMiIGZ1bGx0eXBlPSJ2b2lkIiB0eXBlPSJ2b2lkIj4KLQkJCQk8cGFyYW1zPgotCQkJCQk8cGFyYW0gbmFtZT0idHlwZXNUb0NvbnNpZGVyIiBmdWxsdHlwZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iIHR5cGU9IkNvbGxlY3Rpb24iIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJjb25zaWRlclNlcXVlbmNlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9InNlcXVlbmNlVG9Db25zaWRlciIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIgdHlwZT0iUmVzdWx0U2VxdWVuY2UiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQkJPGV4Y2VwdGlvbnM+Ci0JCQkJCTxleGNlcHRpb24gZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiIHR5cGU9IkR5bmFtaWNFcnJvciIgLz4KLQkJCQk8L2V4Y2VwdGlvbnM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJnZXRUYXJnZXRUeXBlIiBmdWxsdHlwZT0iamF2YS5sYW5nLkNsYXNzIiB0eXBlPSJDbGFzcyIgLz4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHJvdGVjdGVkIiBuYW1lPSJzZXRUYXJnZXRUeXBlIiBmdWxsdHlwZT0idm9pZCIgdHlwZT0idm9pZCI+Ci0JCQkJPHBhcmFtcz4KLQkJCQkJPHBhcmFtIG5hbWU9ImNsYXNzMSIgZnVsbHR5cGU9ImphdmEubGFuZy5DbGFzcyIgdHlwZT0iQ2xhc3MiIC8+Ci0JCQkJPC9wYXJhbXM+Ci0JCQk8L21ldGhvZD4KLQkJCTxtZXRob2QgdmlzaWJpbGl0eT0icHVibGljIiBuYW1lPSJhdG9taXplIiBmdWxsdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGUiIHR5cGU9IkFueUF0b21pY1R5cGUiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJPC9tZXRob2Q+Ci0JCQk8bWV0aG9kIHZpc2liaWxpdHk9InB1YmxpYyIgbmFtZT0iY29uc2lkZXJWYWx1ZSIgZnVsbHR5cGU9InZvaWQiIHR5cGU9InZvaWQiPgotCQkJCTxwYXJhbXM+Ci0JCQkJCTxwYXJhbSBuYW1lPSJhdCIgZnVsbHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlIiB0eXBlPSJBbnlUeXBlIiAvPgotCQkJCTwvcGFyYW1zPgotCQkJCTxleGNlcHRpb25zPgotCQkJCQk8ZXhjZXB0aW9uIGZ1bGx0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yIiB0eXBlPSJEeW5hbWljRXJyb3IiIC8+Ci0JCQkJPC9leGNlcHRpb25zPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kcz4KLQk8L2plbGNsYXNzPgotPC9qZWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWx0b2h0bWwueHNsIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9kb2MvamVsdG9odG1sLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRhZjAwZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWx0b2h0bWwueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyMzE0NzIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgotICAgICAgICAgICAgICAgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHhtbG5zOnJlZGlyZWN0PSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vcmVkaXJlY3QiCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9InJlZGlyZWN0Ij4KLSAgICA8eHNsOm91dHB1dCBlbmNvZGluZz0iVVRGLTgiIG1ldGhvZD0iaHRtbCIgaW5kZW50PSJubyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPgotICAgIAotICAgIDwhLS0gQ3JlYXRlIHRoZSBIVE1MIHN0cnVjdHVyZSAtLT4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgIAkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvL2plbGNsYXNzIi8+Ci0JPC94c2w6dGVtcGxhdGU+Ci0gICAKLSAgICA8IS0tIFRoaXMgaXMgdGhlIG1haW4gd29yayBob3JzZSB0aGF0IGRvZXMgdGhlIGdlbmVyYWwgbGF5b3V0IGZvciB0aGUgY2xhc3MgcGFnZSAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJqZWxjbGFzcyI+Ci0gICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im91dHB1dEZpbGUiPgotICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgIDx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDp2YXJpYWJsZT4KLSAgICAgIDx4c2w6bWVzc2FnZSB0ZXJtaW5hdGU9Im5vIj4KLSAgICAgICAgIDx4c2w6dGV4dD5HZW5lcmF0aW5nIEphdmFEb2MgZm9yIDwveHNsOnRleHQ+Ci0gICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICA8eHNsOnRleHQ+LjwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDptZXNzYWdlPgotICAgICAgPHJlZGlyZWN0OndyaXRlIHNlbGVjdD0iJG91dHB1dEZpbGUiPgotICAgICAgIDxodG1sPgotICAgICAgICAgPGJvZHk+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgIDxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2UgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwYWNrYWdlIi8+PC9zdHJvbmc+PC9mb250PgotICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgPGhyLz4KLSAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgIDxmb250IHNpemU9Ii0xIj48c3Ryb25nPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPjwvc3Ryb25nPjwvZm9udD48YnIvPgotICAgICAgICAgICAgICAgQ2xhc3MgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+Ci0gICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9ybWF0LWhlYWRlciIvPgotICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvYXR0cmlidXRlIi8+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJkZXNjZW5kYW50OjpmaWVsZHMiPgotICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPgotICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNDQ0NDRkYiIGNvbHM9IjIiPgotICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpZWxkcy9maWVsZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6Y29uc3RydWN0b3IiPgotICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPgotICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNDQ0NDRkYiPgotICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImRlc2NlbmRhbnQ6OmNvbnN0cnVjdG9yIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJkZXNjZW5kYW50OjptZXRob2RzIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIiBjb2xzPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImZpZWxkcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZmllbGREZXRhaWwiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJtZXRob2RzL2NvbnN0cnVjdG9yIj4KLSAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb25zdHJ1Y3RvckRldGFpbCIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9Im1ldGhvZHMvbWV0aG9kIj4KLSAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtZXRob2RzRGV0YWlsIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgPC9ib2R5PgotICAgICAgICAgPC9odG1sPgotICAgICAgPC9yZWRpcmVjdDp3cml0ZT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8IS0tIE91dHB1dCBhbnkgZGVzY3JpcHRpb24gdGhhdCBtYXkgYmUgdGhlcmUgZm9yIGNvbW1lbnRzLiAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb21tZW50L2Rlc2NyaXB0aW9uIj4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBPdXRwdXQgdGhlIHZhcmlvdXMgYXR0cmlidXRlIGluZm9ybWF0aW9uIGZvciB0aGUgY2xhc3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tbWVudC9hdHRyaWJ1dGUiPgotICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8eHNsOmNob29zZT4KLSAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAYXV0aG9yIj4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPjxici8+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4gCi0gICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBzZWUiPgotICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TZWUgQWxzbzo8L3N0cm9uZz48YnIvPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgotICAgICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotCi0KLSAgICAgICAgPCEtLSBDcmVhdGUgdGhlIGZpZWxkIHN1bW1hcnkgcm93cyAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWVsZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIwJSI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAc3RhdGljID0gJ3RydWUnIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gc3RhdGljIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZnVsbHR5cGUiLz4gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmllbGRfe0BuYW1lfSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICAgICAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsKLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICAKLSAgICA8IS0tIENyZWF0ZSB0aGUgY29uc3RydWN0b3JzIHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29uc3RydWN0b3IiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29uX3tAbmFtZX0iPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFyYW0iPgotICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPjx4c2w6dGV4dD4gPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPgotICAgICAgICAgLAotICAgICAgPC94c2w6aWY+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBDcmVhdGUgdGhlIG1ldGhvZCBzdW1tYXJ5IHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiB3aWR0aD0iMjAlIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBzdGF0aWMgPSAndHJ1ZSciPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiBzdGF0aWM8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI21ldGhvZF97QG5hbWV9Ij4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgICAgICYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOwotICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdC1oZWFkZXIiPgotICAgICAgICAgPHByZT4KLTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPiBjbGFzcyA8c3Ryb25nPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvPjwvc3Ryb25nPgotZXh0ZW5kcyA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN1cGVyY2xhc3NmdWxsdHlwZSIvPgotICAgICAgICAgPC9wcmU+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmaWVsZERldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmllbGRzL2ZpZWxkIiBtb2RlPSJkZXRhaWwiPgotICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWVsZHMvZmllbGQiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJmaWVsZF97QG5hbWV9Ij4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgPC9hPgotICAgICAgPC9oMj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQHN0YXRpYyA9ICd0cnVlJyI+Ci0gICAgICAgICAgICAgICA8eHNsOnRleHQ+IHN0YXRpYyA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICA8L3N0cm9uZz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8eHNsOmlmIHRlc3Q9ImNvbW1lbnQiPgotICAgICAgICAgPHRhYmxlPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvZGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICA8L3RhYmxlPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8aHIvPgotICAgICAgCi0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjb25zdHJ1Y3RvckRldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9jb25zdHJ1Y3RvciIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kcy9jb25zdHJ1Y3RvciIgbW9kZT0iZGV0YWlsIj4KLSAgICAgIDxoMj4KLSAgICAgICAgIDxhIG5hbWU9ImNvbl97QG5hbWV9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+Ci0gICAgICA8L2gyPgotICAgICAgPHA+Ci0gICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8cD4KLSAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgPC9wPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0ibWV0aG9kc0RldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJtZXRob2RzL21ldGhvZCIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJtZXRob2Rfe0BuYW1lfSI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgIDwvYT4KLSAgICAgIDwvaDI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICA8L3N0cm9uZz4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgIDwvY29kZT4KLSAgICAgIDwvcD4KLSAgICAgIDxwPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8L3A+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIgbW9kZT0iZGV0YWlsIi8+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0iQHR5cGUgIT0gJ3ZvaWQnIj4KLSAgICAgICAgIDxoMz5SZXR1cm5zPC9oMz4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoQHJldHVybmNvbW1lbnQpID4gMCI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IC0gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmV0dXJuY29tbWVudCIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8L3A+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0iZXhjZXB0aW9ucyI+Ci0gICAgICAgICA8aDM+VGhyb3dzOjwvaDM+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImV4Y2VwdGlvbnMvZXhjZXB0aW9uIiBtb2RlPSJkZXRhaWwiLz4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhcmFtIiBtb2RlPSJkZXRhaWwiPgotICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEBjb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImV4Y2VwdGlvbiIgbW9kZT0iZGV0YWlsIj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoQGNvbW1lbnQpID4gMCI+Ci0gICAgICAgICAgICAgICA8eHNsOnRleHQ+IC0gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY29tbWVudCIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgICAgCi08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2plbHRvdG9jLnhzbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL2plbHRvdG9jLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmNTA4Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9qZWx0b3RvYy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjMxNDcyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAtLT4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgeG1sbnM6c2V0PSJodHRwOi8vZXhzbHQub3JnL3NldHMiCi0gICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuIgotICAgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJzZXQgeGFsYW4iCi0+Ci0gICA8eHNsOnBhcmFtIG5hbWU9InNka25hbWUiPlNvbWUgTmFtZTwveHNsOnBhcmFtPgotICAgPHhzbDpwYXJhbSBuYW1lPSJkaXIiPmRvYy9odG1sPC94c2w6cGFyYW0+ICAgCi0gICA8eHNsOm91dHB1dCBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVURi04IiB4YWxhbjppbmRlbnQtYW1vdW50PSIzIi8+Ci0gICA8eHNsOmtleSBuYW1lPSJhbGxQYWNrYWdlcyIgbWF0Y2g9ImplbGNsYXNzIiB1c2U9IkBwYWNrYWdlIi8+Ci0gICAgIAotICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2plbCI+Ci0gICAgICA8dG9jIGxhYmVsPSJ7JHNka25hbWV9Ij4KLSAgICAgICAgIDx0b3BpYyBsYWJlbD0iUmVmZXJlbmNlIj4KLSAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJzZXQ6ZGlzdGluY3QoamVsY2xhc3MvQHBhY2thZ2UpIj4KLSAgICAgICAgICAgICAgIDx0b3BpYyBsYWJlbD0iey59Ij4KLSAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ia2V5KCdhbGxQYWNrYWdlcycsIC4pIi8+Ci0gICAgICAgICAgICAgICA8L3RvcGljPgotICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0gICAgICAgICA8L3RvcGljPgotICAgICAgPC90b2M+Ci0gICA8L3hzbDp0ZW1wbGF0ZT4KLSAgIAotICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iamVsY2xhc3MiPgotICAgICAgPHRvcGljIGxhYmVsPSJ7QGZ1bGx0eXBlfSIgaHJlZj0ieyRkaXJ9L3tAZnVsbHR5cGV9Lmh0bWwiLz4KLSAgIDwveHNsOnRlbXBsYXRlPgotICAgCi08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL3NjaGVtYS5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2RvYy9zY2hlbWEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjIwMjhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvZG9jL3NjaGVtYS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1INi5TY2hlbWFIZWFkZXIgewotCWZvbnQtc2l6ZToxNnB4OyAKLQlkaXNwbGF5OmlubGluZQotfQotCi1QLlNjaGVtYUNvcHlyaWdodCB7Ci0JZm9udC1zaXplOiBzbWFsbGVyOyAKLQlmb250LXN0eWxlOiBub3JtYWw7Ci0JY29sb3I6ICMzMzY2OTk7IAotCWRpc3BsYXk6aW5saW5lOwotCW1hcmdpbi10b3A6IDMuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMTEuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0OwotfQotCi1QLlNjaGVtYUR0ZCB7Ci0JY29sb3I6ICM4MDAwMDA7IAotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi1QLlNjaGVtYUR0ZEF0dGxpc3QgewotCWNvbG9yOiAjODAwMDAwOyAKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAyMC4wMDAwMDBwdDsKLX0KLQotc3Bhbi5TY2hlbWFUYWcgewotCWNvbG9yOiAjMDAwMDgwOwotfQotCi1zcGFuLlNjaGVtYUNzdHJpbmcgewotCWNvbG9yOiAjMDA4MDAwOwotfQotCi1wcmUuRXhhbXBsZSB7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLX0KLQotLkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIHsKLQljb2xvcjogYmxhY2s7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMTAuMDAwMDAwcHQ7Ci19Ci0KLS5Db25maWdNYXJrdXBBdHRsaXN0RGVzYyB7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDMyLjAwMDAwMHB0OwotfQotCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2xpYi8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkYWZjNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotamVsZG9jbGV0LmphcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNWQ4MWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjE1MTI2LCAyMTM4NTMKLSMgICAgIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWU9WFBhdGggMi4wIFByb2Nlc3NvciBTREsgRG9jdW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODViNDJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Ci08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgPHRvYwotICAgICAgICAgICAgZmlsZT0idG9jLnhtbCIKLSAgICAgICAgICAgIHByaW1hcnk9InRydWUiPgotICAgICAgPC90b2M+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL3BvbS54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNWIzMGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCi0JPHBhcmVudD4KLQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDI8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLXBhcmVudDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuc2RrLmRvYzwvYXJ0aWZhY3RJZD4KLQk8dmVyc2lvbj4xLjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0JPG5hbWU+UHN5Y2hvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yOiBTREsgRG9jdW1lbnRhdGlvbjwvbmFtZT4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2Mvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9zZGsvZG9jL0FjdGl2YXRvci5qYXZhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3Nkay9kb2MvQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlM2NiZDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3Nkay9kb2MvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmRvYyI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5kb2MvdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlNWYwMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZG9jL3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0b2MgbGFiZWw9IlhQYXRoIDIuMCAtIFBzeWNob1BhdGggUHJvY2Vzc29yIFNESyBEb2N1bWVudGF0aW9uIj4KLSAgIDx0b3BpYyBsYWJlbD0iUmVmZXJlbmNlIj4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yIj4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuQ29sbGF0aW9uUHJvdmlkZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5Db2xsYXRpb25Qcm92aWRlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01CdWlsZGVyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NQnVpbGRlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRE9NTG9hZGVyRXhjZXB0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHREeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLkR1bW15RXJyb3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5QYWlyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRGVmYXVsdEV2YWx1YXRvci5QYWlyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3IuRHVtbXlFcnJvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLlBhaXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RXZhbHVhdG9yLlBhaXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRXZhbHVhdG9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkpGbGV4Q3VwUGFyc2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuSkZsZXhDdXBQYXJzZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3RvcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3RvcnkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ2hlY2tlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NoZWNrZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljRXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNFcnJvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljTmFtZVJlc29sdmVyLkR1bW15RXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNOYW1lUmVzb2x2ZXIuRHVtbXlFcnJvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY05hbWVSZXNvbHZlci5EdW1teUVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhFeGNlcHRpb24iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuWFBhdGhQYXJzZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5YUGF0aFBhcnNlckV4Y2VwdGlvbi5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoUGFyc2VyRXhjZXB0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhlcmNlc0xvYWRlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhlcmNlc0xvYWRlciIvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdCI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aCIvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uIj4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uRm5GdW5jdGlvbkxpYnJhcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnkiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbCI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkFuY2VzdG9yQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkFuY2VzdG9yQXhpcyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BbmNlc3Rvck9yU2VsZkF4aXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BbmNlc3Rvck9yU2VsZkF4aXMiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQXR0cmlidXRlQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF0dHJpYnV0ZUF4aXMiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF4aXMiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ2hpbGRBeGlzLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ2hpbGRBeGlzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkN1cEVycm9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuQ3VwRXJyb3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJTRmFjdG9yeS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSU0ZhY3RvcnkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJlc3VsdFNlcXVlbmNlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFJlc3VsdFNlcXVlbmNlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRTdGF0aWNDb250ZXh0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFN0YXRpY0NvbnRleHQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVzY2VuZGFudEF4aXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZXNjZW5kYW50QXhpcyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZXNjZW5kYW50T3JTZWxmQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlc2NlbmRhbnRPclNlbGZBeGlzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9jdXMiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9sbG93aW5nQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvbGxvd2luZ0F4aXMiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9sbG93aW5nU2libGluZ0F4aXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb2xsb3dpbmdTaWJsaW5nQXhpcyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkpGbGV4RXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5KRmxleEVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLk5vcm1hbGl6ZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Ob3JtYWxpemVyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlBhcmVudEF4aXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QYXJlbnRBeGlzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlByZWNlZGluZ0F4aXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5QcmVjZWRpbmdBeGlzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlByZWNlZGluZ1NpYmxpbmdBeGlzLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUHJlY2VkaW5nU2libGluZ0F4aXMiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmFuZ2VSZXN1bHRTZXF1ZW5jZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlJhbmdlUmVzdWx0U2VxdWVuY2UiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXMuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SZXZlcnNlQXhpcyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZWxmQXhpcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlbGZBeGlzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0F0dHJOYW1lRXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNBdHRyTmFtZUVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0VsZW1OYW1lRXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNFbGVtTmFtZUVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0Z1bmN0TmFtZUVycm9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljRnVuY3ROYW1lRXJyb3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTmFtZUVycm9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTmFtZUVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTnNOYW1lRXJyb3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVHlwZU5hbWVFcnJvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY1R5cGVOYW1lRXJyb3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVmFyTmFtZUVycm9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljVmFyTmFtZUVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aDJQbHVnaW4uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aDJQbHVnaW4iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhDdXAuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEN1cCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5DVVAkWFBhdGhDdXAkYWN0aW9ucy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkNVUCRYUGF0aEN1cCRhY3Rpb25zIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoRXJyb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEVycm9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoRmxleC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhQYXRoRmxleCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YcGF0aFN5bS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlhwYXRoU3ltIi8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Ij4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQWRkRXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbnlLaW5kVGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0ckVsZW1UZXN0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF0dHJFbGVtVGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0cmlidXRlVGVzdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyaWJ1dGVUZXN0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BeGlzU3RlcCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0RXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0RXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RhYmxlRXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ21wRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbnR4SXRlbUV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Db21tZW50VGVzdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Db21tZW50VGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWwuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWwiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGl2RXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRvY3VtZW50VGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FbGVtZW50VGVzdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FbGVtZW50VGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhjZXB0RXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeHByLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRmlsdGVyRXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3J3YXJkU3RlcCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZ1bmN0aW9uQ2FsbCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW5zdE9mRXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZWdlckxpdGVyYWwuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZWdlckxpdGVyYWwiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZXJzZWN0RXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LktpbmRUZXN0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5MaXRlcmFsLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkxpdGVyYWwiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NaW51c0V4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTW9kRXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTXVsRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5OYW1lVGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3QiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk51bWVyaWNMaXRlcmFsLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk51bWVyaWNMaXRlcmFsIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3QuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBhckV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SYW5nZUV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5SZXZlcnNlU3RlcCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3QiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TZXF1ZW5jZVR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TaW5nbGVUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNpbmdsZVR5cGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXAuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWwuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbmlvbkV4cHIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhckV4cHJQYWlyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhckV4cHJQYWlyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWYuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyUmVmIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yIi8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMiPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlTaW1wbGVUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55U2ltcGxlVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BdHRyVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkF0dHJUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Db21tZW50VHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkN0clR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DdHJUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkRvY1R5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlBJVHlwZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlRleHRUeXBlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFBhdGhEZWNpbWFsRm9ybWF0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCYXNlNjRCaW5hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jhc2U2NEJpbmFyeSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW4iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbi5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRW50aXR5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNFbnRpdHkiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5Lmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR01vbnRoLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGgiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aERheSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHWWVhciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGguaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dZZWFyTW9udGgiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNIZXhCaW5hcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0hleEJpbmFyeSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0lELmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRCIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0lEUkVGLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJRFJFRiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmcuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0xvbmciLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05DTmFtZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05lZ2F0aXZlSW50ZWdlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTmVnYXRpdmVJbnRlZ2VyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vblBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vdGF0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb3RhdGlvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Bvc2l0aXZlSW50ZWdlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTUG9zaXRpdmVJbnRlZ2VyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU2hvcnQuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Nob3J0Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmciLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRCeXRlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEJ5dGUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEludC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZExvbmcuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkTG9uZyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTWWVhck1vbnRoRHVyYXRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1llYXJNb250aER1cmF0aW9uIi8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMudXNlcmRlZmluZWQiPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZC5Vc2VyRGVmaW5lZEN0ckxpYnJhcnkuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZC5Vc2VyRGVmaW5lZEN0ckxpYnJhcnkiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscyI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvZGVQb2ludEl0ZXJhdG9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29kZVBvaW50SXRlcmF0b3IiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29tcGFyYWJsZVR5cGVQcm9tb3Rlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvbXBhcmFibGVUeXBlUHJvbW90ZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTGl0ZXJhbFV0aWxzLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuTGl0ZXJhbFV0aWxzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLk51bWVyaWNUeXBlUHJvbW90ZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5OdW1lcmljVHlwZVByb21vdGVyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlNjYWxhclR5cGVQcm9tb3Rlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlNjYWxhclR5cGVQcm9tb3RlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3Rlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlR5cGVQcm9tb3RlciIvPgotICAgICAgPC90b3BpYz4KLSAgIDwvdG9waWM+Ci08L3RvYz4K