ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDUyNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxjbGFzc3BhdGg+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPg0KLQkJPGFjY2Vzc3J1bGVzPg0KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvKioiLz4NCi0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvc3NlLyoqIi8+DQotCQk8L2FjY2Vzc3J1bGVzPg0KLQk8L2NsYXNzcGF0aGVudHJ5Pg0KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KLTwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY3YTE3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxYzk3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGh1IERlYyAxNyAxNzo1NToxNSBHTVQtMDU6MDAgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9YUGF0aENvbXB1dGVyLmphdmE9VVRGLTgKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM1NzUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWI3NTc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jVHVlIEZlYiAxMCAwNTozNjo0MCBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU3luY2hyb25pemVkT25Jbmhlcml0ZWRNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyYmZlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLSNTdW4gU2VwIDA5IDIxOjU5OjA4IENFU1QgMjAwNwotY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCi1jbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKLWNsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9ZmFsc2UKLWNsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCi1jbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCi1jbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKLWNsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKLWNsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQotY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKLWNsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQotY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQotY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPWZhbHNlCi1jbGVhbnVwLmZvcm1hdF9jb21tZW50PXRydWUKLWNsZWFudXAuZm9ybWF0X2phdmFkb2M9dHJ1ZQotY2xlYW51cC5mb3JtYXRfbXVsdGlfbGluZV9jb21tZW50PXRydWUKLWNsZWFudXAuZm9ybWF0X3NpbmdsZV9saW5lX2NvbW1lbnQ9dHJ1ZQotY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQotY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKLWNsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPWZhbHNlCi1jbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQotY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD1mYWxzZQotY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCi1jbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQotY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKLWNsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKLWNsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKLWNsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQotY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQotY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKLWNsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKLWNsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKLWNsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKLWNsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKLWNsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9ZmFsc2UKLWNsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCi1jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPXRydWUKLWNsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQotY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQotY2xlYW51cC51c2VfYmxvY2tzPXRydWUKLWNsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCi1jbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCi1jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQotY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQotY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCi1jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQotY2xlYW51cF9wcm9maWxlPV9TU0UgVGVhbSBTdHlsZXMKLWNsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YTUxMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jVGh1IE1heSAwOCAxNDozMjoxOCBHTVQtMDU6MDAgMjAwOAotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1mZWF0dXJlcz0xCi1jb21waWxlcnMuZi51bnJlc29sdmVkLXBsdWdpbnM9MQotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmRpc2NvdXJhZ2VkLWNsYXNzPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLmludGVybmFsPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24taWRlbnRpZmllcj0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucy5jcmVhdGUtZG9jcz1mYWxzZQotY29tcGlsZXJzLnMuZG9jLWZvbGRlcj1kb2MKLWNvbXBpbGVycy5zLm9wZW4tdGFncz0xCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhMTg5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuWFBhdGhVSVBsdWdpbgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IlszLjMuMTAwLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjEwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSIzLjUuMCIsCi0gb3JnLmFwYWNoZS54YWxhbjtidW5kbGUtdmVyc2lvbj0iMi43LjEiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXM7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb21wYXRpYmlsaXR5O2J1bmRsZS12ZXJzaW9uPSIzLjIuMCIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0O3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5oYW5kbGVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudGVtcGxhdGVzO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC51dGlsO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvTmV3RmlsZS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvTmV3RmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYTE2ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL05ld0ZpbGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRlc3QgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIj4KLTxzb21ldGhpbmcvPgotPC90ZXN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI1MTAxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlbXBsYXRlcy8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvYW5jZXN0b3IuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvYW5jZXN0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTdkYjgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2FuY2VzdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RpcmVjdGlvbmFsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2RpcmVjdGlvbmFsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYWQxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kaXJlY3Rpb25hbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kbGNsMTYvY29sbGFwc2VhbGwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZGxjbDE2L2NvbGxhcHNlYWxsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjMGRlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kbGNsMTYvY29sbGFwc2VhbGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZGxjbDE2L3N5bmNlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kbGNsMTYvc3luY2VkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5ZTU2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9kbGNsMTYvc3luY2VkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2VsY2wxNi9jb2xsYXBzZWFsbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9lbGNsMTYvY29sbGFwc2VhbGwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmQ4MGE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2VsY2wxNi9jb2xsYXBzZWFsbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9lbGNsMTYvc3luY2VkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2VsY2wxNi9zeW5jZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWNlZmVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2VsY2wxNi9zeW5jZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZmFtaWx5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2ZhbWlseS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MTdmM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvZmFtaWx5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2Z1bmN0aW9uLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL2Z1bmN0aW9uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgxZmQ2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9mdW5jdGlvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9vcGVyYXRpb24uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvb3BlcmF0aW9uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1ZDllMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC9vcGVyYXRpb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvdmFyaWFibGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL2Z1bGwvdmFyaWFibGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmQ4M2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL3ZhcmlhYmxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL3hwYXRoLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9pY29ucy9mdWxsL3hwYXRoLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzZWY1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvZnVsbC94cGF0aC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvcmVmcmVzaC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvcmVmcmVzaC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzODMxNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL3JlZnJlc2guZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL2ljb25zL3J1bi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvcnVuLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNDEwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvaWNvbnMvcnVuLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2YjNiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBPcmFuZ2V2b2x0ICh3d3cub3Jhbmdldm9sdC5jb20pCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYW5nZXZvbHQgKHd3dy5vcmFuZ2V2b2x0LmNvbSkgLSBYU0xUIHN1cHBvcnQKLSMgICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSByZWZhY3RvcmVkIE9yYW5nZXZvbHQgWFNMVCBzdXBwb3J0IGludG8gV1NUCi0jICAgICAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1wbHVnaW5OYW1lPVhQYXRoIFVJCi14bWxDYXRlZ29yeU5hbWU9WE1MCi14cGF0aFZpZXdOYW1lPVhQYXRoCi1jb250ZXh0VHlwZS5heGlzID0gYXhpcwotY29udGV4dFR5cGUuZXhzbHQgPSBleHNsdAotY29udGV4dFR5cGUueHBhdGggPSB4cGF0aAotY29udGV4dFR5cGUueHBhdGgybyA9IHhwYXRoIDIuMAotY29udGV4dFR5cGUub3BlcmF0b3IgPSBvcGVyYXRvcgotY29udGV4dFR5cGUuY3VzdG9tID0gY3VzdG9tCi1wYWdlTmFtZVhwYXRoID0gWFBhdGgKLXBhZ2VuYW1lWFBhdGhUZW1wbGF0ZXMgPSBYUGF0aCBUZW1wbGF0ZXMKLXhwYXRoVmlldy5lZGl0bmFtZXNwYWNlID0gJkVkaXQgTmFtZXNwYWNlIFByZWZpeGVzCi14cGF0aHZpZXcueHBhdGhwcm9jZXNzb3IubmFtZSA9IFhQYXRoIDEuMAoteHBhdGh2aWV3LnhwYXRoMnByb2Nlc3Nvci5uYW1lID0gWFBhdGggMi4wCi14cGF0aHZpZXcueHBhdGhwcm9jZXNzb3IgPSBQcm9jZXNzb3JzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzc2NWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0KLSA8IS0tIEFkZGl0aW9uIHRvIHRoZSBYTUwgcGVyc3BlY3RpdmUgLS0+Ci0gPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVFeHRlbnNpb25zIj4KLQk8cGVyc3BlY3RpdmVFeHRlbnNpb24gdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucGVyc3BlY3RpdmUiPgotCQk8IS0tIFByb2plY3RFeHBsb3JlciBvbiB0aGUgbGVmdCwgWFBhdGggb24gdGhlICJib3R0b20gbGVmdCIgLS0+Ci0JCTx2aWV3IGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldyIgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIHJlbGF0aW9uc2hpcD0iYm90dG9tIiByYXRpbz0iMC41NSIgLz4KLQkJPHZpZXdTaG9ydGN1dCBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciLz4KLQk8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotIDwvZXh0ZW5zaW9uPgotCi0gICAJPCEtLSBYUGF0aCB0ZW1wbGF0ZXMgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy50ZW1wbGF0ZXMiPgotCQk8Y29udGV4dFR5cGUKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWE1MIgotCQkJaWQ9InhwYXRoX2F4aXMiIG5hbWU9IiVjb250ZXh0VHlwZS5heGlzIj4KLQkJPC9jb250ZXh0VHlwZT4KLQkJPGNvbnRleHRUeXBlCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhNTCIKLQkJCWlkPSJleHNsdF9mdW5jdGlvbiIgbmFtZT0iJWNvbnRleHRUeXBlLmV4c2x0Ij4KLQkJPC9jb250ZXh0VHlwZT4KLQkJPGNvbnRleHRUeXBlCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhNTCIKLQkJCWlkPSJ4c2xfeHBhdGgiIG5hbWU9IiVjb250ZXh0VHlwZS54cGF0aCI+Ci0JCTwvY29udGV4dFR5cGU+Ci0JCTxjb250ZXh0VHlwZQotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYTUwiCi0JCQlpZD0ieHBhdGhfMiIgbmFtZT0iJWNvbnRleHRUeXBlLnhwYXRoMm8iPgotCQk8L2NvbnRleHRUeXBlPgotCQk8Y29udGV4dFR5cGUKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWE1MIgotCQkJaWQ9InhwYXRoX29wZXJhdG9yIiBuYW1lPSIlY29udGV4dFR5cGUub3BlcmF0b3IiPgotCQk8L2NvbnRleHRUeXBlPgotCQk8Y29udGV4dFR5cGUKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWE1MIgotCQkJaWQ9ImV4dGVuc2lvbl9mdW5jdGlvbiIgbmFtZT0iJWNvbnRleHRUeXBlLmN1c3RvbSI+Ci0JCTwvY29udGV4dFR5cGU+Ci0JCTxpbmNsdWRlIGZpbGU9InRlbXBsYXRlcy94cGF0aF90ZW1wbGF0ZXMueG1sIi8+Ci0JCTxpbmNsdWRlIGZpbGU9InRlbXBsYXRlcy94cGF0aF9vcGVyYXRvcl90ZW1wbGF0ZXMueG1sIi8+Ci0JCTxpbmNsdWRlIGZpbGU9InRlbXBsYXRlcy94cGF0aF9heGlzX3RlbXBsYXRlcy54bWwiLz4KLQk8L2V4dGVuc2lvbj4KLSAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0JICA8cGFnZQotCSAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucHJlZmVyZW5jZXMueG1sIgotCSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFBhdGhQcmVmZW5jZVBhZ2UiCi0JICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFByZWZlcmVuY2VQYWdlIgotCSAgICAgICAgbmFtZT0iJXBhZ2VOYW1lWHBhdGgiPgotCSAgPC9wYWdlPgotCQk8cGFnZSBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFByZWZlcmVuY2VQYWdlIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFBhdGhUZW1wbGF0ZVByZWZlcmVuY2VQYWdlIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuWFBhdGgiIAotCQkJbmFtZT0iJXBhZ2VuYW1lWFBhdGhUZW1wbGF0ZXMiPgotCQk8L3BhZ2U+CQotCTwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotICAgIDx2aWV3Ci0gICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54bWwiCi0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudmlld3MuWFBhdGhWaWV3IgotICAgICAgICAgIGljb249IiRubCQvaWNvbnMvZnVsbC94cGF0aC5naWYiCi0gICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3IgotICAgICAgICAgIG5hbWU9IiV4cGF0aFZpZXdOYW1lIi8+Ci0gPC9leHRlbnNpb24+Ci0JICAgIAotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotICAgIDxjYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciCi0gICAgICAgICAgICBuYW1lPSIleHBhdGhWaWV3TmFtZSI+Ci0gICAgPC9jYXRlZ29yeT4KLSAgICA8Y29tbWFuZCBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldy5wcmVmaXhlcyIKLSAgICAgICAgICAgIG5hbWU9IiV4cGF0aFZpZXcuZWRpdG5hbWVzcGFjZSI+Ci0gICAgPC9jb21tYW5kPgotICAgIDxjb21tYW5kIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3IgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3LnByb2Nlc3Nvci54cGF0aHByb2Nlc3NvciIKLSAgICAgICAgICAgIG5hbWU9IlhQYXRoIFByb2Nlc3NvciIKLSAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmhhbmRsZXIuWFBhdGhQcm9jZXNzb3JIYW5kbGVyIj4KLSAgICAgICAgICAgCi0JICAgPGNvbW1hbmRQYXJhbWV0ZXIKLQkgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZVBhcmFtZXRlciIKLQkgICAgICAgICBuYW1lPSJTdGF0ZSIKLQkgICAgICAgICBvcHRpb25hbD0iZmFsc2UiPgotCSAgIDwvY29tbWFuZFBhcmFtZXRlcj4gCi0JICAgPHN0YXRlCi0JICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLlJhZGlvU3RhdGU6eHBhdGgxMCIKLQkgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZSI+Ci0JICAgPC9zdGF0ZT4KLSAgICA8L2NvbW1hbmQ+Ci08L2V4dGVuc2lvbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPgotCTxoYW5kbGVyIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXcucHJlZml4ZXMiCi0JCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmhhbmRsZXIuUHJlZml4SGFuZGxlciI+Ci0JCTxhY3RpdmVXaGVuPgotCQkJPHdpdGggdmFyaWFibGU9ImFjdGl2ZVBhcnRJZCI+Ci0JCQkJPGVxdWFscyB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciLz4KLQkJCTwvd2l0aD4KLQkJPC9hY3RpdmVXaGVuPgotICAgIDwvaGFuZGxlcj4KLTwvZXh0ZW5zaW9uPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+Ci0gICAgPG1lbnVDb250cmlidXRpb24gbG9jYXRpb25VUkk9Im1lbnU6b3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXciPgotCQk8Y29tbWFuZAotICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmlld3MuWFBhdGhWaWV3LnByZWZpeGVzIgotICAgICAgICBzdHlsZT0icHVzaCI+Ci0JCTwvY29tbWFuZD4KLQkJPHNlcGFyYXRvciBuYW1lPSJhZGRpdGlvbnMiIHZpc2libGU9InRydWUiIC8+Ci0JICA8bWVudSBsYWJlbD0iJXhwYXRodmlldy54cGF0aHByb2Nlc3NvciI+Ci0JICAgICA8Y29tbWFuZAotCSAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3QueG1sLnZpZXdzLlhQYXRoVmlldy5wcm9jZXNzb3IueHBhdGhwcm9jZXNzb3IiCi0JICAgICAgICAgICBsYWJlbD0iJXhwYXRodmlldy54cGF0aHByb2Nlc3Nvci5uYW1lIgotCSAgICAgICAgICAgc3R5bGU9InJhZGlvIj4KLQkgICAgICAgICA8cGFyYW1ldGVyCi0JICAgICAgICAgICAgICAgbmFtZT0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMucmFkaW9TdGF0ZVBhcmFtZXRlciIKLQkgICAgICAgICAgICAgICB2YWx1ZT0ieHBhdGgxMCI+Ci0JICAgICAgICAgPC9wYXJhbWV0ZXI+IAkgICAgICAgICAgIAotCSAgICAgPC9jb21tYW5kPgotCSAgICAgPGNvbW1hbmQKLQkgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52aWV3cy5YUGF0aFZpZXcucHJvY2Vzc29yLnhwYXRocHJvY2Vzc29yIgotCSAgICAgICAgICAgbGFiZWw9IiV4cGF0aHZpZXcueHBhdGgycHJvY2Vzc29yLm5hbWUiCi0JICAgICAgICAgICBzdHlsZT0icmFkaW8iPgotCSAgICAgICAgIDxwYXJhbWV0ZXIKLQkgICAgICAgICAgICAgICBuYW1lPSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcy5yYWRpb1N0YXRlUGFyYW1ldGVyIgotCSAgICAgICAgICAgICAgIHZhbHVlPSJ4cGF0aDIiPgotCSAgICAgICAgIDwvcGFyYW1ldGVyPiAJICAgICAgICAgICAKLQkgICAgIDwvY29tbWFuZD4KLQkgIDwvbWVudT4KLQk8L21lbnVDb250cmlidXRpb24+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzZGQ3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBiYXNlZCBvZmYgd3N0LnhtbC51aS5DdXN0b21UZW1wbGF0ZVByb3Bvc2FsCi0gKiAgICAgRG91ZyBTYXRjaHdlbGwgLSByZWZhY3RvcmVkIHRvIGludGVybmFsIHBhY2thZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhDb21wdXRlcl8wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoQ29tcHV0ZXJfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdfODsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aFZpZXdBY3Rpb25zXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhWaWV3QWN0aW9uc18xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoUHJlZmVuY2VQYWdlXzA7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9YUGF0aF9OYXZpZ2F0b3I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9YUGF0aF9FdmFsX0ZhaWxlZDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX0NvbnRleHQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX0RvY3VtZW50OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfRE9NX1RyZWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfVGV4dDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfWFBhdGhfU2hvd19Jbl9Tb3VyY2VfRmFpbGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzOwotCi0Jc3RhdGljIHsKLQkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL1hQYXRoVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9YUGF0aFVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZmVlNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL1hQYXRoVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2MTU4OCAtIEFkZCBFZGl0IE5hbWVzcGFjZSBzdXBwb3J0IGZvciBYUGF0aCB2aWV3Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5Db250ZXh0VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLnBlcnNpc3RlbmNlLlRlbXBsYXRlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZWRpdG9ycy50ZXh0LnRlbXBsYXRlcy5Db250cmlidXRpb25Db250ZXh0VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMudGV4dC50ZW1wbGF0ZXMuQ29udHJpYnV0aW9uVGVtcGxhdGVTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFhQYXRoVUlQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkiOwotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIFhQYXRoVUlQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIHRlbXBsYXRlIHN0b3JlIGZvciB4cGF0aC4KLQkgKi8KLQlwcml2YXRlIFRlbXBsYXRlU3RvcmUgZlhQYXRoVGVtcGxhdGVTdG9yZTsKLQotCS8qKgotCSAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHhwYXRoLgotCSAqLwotCXByaXZhdGUgQ29udHJpYnV0aW9uQ29udGV4dFR5cGVSZWdpc3RyeSBmWFBhdGhDb250ZXh0VHlwZVJlZ2lzdHJ5OwotCQotCXByaXZhdGUgTWFwPFN0cmluZywgTGlzdDxOYW1lc3BhY2VJbmZvPj4gbmFtZXNwYWNlSW5mbyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDxTdHJpbmcsIExpc3Q8TmFtZXNwYWNlSW5mbz4+KCk7Ci0JCi0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgWFBhdGhVSVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlCi0JICogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZQotCSAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICogCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBYUGF0aFVJUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhFeGNlcHRpb24gZSkgewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKAotCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCAiIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhDb3JlRXhjZXB0aW9uIGUpIHsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhlLmdldFN0YXR1cygpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgdGhlIHhwYXRoIHRlbXBsYXRlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgdGhlIHhwYXRoIHRlbXBsYXRlcwotCSAqLwotCXB1YmxpYyBUZW1wbGF0ZVN0b3JlIGdldFhQYXRoVGVtcGxhdGVTdG9yZSgpIHsKLQkJaWYgKGZYUGF0aFRlbXBsYXRlU3RvcmUgPT0gbnVsbCkgewotCQkJZlhQYXRoVGVtcGxhdGVTdG9yZSA9IG5ldyBDb250cmlidXRpb25UZW1wbGF0ZVN0b3JlKAotCQkJCQlnZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCksIGdldFByZWZlcmVuY2VTdG9yZSgpLAotCQkJCQkib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS54cGF0aF9jdXN0b21fdGVtcGxhdGVzIik7IC8vJE5PTi1OTFMtMSQKLQkJCXRyeSB7Ci0JCQkJZlhQYXRoVGVtcGxhdGVTdG9yZS5sb2FkKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZYUGF0aFRlbXBsYXRlU3RvcmU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRlbXBsYXRlIGNvbnRleHQgdHlwZSByZWdpc3RyeSBmb3IgeHBhdGgKLQkgKi8KLQlwdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeSBnZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCkgewotCQlpZiAoZlhQYXRoQ29udGV4dFR5cGVSZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlDb250cmlidXRpb25Db250ZXh0VHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbmV3IENvbnRyaWJ1dGlvbkNvbnRleHRUeXBlUmVnaXN0cnkoKTsKLQkJCXJlZ2lzdHJ5LmFkZENvbnRleHRUeXBlKCJ4c2xfeHBhdGgiKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVnaXN0cnkuYWRkQ29udGV4dFR5cGUoInhwYXRoX29wZXJhdG9yIik7IC8vJE5PTi1OTFMtMSQKLQkJCXJlZ2lzdHJ5LmFkZENvbnRleHRUeXBlKCJ4cGF0aF9heGlzIik7IC8vJE5PTi1OTFMtMSQKLQkJCXJlZ2lzdHJ5LmFkZENvbnRleHRUeXBlKCJleHNsdF9mdW5jdGlvbiIpOyAvLyROT04tTkxTLTEkCi0JCQlyZWdpc3RyeS5hZGRDb250ZXh0VHlwZSgieHBhdGhfMiIpOyAvLyROT04tTkxTLTEkCi0JCQlyZWdpc3RyeS5hZGRDb250ZXh0VHlwZSgiZXh0ZW5zaW9uX2Z1bmN0aW9uIik7IC8vJE5PTi1OTFMtMSQKLQkJCWZYUGF0aENvbnRleHRUeXBlUmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJfQotCi0JCXJldHVybiBmWFBhdGhDb250ZXh0VHlwZVJlZ2lzdHJ5OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZUluZm8oTWFwPFN0cmluZywgTGlzdDxOYW1lc3BhY2VJbmZvPj4gbmFtZXNwYWNlSW5mbykgewotCQl0aGlzLm5hbWVzcGFjZUluZm8gPSBuYW1lc3BhY2VJbmZvOwotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PE5hbWVzcGFjZUluZm8+PiBnZXROYW1lc3BhY2VJbmZvKCkgewotCQlyZXR1cm4gbmFtZXNwYWNlSW5mbzsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxOYW1lc3BhY2VJbmZvPiBnZXROYW1lc3BhY2VJbmZvKElET01Eb2N1bWVudCBkb2N1bWVudCkgewotCQlYUGF0aFVJUGx1Z2luIHBsdWdpbiA9IFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpOwotCQlTdHJpbmcgbW9kZWxJRCA9IGRvY3VtZW50LmdldE1vZGVsKCkuZ2V0SWQoKTsKLQkJTWFwPFN0cmluZywgTGlzdDxOYW1lc3BhY2VJbmZvPj4gbmFtZXNwYWNlSW5mbyA9IHBsdWdpbi5nZXROYW1lc3BhY2VJbmZvKCk7Ci0JCUxpc3Q8TmFtZXNwYWNlSW5mbz4gaW5mbyA9IG5hbWVzcGFjZUluZm8uZ2V0KG1vZGVsSUQpOwotCi0JCWlmIChpbmZvID09IG51bGwpIHsKLQkJCWlmIChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSAhPSBudWxsKSB7Ci0JCQkJaW5mbyA9IG5ldyBBcnJheUxpc3Q8TmFtZXNwYWNlSW5mbz4oKTsKLQkJCQlOYW1lc3BhY2VUYWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBOYW1lc3BhY2VUYWJsZShkb2N1bWVudCk7Ci0JCQkJbmFtZXNwYWNlVGFibGUudmlzaXRFbGVtZW50KGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpKTsKLQkJCQlDb2xsZWN0aW9uPD8+IG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VUYWJsZQotCQkJCQkJLmdldE5hbWVzcGFjZUluZm9Db2xsZWN0aW9uKCk7Ci0JCQkJaW5mby5hZGRBbGwoKENvbGxlY3Rpb248TmFtZXNwYWNlSW5mbz4pIG5hbWVzcGFjZXMpOwotCQkJCW5hbWVzcGFjZUluZm8ucHV0KG1vZGVsSUQsIGluZm8pOwotCQkJCXBsdWdpbi5zZXROYW1lc3BhY2VJbmZvKG5hbWVzcGFjZUluZm8pOwotCQkJCQotCQkJCWVuc3VyZURlZmF1bHQobmFtZXNwYWNlVGFibGUsICJ4cyIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCQkJfQotCQl9Ci0JCXJldHVybiBpbmZvOwotCX0KLQotCXByaXZhdGUgdm9pZCBlbnN1cmVEZWZhdWx0KE5hbWVzcGFjZVRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgcHJlZml4LAotCQkJU3RyaW5nIHVyaSkgewotCQlpZiAobmFtZXNwYWNlVGFibGUuZ2V0VVJJRm9yUHJlZml4KHByZWZpeCkgPT0gbnVsbCkgbmFtZXNwYWNlVGFibGUuYWRkTmFtZXNwYWNlSW5mbyhwcmVmaXgsIHVyaSwgbnVsbCk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhZTNlNzQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0N1c3RvbVRlbXBsYXRlUHJvcG9zYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBiYXNlZCBvZmYgd3N0LnhtbC51aS5DdXN0b21UZW1wbGF0ZVByb3Bvc2FsCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZVByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LklSZWxldmFuY2VDb21wbGV0aW9uUHJvcG9zYWw7Ci0KLS8qKgotICogUHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIG1ha2UgdGhlIGFkZGl0aW9uYWwgcHJvcG9zYWwgaW5mbyBpbnRvIGNvbnRlbnQKLSAqIGZpdCBmb3IgYW4gSFRNTCB2aWV3ZXIgKGJ5IGVzY2FwaW5nIGNoYXJhY3RlcnMpCi0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCi1wdWJsaWMgY2xhc3MgQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbCBleHRlbmRzIFRlbXBsYXRlUHJvcG9zYWwgaW1wbGVtZW50cwotCQlJUmVsZXZhbmNlQ29tcGxldGlvblByb3Bvc2FsIHsKLQotCXByaXZhdGUgZmluYWwgVGVtcGxhdGUgZlRlbXBsYXRlOwotCi0JcHVibGljIEN1c3RvbVRlbXBsYXRlUHJvcG9zYWwoVGVtcGxhdGUgdGVtcGxhdGUsIFRlbXBsYXRlQ29udGV4dCBjb250ZXh0LAotCQkJSVJlZ2lvbiByZWdpb24sIEltYWdlIGltYWdlLCBpbnQgcmVsZXZhbmNlKSB7Ci0JCXN1cGVyKHRlbXBsYXRlLCBjb250ZXh0LCByZWdpb24sIGltYWdlLCByZWxldmFuY2UpOwotCQl0aGlzLmZUZW1wbGF0ZSA9IHRlbXBsYXRlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheVN0cmluZygpIHsKLQkJcmV0dXJuIGZUZW1wbGF0ZS5nZXROYW1lKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRBZGRpdGlvbmFsUHJvcG9zYWxJbmZvKCkgewotCQlyZXR1cm4gU3RyaW5nVXRpbHMuY29udmVydFRvSFRNTENvbnRlbnQoZlRlbXBsYXRlLmdldERlc2NyaXB0aW9uKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9YUGF0aFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMjdiZDlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGluaXRpYWwgQVBJIGJhc2VkIG9mZiBYTUxUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuQ29udGV4dFR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVQcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5wZXJzaXN0ZW5jZS5UZW1wbGF0ZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuUmVwbGFjZU5hbWVUZW1wbGF0ZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWwuWFBhdGhQbHVnaW5JbWFnZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWwuWFBhdGhQbHVnaW5JbWFnZXM7Ci0KLS8qKgotICogQ29tcGxldGlvbiBwcm9jZXNzb3IgZm9yIFhNTCBUZW1wbGF0ZXMuIE1vc3Qgb2YgdGhlIHdvcmsgaXMgYWxyZWFkeSBkb25lIGJ5Ci0gKiB0aGUgWE1MIENvbnRlbnQgQXNzaXN0IHByb2Nlc3Nvciwgc28gYnkgdGhlIHRpbWUgdGhlCi0gKiBYTUxUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgaXMgYXNrZWQgZm9yIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscywgdGhlIFhNTAotICogY29udGVudCBhc3Npc3QgcHJvY2Vzc29yIGhhcyBhbHJlYWR5IHNldCB0aGUgY29udGV4dCB0eXBlIGZvciB0ZW1wbGF0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciBleHRlbmRzCi0JCVRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgUHJvcG9zYWxDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvciwKLQkJCVNlcmlhbGl6YWJsZSB7Ci0KLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTY4NjU4ODYwOTM5MDc0NzUzNkw7Ci0KLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlyZXR1cm4gKChUZW1wbGF0ZVByb3Bvc2FsKSBvMikuZ2V0UmVsZXZhbmNlKCkKLQkJCQkJLSAoKFRlbXBsYXRlUHJvcG9zYWwpIG8xKS5nZXRSZWxldmFuY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIENvbXBhcmF0b3IgZmdQcm9wb3NhbENvbXBhcmF0b3IgPSBuZXcgUHJvcG9zYWxDb21wYXJhdG9yKCk7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNvbnRleHRUeXBlSWQgPSBudWxsOwotCi0JLyoKLQkgKiBDb3BpZWQgZnJvbSBzdXBlciBjbGFzcyBleGNlcHQgaW5zdGVhZCBvZiBjYWxsaW5nIGNyZWF0ZUNvbnRleHQodmlld2VyLAotCSAqIHJlZ2lvbikgY2FsbCBjcmVhdGVDb250ZXh0KHZpZXdlciwgcmVnaW9uLCBvZmZzZXQpIGluc3RlYWQKLQkgKi8KLQlwdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzKElUZXh0Vmlld2VyIHZpZXdlciwKLQkJCWludCBvZmZzZXQpIHsKLQotCQlJVGV4dFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVRleHRTZWxlY3Rpb24pIHZpZXdlcgotCQkJCS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLmdldFNlbGVjdGlvbigpOwotCi0JCS8vIGFkanVzdCBvZmZzZXQgdG8gZW5kIG9mIG5vcm1hbGl6ZWQgc2VsZWN0aW9uCi0JCWlmIChzZWxlY3Rpb24uZ2V0T2Zmc2V0KCkgPT0gb2Zmc2V0KSB7Ci0JCQlvZmZzZXQgPSBzZWxlY3Rpb24uZ2V0T2Zmc2V0KCkgKyBzZWxlY3Rpb24uZ2V0TGVuZ3RoKCk7Ci0JCX0KLQotCQlTdHJpbmcgcHJlZml4ID0gZXh0cmFjdFByZWZpeCh2aWV3ZXIsIG9mZnNldCk7Ci0JCVJlZ2lvbiByZWdpb24gPSBuZXcgUmVnaW9uKG9mZnNldCAtIHByZWZpeC5sZW5ndGgoKSwgcHJlZml4Lmxlbmd0aCgpKTsKLQkJVGVtcGxhdGVDb250ZXh0IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHZpZXdlciwgcmVnaW9uLCBvZmZzZXQpOwotCQlpZiAoY29udGV4dCA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbmV3IElDb21wbGV0aW9uUHJvcG9zYWxbMF07Ci0JCX0KLQotCQkvLyBuYW1lIG9mIHRoZSBzZWxlY3Rpb24gdmFyaWFibGVzIHtsaW5lLCB3b3JkfV9zZWxlY3Rpb24KLQkJY29udGV4dC5zZXRWYXJpYWJsZSgic2VsZWN0aW9uIiwgc2VsZWN0aW9uLmdldFRleHQoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQlUZW1wbGF0ZVtdIHRlbXBsYXRlcyA9IGdldFRlbXBsYXRlcyhjb250ZXh0LmdldENvbnRleHRUeXBlKCkuZ2V0SWQoKSk7Ci0KLQkJTGlzdCBtYXRjaGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykgewotCQkJVGVtcGxhdGUgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbaV07Ci0JCQl0cnkgewotCQkJCWNvbnRleHQuZ2V0Q29udGV4dFR5cGUoKS52YWxpZGF0ZSh0ZW1wbGF0ZS5nZXRQYXR0ZXJuKCkpOwotCQkJfSBjYXRjaCAoVGVtcGxhdGVFeGNlcHRpb24gZSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHRlbXBsYXRlLm1hdGNoZXMocHJlZml4LCBjb250ZXh0LmdldENvbnRleHRUeXBlKCkuZ2V0SWQoKSkpIHsKLQkJCQltYXRjaGVzLmFkZChjcmVhdGVQcm9wb3NhbCh0ZW1wbGF0ZSwgY29udGV4dCwgKElSZWdpb24pIHJlZ2lvbiwKLQkJCQkJCWdldFJlbGV2YW5jZSh0ZW1wbGF0ZSwgcHJlZml4KSkpOwotCQkJfQotCQl9Ci0KLQkJQ29sbGVjdGlvbnMuc29ydChtYXRjaGVzLCBmZ1Byb3Bvc2FsQ29tcGFyYXRvcik7Ci0KLQkJcmV0dXJuIChJQ29tcGxldGlvblByb3Bvc2FsW10pIG1hdGNoZXMKLQkJCQkudG9BcnJheShuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFttYXRjaGVzLnNpemUoKV0pOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBjb25jcmV0ZSB0ZW1wbGF0ZSBjb250ZXh0IGZvciB0aGUgZ2l2ZW4gcmVnaW9uIGluIHRoZSBkb2N1bWVudC4KLQkgKiBUaGlzIGludm9sdmVzIGZpbmRpbmcgb3V0IHdoaWNoIGNvbnRleHQgdHlwZSBpcyB2YWxpZCBhdCB0aGUgZ2l2ZW4KLQkgKiBsb2NhdGlvbiwgYW5kIHRoZW4gY3JlYXRpbmcgYSBjb250ZXh0IG9mIHRoaXMgdHlwZS4gVGhlIGRlZmF1bHQKLQkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGEgPGNvZGU+U21hcnRSZXBsYWNlVGVtcGxhdGVDb250ZXh0PC9jb2RlPiBmb3IgdGhlCi0JICogY29udGV4dCB0eXBlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4gVGhpcyB0YWtlcyB0aGUgb2Zmc2V0IGF0IHdoaWNoCi0JICogY29udGVudCBhc3Npc3Qgd2FzIGludm9rZWQgaW50byBjb25zaWRlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiAgICAgICAgICAgIHRoZSB2aWV3ZXIgZm9yIHdoaWNoIHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQKLQkgKiBAcGFyYW0gcmVnaW9uCi0JICogICAgICAgICAgICB0aGUgcmVnaW9uIGludG8gPGNvZGU+ZG9jdW1lbnQ8L2NvZGU+IGZvciB3aGljaCB0aGUgY29udGV4dCBpcwotCSAqICAgICAgICAgICAgY3JlYXRlZAotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBvZmZzZXQgd2hlcmUgY29udGVudCBhc3Npc3Qgd2FzIGludm9rZWQKLQkgKiBAcmV0dXJuIGEgdGVtcGxhdGUgY29udGV4dCB0aGF0IGNhbiBoYW5kbGUgdGVtcGxhdGUgaW5zZXJ0aW9uIGF0IHRoZQotCSAqICAgICAgICAgZ2l2ZW4gbG9jYXRpb24sIG9yIDxjb2RlPm51bGw8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBUZW1wbGF0ZUNvbnRleHQgY3JlYXRlQ29udGV4dChJVGV4dFZpZXdlciB2aWV3ZXIsIElSZWdpb24gcmVnaW9uLAotCQkJaW50IG9mZnNldCkgewotCQkvLyBwcmV0dHkgbXVjaCBzYW1lIGNvZGUgYXMgc3VwZXIuY3JlYXRlQ29udGV4dCBleGNlcHQgY3JlYXRlCi0JCS8vIFNtYXJ0UmVwbGFjZVRlbXBsYXRlQ29udGV4dAotCQlUZW1wbGF0ZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlID0gZ2V0Q29udGV4dFR5cGUodmlld2VyLCByZWdpb24pOwotCQlpZiAoY29udGV4dFR5cGUgIT0gbnVsbCkgewotCQkJSURvY3VtZW50IGRvY3VtZW50ID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlyZXR1cm4gbmV3IFJlcGxhY2VOYW1lVGVtcGxhdGVDb250ZXh0KGNvbnRleHRUeXBlLCBkb2N1bWVudCwgcmVnaW9uCi0JCQkJCS5nZXRPZmZzZXQoKSwgcmVnaW9uLmdldExlbmd0aCgpLCBvZmZzZXQpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCBJQ29tcGxldGlvblByb3Bvc2FsIGNyZWF0ZVByb3Bvc2FsKFRlbXBsYXRlIHRlbXBsYXRlLAotCQkJVGVtcGxhdGVDb250ZXh0IGNvbnRleHQsIElSZWdpb24gcmVnaW9uLCBpbnQgcmVsZXZhbmNlKSB7Ci0JCXJldHVybiBuZXcgQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbCh0ZW1wbGF0ZSwgY29udGV4dCwgcmVnaW9uLAotCQkJCWdldEltYWdlKHRlbXBsYXRlKSwgcmVsZXZhbmNlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgVGVtcGxhdGVDb250ZXh0VHlwZSBnZXRDb250ZXh0VHlwZShJVGV4dFZpZXdlciB2aWV3ZXIsCi0JCQlJUmVnaW9uIHJlZ2lvbikgewotCQlUZW1wbGF0ZUNvbnRleHRUeXBlIHR5cGUgPSBudWxsOwotCi0JCUNvbnRleHRUeXBlUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpOwotCQlpZiAocmVnaXN0cnkgIT0gbnVsbCkgewotCQkJdHlwZSA9IHJlZ2lzdHJ5LmdldENvbnRleHRUeXBlKGZDb250ZXh0VHlwZUlkKTsKLQkJfQotCi0JCXJldHVybiB0eXBlOwotCX0KLQotCXByb3RlY3RlZCBJbWFnZSBnZXRJbWFnZShUZW1wbGF0ZSB0ZW1wbGF0ZSkgewotCQlpZiAoVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoLkFYSVMKLQkJCQkuZXF1YWxzKHRlbXBsYXRlLmdldENvbnRleHRUeXBlSWQoKSkpIHsKLQkJCXJldHVybiBYUGF0aFBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoCi0JCQkJCVhQYXRoUGx1Z2luSW1hZ2VzLklNR19YUEFUSF9BWElTKTsKLQkJfQotCi0JCWlmIChUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguWFBBVEguZXF1YWxzKHRlbXBsYXRlCi0JCQkJLmdldENvbnRleHRUeXBlSWQoKSkpIHsKLQkJCXJldHVybiBYUGF0aFBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoCi0JCQkJCVhQYXRoUGx1Z2luSW1hZ2VzLklNR19YUEFUSF9GVU5DVElPTik7Ci0JCX0KLQotCQlpZiAoVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoLk9QRVJBVE9SLmVxdWFscyh0ZW1wbGF0ZQotCQkJCS5nZXRDb250ZXh0VHlwZUlkKCkpKSB7Ci0JCQlyZXR1cm4gWFBhdGhQbHVnaW5JbWFnZUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldEltYWdlKAotCQkJCQlYUGF0aFBsdWdpbkltYWdlcy5JTUdfT1BFUkFUT1IpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBDb250ZXh0VHlwZVJlZ2lzdHJ5IGdldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gWFBhdGhVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpOwotCX0KLQotCXByb3RlY3RlZCBUZW1wbGF0ZVtdIGdldFRlbXBsYXRlcyhTdHJpbmcgY29udGV4dFR5cGVJZCkgewotCQlUZW1wbGF0ZSB0ZW1wbGF0ZXNbXSA9IG51bGw7Ci0KLQkJVGVtcGxhdGVTdG9yZSBzdG9yZSA9IGdldFRlbXBsYXRlU3RvcmUoKTsKLQkJaWYgKHN0b3JlICE9IG51bGwpIHsKLQkJCXRlbXBsYXRlcyA9IHN0b3JlLmdldFRlbXBsYXRlcyhjb250ZXh0VHlwZUlkKTsKLQkJfQotCi0JCXJldHVybiB0ZW1wbGF0ZXM7Ci0JfQotCi0JcHJpdmF0ZSBUZW1wbGF0ZVN0b3JlIGdldFRlbXBsYXRlU3RvcmUoKSB7Ci0JCXJldHVybiBYUGF0aFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRYUGF0aFRlbXBsYXRlU3RvcmUoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb250ZXh0VHlwZShTdHJpbmcgY29udGV4dFR5cGVJZCkgewotCQlmQ29udGV4dFR5cGVJZCA9IGNvbnRleHRUeXBlSWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2hhbmRsZXIvUHJlZml4SGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL2hhbmRsZXIvUHJlZml4SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWE5ZTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9oYW5kbGVyL1ByZWZpeEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmhhbmRsZXI7DQotDQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhdGhFZGl0b3JJbnB1dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZUluZm87DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuWFBhdGhVSVBsdWdpbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3cy5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nOw0KLQ0KLS8qKg0KLSAqIFRoZSBwcmVmaXggaGFuZGxlciBoYW5kbGVzIGNvbW1hbmRzIGZvciBlZGl0aW5nIHRoZSBuYW1lc3BhY2VzIGFzc29pY2F0ZWQNCi0gKiB3aXRoIFhQYXRoIHF1aWVyaWVzIGluIHRoZSBYUGF0aCB2aWV3LiAgIElmIGFuIGl0ZW0gaXMgc2V0IHRvIHRoZSBkZWZhdWx0DQotICogbmFtZXNwYWNlIGl0IHN0aWxsIG5lZWRzIGEgcHJlZml4IGZvciBYUGF0aCB0byB3b3JrIHdpdGggaXQuDQotICogDQotICogQGF1dGhvciBkY2FydmVyDQotICoNCi0gKi8NCi1wdWJsaWMgY2xhc3MgUHJlZml4SGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciBpbXBsZW1lbnRzIElIYW5kbGVyIHsNCi0JDQotCS8qKg0KLQkgKiBUaGlzIHdpbGwgdXNlIHRoZSBhY3RpdmUgZWRpdG9yLCBhbmQgdHJ5IGFuZCByZXRyaWV2ZSBhIHN0cnVjdHVyZWQNCi0JICogbW9kZWwgZnJvbSBpdC4gIElmIHN1Y2Nlc3NmdWwsIGl0IHNldHVwcyB0aGUgbmFtZXNwYWNlIGVkaXQgZGlhbG9nDQotCSAqIHRvIGNhcHR1cmUgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbi4NCi0JICovDQotCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7DQotCQlYUGF0aFVJUGx1Z2luIHBsdWdpbiA9IFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpOw0KLQkJDQotCQlJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3IgPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVFZGl0b3IoZXZlbnQpOw0KLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgYWN0aXZlRWRpdG9yLmdldEVkaXRvcklucHV0KCkuZ2V0QWRhcHRlcigNCi0JCQkJSUZpbGUuY2xhc3MpOw0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOw0KLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsNCi0JCXRyeSB7DQotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOw0KLQkJCUlET01Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7DQotDQotCQkJaWYgKGRvY3VtZW50ICE9IG51bGwpIHsNCi0JCQkJTGlzdDxOYW1lc3BhY2VJbmZvPiBpbmZvID0gcGx1Z2luLmdldE5hbWVzcGFjZUluZm8oZG9jdW1lbnQpOw0KLQ0KLQkJCQlJUGF0aEVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gKElQYXRoRWRpdG9ySW5wdXQpIGFjdGl2ZUVkaXRvcg0KLQkJCQkJCS5nZXRFZGl0b3JJbnB1dCgpOw0KLQ0KLQkJCQlFZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nIGRsZyA9IG5ldyBFZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nKA0KLQkJCQkJCWFjdGl2ZUVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKSwgZWRpdG9ySW5wdXQNCi0JCQkJCQkJCS5nZXRQYXRoKCkpOw0KLQkJCQlkbGcuc2V0TmFtZXNwYWNlSW5mb0xpc3QoaW5mbyk7DQotCQkJCWlmIChTV1QuT0sgPT0gZGxnLm9wZW4oKSkgew0KLQkJCQkJLy8gQXBwbHkgY2hhbmdlcw0KLQkJCQl9DQotCQkJfQ0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQotDQotCQl9IGZpbmFsbHkgew0KLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7DQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOw0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBudWxsOw0KLQl9CQ0KLX0NCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvaGFuZGxlci9YUGF0aFByb2Nlc3NvckhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9oYW5kbGVyL1hQYXRoUHJvY2Vzc29ySGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGFmMjc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9oYW5kbGVyL1hQYXRoUHJvY2Vzc29ySGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuaGFuZGxlcjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuUmFkaW9TdGF0ZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoQ29yZUhlbHBlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJUGx1Z2luOw0KLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsNCi0NCi0NCi1wdWJsaWMgY2xhc3MgWFBhdGhQcm9jZXNzb3JIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIHsNCi0NCi0JcHVibGljIE9iamVjdCBleGVjdXRlKEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCi0JCWlmIChIYW5kbGVyVXRpbC5tYXRjaGVzUmFkaW9TdGF0ZShldmVudCkpIHsNCi0JCQlyZXR1cm4gbnVsbDsNCi0JCX0NCi0JCQ0KLQkJU3RyaW5nIHhwYXRoU3RhdGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoUmFkaW9TdGF0ZS5QQVJBTUVURVJfSUQpOw0KLQ0KLQkJdG9nZ2xlU3RhdGUoeHBhdGhTdGF0ZSk7DQotCQkNCi0JCUhhbmRsZXJVdGlsLnVwZGF0ZVJhZGlvU3RhdGUoZXZlbnQuZ2V0Q29tbWFuZCgpLCB4cGF0aFN0YXRlKTsNCi0JCXJldHVybiBudWxsOw0KLQl9DQotDQotCXByb3RlY3RlZCB2b2lkIHRvZ2dsZVN0YXRlKFN0cmluZyB4cGF0aFN0YXRlKSB7DQotCQlQcmVmZXJlbmNlcyBvc2dpUHJlZnMgPSBYUGF0aENvcmVIZWxwZXIuZ2V0UHJlZmVyZW5jZXMoKTsNCi0JCWlmICh4cGF0aFN0YXRlLmVxdWFscygieHBhdGgxMCIpKSB7DQotCQkJb3NnaVByZWZzLnB1dEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF8xXzBfUFJPQ0VTU09SLCB0cnVlKTsNCi0JCQlvc2dpUHJlZnMucHV0Qm9vbGVhbihYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLlhQQVRIXzJfMF9QUk9DRVNTT1IsIGZhbHNlKTsNCi0JCX0gZWxzZSBpZiAoeHBhdGhTdGF0ZS5lcXVhbHMoInhwYXRoMiIpKSB7DQotCQkJb3NnaVByZWZzLnB1dEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF8xXzBfUFJPQ0VTU09SLCBmYWxzZSk7DQotCQkJb3NnaVByZWZzLnB1dEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF8yXzBfUFJPQ0VTU09SLCB0cnVlKTsNCi0JCX0NCi0JCQ0KLQkJdHJ5IHsNCi0JCQlvc2dpUHJlZnMuZmx1c2goKTsNCi0JCX0gY2F0Y2ggKEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiBleCkgew0KLQkJCVhQYXRoVUlQbHVnaW4ubG9nKGV4KTsNCi0JCX0NCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTc5ODQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotWFBhdGhDb21wdXRlcl8wPUlTdHJ1Y3R1cmVkTW9kZWwgZGlkIG5vdCBhZGFwdCB0byBhIERvY3VtZW50Ci1YUGF0aENvbXB1dGVyXzU9UmVmcmVzaGluZyBYUGF0aCBWaWV3Ci1YUGF0aFZpZXdfMD1Mb2NhdGlvbjogCi1YUGF0aFZpZXdfMT1YUGF0aCBleHByZXNzaW9uOgotWFBhdGhWaWV3XzI9U2hlZXQgCi1YUGF0aFZpZXdfOD0vCi1YUGF0aFZpZXdBY3Rpb25zXzA9Q29sbGFwc2UgQWxsCi1YUGF0aFZpZXdBY3Rpb25zXzE9TGluayB3aXRoIEVkaXRvcgotWFBhdGhQcmVmZW5jZVBhZ2VfMD1FeHBhbmQgdGhlIHRyZWUgdG8gZWRpdCB0aGUgZmVhdHVyZXMgZm9yIGEgcGFydGljdWxhciBYUGF0aCBmZWF0dXJlLgotCi0jIFVJIFByZWZlcmVuY2UgU2V0dGluZ3MgZm9yIHZpZXdzOgotWFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yPVhQYXRoIE5hdmlnYXRvcgotWFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdD1TZWxlY3QgWE1MIFNvdXJjZSBkb2N1bWVudCBmaXJzdC4KLVhQYXRoTmF2aWdhdG9yX1hQYXRoX0V2YWxfRmFpbGVkPVhQYXRoIEV4cHJlc3Npb24gZXZhbHVhdGlvbiBmYWlsZWQgOlxyXG4KLVhQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQ9WE1MIFNvdXJjZSBEb2N1bWVudDoKLVhQYXRoTmF2aWdhdG9yX0NvbnRleHQ9WFBhdGggQ29udGV4dDoKLVhQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbj1TZWxlY3Rpb24KLVhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PURvY3VtZW50Ci1YUGF0aE5hdmlnYXRvcl9FeHByZXNzaW9uPVhQYXRoIEV4cHJlc3Npb246Ci1YUGF0aE5hdmlnYXRvcl9ET01fVHJlZT1ET00gVHJlZQotWFBhdGhOYXZpZ2F0b3JfVGV4dD1UZXh0Ci1YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk9UnVuIFhQYXRoIFF1ZXJ5Ci1YUGF0aE5hdmlnYXRvcl9SdW5fb25fc2VsZWN0ZWQ9UnVuIFhQYXRoIFF1ZXJ5IG9uIHNlbGVjdGVkXG5kb2N1bWVudCBjb250ZXh0Ci1YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzPVJlZnJlc2ggWE1MIFNvdXJjZSBEb2N1bWVudHMKLVhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPVJlZnJlc2ggWE1MIFNvdXJjZSBEb2N1bWVudCBsaXN0Ci1YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZT1TaG93IGluIFNvdXJjZQotWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwPUdvIHRvIHNlbGVjdGlvbiBpbiBYTUwgU291cmNlIERvY3VtZW50LgotWFBhdGhOYXZpZ2F0b3JfTm9kZV9jb3VsZF9ub3RfYmVfc2VsZWN0ZWQ9Tm9kZSBjb3VsZCBub3QgYmUgc2VsZWN0ZWQuCi1YUGF0aE5hdmlnYXRvcl9Ob3RoaW5nX3NlbGVjdGVkPU5vdGhpbmcgc2VsZWN0ZWQuCi1YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQ9Q291bGQgbm90IGZpbmQgc291cmNlIHBvc2l0aW9uIDpcclxuCi1YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzPVByZWZpeGVzLi4uCi1YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcD1FZGl0IG5hbWVzcGFjZSBwcmVmaXhlcyB1c2VkIGluIHRoZSBYUGF0aCBleHByZXNzaW9uLi4uCi1YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXM9TmFtZXNwYWNlIHByZWZpeGVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFBhdGhQcmVmZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YUGF0aFByZWZlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzQzZGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YUGF0aFByZWZlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuQWJzdHJhY3RQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi1AU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQotcHVibGljIGNsYXNzIFhQYXRoUHJlZmVuY2VQYWdlIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlUGFnZSB7Ci0KLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkFic3RyYWN0UHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gY3JlYXRlU2Nyb2xsZWRDb21wb3NpdGUocGFyZW50KTsKLQotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBNZXNzYWdlcy5YUGF0aFByZWZlbmNlUGFnZV8wOwotCQlUZXh0IHRleHQgPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOwotCQkvLyBzb21lIHRoZW1lcyBvbiBHVEsgaGF2ZSBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvcnMgZm9yIFRleHQgYW5kCi0JCS8vIExhYmVscwotCQl0ZXh0LnNldEJhY2tncm91bmQoY29tcG9zaXRlLmdldEJhY2tncm91bmQoKSk7Ci0JCXRleHQuc2V0VGV4dChkZXNjcmlwdGlvbik7Ci0KLQkJc2V0U2l6ZShjb21wb3NpdGUpOwotCQlyZXR1cm4gY29tcG9zaXRlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTU1M2U2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YUGF0aFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhNTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJUGx1Z2luOwotCi0vKioKLSAqIFhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2Ugc2V0cyB1cCB0aGUgdGVtcGxhdGUgcHJlZmVyZW5jZSBwYWdlIHRoYXQgY29udGFpbnMKLSAqIHRoZSB0ZW1wbGF0ZXMgZm9yIHhwYXRoLCB4cGF0aCAyLjAsIGF4aXMsIG9wZXJhdG9ycywgYW5kIGV4c2x0IGZ1bmN0aW9ucy4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFhQYXRoVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFhNTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UgewotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFhQYXRoVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSgpIHsKLQkJc2V0UHJlZmVyZW5jZVN0b3JlKFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKLQkJc2V0VGVtcGxhdGVTdG9yZShYUGF0aFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRYUGF0aFRlbXBsYXRlU3RvcmUoKSk7Ci0JCXNldENvbnRleHRUeXBlUmVnaXN0cnkoWFBhdGhVSVBsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkuZ2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpKTsKLQl9Ci0KLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlUGFnZSNwZXJmb3JtT2soKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKLQkJYm9vbGVhbiBvayA9IHN1cGVyLnBlcmZvcm1PaygpOwotCQlYUGF0aFVJUGx1Z2luLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcmV0dXJuIG9rOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC90ZW1wbGF0ZXMvVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdGVtcGxhdGVzL1RlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmZDYxNjVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC90ZW1wbGF0ZXMvVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTM4NDkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudGVtcGxhdGVzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgZm9yIHRoZSBYU0wgQ29udGVueHRUeXBlcyBmb3IgdGhlCi0gKiBYUGF0aCBjb21wbGV0aW9uIHByb3Bvc2Fscy4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aCB7Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YWRvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIID0gZ2V0WFBhdGgoKTsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEgyID0gZ2V0WFBhdGgyKCk7Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YWRvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFYSVMgPSBnZXRBWElTKCk7Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YWRvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYU0xUID0gZ2V0RVhTTFQoKTsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUT1IgPSBnZXRPcGVyYXRvcigpOwotCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFkb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDVVNUT00gPSBnZXRDdXN0b20oKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRYUGF0aCgpIHsKLQkJcmV0dXJuICJ4c2xfeHBhdGgiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFhQYXRoMigpIHsKLQkJcmV0dXJuICJ4cGF0aF8yIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRBWElTKCkgewotCQlyZXR1cm4gInhwYXRoX2F4aXMiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEVYU0xUKCkgewotCQlyZXR1cm4gImV4c2x0X2Z1bmN0aW9ucyI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0T3BlcmF0b3IoKSB7Ci0JCXJldHVybiAieHBhdGhfb3BlcmF0b3IiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEN1c3RvbSgpIHsKLQkJcmV0dXJuICJleHRlbnNpb25fZnVuY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3V0aWwvWFBhdGhQbHVnaW5JbWFnZUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3V0aWwvWFBhdGhQbHVnaW5JbWFnZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhNGZiNDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC91dGlsL1hQYXRoUGx1Z2luSW1hZ2VIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTM4NDkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLlhQYXRoVUlQbHVnaW47Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIGhhbmRsZSBpbWFnZXMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnLWluLgotICogCi0gKiBOT1RFOiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIEZvciBpbWFnZXMgdXNlZCBleHRlcm5hbGx5LCBwbGVhc2UgdXNlIHRoZQotICogU2hhcmVkKioqSW1hZ2VIZWxwZXIgY2xhc3MgaW5zdGVhZC4KLSAqIAotICogQGF1dGhvciBkYXZpZCBjYXJ2ZXIgYmFzZWQgb24gd29yayBieSBhbXl3dQotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhQbHVnaW5JbWFnZUhlbHBlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgWFBhdGhQbHVnaW5JbWFnZUhlbHBlciBpbnN0YW5jZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJldHVybnMgYSBYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFhQYXRoUGx1Z2luSW1hZ2VIZWxwZXIgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZSA9IG5ldyBYUGF0aFBsdWdpbkltYWdlSGVscGVyKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQotCS8vIHNhdmUgYSBkZXNjcmlwdG9yIGZvciBlYWNoIGltYWdlCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBIYXNoTWFwIGZJbWFnZURlc2NSZWdpc3RyeSA9IG51bGw7Ci0KLQkvLyBwcml2YXRlIGZpbmFsIFN0cmluZyBQTFVHSU5JRCA9IFhQYXRoVUlQbHVnaW4uUExVR0lOX0lEOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbWFnZSBmcm9tIHRoZSBnaXZlbiByZXNvdXJjZSBhbmQgYWRkcyB0aGUgaW1hZ2UgdG8gdGhlIGltYWdlCi0JICogcmVnaXN0cnkuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlCi0JICogQHJldHVybiBJbWFnZQotCSAqLwotCXByaXZhdGUgSW1hZ2UgY3JlYXRlSW1hZ2UoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBkZXNjID0gZ2V0SW1hZ2VEZXNjcmlwdG9yKHJlc291cmNlKTsKLQkJSW1hZ2UgaW1hZ2UgPSBudWxsOwotCi0JCWlmIChkZXNjICE9IG51bGwpIHsKLQkJCWltYWdlID0gZGVzYy5jcmVhdGVJbWFnZSgpOwotCQkJLy8gZG9udCBhZGQgdGhlIG1pc3NpbmcgaW1hZ2UgZGVzY3JpcHRvciBpbWFnZSB0byB0aGUgaW1hZ2UKLQkJCS8vIHJlZ2lzdHJ5Ci0JCQlpZiAoIWRlc2MuZXF1YWxzKEltYWdlRGVzY3JpcHRvci5nZXRNaXNzaW5nSW1hZ2VEZXNjcmlwdG9yKCkpKSB7Ci0JCQkJZ2V0SW1hZ2VSZWdpc3RyeSgpLnB1dChyZXNvdXJjZSwgaW1hZ2UpOwotCQkJfQotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGltYWdlIGRlc2NyaXB0b3IgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2VGaWxlUGF0aCBhbmQgYWRkcyB0aGUKLQkgKiBpbWFnZSBkZXNjcmlwdG9yIHRvIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5LiBJZiBhbiBpbWFnZSBkZXNjcmlwdG9yCi0JICogY291bGQgbm90IGJlIGNyZWF0ZWQsIHRoZSBkZWZhdWx0ICJtaXNzaW5nIiBpbWFnZSBkZXNjcmlwdG9yIGlzIHJldHVybmVkCi0JICogYnV0IG5vdCBhZGRlZCB0byB0aGUgaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeS4KLQkgKiAKLQkgKiBAcGFyYW0gaW1hZ2VGaWxlUGF0aAotCSAqIEByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yIGltYWdlIGRlc2NyaXB0b3IgZm9yIGltYWdlRmlsZVBhdGggb3IgZGVmYXVsdAotCSAqICAgICAgICAgIm1pc3NpbmciIGltYWdlIGRlc2NyaXB0b3IgaWYgcmVzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kCi0JICovCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBJbWFnZURlc2NyaXB0b3IgY3JlYXRlSW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBpbWFnZUZpbGVQYXRoKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSBBYnN0cmFjdFVJUGx1Z2luCi0JCQkJLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oWFBhdGhVSVBsdWdpbi5QTFVHSU5fSUQsCi0JCQkJCQlpbWFnZUZpbGVQYXRoKTsKLQkJaWYgKGltYWdlRGVzY3JpcHRvciAhPSBudWxsKSB7Ci0JCQlnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpLnB1dChpbWFnZUZpbGVQYXRoLCBpbWFnZURlc2NyaXB0b3IpOwotCQl9IGVsc2UgewotCQkJaW1hZ2VEZXNjcmlwdG9yID0gSW1hZ2VEZXNjcmlwdG9yLmdldE1pc3NpbmdJbWFnZURlc2NyaXB0b3IoKTsKLQkJfQotCi0JCXJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2UgZnJvbSB0aGUgaW1hZ2UgcmVnaXN0cnkuIElmCi0JICogdGhlIGltYWdlIGNhbm5vdCBiZSByZXRyaWV2ZWQsIGF0dGVtcHQgdG8gZmluZCBhbmQgbG9hZCB0aGUgaW1hZ2UgYXQgdGhlCi0JICogbG9jYXRpb24gc3BlY2lmaWVkIGluIHJlc291cmNlLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqICAgICAgICAgICAgdGhlIGltYWdlIHRvIHJldHJpZXZlCi0JICogQHJldHVybiBJbWFnZSB0aGUgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIG9yIG51bGwgaWYgb25lIGNvdWxkIG5vdAotCSAqICAgICAgICAgYmUgZm91bmQKLQkgKi8KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlIGltYWdlID0gZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldChyZXNvdXJjZSk7Ci0JCWlmIChpbWFnZSA9PSBudWxsKSB7Ci0JCQkvLyBjcmVhdGUgYW4gaW1hZ2UKLQkJCWltYWdlID0gY3JlYXRlSW1hZ2UocmVzb3VyY2UpOwotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlCi0JICogZGVzY3JpcHRvciByZWdpc3RyeS4gSWYgdGhlIGltYWdlIGRlc2NyaXB0b3IgY2Fubm90IGJlIHJldHJpZXZlZCwgYXR0ZW1wdAotCSAqIHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbgotCSAqIHJlc291cmNlLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqICAgICAgICAgICAgdGhlIGltYWdlIGRlc2NyaXB0b3IgdG8gcmV0cmlldmUKLQkgKiBAcmV0dXJuIEltYWdlRGVzY3JpcHRvciB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhc3NvY2F0ZWQgd2l0aCByZXNvdXJjZSBvcgotCSAqICAgICAgICAgdGhlIGRlZmF1bHQgIm1pc3NpbmciIGltYWdlIGRlc2NyaXB0b3IgaWYgb25lIGNvdWxkIG5vdCBiZSBmb3VuZAotCSAqLwotCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyByZXNvdXJjZSkgewotCQlJbWFnZURlc2NyaXB0b3IgaW1hZ2VEZXNjcmlwdG9yID0gbnVsbDsKLQkJT2JqZWN0IG8gPSBnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpLmdldChyZXNvdXJjZSk7Ci0JCWlmIChvID09IG51bGwpIHsKLQkJCS8vIGNyZWF0ZSBhIGRlc2NyaXB0b3IKLQkJCWltYWdlRGVzY3JpcHRvciA9IGNyZWF0ZUltYWdlRGVzY3JpcHRvcihyZXNvdXJjZSk7Ci0JCX0gZWxzZSB7Ci0JCQlpbWFnZURlc2NyaXB0b3IgPSAoSW1hZ2VEZXNjcmlwdG9yKSBvOwotCQl9Ci0JCXJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeSBmb3IgdGhpcyBwbHVnaW4uCi0JICogCi0JICogQHJldHVybiBIYXNoTWFwIC0gaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeSBmb3IgdGhpcyBwbHVnaW4KLQkgKi8KLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIEhhc2hNYXAgZ2V0SW1hZ2VEZXNjcmlwdG9yUmVnaXN0cnkoKSB7Ci0JCWlmIChmSW1hZ2VEZXNjUmVnaXN0cnkgPT0gbnVsbCkgewotCQkJZkltYWdlRGVzY1JlZ2lzdHJ5ID0gbmV3IEhhc2hNYXAoKTsKLQkJfQotCQlyZXR1cm4gZkltYWdlRGVzY1JlZ2lzdHJ5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGltYWdlIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbi4KLQkgKiAKLQkgKiBAcmV0dXJuIEltYWdlUmVnaXN0cnkgLSBpbWFnZSByZWdpc3RyeSBmb3IgdGhpcyBwbHVnaW4KLQkgKi8KLQlwcml2YXRlIEltYWdlUmVnaXN0cnkgZ2V0SW1hZ2VSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIEpGYWNlUmVzb3VyY2VzLmdldEltYWdlUmVnaXN0cnkoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdXRpbC9YUGF0aFBsdWdpbkltYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3V0aWwvWFBhdGhQbHVnaW5JbWFnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjk4NTI3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdXRpbC9YUGF0aFBsdWdpbkltYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjEzODQ5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC51dGlsOwotCi0vKioKLSAqIEJ1bmRsZSBvZiBtb3N0IGltYWdlcyB1c2VkIGJ5IHRoZSBYU0wgUGx1Z2lucwotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhQbHVnaW5JbWFnZXMgewotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1hQQVRIX0ZVTkNUSU9OID0gImljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1hQQVRIX0FYSVMgPSAiaWNvbnMvZnVsbC9kaXJlY3Rpb25hbC5naWYiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3QKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfVkFSSUFCTEVTID0gImljb25zL2Z1bGwvdmFyaWFibGUuZ2lmIjsgLy8kTk9OLU5MUy0xJAkKLQotCS8qKgotCSAqIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19PUEVSQVRPUiA9ICJpY29ucy9mdWxsL29wZXJhdGlvbi5naWYiOyAvLyROT04tTkxTLTEkCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvRGVmYXVsdE5hbWVzcGFjZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9EZWZhdWx0TmFtZXNwYWNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNhMzA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9EZWZhdWx0TmFtZXNwYWNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjE1ODggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCi0NCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5OYW1lc3BhY2VDb250ZXh0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsNCi0NCi0vKioNCi0gKiBQcm92aWRlcyBhIGpheHAgTmFtZXNwYWNlQ29udGV4dCBpbmZvcm1hdGlvbiBiYXNlZCBvbiBpbmZvcm1hdGlvbg0KLSAqIGZyb20gdGhlIE5hbWVzcGFjZUluZm8gY2xhc3MuDQotICogQGF1dGhvciBkY2FydmVyDQotICoNCi0gKi8NCi1wdWJsaWMgY2xhc3MgRGVmYXVsdE5hbWVzcGFjZUNvbnRleHQgaW1wbGVtZW50cyBOYW1lc3BhY2VDb250ZXh0IHsNCi0NCi0JTGlzdDxOYW1lc3BhY2VJbmZvPiBuc2luZm9MaXN0Ow0KLQlwdWJsaWMgRGVmYXVsdE5hbWVzcGFjZUNvbnRleHQoTGlzdDxOYW1lc3BhY2VJbmZvPiBuYW1lc3BhY2VJbmZvKSB7DQotCQluc2luZm9MaXN0ID0gbmFtZXNwYWNlSW5mbzsNCi0JfQ0KLQkNCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoU3RyaW5nIHByZWZpeCkgew0KLQkJZm9yIChOYW1lc3BhY2VJbmZvIG5pIDogbnNpbmZvTGlzdCkgew0KLQkJCWlmIChwcmVmaXguZXF1YWxzKG5pLnByZWZpeCkpIHsNCi0JCQkJcmV0dXJuIG5pLnVyaTsNCi0JCQl9DQotCQl9DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQlwdWJsaWMgU3RyaW5nIGdldFByZWZpeChTdHJpbmcgdXJpKSB7DQotCQlmb3IgKE5hbWVzcGFjZUluZm8gbmkgOiBuc2luZm9MaXN0KSB7DQotCQkJaWYgKHVyaS5lcXVhbHMobmkudXJpKSkgew0KLQkJCQlyZXR1cm4gbmkucHJlZml4Ow0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBudWxsOw0KLQl9DQotDQotCXB1YmxpYyBJdGVyYXRvcjxTdHJpbmc+IGdldFByZWZpeGVzKFN0cmluZyB1cmkpIHsNCi0JCUxpc3Q8U3RyaW5nPiBwcmVmaXhlcyA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKTsNCi0JCWZvciAoTmFtZXNwYWNlSW5mbyBuaSA6IG5zaW5mb0xpc3QpIHsNCi0JCQlpZiAodXJpLmVxdWFscyhuaS51cmkpKSB7DQotCQkJCXByZWZpeGVzLmFkZChuaS5wcmVmaXgpOw0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBwcmVmaXhlcy5pdGVyYXRvcigpOw0KLQl9DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjg0MDA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnMgKGFkYXB0ZWQgZnJvbSBFZGl0U2NoZW1hSW5mb0RpYWxvZyk6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIEV4dHJhY3RlZCBmb3IgdXNlIGluIFhQYXRoIE5hdmlnYXRvciB2aWV3Ci0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZGlhbG9ncy5OYW1lc3BhY2VJbmZvRXJyb3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5kaWFsb2dzLlVwZGF0ZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwubnNlZGl0LkNvbW1vbkVkaXROYW1lc3BhY2VzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBFZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgVXBkYXRlTGlzdGVuZXIgewotCS8vIHByb3RlY3RlZCBOYW1lc3BhY2VJbmZvVGFibGUgbmFtZXNwYWNlSW5mb1RhYmxlOwotCXByb3RlY3RlZCBMYWJlbCBlcnJvck1lc3NhZ2VMYWJlbDsKLQlwcm90ZWN0ZWQgTGlzdDxOYW1lc3BhY2VJbmZvPiBuYW1lc3BhY2VJbmZvTGlzdDsKLQlwcm90ZWN0ZWQgSVBhdGggcmVzb3VyY2VMb2NhdGlvbjsKLQotCXB1YmxpYyBFZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBJUGF0aCByZXNvdXJjZUxvY2F0aW9uKSB7Ci0JCXN1cGVyKHBhcmVudFNoZWxsKTsKLQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQkJdGhpcy5yZXNvdXJjZUxvY2F0aW9uID0gcmVzb3VyY2VMb2NhdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5PS19JRCwgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwKLQkJCQl0cnVlKTsKLQkJY3JlYXRlQnV0dG9uKHBhcmVudCwgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsCi0JCQkJSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIGZhbHNlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGRpYWxvZ0FyZWEgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCS8vIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZGlhbG9nQXJlYSwKLQkJLy8gWE1MQ29tbW9uVUlDb250ZXh0SWRzLlhDVUlfU0NIRU1BX0lORk9fRElBTE9HKTsKLQotCQlDb21tb25FZGl0TmFtZXNwYWNlc0RpYWxvZyBlZGl0TmFtZXNwYWNlc0NvbnRyb2wgPSBuZXcgQ29tbW9uRWRpdE5hbWVzcGFjZXNEaWFsb2coCi0JCQkJZGlhbG9nQXJlYSwgcmVzb3VyY2VMb2NhdGlvbiwKLQkJCQlNZXNzYWdlcy5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXMsIGZhbHNlLCB0cnVlKTsKLQkJZWRpdE5hbWVzcGFjZXNDb250cm9sLnNldE5hbWVzcGFjZUluZm9MaXN0KG5hbWVzcGFjZUluZm9MaXN0KTsKLQotCQllZGl0TmFtZXNwYWNlc0NvbnRyb2wudXBkYXRlRXJyb3JNZXNzYWdlKG5hbWVzcGFjZUluZm9MaXN0KTsKLQotCQlnZXRTaGVsbCgpLnNldFRleHQoTWVzc2FnZXMuWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzKTsKLQkJcmV0dXJuIGRpYWxvZ0FyZWE7Ci0JfQotCi0JcHJvdGVjdGVkIENvbnRyb2wgZ2V0RGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXJldHVybiBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JfQotCi0JcHVibGljIExpc3Q8TmFtZXNwYWNlSW5mbz4gZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKSB7Ci0JCXJldHVybiBuYW1lc3BhY2VJbmZvTGlzdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VJbmZvTGlzdChMaXN0PE5hbWVzcGFjZUluZm8+IGxpc3QpIHsKLQkJbmFtZXNwYWNlSW5mb0xpc3QgPSBsaXN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHVwZGF0ZUVycm9yTWVzc2FnZShMaXN0PE5hbWVzcGFjZUluZm8+IG5hbWVzcGFjZUluZm9MaXN0KSB7Ci0JCU5hbWVzcGFjZUluZm9FcnJvckhlbHBlciBoZWxwZXIgPSBuZXcgTmFtZXNwYWNlSW5mb0Vycm9ySGVscGVyKCk7Ci0JCVN0cmluZyBlcnJvck1lc3NhZ2UgPSBoZWxwZXIuY29tcHV0ZUVycm9yTWVzc2FnZShuYW1lc3BhY2VJbmZvTGlzdCwKLQkJCQludWxsKTsKLQkJZXJyb3JNZXNzYWdlTGFiZWwuc2V0VGV4dChlcnJvck1lc3NhZ2UgIT0gbnVsbCA/IGVycm9yTWVzc2FnZSA6ICIiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyB2b2lkIHVwZGF0ZU9jY3VyZWQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGFyZykgewotCQl1cGRhdGVFcnJvck1lc3NhZ2UoKExpc3Q8TmFtZXNwYWNlSW5mbz4pIGFyZyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0VtcHR5Tm9kZUxpc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9FbXB0eU5vZGVMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTY3YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0VtcHR5Tm9kZUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudmlld3M7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eU5vZGVMaXN0IHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9KRmFjZU5vZGVDb250ZW50UHJvdmlkZXJYUGF0aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0pGYWNlTm9kZUNvbnRlbnRQcm92aWRlclhQYXRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYWE1ZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0pGYWNlTm9kZUNvbnRlbnRQcm92aWRlclhQYXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuRm9udFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLklKRmFjZU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIEpGYWNlTm9kZUNvbnRlbnRQcm92aWRlclhQYXRoIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIgewotCi0JcHJvdGVjdGVkIElKRmFjZU5vZGVBZGFwdGVyIGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZSkgewotCQlpZiAoYWRhcHRhYmxlIGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikgewotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSAoKElOb2RlTm90aWZpZXIpIGFkYXB0YWJsZSkKLQkJCQkJLmdldEFkYXB0ZXJGb3IoSUpGYWNlTm9kZUFkYXB0ZXIuY2xhc3MpOwotCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJSkZhY2VOb2RlQWRhcHRlcikgewotCQkJCXJldHVybiAoSUpGYWNlTm9kZUFkYXB0ZXIpIGFkYXB0ZXI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgewotCQlJSkZhY2VOb2RlQWRhcHRlciBhZGFwdGVyID0gZ2V0QWRhcHRlcihvYmplY3QpOwotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYWRhcHRlci5nZXRDaGlsZHJlbihvYmplY3QpOwotCQl9Ci0JCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCX0KLQotCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJRE9NTW9kZWwpIHsKLQkJCU9iamVjdCB0b3BOb2RlID0gKChJRE9NTW9kZWwpIG9iamVjdCkuZ2V0RG9jdW1lbnQoKTsKLQkJCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKHRvcE5vZGUpOwotCQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJCXJldHVybiBhZGFwdGVyLmdldEVsZW1lbnRzKHRvcE5vZGUpOwotCQkJfQotCQl9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7Ci0JCQlOb2RlTGlzdCBub2RlTGlzdCA9IChOb2RlTGlzdCkgb2JqZWN0OwotCQkJaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID09IDApIHsKLQkJCQlyZXR1cm4gbmV3IE9iamVjdFtdIHsgbmV3IEVtcHR5Tm9kZUxpc3QoKSB9OwotCQkJfSBlbHNlIHsKLQkJCQlOb2RlW10gbm9kZXMgPSBuZXcgTm9kZVtub2RlTGlzdC5nZXRMZW5ndGgoKV07Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewotCQkJCQlub2Rlc1tpXSA9IG5vZGVMaXN0Lml0ZW0oaSk7Ci0JCQkJfQotCQkJCXJldHVybiBub2RlczsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IE9iamVjdFswXTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7Ci0JCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKG9iamVjdCk7Ci0JCWlmIChhZGFwdGVyICE9IG51bGwpIHsKLQkJCXJldHVybiBhZGFwdGVyLmdldFBhcmVudChvYmplY3QpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKLQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIob2JqZWN0KTsKLQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIGFkYXB0ZXIuaGFzQ2hpbGRyZW4ob2JqZWN0KTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0pGYWNlTm9kZUxhYmVsUHJvdmlkZXJYUGF0aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL0pGYWNlTm9kZUxhYmVsUHJvdmlkZXJYUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTI2ODRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9KRmFjZU5vZGVMYWJlbFByb3ZpZGVyWFBhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjg0MzA2IC0gcmVtb3ZlZCB0cnVuY2F0aW9uIG9mIHN0cmluZyB2YWx1ZS4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gYnVnIDMwMzM0OSAtIGZpeCBOUEUgd2hlbiBBZGFwdG9yIG5vdCBmb3VuZC4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDMxMzk5MiAtIFhQYXRoIGV2YWx1YXRpb24gZG9lcyBub3Qgc2hvdyBhdG9taWNzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkZvbnRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklGb250UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Gb250OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5JSkZhY2VOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBKRmFjZU5vZGVMYWJlbFByb3ZpZGVyWFBhdGggZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMKLQkJSUZvbnRQcm92aWRlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX01BVENIRVMgPSAiPE5vIE1hdGNoZXM+IjsKLQlGb250UmVnaXN0cnkgcmVnaXN0cnkgPSBuZXcgRm9udFJlZ2lzdHJ5KCk7Ci0KLQlwcm90ZWN0ZWQgSUpGYWNlTm9kZUFkYXB0ZXIgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlKSB7Ci0JCWlmIChhZGFwdGFibGUgaW5zdGFuY2VvZiBJTm9kZU5vdGlmaWVyKSB7Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9ICgoSU5vZGVOb3RpZmllcikgYWRhcHRhYmxlKQotCQkJCQkuZ2V0QWRhcHRlckZvcihJSkZhY2VOb2RlQWRhcHRlci5jbGFzcyk7Ci0JCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElKRmFjZU5vZGVBZGFwdGVyKSB7Ci0JCQkJcmV0dXJuIChJSkZhY2VOb2RlQWRhcHRlcikgYWRhcHRlcjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFbXB0eU5vZGVMaXN0KSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlJSkZhY2VOb2RlQWRhcHRlciBhZGFwdGVyID0gZ2V0QWRhcHRlcihlbGVtZW50KTsKLQkJcmV0dXJuIGFkYXB0ZXIgIT0gbnVsbCA/IGFkYXB0ZXIuZ2V0TGFiZWxJbWFnZShlbGVtZW50KSA6IG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRW1wdHlOb2RlTGlzdCkgewotCQkJcmV0dXJuIE5PX01BVENIRVM7Ci0JCX0KLQkJCi0JCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKGVsZW1lbnQpOwotCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7Ci0JCQkvLyBDb3VsZCBiZSBvdXIgZmFrZSAiQW55VmFsdWUiIFRleHQgbm9kZQotCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0KSB7Ci0JCQkJcmV0dXJuICgoVGV4dCllbGVtZW50KS5nZXREYXRhKCk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBlbGVtZW50LnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoYWRhcHRlci5nZXRMYWJlbFRleHQoZWxlbWVudCkpOwotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKLQkJCUVsZW1lbnQgaW1wbCA9IChFbGVtZW50KSBlbGVtZW50OwotCQkJTmFtZWROb2RlTWFwIG5ubSA9IGltcGwuZ2V0QXR0cmlidXRlcygpOwotCQkJaWYgKG5ubS5nZXRMZW5ndGgoKSA+IDApIHsKLQkJCQlBdHRyIGEgPSAoQXR0cikgbm5tLml0ZW0oMCk7Ci0JCQkJU3RyaW5nIHZhbCA9IGEuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJc2IuYXBwZW5kKCIgIikuYXBwZW5kKGEuZ2V0TmFtZSgpKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIEZvbnQgZ2V0Rm9udChPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVtcHR5Tm9kZUxpc3QpIHsKLQkJCXJldHVybiByZWdpc3RyeS5nZXRJdGFsaWMoRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0U3lzdGVtRm9udCgpCi0JCQkJCS5nZXRGb250RGF0YSgpWzBdLmdldE5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL05hbWVzcGFjZVNlbGVjdGlvbkFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9OYW1lc3BhY2VTZWxlY3Rpb25BZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNDRlZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL05hbWVzcGFjZVNlbGVjdGlvbkFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czsNCi0NCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOw0KLWltcG9ydCBqYXZhLnV0aWwuV2Vha0hhc2hNYXA7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEFkYXB0ZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXRoRWRpdG9ySW5wdXQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2JlbmNoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLk5hbWVzcGFjZVRhYmxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7DQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KLQ0KLXB1YmxpYyBjbGFzcyBOYW1lc3BhY2VTZWxlY3Rpb25BZGFwdGVyIGV4dGVuZHMgU2VsZWN0aW9uQWRhcHRlciB7DQotDQotCXByb3RlY3RlZCBNYXA8RG9jdW1lbnQsIExpc3Q8TmFtZXNwYWNlSW5mbz4+IG5hbWVzcGFjZUluZm87DQotDQotCXB1YmxpYyBOYW1lc3BhY2VTZWxlY3Rpb25BZGFwdGVyKE1hcDxEb2N1bWVudCwgTGlzdDxOYW1lc3BhY2VJbmZvPj4gbmFtZXNwYWNlcykgew0KLQkJbmFtZXNwYWNlSW5mbyA9IG5hbWVzcGFjZXM7DQotCX0NCi0NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsNCi0JCUlFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvciA9IFdvcmtiZW5jaC5nZXRJbnN0YW5jZSgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsNCi0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGFjdGl2ZUVkaXRvci5nZXRFZGl0b3JJbnB1dCgpLmdldEFkYXB0ZXIoDQotCQkJCUlGaWxlLmNsYXNzKTsNCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsNCi0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7DQotCQl0cnkgew0KLQkJCW1vZGVsID0gKElET01Nb2RlbCkgbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChmaWxlKTsNCi0JCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOw0KLQ0KLQkJCWlmIChkb2N1bWVudCAhPSBudWxsKSB7DQotCQkJCUxpc3Q8TmFtZXNwYWNlSW5mbz4gaW5mbyA9IGNyZWF0ZU5hbWVzcGFjZUluZm8oZG9jdW1lbnQpOw0KLQ0KLQkJCQlJUGF0aEVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gKElQYXRoRWRpdG9ySW5wdXQpIGFjdGl2ZUVkaXRvcg0KLQkJCQkJCS5nZXRFZGl0b3JJbnB1dCgpOw0KLQ0KLQkJCQlFZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nIGRsZyA9IG5ldyBFZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nKA0KLQkJCQkJCWFjdGl2ZUVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKSwgZWRpdG9ySW5wdXQNCi0JCQkJCQkJCS5nZXRQYXRoKCkpOw0KLQkJCQlkbGcuc2V0TmFtZXNwYWNlSW5mb0xpc3QoaW5mbyk7DQotCQkJCWlmIChTV1QuT0sgPT0gZGxnLm9wZW4oKSkgew0KLQkJCQkJLy8gQXBwbHkgY2hhbmdlcw0KLQkJCQl9DQotCQkJfQ0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQotDQotCQl9IGZpbmFsbHkgew0KLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7DQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlwcml2YXRlIExpc3Q8TmFtZXNwYWNlSW5mbz4gY3JlYXRlTmFtZXNwYWNlSW5mbyhEb2N1bWVudCBkb2N1bWVudCkgew0KLQkJTGlzdDxOYW1lc3BhY2VJbmZvPiBpbmZvID0gbmFtZXNwYWNlSW5mby5nZXQoZG9jdW1lbnQpOw0KLQkJaWYgKGluZm8gPT0gbnVsbCkgew0KLQkJCWluZm8gPSBuZXcgQXJyYXlMaXN0PE5hbWVzcGFjZUluZm8+KCk7DQotCQkJTmFtZXNwYWNlVGFibGUgbmFtZXNwYWNlVGFibGUgPSBuZXcgTmFtZXNwYWNlVGFibGUoZG9jdW1lbnQpOw0KLQkJCW5hbWVzcGFjZVRhYmxlLnZpc2l0RWxlbWVudChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7DQotCQkJQ29sbGVjdGlvbjw/PiBuYW1lc3BhY2VzID0gbmFtZXNwYWNlVGFibGUNCi0JCQkJCS5nZXROYW1lc3BhY2VJbmZvQ29sbGVjdGlvbigpOw0KLQkJCWluZm8uYWRkQWxsKChDb2xsZWN0aW9uPE5hbWVzcGFjZUluZm8+KSBuYW1lc3BhY2VzKTsNCi0JCQluYW1lc3BhY2VJbmZvLnB1dChkb2N1bWVudCwgaW5mbyk7DQotCQl9DQotCQlyZXR1cm4gaW5mbzsNCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvWFBhdGhDb21wdXRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL3VpL2ludGVybmFsL3ZpZXdzL1hQYXRoQ29tcHV0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyMzA2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvWFBhdGhDb21wdXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2MTQyOCAtIFhQYXRoIFZpZXcgbm90IHJlc3BlY3RpbmcgbmFtZXNwYWNlcy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDMxMzk5MiAtIFhQYXRoIGV2YWx1YXRpb24gZG9lcyBub3Qgc2hvdyBhdG9taWNzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAzMjM0NDggLSBYUGF0aCB2aWV3IGRvZXNuJ3Qgc2hvdyBydW50aW1lIGVycm9yIGluZm9ybWF0aW9uIHdlbGwgKG9yIGF0IGFsbCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoQ29uc3RhbnRzOwotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLmpheHAuWFBhdGhGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5JV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuTm9kZUxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlNpbXBsZVhQYXRoRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoMjBIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGhDb3JlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhQYXRoQ29tcHV0ZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVUERBVEVfREVMQVkgPSA1MDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIFhQQVRIX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQlwcml2YXRlIGJvb2xlYW4geHBhdGgyMCA9IHRydWU7Ci0JcHJpdmF0ZSBYUGF0aFZpZXcgeHBhdGhWaWV3OwotCXByaXZhdGUgSU1vZGVsU3RhdGVMaXN0ZW5lciBtb2RlbFN0YXRlTGlzdGVuZXIgPSBuZXcgSU1vZGVsU3RhdGVMaXN0ZW5lcigpIHsKLQotCQlwdWJsaWMgdm9pZCBtb2RlbEFib3V0VG9CZUNoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVSZWluaXRpYWxpemVkKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBtb2RlbENoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJdXBkYXRlWFBhdGgoKTsKLQkJCWNvbXB1dGUoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vZGVsRGlydHlTdGF0ZUNoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwKLQkJCQlib29sZWFuIGlzRGlydHkpIHsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vZGVsUmVpbml0aWFsaXplZChJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgbW9kZWxSZXNvdXJjZURlbGV0ZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQl9Ci0KLQkJcHVibGljIHZvaWQgbW9kZWxSZXNvdXJjZU1vdmVkKElTdHJ1Y3R1cmVkTW9kZWwgb2xkTW9kZWwsCi0JCQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCkgewotCQl9Ci0JfTsKLQlwcml2YXRlIE5vZGUgbm9kZTsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWw7Ci0JcHJpdmF0ZSBTdHJpbmcgZXhwcmVzc2lvbjsKLQlwcml2YXRlIFN0cmluZyB0ZXh0OwotCXByaXZhdGUgTm9kZUxpc3Qgbm9kZUxpc3Q7Ci0JCi0JcHJpdmF0ZSBTaW1wbGVYUGF0aEVuZ2luZSB4cGF0aDJFbmdpbmU7Ci0JcHJpdmF0ZSBTaW1wbGVYUGF0aEVuZ2luZSB4cGF0aDFFbmdpbmU7Ci0KLQlwdWJsaWMgWFBhdGhDb21wdXRlcihYUGF0aFZpZXcgeHBhdGhWaWV3KSB7Ci0JCXRoaXMueHBhdGhWaWV3ID0geHBhdGhWaWV3OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vZGVsKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJaWYgKHRoaXMubW9kZWwgIT0gbnVsbCkgewotCQkJdGhpcy5tb2RlbC5yZW1vdmVNb2RlbFN0YXRlTGlzdGVuZXIobW9kZWxTdGF0ZUxpc3RlbmVyKTsKLQkJfQotCQl0aGlzLm1vZGVsID0gbW9kZWw7Ci0JCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQltb2RlbC5hZGRNb2RlbFN0YXRlTGlzdGVuZXIobW9kZWxTdGF0ZUxpc3RlbmVyKTsKLQkJCXVwZGF0ZVhQYXRoKCk7Ci0JCX0gZWxzZSB7Ci0JCQlub2RlID0gbnVsbDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCB1cGRhdGVYUGF0aCgpIHsKLQkJRG9jdW1lbnQgZG9jID0gKERvY3VtZW50KSBtb2RlbC5nZXRBZGFwdGVyKERvY3VtZW50LmNsYXNzKTsKLQkJaWYgKGRvYyA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQl0cnkgewotCQkJdXBkYXRlRXhwcmVzc2lvbigpOwotCQl9IGNhdGNoIChYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gZSkgewotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZUV4cHJlc3Npb24oKSB0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIHsKLQkJc3luY2hyb25pemVkIChYUEFUSF9MT0NLKSB7Ci0JCQlpZiAodGV4dCAhPSBudWxsKSB7Ci0JCQkJU2ltcGxlWFBhdGhFbmdpbmUgZW5naW5lID0gZ2V0Q3VycmVudEVuZ2luZSgpOwotCQkJCQotCQkJCUlET01Eb2N1bWVudCBkb2MgPSAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRE9DVU1FTlRfTk9ERSkgPyAoSURPTURvY3VtZW50KSBub2RlIDogKElET01Eb2N1bWVudCkgbm9kZS5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQkJdXBkYXRlTmFtZXNwYWNlcyhlbmdpbmUsIGRvYyk7Ci0KLQkJCQllbmdpbmUucGFyc2UodGV4dCk7Ci0JCQkJdGhpcy5leHByZXNzaW9uID0gdGV4dDsKLQkJCX0gZWxzZSB7Ci0JCQkJdGhpcy5leHByZXNzaW9uID0gbnVsbDsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgU2ltcGxlWFBhdGhFbmdpbmUgZ2V0Q3VycmVudEVuZ2luZSgpIHsKLQkJeHBhdGgyMCA9IFhQYXRoQ29yZUhlbHBlci5nZXRQcmVmZXJlbmNlcygpLmdldEJvb2xlYW4oWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5YUEFUSF8yXzBfUFJPQ0VTU09SLCBmYWxzZSk7Ci0JCWlmICh4cGF0aDIwKSB7Ci0JCQlpZiAoeHBhdGgyRW5naW5lID09IG51bGwpIHhwYXRoMkVuZ2luZSA9IG5ldyBYUGF0aDIwSGVscGVyLlhQYXRoMkVuZ2luZSgpOwotCQkJcmV0dXJuIHhwYXRoMkVuZ2luZTsKLQkJfSBlbHNlIHsKLQkJCWlmICh4cGF0aDFFbmdpbmUgPT0gbnVsbCkgeHBhdGgxRW5naW5lID0gbmV3IFhQYXRoMTBFbmdpbmUoKTsKLQkJCXJldHVybiB4cGF0aDFFbmdpbmU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkgdGhyb3dzIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiB7Ci0JCXRoaXMudGV4dCA9IHRleHQ7Ci0JCXVwZGF0ZUV4cHJlc3Npb24oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZE5vZGUoTm9kZSBub2RlKSB7Ci0JCXRoaXMubm9kZSA9IG5vZGU7Ci0JfQotCi0JcHVibGljIHZvaWQgY29tcHV0ZSgpIHsKLQkJc3luY2hyb25pemVkIChYUEFUSF9MT0NLKSB7Ci0JCX0KLQkJSm9iIHJlZnJlc2ggPSBuZXcgSm9iKE1lc3NhZ2VzLlhQYXRoQ29tcHV0ZXJfNSkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0vLwkJCQlpZiAoIXhwc1swXS5lcXVhbHMoZXhwcmVzc2lvbikpIHsKLS8vCQkJCQlyZXR1cm4gU3RhdHVzLkNBTkNFTF9TVEFUVVM7Ci0vLwkJCQl9Ci0JCQkJcmV0dXJuIGRvQ29tcHV0ZSgpOwotCQkJfQotCQl9OwotCQlyZWZyZXNoLnNldFN5c3RlbSh0cnVlKTsKLQkJcmVmcmVzaC5zZXRQcmlvcml0eShKb2IuU0hPUlQpOwotCQlJV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZSBzZXJ2aWNlID0gKElXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlKSB4cGF0aFZpZXcKLQkJCQkuZ2V0U2l0ZSgpLmdldFNlcnZpY2UoSVdvcmtiZW5jaFNpdGVQcm9ncmVzc1NlcnZpY2UuY2xhc3MpOwotCQlzZXJ2aWNlLnNjaGVkdWxlKHJlZnJlc2gsIFVQREFURV9ERUxBWSk7Ci0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGRvQ29tcHV0ZSgpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBleGVjdXRlWFBhdGgoKTsKLQotCQl4cGF0aFZpZXcueHBhdGhSZWNvbXB1dGVkKG5vZGVMaXN0LCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyBleGVjdXRlWFBhdGgoKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLkNBTkNFTF9TVEFUVVM7Ci0JCXRyeSB7Ci0JCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0JCQkJc3luY2hyb25pemVkIChYUEFUSF9MT0NLKSB7Ci0JCQkJCQotCQkJCQlTaW1wbGVYUGF0aEVuZ2luZSBlbmdpbmUgPSBnZXRDdXJyZW50RW5naW5lKCk7Ci0JCQkJCWlmICghIGVuZ2luZS5pc1ZhbGlkKCkpIGVuZ2luZS5wYXJzZSh0ZXh0KTsKLQkJCQkJCi0JCQkJCXN0YXR1cyA9IGV2YWx1YXRlWFBhdGgoZW5naW5lKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkNBTkNFTCwgWFBhdGhDb3JlUGx1Z2luLlBMVUdJTl9JRCwgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgZXZhbHVhdGVYUGF0aChTaW1wbGVYUGF0aEVuZ2luZSBlbmdpbmUpIHRocm93cyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gewotCQlJRE9NRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX05PREUpIHsKLQkJCWRvYyA9IChJRE9NRG9jdW1lbnQpIG5vZGU7Ci0JCX0gZWxzZSB7Ci0JCQlkb2MgPSAoSURPTURvY3VtZW50KSBub2RlLmdldE93bmVyRG9jdW1lbnQoKTsKLQkJfQotCQl1cGRhdGVOYW1lc3BhY2VzKGVuZ2luZSwgZG9jKTsKLQotCQl0cnkgewotCQkJdGhpcy5ub2RlTGlzdCA9IChOb2RlTGlzdCkgZW5naW5lLmV4ZWN1dGUobm9kZSk7Ci0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGRlKSB7Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkNBTkNFTCwgWFBhdGhDb3JlUGx1Z2luLlBMVUdJTl9JRCwgZGUuZ2V0TWVzc2FnZSgpICsgIiAoIiArIGRlLmNvZGUoKSArICIpIik7Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBYUGF0aENvcmVQbHVnaW4uUExVR0lOX0lELCB0LmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlTmFtZXNwYWNlcyhTaW1wbGVYUGF0aEVuZ2luZSBlbmdpbmUsIElET01Eb2N1bWVudCBkb2MpIHsKLQkJZmluYWwgTGlzdDxOYW1lc3BhY2VJbmZvPiBuYW1lc3BhY2VzID0gWFBhdGhVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TmFtZXNwYWNlSW5mbyhkb2MpOwotCQlpZiAobmFtZXNwYWNlcyAhPSBudWxsKSB7Ci0JCQllbmdpbmUuc2V0TmFtZXNwYWNlQ29udGV4dChuZXcgRGVmYXVsdE5hbWVzcGFjZUNvbnRleHQobmFtZXNwYWNlcykpOwotCQl9IGVsc2UgewotCQkJZW5naW5lLnNldE5hbWVzcGFjZUNvbnRleHQobnVsbCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBjbGFzcyBYUGF0aDEwRW5naW5lIGltcGxlbWVudHMgU2ltcGxlWFBhdGhFbmdpbmUgewotCi0JCXByaXZhdGUgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbiBnb29kWFBhdGggPSBudWxsOwotCi0JCXByaXZhdGUgTmFtZXNwYWNlQ29udGV4dCBuYW1lc3BhY2VDb250ZXh0OwotCi0JCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZUNvbnRleHQoTmFtZXNwYWNlQ29udGV4dCBuYW1lc3BhY2VDb250ZXh0KSB7Ci0JCQl0aGlzLm5hbWVzcGFjZUNvbnRleHQgPSBuYW1lc3BhY2VDb250ZXh0OyAKLQkJfQotCQkKLQkJcHJpdmF0ZSBqYXZheC54bWwueHBhdGguWFBhdGggbmV3WFBhdGggPSBuZXcgWFBhdGhGYWN0b3J5SW1wbCgpLm5ld1hQYXRoKCk7Ci0KLQkJcHVibGljIHZvaWQgcGFyc2UoU3RyaW5nIGV4cHJlc3Npb24pIHRocm93cyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gewotCQkJZ29vZFhQYXRoID0gbnVsbDsKLQkJCWlmIChuYW1lc3BhY2VDb250ZXh0ICE9IG51bGwpIHsKLQkJCQluZXdYUGF0aC5zZXROYW1lc3BhY2VDb250ZXh0KG5hbWVzcGFjZUNvbnRleHQpOwotCQkJfQotCQkJZ29vZFhQYXRoID0gbmV3WFBhdGguY29tcGlsZShleHByZXNzaW9uKTsKLQkJfQkJCQotCi0JCXB1YmxpYyBOb2RlTGlzdCBleGVjdXRlKE5vZGUgY29udGV4dE5vZGUpIHRocm93cyBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gewotCQkJCXRyeSB7Ci0JCQkJCXJldHVybiAoTm9kZUxpc3QpIGdvb2RYUGF0aC5ldmFsdWF0ZShjb250ZXh0Tm9kZSwgWFBhdGhDb25zdGFudHMuTk9ERVNFVCk7Ci0JCQkJfSBjYXRjaCAoWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIHhlZSkgewotCQkJCQlpZiAoeGVlLmdldENhdXNlKCkgIT0gbnVsbCAmJiB4ZWUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkuaW5kZXhPZigiQ2FuIG5vdCBjb252ZXJ0ICIpID49IDApIHsKLQkJCQkJCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpIGdvb2RYUGF0aC5ldmFsdWF0ZShjb250ZXh0Tm9kZSwgWFBhdGhDb25zdGFudHMuU1RSSU5HKTsKLQkJCQkJCXJldHVybiBuZXcgTm9kZUxpc3RJbXBsKG5ldyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UobmV3IFhTU3RyaW5nKHZhbHVlKSkpOwotCQkJCQl9IGVsc2UgdGhyb3cgeGVlOwotCQkJCX0KLQkJCX0KLQkJCQotCQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotCQkJcmV0dXJuIGdvb2RYUGF0aCAhPSBudWxsOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQltb2RlbC5yZW1vdmVNb2RlbFN0YXRlTGlzdGVuZXIobW9kZWxTdGF0ZUxpc3RlbmVyKTsKLQkJCW1vZGVsID0gbnVsbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9YUGF0aFZpZXcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS9pbnRlcm5hbC92aWV3cy9YUGF0aFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE0NTVjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvaW50ZXJuYWwvdmlld3MvWFBhdGhWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjE1ODggLSBBZGQgRWRpdCBOYW1lc3BhY2Ugc3VwcG9ydCBmb3IgWFBhdGggdmlldwotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjQ2MTEwIC0gQ2xlYW4gdXAgWFBhdGggVUkuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChJbnRhbGlvKSAtIGJ1ZyAyNzEyODggLSBTZXQgQ29udGV4dE5vZGUgZm9yIFhQYXRoIEV2YWx1YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDMxMzk5MiAtIFhQYXRoIGV2YWx1YXRpb24gZG9lcyBub3Qgc2hvdyBhdG9taWNzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU2FmZVJ1bm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlQ29sb3JzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuU2FmZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVBvc3RTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyMjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNob3dJblNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTaG93SW5UYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2hvd0luVGFyZ2V0TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlNob3dJbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFBhdGhWaWV3IGV4dGVuZHMgVmlld1BhcnQgewotCi0JcHJpdmF0ZSBib29sZWFuIGlzRmlyaW5nU2VsZWN0aW9uID0gZmFsc2U7Ci0JcHJpdmF0ZSBJUGFydExpc3RlbmVyMiBwYXJ0TGlzdGVuZXIyID0gbmV3IFhQYXRoUGFydExpc3RlbmVyKCk7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uTGlzdGVuZXIgc2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgSVNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCQlpZiAocGFydCA9PSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpKSB7Ci0JCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCWN1cnJlbnRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQkJCQkJaWYgKCFzZWxlY3Rpb24uaXNFbXB0eSgpCi0JCQkJCQkJJiYgKGN1cnJlbnRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBOb2RlKSkgewotCQkJCQkJcmVjYWxjdWxhdGVMb2NhdGlvbigoTm9kZSkgY3VycmVudFNlbGVjdGlvbgotCQkJCQkJCQkuZ2V0Rmlyc3RFbGVtZW50KCkpOwotCQkJCQkJYm9vbGVhbiBpc0xpbmtlZCA9IHhwYXRoVmlld0FjdGlvbnMKLQkJCQkJCQkJLmlzTGlua2VkV2l0aEVkaXRvcih0cmVlVmlld2VyKTsKLQkJCQkJCWlmIChpc0xpbmtlZCkgewotCQkJCQkJCXRyZWVWaWV3ZXIuc2V0U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24sIHRydWUpOwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJcmVjYWxjdWxhdGVMb2NhdGlvbihudWxsKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX07Ci0JcHJpdmF0ZSBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7Ci0JcHJpdmF0ZSBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3I7Ci0JcHJpdmF0ZSBUZXh0IHRleHQ7Ci0JLy8gcHJpdmF0ZSBKRmFjZU5vZGVDb250ZW50UHJvdmlkZXJYUGF0aCBjb250ZW50UHJvdmlkZXI7Ci0JcHJpdmF0ZSBYUGF0aENvbXB1dGVyIHhwYXRoQ29tcHV0ZXI7Ci0JcHJpdmF0ZSBUZXh0IGxvY2F0aW9uVGV4dDsKLQlwcml2YXRlIFhQYXRoVmlld0FjdGlvbnMgeHBhdGhWaWV3QWN0aW9ucyA9IG5ldyBYUGF0aFZpZXdBY3Rpb25zKCk7Ci0JcHJpdmF0ZSBJUG9zdFNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gbmV3IFNlbGVjdGlvblByb3ZpZGVyKCk7Ci0JcHJpdmF0ZSBTdHJpbmcgbG9jYXRpb24gPSAiIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2U7Ci0JcHJpdmF0ZSBib29sZWFuIGV4cHJlc3Npb25WYWxpZCA9IHRydWU7Ci0JcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRTaGVldCA9IEludGVnZXIudmFsdWVPZigwKTsKLQlwcml2YXRlIE1hcDxJbnRlZ2VyLCBTdHJpbmc+IHNoZWV0TWFwOwotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsKLQlwcml2YXRlIE5vZGUgY29udGV4dE5vZGUgPSBudWxsOwotCi0JcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFyZW50Q29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgxLCBmYWxzZSk7Ci0JCWdsLmhvcml6b250YWxTcGFjaW5nID0gMDsKLQkJZ2wudmVydGljYWxTcGFjaW5nID0gMDsKLQkJZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLQkJZ2wubWFyZ2luV2lkdGggPSAwOwotCQlwYXJlbnRDb21wLnNldExheW91dChnbCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UsIDIsIDEpOwotCQlwYXJlbnRDb21wLnNldExheW91dERhdGEoZ2QpOwotCi0JCUNvbXBvc2l0ZSBjb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnRDb21wLCBTV1QuTk9ORSk7Ci0JCWNvbXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKSk7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5OT05FLCB0cnVlLCBmYWxzZSkpOwotCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXAsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5YUGF0aFZpZXdfMSk7Ci0KLQkJdGhpcy50ZXh0ID0gbmV3IFRleHQoY29tcCwgU1dULkJPUkRFUik7Ci0KLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5OT05FLCB0cnVlLCBmYWxzZSk7Ci0JCXRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkJcmVjb21wdXRlWFBhdGgoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdGhpcy5sb2NhdGlvblRleHQgPSBuZXcgVGV4dChjb21wLCBTV1QuUkVBRF9PTkxZIHwgU1dULkZVTExfU0VMRUNUSU9OKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5OT05FLCB0cnVlLCBmYWxzZSk7Ci0JCWxvY2F0aW9uVGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQl0aGlzLnRyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcihwYXJlbnRDb21wLCBTV1QuTk9ORSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMjsKLQkJdHJlZVZpZXdlci5nZXRDb250cm9sKCkuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgSkZhY2VOb2RlTGFiZWxQcm92aWRlclhQYXRoKCkpOwotCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyWFBhdGgoKSk7Ci0JCXRyZWVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCi0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZVBhcnQoKSA9PSBYUGF0aFZpZXcudGhpcykgewotCQkJCQloYW5kbGVUcmVlU2VsZWN0aW9uKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQKLQkJCQkJCQkuZ2V0U2VsZWN0aW9uKCksIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQl0cmVlVmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCkgewotCi0JCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGV2ZW50KSB7Ci0JCQkJaGFuZGxlVHJlZVNlbGVjdGlvbigKLQkJCQkJCShJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCksIHRydWUpOwotCQkJfQotCi0JCX0pOwotCi0JCWZpbmFsIENUYWJGb2xkZXIgZm9sZGVyID0gbmV3IENUYWJGb2xkZXIocGFyZW50Q29tcCwgU1dULkJPVFRPTQotCQkJCXwgU1dULkZMQVQpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULk5PTkUsIHRydWUsIGZhbHNlKTsKLQkJZ2QuaGVpZ2h0SGludCA9IDA7Ci0JCWZvbGRlci5zZXRMYXlvdXREYXRhKGdkKTsKLQkJZm9sZGVyLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCUNUYWJJdGVtIGl0ZW0gPSAoQ1RhYkl0ZW0pIGUuaXRlbTsKLQkJCQlzaGVldE1hcC5wdXQoY3VycmVudFNoZWV0LCB0ZXh0LmdldFRleHQoKSk7Ci0JCQkJcGFnZUNoYW5nZShmb2xkZXIuaW5kZXhPZihpdGVtKSk7Ci0JCQl9Ci0JCX0pOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlDVGFiSXRlbSBpdGVtID0gbmV3IENUYWJJdGVtKGZvbGRlciwgU1dULk5PTkUsIGkpOwotCQkJLy8gaXRlbS5zZXRDb250cm9sKGNvbXApOwotCQkJaXRlbS5zZXRUZXh0KE1lc3NhZ2VzLlhQYXRoVmlld18yICsgKGkgKyAxKSk7Ci0JCX0KLQkJZm9sZGVyLnNldFNlbGVjdGlvbihjdXJyZW50U2hlZXQpOwotCQlwYWdlQ2hhbmdlKGN1cnJlbnRTaGVldCk7Ci0KLQkJdGhpcy54cGF0aENvbXB1dGVyID0gbmV3IFhQYXRoQ29tcHV0ZXIodGhpcyk7Ci0JCWNyZWF0ZU1lbnUoKTsKLQkJY3JlYXRlVG9vbGJhcigpOwotCQljcmVhdGVDb250ZXh0TWVudSgpOwotCi0JCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihzZWxlY3Rpb25Qcm92aWRlcik7Ci0KLQkJaW5pdEVkaXRvckxpc3RlbmVyKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZVRyZWVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLAotCQkJYm9vbGVhbiByZXZlYWwpIHsKLQkJaWYgKGFjdGl2ZUVkaXRvciAhPSBudWxsKSB7Ci0JCQlpc0ZpcmluZ1NlbGVjdGlvbiA9IHRydWU7Ci0JCQlpZiAoc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpICE9IG51bGwpIHsKLQkJCQlPYmplY3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElET01Ob2RlKSB7Ci0JCQkJCUlET01Ob2RlIG5vZGUgPSAoSURPTU5vZGUpIGVsZW1lbnQ7Ci0JCQkJCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGFjdGl2ZUVkaXRvcgotCQkJCQkJCS5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpCi0JCQkJCQkJCS5icmluZ1RvVG9wKHRleHRFZGl0b3IpOwotCQkJCQkJaWYgKHJldmVhbCkgewotCQkJCQkJCXRleHRFZGl0b3IKLQkJCQkJCQkJCS5zZWxlY3RBbmRSZXZlYWwobm9kZS5nZXRTdGFydE9mZnNldCgpLAotCQkJCQkJCQkJCQlub2RlLmdldEVuZE9mZnNldCgpCi0JCQkJCQkJCQkJCQkJLSBub2RlLmdldFN0YXJ0T2Zmc2V0KCkpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQl0ZXh0RWRpdG9yLnNldEhpZ2hsaWdodFJhbmdlKG5vZGUuZ2V0U3RhcnRPZmZzZXQoKSwKLQkJCQkJCQkJCTAsIHRydWUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJaXNGaXJpbmdTZWxlY3Rpb24gPSBmYWxzZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZXh0TWVudSgpIHsKLQkJTWVudU1hbmFnZXIgbWVudU1nciA9IG5ldyBNZW51TWFuYWdlcigiI1BvcHVwTWVudSIpOyAvLyROT04tTkxTLTEkCi0JCW1lbnVNZ3Iuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOwotCQltZW51TWdyLmFkZE1lbnVMaXN0ZW5lcihuZXcgSU1lbnVMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWFuYWdlcikgewotCQkJCXhwYXRoVmlld0FjdGlvbnMuZmlsbENvbnRleHRNZW51KG1hbmFnZXIpOwotCQkJfQotCQl9KTsKLQkJTWVudSBtZW51ID0gbWVudU1nci5jcmVhdGVDb250ZXh0TWVudSh0cmVlVmlld2VyLmdldENvbnRyb2woKSk7Ci0JCXRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7Ci0JCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KG1lbnVNZ3IsIHRyZWVWaWV3ZXIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwYWdlQ2hhbmdlKGludCBpbmRleCkgewotCQljdXJyZW50U2hlZXQgPSBpbmRleDsKLQkJU3RyaW5nIGV4cCA9IHNoZWV0TWFwLmdldChpbmRleCk7Ci0JCWlmIChleHAgIT0gbnVsbCkgewotCQkJdGV4dC5zZXRUZXh0KGV4cCk7Ci0JCX0gZWxzZSB7Ci0JCQl0ZXh0LnNldFRleHQoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZU1lbnUoKSB7Ci0JCUlNZW51TWFuYWdlciBtZ3IgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpOwotCQlJQWN0aW9uW10gaXRlbXMgPSB4cGF0aFZpZXdBY3Rpb25zLmNyZWF0ZU1lbnVDb250cmlidXRpb25zKHRyZWVWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQWN0aW9uIGl0ZW0gPSBpdGVtc1tpXTsKLQkJCW1nci5hZGQoaXRlbSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlVG9vbGJhcigpIHsKLQkJSVRvb2xCYXJNYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCk7Ci0JCUlBY3Rpb25bXSBpdGVtcyA9IHhwYXRoVmlld0FjdGlvbnMKLQkJCQkuY3JlYXRlVG9vbGJhckNvbnRyaWJ1dGlvbnModHJlZVZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJCUlBY3Rpb24gaXRlbSA9IGl0ZW1zW2ldOwotCQkJbWdyLmFkZChpdGVtKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZWNhbGN1bGF0ZUxvY2F0aW9uKE5vZGUgc2VsZWN0ZWQpIHsKLQkJdGhpcy5sb2NhdGlvbiA9IFhTTFRYUGF0aEhlbHBlci5jYWxjdWxhdGVYUGF0aFRvTm9kZShzZWxlY3RlZCk7Ci0JCWNvbnRleHROb2RlID0gc2VsZWN0ZWQ7Ci0JCXVwZGF0ZUxvY2F0aW9uVGV4dCgpOwotCQlyZWNvbXB1dGVYUGF0aCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZWNvbXB1dGVYUGF0aCgpIHsKLQkJaWYgKGFjdGl2ZUVkaXRvciAhPSBudWxsKSB7Ci0JCQlib29sZWFuIHZhbGlkID0gZXhwcmVzc2lvblZhbGlkOwotCQkJdHJ5IHsKLQkJCQlpZiAoY29udGV4dE5vZGUgIT0gbnVsbCkgewotCQkJCQl4cGF0aENvbXB1dGVyLnNldFNlbGVjdGVkTm9kZShjb250ZXh0Tm9kZSk7Ci0JCQkJfQotCQkJCXhwYXRoQ29tcHV0ZXIuc2V0VGV4dCh0ZXh0LmdldFRleHQoKSk7Ci0JCQkJeHBhdGhDb21wdXRlci5jb21wdXRlKCk7Ci0JCQkJdmFsaWQgPSB0cnVlOwotCQkJfSBjYXRjaCAoWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIGUpIHsKLQkJCQl2YWxpZCA9IGZhbHNlOwotCQkJCWlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkgewotCQkJCQltZXNzYWdlID0gZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKTsKLQkJCQl9IGVsc2UgewotCQkJCQltZXNzYWdlID0gIkludmFsaWQgWFBhdGggZXhwcmVzc2lvbiI7IC8vJE5PTi1OTFMtMSQKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoZXhwcmVzc2lvblZhbGlkICE9IHZhbGlkKSB7Ci0JCQkJZXhwcmVzc2lvblZhbGlkID0gdmFsaWQ7Ci0JCQkJdXBkYXRlTG9jYXRpb25UZXh0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB4cGF0aFJlY29tcHV0ZWQoZmluYWwgTm9kZUxpc3Qgbm9kZUxpc3QsIGZpbmFsIElTdGF0dXMgZXJyb3IpIHsKLQkJaWYgKGdldFNpdGUoKSA9PSBudWxsKSByZXR1cm47Ci0JCVNoZWxsIHNoZWxsID0gZ2V0U2l0ZSgpLmdldFNoZWxsKCk7Ci0JCWlmIChzaGVsbCA9PSBudWxsKSByZXR1cm47Ci0JCURpc3BsYXkgZGlzcGxheSA9IHNoZWxsLmdldERpc3BsYXkoKTsKLQkJaWYgKGRpc3BsYXkgPT0gbnVsbCkgcmV0dXJuOwotCQlkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJQ29udHJvbCByZWZyZXNoQ29udHJvbCA9IHRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpOwotCQkJCWlmICgocmVmcmVzaENvbnRyb2wgIT0gbnVsbCkgJiYgIXJlZnJlc2hDb250cm9sLmlzRGlzcG9zZWQoKSkgewotCQkJCQlyZWZyZXNoQ29udHJvbC5zZXRSZWRyYXcoZmFsc2UpOwotCQkJCQl0cmVlVmlld2VyLnNldElucHV0KG5vZGVMaXN0KTsKLQkJCQkJdHJlZVZpZXdlci5zZXRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbiwgdHJ1ZSk7Ci0JCQkJCXJlZnJlc2hDb250cm9sLnNldFJlZHJhdyh0cnVlKTsKLQkJCQl9Ci0JCQkJaWYgKGVycm9yLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5PSykgewotCQkJCQlleHByZXNzaW9uVmFsaWQgPSB0cnVlOwotCQkJCQltZXNzYWdlID0gIiI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZXhwcmVzc2lvblZhbGlkID0gZmFsc2U7Ci0JCQkJCW1lc3NhZ2UgPSBlcnJvci5nZXRNZXNzYWdlKCk7Ci0JCQkJfQotCQkJCXVwZGF0ZUxvY2F0aW9uVGV4dCgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlTG9jYXRpb25UZXh0KCkgewotCQlpZiAoZXhwcmVzc2lvblZhbGlkKSB7Ci0JCQlsb2NhdGlvblRleHQuc2V0VGV4dChNZXNzYWdlcy5YUGF0aFZpZXdfMCArIGxvY2F0aW9uKTsKLQkJCWxvY2F0aW9uVGV4dC5zZXRGb3JlZ3JvdW5kKG51bGwpOwotCQl9IGVsc2UgewotCQkJbG9jYXRpb25UZXh0LnNldFRleHQobWVzc2FnZSk7Ci0JCQlsb2NhdGlvblRleHQuc2V0Rm9yZWdyb3VuZChKRmFjZUNvbG9ycy5nZXRFcnJvclRleHQobG9jYXRpb25UZXh0Ci0JCQkJCS5nZXREaXNwbGF5KCkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0RWRpdG9yTGlzdGVuZXIoKSB7Ci0JCWdldFNpdGUoKS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcjIpOwotCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCi0JCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJZWRpdG9yQWN0aXZhdGVkKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQl0ZXh0LnNldEZvY3VzKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyMik7Ci0JCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKLQkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIoc2VsZWN0aW9uTGlzdGVuZXIpOwotCQl4cGF0aENvbXB1dGVyLmRpc3Bvc2UoKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBlZGl0b3JBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlpZiAoKHBhcnQgIT0gYWN0aXZlRWRpdG9yKSAmJiAocGFydCBpbnN0YW5jZW9mIElFZGl0b3JQYXJ0KSkgewotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gKElFZGl0b3JQYXJ0KSBwYXJ0OwotCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldEVkaXRvck1vZGVsKGVkaXRvcik7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCWFjdGl2ZUVkaXRvciA9IGVkaXRvcjsKLQkJCQl4cGF0aENvbXB1dGVyLnNldE1vZGVsKG1vZGVsKTsKLQkJCQl4cGF0aENvbXB1dGVyLnNldFNlbGVjdGVkTm9kZSgoRG9jdW1lbnQpIG1vZGVsCi0JCQkJCQkuZ2V0QWRhcHRlcihEb2N1bWVudC5jbGFzcykpOwotCQkJfQotCQkJcmVjb21wdXRlWFBhdGgoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBlZGl0b3JDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlpZiAocGFydCA9PSBhY3RpdmVFZGl0b3IpIHsKLQkJCXRyZWVWaWV3ZXIuc2V0SW5wdXQobnVsbCk7Ci0JCQlsb2NhdGlvblRleHQuc2V0VGV4dCgiIik7Ci0JCQlhY3RpdmVFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldEVkaXRvck1vZGVsKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlyZXR1cm4gKElTdHJ1Y3R1cmVkTW9kZWwpIGVkaXRvci5nZXRBZGFwdGVyKElTdHJ1Y3R1cmVkTW9kZWwuY2xhc3MpOwotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKLQkJT2JqZWN0IGFkYXB0ZXIgPSBudWxsOwotCQlpZiAoa2V5LmVxdWFscyhJU2hvd0luVGFyZ2V0LmNsYXNzKSAmJiAodHJlZVZpZXdlciAhPSBudWxsKSkgewotCQkJYWRhcHRlciA9IG5ldyBJU2hvd0luVGFyZ2V0KCkgewotCQkJCXB1YmxpYyBib29sZWFuIHNob3coU2hvd0luQ29udGV4dCBjb250ZXh0KSB7Ci0JCQkJCXRyZWVWaWV3ZXIuc2V0U2VsZWN0aW9uKGNvbnRleHQuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCQlyZXR1cm4gdHJlZVZpZXdlci5nZXRTZWxlY3Rpb24oKS5lcXVhbHMoCi0JCQkJCQkJY29udGV4dC5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJfQotCQkJfTsKLQkJfSBlbHNlIGlmIChrZXkuZXF1YWxzKElTaG93SW5Tb3VyY2UuY2xhc3MpICYmIChhY3RpdmVFZGl0b3IgIT0gbnVsbCkpIHsKLQkJCWFkYXB0ZXIgPSBuZXcgSVNob3dJblNvdXJjZSgpIHsKLQkJCQlwdWJsaWMgU2hvd0luQ29udGV4dCBnZXRTaG93SW5Db250ZXh0KCkgewotCQkJCQlyZXR1cm4gbmV3IFNob3dJbkNvbnRleHQoYWN0aXZlRWRpdG9yLmdldEVkaXRvcklucHV0KCksCi0JCQkJCQkJYWN0aXZlRWRpdG9yLmdldEVkaXRvclNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpCi0JCQkJCQkJCQkuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCX0KLQkJCX07Ci0JCX0gZWxzZSBpZiAoa2V5LmVxdWFscyhJU2hvd0luVGFyZ2V0TGlzdC5jbGFzcykKLQkJCQkmJiAoYWN0aXZlRWRpdG9yICE9IG51bGwpKSB7Ci0JCQlhZGFwdGVyID0gYWN0aXZlRWRpdG9yLmdldEFkYXB0ZXIoa2V5KTsKLQkJfQotCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7Ci0JCQlhZGFwdGVyID0gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNhdmVTdGF0ZShJTWVtZW50byBtZW1lbnRvKSB7Ci0JCXNoZWV0TWFwLnB1dChjdXJyZW50U2hlZXQsIHRleHQuZ2V0VGV4dCgpKTsKLQkJbWVtZW50by5wdXRJbnRlZ2VyKCJDdXJyZW50U2hlZXQiLCBjdXJyZW50U2hlZXQpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoTWFwLkVudHJ5PEludGVnZXIsIFN0cmluZz4gZW50cnkgOiBzaGVldE1hcC5lbnRyeVNldCgpKSB7Ci0JCQlJTWVtZW50byBjaGlsZCA9IG1lbWVudG8uY3JlYXRlQ2hpbGQoIlNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWNoaWxkLnB1dEludGVnZXIoIkluZGV4IiwgZW50cnkuZ2V0S2V5KCkpOyAvLyROT04tTkxTLTEkCi0JCQljaGlsZC5wdXRTdHJpbmcoIlhQYXRoIiwgZW50cnkuZ2V0VmFsdWUoKSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlib29sZWFuIGxpbmsgPSB4cGF0aFZpZXdBY3Rpb25zLmlzTGlua1dpdGhFZGl0b3IoKTsKLQkJbWVtZW50by5wdXRCb29sZWFuKCJMaW5rV2l0aEVkaXRvciIsIGxpbmspOwotCQlzdXBlci5zYXZlU3RhdGUobWVtZW50byk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc2hlZXRNYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTdHJpbmc+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+dW5wYXJzZWQtZW50aXR5LXVyaSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xnZW5lcmF0ZWlkIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGdlbmVyYXRlLWlkIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBub2RlIGluIHRoZSBhcmd1bWVudCBub2RlLXNldCB0aGF0IGlzIGZpcnN0IGluIGRvY3VtZW50IG9yZGVyLiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgbXVzdCBjb25zaXN0IG9mIEFTQ0lJIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIuIFRodXMsIHRoZSBzdHJpbmcgaXMgc3ludGFjdGljYWxseSBhbiBYTUwgbmFtZS4gQW4gaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byBnZW5lcmF0ZSBhbiBpZGVudGlmaWVyIGluIGFueSBjb252ZW5pZW50IHdheSBwcm92aWRlZCB0aGF0IGl0IGFsd2F5cyBnZW5lcmF0ZXMgdGhlIHNhbWUgaWRlbnRpZmllciBmb3IgdGhlIHNhbWUgbm9kZSBhbmQgdGhhdCBkaWZmZXJlbnQgaWRlbnRpZmllcnMgYXJlIGFsd2F5cyBnZW5lcmF0ZWQgZnJvbSBkaWZmZXJlbnQgbm9kZXMuIEFuIGltcGxlbWVudGF0aW9uIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gZ2VuZXJhdGUgdGhlIHNhbWUgaWRlbnRpZmllcnMgZWFjaCB0aW1lIGEgZG9jdW1lbnQgaXMgdHJhbnNmb3JtZWQuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgZ2VuZXJhdGVkIHVuaXF1ZSBpZGVudGlmaWVyIHdpbGwgYmUgZGlzdGluY3QgZnJvbSBhbnkgdW5pcXVlIElEcyBzcGVjaWZpZWQgaW4gdGhlIHNvdXJjZSBkb2N1bWVudC4gSWYgdGhlIGFyZ3VtZW50IG5vZGUtc2V0IGlzIGVtcHR5LCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGNvbnRleHQgbm9kZS4nCi0JICAgICAgICAgIGVuYWJsZWQ9InRydWUiIG5hbWU9ImdlbmVyYXRlLWlkKG5vZGUtc2V0PykiPmdlbmVyYXRlLWlkKCR7Y3Vyc29yfSk8L3RlbXBsYXRlPgotCTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhwYXRoLnhzbHN5c3RlbXByb3BlcnR5IgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGFyZ3VtZW50IG11c3QgZXZhbHVhdGUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhIFFOYW1lLiBUaGUgUU5hbWUgaXMgZXhwYW5kZWQgaW50byBhIG5hbWUgdXNpbmcgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgaW4gc2NvcGUgZm9yIHRoZSBleHByZXNzaW9uLiBUaGUgc3lzdGVtLXByb3BlcnR5IGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBwcm9wZXJ0eSBpZGVudGlmaWVkIGJ5IHRoZSBuYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIHN5c3RlbSBwcm9wZXJ0eSwgdGhlIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgcmV0dXJuZWQuJwkKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0ic3lzdGVtLXByb3BlcnR5KHN0cmluZykiPnN5c3RlbS1wcm9wZXJ0eSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xlbGVtZW50YXZhaWxhYmxlIgotCSAgICAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIiBjb250ZXh0PSJ4c2xfeHBhdGgiIGRlbGV0ZWQ9ImZhbHNlIgotCSAgICAgICAgICBkZXNjcmlwdGlvbj0nWFNMIFhQYXRoIEV4dGVuc2lvbiBGdW5jdGlvbjogVGhlIGFyZ3VtZW50IG11c3QgZXZhbHVhdGUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhIFFOYW1lLiBUaGUgUU5hbWUgaXMgZXhwYW5kZWQgaW50byBhbiBleHBhbmRlZC1uYW1lIHVzaW5nIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGluIHNjb3BlIGZvciB0aGUgZXhwcmVzc2lvbi4gVGhlIGVsZW1lbnQtYXZhaWxhYmxlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXhwYW5kZWQtbmFtZSBpcyB0aGUgbmFtZSBvZiBhbiBpbnN0cnVjdGlvbi4gSWYgdGhlIGV4cGFuZGVkLW5hbWUgaGFzIGEgbmFtZXNwYWNlIFVSSSBlcXVhbCB0byB0aGUgWFNMVCBuYW1lc3BhY2UgVVJJLCB0aGVuIGl0IHJlZmVycyB0byBhbiBlbGVtZW50IGRlZmluZWQgYnkgWFNMVC4gT3RoZXJ3aXNlLCBpdCByZWZlcnMgdG8gYW4gZXh0ZW5zaW9uIGVsZW1lbnQuIElmIHRoZSBleHBhbmRlZC1uYW1lIGhhcyBhIG51bGwgbmFtZXNwYWNlIFVSSSwgdGhlIGVsZW1lbnQtYXZhaWxhYmxlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlLiAnCQotCSAgICAgICAgICBlbmFibGVkPSJ0cnVlIiBuYW1lPSJlbGVtZW50LWF2YWlsYWJsZShzdHJpbmcpIj5lbGVtZW50LWF2YWlsYWJsZSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLQk8dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54cGF0aC54c2xmdW5jdGlvbmF2YWlsYWJsZSIKLQkgICAgICAgICAgYXV0b2luc2VydD0idHJ1ZSIgY29udGV4dD0ieHNsX3hwYXRoIiBkZWxldGVkPSJmYWxzZSIKLQkgICAgICAgICAgZGVzY3JpcHRpb249J1hTTCBYUGF0aCBFeHRlbnNpb24gRnVuY3Rpb246IFRoZSBhcmd1bWVudCBtdXN0IGV2YWx1YXRlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYSBRTmFtZS4gVGhlIFFOYW1lIGlzIGV4cGFuZGVkIGludG8gYW4gZXhwYW5kZWQtbmFtZSB1c2luZyB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBpbiBzY29wZSBmb3IgdGhlIGV4cHJlc3Npb24uIFRoZSBmdW5jdGlvbi1hdmFpbGFibGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBleHBhbmRlZC1uYW1lIGlzIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIGZ1bmN0aW9uIGxpYnJhcnkuIElmIHRoZSBleHBhbmRlZC1uYW1lIGhhcyBhIG5vbi1udWxsIG5hbWVzcGFjZSBVUkksIHRoZW4gaXQgcmVmZXJzIHRvIGFuIGV4dGVuc2lvbiBmdW5jdGlvbjsgb3RoZXJ3aXNlLCBpdCByZWZlcnMgdG8gYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IFhQYXRoIG9yIFhTTFQuJwkKLQkgICAgICAgICAgZW5hYmxlZD0idHJ1ZSIgbmFtZT0iZnVuY3Rpb24tYXZhaWxhYmxlKHN0cmluZykiPmZ1bmN0aW9uLWF2YWlsYWJsZSgke2N1cnNvcn0pPC90ZW1wbGF0ZT4KLSAgCi08L3RlbXBsYXRlcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkyZDFjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkgZXhjbHVkaW5nPSIqKi8qLmxleHwqKi8qLmN1cCIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMDc1YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbGliCi0uZXh0ZXJuYWxUb29sQnVpbGRlcnMKLS5ieWVjeWNsZQotSmF2YUNVUC1kdW1wLnR4dAotdGFyZ2V0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDY5YjI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+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+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQyMWJkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jU2F0IE1hciAxMiAwOToyMDozOCBDRVQgMjAxMQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT1qc3IxNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzMzZiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSNGcmkgTWFyIDA0IDAyOjQ4OjIzIENFVCAyMDExCi1BTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0RfV0lUSE9VVF9ERUZBVUxUX1ZBTFVFPUVycm9yCi1BTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgotQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgotQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKLUFOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKLUFQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfQVBJX1RZUEU9RXJyb3IKLUFQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9BUElfVFlQRT1FcnJvcgotQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX1RZUEU9RXJyb3IKLUFQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRT1FcnJvcgotQ0xBU1NfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgotQ0xBU1NfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgotQ0xBU1NfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCi1DTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKLUNMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgotQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCi1DTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fRklOQUxfVE9fRklOQUw9RXJyb3IKLUNMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgotQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ09OU1RSVUNUT1I9RXJyb3IKLUNMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCi1DTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKLUNMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1NVUEVSQ0xBU1M9RXJyb3IKLUNMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCi1DTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgotQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCi1DT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKLUNPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKLUNPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCi1FTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgotRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKLUVOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRU5VTV9DT05TVEFOVD1FcnJvcgotRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgotRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKLUVOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKLUZJRUxEX0VMRU1FTlRfVFlQRV9BRERFRF9WQUxVRT1FcnJvcgotRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCi1GSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9GSU5BTF9UT19OT05fRklOQUxfU1RBVElDX0NPTlNUQU5UPUVycm9yCi1GSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fRklOQUxfVE9fRklOQUw9RXJyb3IKLUZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCi1GSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgotRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRT1FcnJvcgotRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFMVUU9RXJyb3IKLUZJRUxEX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfQVJHVU1FTlQ9RXJyb3IKLUZJRUxEX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1ZBTFVFPUVycm9yCi1JTExFR0FMX0VYVEVORD1XYXJuaW5nCi1JTExFR0FMX0lNUExFTUVOVD1XYXJuaW5nCi1JTExFR0FMX0lOU1RBTlRJQVRFPVdhcm5pbmcKLUlMTEVHQUxfT1ZFUlJJREU9V2FybmluZwotSUxMRUdBTF9SRUZFUkVOQ0U9V2FybmluZwotSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9GSUVMRD1FcnJvcgotSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKLUlOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCi1JTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1NVUEVSX0lOVEVSRkFDRV9XSVRIX01FVEhPRFM9RXJyb3IKLUlOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKLUlOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKLUlOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKLUlOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgotSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgotSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCi1JTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKLUlOVkFMSURfSkFWQURPQ19UQUc9SWdub3JlCi1JTlZBTElEX1JFRkVSRU5DRV9JTl9TWVNURU1fTElCUkFSSUVTPUlnbm9yZQotTEVBS19FWFRFTkQ9V2FybmluZwotTEVBS19GSUVMRF9ERUNMPVdhcm5pbmcKLUxFQUtfSU1QTEVNRU5UPVdhcm5pbmcKLUxFQUtfTUVUSE9EX1BBUkFNPVdhcm5pbmcKLUxFQUtfTUVUSE9EX1JFVFVSTl9UWVBFPVdhcm5pbmcKLU1FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCi1NRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCi1NRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCi1NRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCi1NRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCi1NRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKLU1FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgotTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKLU1FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BTk5PVEFUSU9OX0RFRkFVTFRfVkFMVUU9RXJyb3IKLU1FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgotVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0NMQVNTX0JPVU5EPUVycm9yCi1UWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfSU5URVJGQUNFX0JPVU5EPUVycm9yCi1UWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DTEFTU19CT1VORD1FcnJvcgotVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCi1UWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DTEFTU19CT1VORD1FcnJvcgotVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCi1VTlVTRURfUFJPQkxFTV9GSUxURVJTPVdhcm5pbmcKLWF1dG9tYXRpY2FsbHlfcmVtb3ZlZF91bnVzZWRfcHJvYmxlbV9maWx0ZXJzPWZhbHNlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbj1FcnJvcgotaW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21ham9yX3dpdGhvdXRfYnJlYWtpbmdfY2hhbmdlPURpc2FibGVkCi1pbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWlub3Jfd2l0aG91dF9hcGlfY2hhbmdlPURpc2FibGVkCi1pbnZhbGlkX3NpbmNlX3RhZ192ZXJzaW9uPUVycm9yCi1tYWxmb3JtZWRfc2luY2VfdGFnPUVycm9yCi1taXNzaW5nX3NpbmNlX3RhZz1FcnJvcgotcmVwb3J0X2FwaV9icmVha2FnZV93aGVuX21ham9yX3ZlcnNpb25faW5jcmVtZW50ZWQ9RGlzYWJsZWQKLXJlcG9ydF9yZXNvbHV0aW9uX2Vycm9yc19hcGlfY29tcG9uZW50PVdhcm5pbmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NGY4M2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yCi1CdW5kbGUtVmVyc2lvbjogMi4wLjAucXVhbGlmaWVyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjkuMCwzLjAuMCkiLAotIGphdmFfY3VwLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IjAuMTAuMCIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjguMCw1LjAuMCkiO3Jlc29sdXRpb246PW9wdGlvbmFsCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGksCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy54ZXJjZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IudXRpbAotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDMwMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5BdWd1c3QsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOGMzMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBiaW4vLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZ3JhbW1hcnMvCi1qYXZhY1NvdXJjZSA9IDEuNQotamF2YWNUYXJnZXQgPSBqc3IxNAotamF2YWNFcnJvcnMuLiA9IC1lbnVtSWRlbnRpZmllcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTcwMTQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhLS0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODMyMTQgLSBmaXggSUYgVEhFTiBFTFNFIHBhcnNpbmcgYW5kIHVwZGF0ZSBncmFtbWFycyAKLSAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMzExNDgwIC0gbW9yZSBkZWJ1ZyBpbmZvLCBiZXR0ZXIgY2xlYW51cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS0tPgotPHByb2plY3QgbmFtZT0icHJvajEiIGRlZmF1bHQ9ImdlbmVyYXRlX3BhcnNlciIgYmFzZWRpcj0iLiI+Ci0gICAgPHByb3BlcnR5IG5hbWU9InNyYyIgbG9jYXRpb249IiR7YmFzZWRpcn0iLz4gICAKLSAgICA8cHJvcGVydHkgbmFtZT0iY3VwSmFyIiBsb2NhdGlvbj0iJHtiYXNlZGlyfS9saWIvamF2YWN1cDEwLmphciIvPgotICAgIDxkZXNjcmlwdGlvbj4KLSAgICBCdWlsZCBGaWxlIGZvciBDb21waWxlciBQcm9qZWN0Ci08L2Rlc2NyaXB0aW9uPgotCi0JPHRhc2tkZWYgY2xhc3NuYW1lPSJKRmxleC5hbnR0YXNrLkpGbGV4VGFzayIgbmFtZT0iamZsZXgiIGNsYXNzcGF0aD0iJHtiYXNlZGlyfS9saWIvSkZsZXguamFyIiAvPgotCi0JPHRhcmdldCBuYW1lPSJnZW5lcmF0ZV9wYXJzZXIiPgotCQk8amZsZXggZmlsZT0iZ3JhbW1hcnMveHBhdGgubGV4IiBkZXN0ZGlyPSJncmFtbWFycy9nZW5lcmF0ZWQiLz4KLQkgICAgPGphdmEgamFyPSIke2N1cEphcn0iIGlucHV0PSJncmFtbWFycy94cGF0aC5jdXAiIG91dHB1dD0iJHtiYXNlZGlyfS9KYXZhQ1VQLWR1bXAudHh0IiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgIAk8YXJnIHZhbHVlPSItcGFyc2VyIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSJYUGF0aEN1cCIvPgotCSAgICAJPGFyZyB2YWx1ZT0iLXN5bWJvbHMiLz4KLQkgICAgCTxhcmcgdmFsdWU9IlhwYXRoU3ltIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSItcGFja2FnZSIvPgotCSAgICAJPGFyZyB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsIi8+Ci0JICAgIAk8YXJnIHZhbHVlPSItZHVtcCIvPiAgICAJCi0JICAgIDwvamF2YT4KLQkJPG1vdmUgdG9maWxlPSIke2Jhc2VkaXJ9L3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXAuamF2YSIgZmlsZT0iWFBhdGhDdXAuamF2YSIvPgotCQk8bW92ZSB0b2ZpbGU9IiR7YmFzZWRpcn0vc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YcGF0aFN5bS5qYXZhIiBmaWxlPSJYcGF0aFN5bS5qYXZhIi8+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy9nZW5lcmF0ZWQvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRmxleC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMvZ2VuZXJhdGVkL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4MThjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy9nZW5lcmF0ZWQvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRmxleC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMxNSArMCwwIEBACi0vKiBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBKRmxleCAxLjQuMyBvbiAxMi8xNC8wOSAyOjAyIEFNICovCi0KLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLS8vICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotLy8gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLS8vICoKLS8vICogQ29udHJpYnV0b3JzOgotLy8gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotLy8gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDk4NyAtIGZpeGVkIGxpdGVyYWwgaXNzdWVzIGZvciBpbnRlZ2VyIGFuZCBkZWNpbWFsCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjgzMjE0IC0gZml4IElGIFRIRU4gRUxTRSBwYXJzaW5nIGFuZCB1cGRhdGUgZ3JhbW1hcnMKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODYwNjEgICBjb3JyZWN0IGhhbmRsaW5nIG9mIHF1b3RlZCBzdHJpbmcgCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YV9jdXAucnVudGltZS4qOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IAotICogPGEgaHJlZj0iaHR0cDovL3d3dy5qZmxleC5kZS8iPkpGbGV4PC9hPiAxLjQuMwotICogb24gMTIvMTQvMDkgMjowMiBBTSBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uIGZpbGUKLSAqIDx0dD4vVXNlcnMvamVzcGVyL0RvY3VtZW50cy93b3Jrc3BhY2UtMy41TTUvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmxleDwvdHQ+Ci0gKi8KLWNsYXNzIFhQYXRoRmxleCBpbXBsZW1lbnRzIGphdmFfY3VwLnJ1bnRpbWUuU2Nhbm5lciB7Ci0KLSAgLyoqIFRoaXMgY2hhcmFjdGVyIGRlbm90ZXMgdGhlIGVuZCBvZiBmaWxlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZRU9GID0gLTE7Ci0KLSAgLyoqIGluaXRpYWwgc2l6ZSBvZiB0aGUgbG9va2FoZWFkIGJ1ZmZlciAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfQlVGRkVSU0laRSA9IDE2Mzg0OwotCi0gIC8qKiBsZXhpY2FsIHN0YXRlcyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZWUlOSVRJQUwgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01NRU5UID0gMjsKLQotICAvKioKLSAgICogWlpfTEVYU1RBVEVbbF0gaXMgdGhlIHN0YXRlIGluIHRoZSBERkEgZm9yIHRoZSBsZXhpY2FsIHN0YXRlIGwKLSAgICogWlpfTEVYU1RBVEVbbCsxXSBpcyB0aGUgc3RhdGUgaW4gdGhlIERGQSBmb3IgdGhlIGxleGljYWwgc3RhdGUgbAotICAgKiAgICAgICAgICAgICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gICAqIGwgaXMgb2YgdGhlIGZvcm0gbCA9IDIqaywgayBhIG5vbiBuZWdhdGl2ZSBpbnRlZ2VyCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfTEVYU1RBVEVbXSA9IHsgCi0gICAgIDAsICAwLCAgMSwgMQotICB9OwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBjaGFyYWN0ZXJzIHRvIGNoYXJhY3RlciBjbGFzc2VzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQ01BUF9QQUNLRUQgPSAKLSAgICAiXDExXDBcMVwxXDFcMVwyXDBcMVwxXDIyXDBcMVwxXDFcMjJcMVwyXDFcMCIrCi0gICAgIlwxXDMwXDJcMFwxXDNcMVwxMlwxXDE2XDFcMTdcMVw3XDFcMjdcMVwxMVwxXDUiKwotICAgICJcMVwyNVwxMlw0XDFcMTNcMVwwXDFcMjNcMVwyMVwxXDI0XDFcMzFcMVwyNlw0XDEwIisKLSAgICAiXDFcNlwyNVwxMFwxXDE0XDFcMFwxXDE1XDFcMFwxXDEwXDFcMFwxXDQyXDFcNDUiKwotICAgICJcMVwzMlwxXDM2XDFcMzdcMVw0N1wxXDUyXDFcMzNcMVwzNFwyXDEwXDFcMzVcMVw1MyIrCi0gICAgIlwxXDQxXDFcNTBcMVw1NFwxXDU1XDFcNDRcMVw0MFwxXDQzXDFcNDZcMVw1NlwxXDUxIisKLSAgICAiXDFcNTdcMVw2MFwxXDEwXDFcMFwxXDIwXHVmZjgzXDAiOwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBjaGFyYWN0ZXJzIHRvIGNoYXJhY3RlciBjbGFzc2VzCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIFtdIFpaX0NNQVAgPSB6elVucGFja0NNYXAoWlpfQ01BUF9QQUNLRUQpOwotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBERkEgc3RhdGVzIHRvIGFjdGlvbiBzd2l0Y2ggbGFiZWxzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX0FDVElPTiA9IHp6VW5wYWNrQWN0aW9uKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0FDVElPTl9QQUNLRURfMCA9Ci0gICAgIlwyXDBcMVwxXDFcMlwyXDFcMVwzXDFcNFwxXDVcMVw2IisKLSAgICAiXDFcN1wxXDEwXDFcMTFcMVwxMlwxXDEzXDFcMTRcMVwxNVwxXDE2IisKLSAgICAiXDFcMTdcMVwxXDFcMjBcMVwyMVwxXDIyXDFcMjNcMVwyNFwxXDI1IisKLSAgICAiXDFcMjZcMjBcNVwyXDJcMVwwXDFcMjdcMVwwXDFcMjdcMVwzMCIrCi0gICAgIlwxXDBcMVwzMVwxXDMyXDFcMzNcMVwzNFwxXDM1XDFcMzZcMVwzNyIrCi0gICAgIlwxXDQwXDFcNDFcNFw1XDFcNDJcMVw0M1wxXDVcMVw0NFwxXDQ1IisKLSAgICAiXDFcNDZcNVw1XDFcNDdcNlw1XDFcNTBcMlw1XDFcNTFcNVw1IisKLSAgICAiXDFcNTJcNFw1XDFcNTNcMVw1NFwxXDU1XDFcNTZcM1w1XDFcNTciKwotICAgICJcMVw2MFwxXDYxXDFcMFw3XDVcMVw2MlwxNlw1XDFcNjNcMTBcNSIrCi0gICAgIlwxXDY0XDFcNjVcNFw1XDFcNjZcMVw1XDFcNjdcMlw1XDFcNzAiKwotICAgICJcM1w1XDFcNzFcNFw1XDFcNzJcMVw1XDFcNzNcMVw1XDFcNzQiKwotICAgICJcMlw1XDFcNzVcMVw3NlwxMFw1XDFcNzdcMTBcNVwxXDEwMFw2XDUiKwotICAgICJcMVwxMDFcMlw1XDFcMTAyXDE0XDVcMVwxMDNcNlw1XDFcMTA0XDFcNSIrCi0gICAgIlwxXDEwNVwzXDVcMVwxMDZcNFw1XDFcMTA3XDEyXDVcMVwxMTBcMVwxMTEiKwotICAgICJcMTBcNVwxXDExMlw1XDVcMVwxMTNcNVw1XDFcMTE0XDFcMTE1XDFcNSIrCi0gICAgIlwxXDExNlwxXDVcMVwxMTdcMVwxMjBcMVw1XDFcMTIxXDVcNVwxXDEyMiIrCi0gICAgIlwyNlw1XDFcMTIzXDEwXDVcMVwxMjRcMVwxMjVcMTRcNVwxXDEyNlwxXDEyNyIrCi0gICAgIlw0XDVcMVwxMzBcMVwxMzFcMVw1XDFcMTMyXDRcNVwxXDEzMyI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrQWN0aW9uKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzMzM107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tBY3Rpb24oWlpfQUNUSU9OX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja0FjdGlvbihTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGRvIHJlc3VsdFtqKytdID0gdmFsdWU7IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLQotICAvKiogCi0gICAqIFRyYW5zbGF0ZXMgYSBzdGF0ZSB0byBhIHJvdyBpbmRleCBpbiB0aGUgdHJhbnNpdGlvbiB0YWJsZQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX1JPV01BUCA9IHp6VW5wYWNrUm93TWFwKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX1JPV01BUF9QQUNLRURfMCA9Ci0gICAgIlwwXDBcMFw2MVwwXDE0MlwwXDE0MlwwXDIyM1wwXDMwNFwwXDM2NVwwXHUwMTI2IisKLSAgICAiXDBcdTAxNTdcMFwxNDJcMFwxNDJcMFx1MDE4OFwwXHUwMWI5XDBcMTQyXDBcMTQyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcMTQyXDBcMTQyXDBcdTAxZWFcMFx1MDIxYlwwXHUwMjRjXDBcdTAyN2RcMFwxNDIiKwotICAgICJcMFwxNDJcMFwxNDJcMFwxNDJcMFx1MDJhZVwwXHUwMmRmXDBcdTAzMTBcMFx1MDM0MVwwXHUwMzcyIisKLSAgICAiXDBcdTAzYTNcMFx1MDNkNFwwXHUwNDA1XDBcdTA0MzZcMFx1MDQ2N1wwXHUwNDk4XDBcdTA0YzlcMFx1MDRmYSIrCi0gICAgIlwwXHUwNTJiXDBcdTA1NWNcMFx1MDU4ZFwwXHUwNWJlXDBcdTA1ZWZcMFwyMjNcMFx1MDYyMFwwXDMwNCIrCi0gICAgIlwwXHUwNjUxXDBcdTA2ODJcMFx1MDZiM1wwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXDE0MlwwXDE0MlwwXDE0MlwwXHUwNmU0XDBcdTA3MTVcMFx1MDc0NlwwXHUwNzc3IisKLSAgICAiXDBcdTAxNTdcMFx1MDdhOFwwXHUwN2Q5XDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTA4MGFcMFx1MDgzYiIrCi0gICAgIlwwXHUwODZjXDBcdTA4OWRcMFx1MDhjZVwwXHUwMTU3XDBcdTA4ZmZcMFx1MDkzMFwwXHUwOTYxXDBcdTA5OTIiKwotICAgICJcMFx1MDljM1wwXHUwOWY0XDBcdTAxNTdcMFx1MGEyNVwwXHUwYTU2XDBcdTAxNTdcMFx1MGE4N1wwXHUwYWI4IisKLSAgICAiXDBcdTBhZTlcMFx1MGIxYVwwXHUwYjRiXDBcdTAxNTdcMFx1MGI3Y1wwXHUwYmFkXDBcdTBiZGVcMFx1MGMwZiIrCi0gICAgIlwwXHUwMTU3XDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTBjNDBcMFx1MGM3MVwwXHUwY2EyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcdTBjZDNcMFx1MGNkM1wwXHUwZDA0XDBcdTBkMzVcMFx1MGQ2NlwwXHUwZDk3XDBcdTBkYzgiKwotICAgICJcMFx1MGRmOVwwXHUwZTJhXDBcdTAxNTdcMFx1MGU1YlwwXHUwZThjXDBcdTBlYmRcMFx1MGVlZVwwXHUwZjFmIisKLSAgICAiXDBcdTBmNTBcMFx1MGY4MVwwXHUwZmIyXDBcdTBmZTNcMFx1MTAxNFwwXHUxMDQ1XDBcdTEwNzZcMFx1MTBhNyIrCi0gICAgIlwwXHUxMGQ4XDBcdTAxNTdcMFx1MTEwOVwwXHUxMTNhXDBcdTExNmJcMFx1MTE5Y1wwXHUxMWNkXDBcdTExZmUiKwotICAgICJcMFx1MTIyZlwwXHUxMjYwXDBcdTAxNTdcMFx1MDE1N1wwXHUxMjkxXDBcdTEyYzJcMFx1MTJmM1wwXHUxMzI0IisKLSAgICAiXDBcdTEzNTVcMFx1MTM4NlwwXHUwMTU3XDBcdTEzYjdcMFx1MTNlOFwwXHUwMTU3XDBcdTE0MTlcMFx1MTQ0YSIrCi0gICAgIlwwXHUxNDdiXDBcdTAxNTdcMFx1MTRhY1wwXHUxNGRkXDBcdTE1MGVcMFx1MTUzZlwwXHUwMTU3XDBcdTE1NzAiKwotICAgICJcMFx1MDE1N1wwXHUxNWExXDBcdTAxNTdcMFx1MTVkMlwwXHUxNjAzXDBcdTAxNTdcMFx1MDE1N1wwXHUxNjM0IisKLSAgICAiXDBcdTE2NjVcMFx1MTY5NlwwXHUxNmM3XDBcdTE2ZjhcMFx1MTcyOVwwXHUxNzVhXDBcdTE3OGJcMFx1MDE1NyIrCi0gICAgIlwwXHUxN2JjXDBcdTE3ZWRcMFx1MTgxZVwwXHUxODRmXDBcdTE4ODBcMFx1MThiMVwwXHUxOGUyXDBcdTE5MTMiKwotICAgICJcMFx1MDE1N1wwXHUxOTQ0XDBcdTE5NzVcMFx1MTlhNlwwXHUxOWQ3XDBcdTFhMDhcMFx1MWEzOVwwXHUwMTU3IisKLSAgICAiXDBcdTFhNmFcMFx1MWE5YlwwXHUwMTU3XDBcdTFhY2NcMFx1MWFmZFwwXHUxYjJlXDBcdTFiNWZcMFx1MWI5MCIrCi0gICAgIlwwXHUxYmMxXDBcdTFiZjJcMFx1MWMyM1wwXHUxYzU0XDBcdTFjODVcMFx1MWNiNlwwXHUxY2U3XDBcdTAxNTciKwotICAgICJcMFx1MWQxOFwwXHUxZDQ5XDBcdTFkN2FcMFx1MWRhYlwwXHUxZGRjXDBcdTFlMGRcMFx1MDE1N1wwXHUxZTNlIisKLSAgICAiXDBcdTAxNTdcMFx1MWU2ZlwwXHUxZWEwXDBcdTFlZDFcMFx1MDE1N1wwXHUxZjAyXDBcdTFmMzNcMFx1MWY2NCIrCi0gICAgIlwwXHUxZjk1XDBcdTAxNTdcMFx1MWZjNlwwXHUxZmY3XDBcdTIwMjhcMFx1MjA1OVwwXHUyMDhhXDBcdTIwYmIiKwotICAgICJcMFx1MjBlY1wwXHUyMTFkXDBcdTIxNGVcMFx1MjE3ZlwwXHUwMTU3XDBcdTAxNTdcMFx1MjFiMFwwXHUyMWUxIisKLSAgICAiXDBcdTIyMTJcMFx1MjI0M1wwXHUyMjc0XDBcdTIyYTVcMFx1MjJkNlwwXHUyMzA3XDBcdTIzMzhcMFx1MjM2OSIrCi0gICAgIlwwXHUyMzlhXDBcdTIzY2JcMFx1MjNmY1wwXHUyNDJkXDBcdTAxNTdcMFx1MjQ1ZVwwXHUyNDhmXDBcdTI0YzAiKwotICAgICJcMFx1MjRmMVwwXHUyNTIyXDBcdTAxNTdcMFx1MDE1N1wwXHUyNTUzXDBcdTAxNTdcMFx1MjU4NFwwXHUyNWI1IisKLSAgICAiXDBcdTI1ZTZcMFx1MjYxN1wwXHUyNjQ4XDBcdTI2NzlcMFx1MjZhYVwwXHUyNmRiXDBcdTI3MGNcMFx1MjczZCIrCi0gICAgIlwwXHUwMTU3XDBcdTI3NmVcMFx1Mjc5ZlwwXHUyN2QwXDBcdTI4MDFcMFx1MjgzMlwwXHUyODYzXDBcdTI4OTQiKwotICAgICJcMFx1MjhjNVwwXHUyOGY2XDBcdTI5MjdcMFx1Mjk1OFwwXHUyOTg5XDBcdTI5YmFcMFx1MjllYlwwXHUyYTFjIisKLSAgICAiXDBcdTJhNGRcMFx1MmE3ZVwwXHUyYWFmXDBcdTJhZTBcMFx1MmIxMVwwXHUyYjQyXDBcdTJiNzNcMFx1MDE1NyIrCi0gICAgIlwwXHUyYmE0XDBcdTJiZDVcMFx1MmMwNlwwXHUyYzM3XDBcdTJjNjhcMFx1MmM5OVwwXHUyY2NhXDBcdTJjZmIiKwotICAgICJcMFx1MDE1N1wwXHUwMTU3XDBcdTJkMmNcMFx1MmQ1ZFwwXHUyZDhlXDBcdTJkYmZcMFx1MmRmMFwwXHUyZTIxIisKLSAgICAiXDBcdTJlNTJcMFx1MmU4M1wwXHUyZWI0XDBcdTJlZTVcMFx1MmYxNlwwXHUyZjQ3XDBcdTAxNTdcMFx1MDE1NyIrCi0gICAgIlwwXHUyZjc4XDBcdTJmYTlcMFx1MmZkYVwwXHUzMDBiXDBcdTAxNTdcMFx1MDE1N1wwXHUzMDNjXDBcdTAxNTciKwotICAgICJcMFx1MzA2ZFwwXHUzMDllXDBcdTMwY2ZcMFx1MzEwMFwwXHUwMTU3IjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tSb3dNYXAoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMzMzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja1Jvd01hcChaWl9ST1dNQVBfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrUm93TWFwKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBoaWdoID0gcGFja2VkLmNoYXJBdChpKyspIDw8IDE2OwotICAgICAgcmVzdWx0W2orK10gPSBoaWdoIHwgcGFja2VkLmNoYXJBdChpKyspOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0gIC8qKiAKLSAgICogVGhlIHRyYW5zaXRpb24gdGFibGUgb2YgdGhlIERGQQotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX1RSQU5TID0genpVbnBhY2tUcmFucygpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9UUkFOU19QQUNLRURfMCA9Ci0gICAgIlwxXDNcMVw0XDFcNVwxXDZcMVw3XDFcMTBcMVwxMVwxXDEyIisKLSAgICAiXDFcMTFcMVwxM1wxXDE0XDFcMTVcMVwxNlwxXDE3XDFcMjBcMVwyMSIrCi0gICAgIlwxXDIyXDFcMjNcMVwyNFwxXDI1XDFcMjZcMVwyN1wxXDMwXDFcMzEiKwotICAgICJcMVwzMlwxXDMzXDFcMzRcMVwxMVwxXDM1XDFcMzZcMVwzN1wxXDQwIisKLSAgICAiXDFcNDFcMVw0MlwxXDQzXDFcNDRcMVw0NVwxXDExXDFcNDZcMVw0NyIrCi0gICAgIlwxXDUwXDFcMTFcMVw1MVwxXDUyXDFcNTNcNFwxMVwxMlw0XDFcNTQiKwotICAgICJcMVw1NVw0NVw0XDYxXDBcMlw1NlwxXDU3XDU2XDU2XDNcNjBcMVw2MSIrCi0gICAgIlw1NVw2MFw0XDBcMVw3XDFcNjJcMVw2M1wzMFwwXDFcNjNcMjVcMCIrCi0gICAgIlwxXDYyXDFcNjRcNTdcMFwzXDExXDFcMFwyXDExXDIwXDBcMjdcMTEiKwotICAgICJcMTNcMFwxXDY1XDYwXDBcMVw2Nlw2NlwwXDFcNjdcNjBcMFwxXDcwIisKLSAgICAiXDFcMFwxXDcxXDU2XDBcMVw3MlwyXDBcMVw3M1w2MVwwXDFcNzQiKwotICAgICJcMzdcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwxMVwxXDc1XDZcMTEiKwotICAgICJcMVw3Nlw1XDExXDFcNzdcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw0XDExXDFcMTAwXDFcMTFcMVwxMDFcMVwxMDJcMVwxMVwxXDEwMyIrCi0gICAgIlwzXDExXDFcMTA0XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDEwNVwzXDExXDFcMTA2XDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMlwxMVwxXDEwN1wyXDExXDFcMTEwXDEwXDExXDFcMTExIisKLSAgICAiXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMVwxXDExMiIrCi0gICAgIlwxNVwxMVwxXDExM1wxXDExXDFcMTE0XDFcMTE1XDFcMTE2XDFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExN1w0XDExXDFcMTIwXDJcMTEiKwotICAgICJcMVwxMjFcNVwxMVwxXDEyMlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwxMjNcMlwxMVwxXDEyNFw1XDExXDFcMTI1XDEwXDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDEyNlwxXDEyNyIrCi0gICAgIlwxXDExXDFcMTMwXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMVwxMVwxXDEzMVwzXDExXDFcMTMyXDRcMTFcMVwxMzNcM1wxMVwxXDEzNCIrCi0gICAgIlw3XDExXDFcMTM1XDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXDEzNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVwxMzdcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMSIrCi0gICAgIlwxXDE0MFwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExIisKLSAgICAiXDFcMTQxXDJcMTFcMVwxNDJcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMTQzXDNcMTFcMVwxNDRcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXDE0NVwxMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMTQ2XDFcMTFcMVwxNDdcMTRcMTEiKwotICAgICJcMTNcMFwxXDE1MFw2M1wwXDFcMTUxXDQ0XDBcMVw1Nlw2MVwwXDFcNjAiKwotICAgICJcNjFcMFwxXDYyXDFcMFwxXDYzXDMwXDBcMVw2M1wyNVwwXDFcMTUyIisKLSAgICAiXDJcMFwxXDE1M1wxXDBcMVwxNTNcNTNcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDE1NFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwxNTVcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyMVwxMVwxXDE1Nlw1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDE1N1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwxNjBcMlwxMVwxXDE2MVwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwxNjJcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyNFwxMVwxXDE2M1wyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXDE2NFwyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDFcMTY1XDI2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXDE2NlwxXDE2N1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMTcwXDRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMTcxXDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMVwxNzJcMjZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDExXDFcMTczXDI1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcM1wxMVwxXDE3NFwyM1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDExXDExXDFcMTc1XDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMjFcMTFcMVwxNzZcNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDIxXDExXDFcMTc3XDVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcMjAwXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwyMDFcM1wxMVwxXDIwMlwyMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMjAzXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDIwNFwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDI1XDExXDFcMjA1XDFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjA2XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwyMDdcNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMjEwXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMlwxMVwxXDIxMVwyNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDNcMTFcMVwyMTJcNlwxMVwxXDIxM1wxNFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDRcMTFcMVwyMTRcMjJcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDIxNVwxNFwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyMTZcMTBcMTEiKwotICAgICJcMVwyMTdcMTBcMTFcNFwwXDFcMTUyXDYwXDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDNcMTFcMVwyMjBcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDIyMVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDIxXDExXDFcMjIyXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyNFwxMVwxXDIyM1wyXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwyMjRcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMjI1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjFcMTFcMVwyMjZcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcMjI3XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTRcMTFcMVwyMzBcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwyMVwxMVwxXDIzMVw1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzMlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMjMzXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTJcMTFcMVwyMzRcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjM1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDIzNlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE1XDExXDFcMjM3XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMlwxMVwxXDI0MFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQyXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0M1wyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDRcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMlwxMVwxXDI0NVwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVwyNDZcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDI0N1wxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEwXDExXDFcMjUwXDE2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI1MVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDE0XDExXDFcMjUyXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTZcMTFcMVwyNTNcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwzXDExXDFcMjU0XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI1NVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDFcMjU2XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVwyNTciKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw0XDExXDFcMjYwIisKLSAgICAiXDIyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwyNjEiKwotICAgICJcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjYyIisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwyNjMiKwotICAgICJcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDI2NCIrCi0gICAgIlwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyNjUiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXDI2NiIrCi0gICAgIlw1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDI2NyIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDI2XDExXDFcMjcwIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjZcMTFcMVwyNzFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDI3Mlw0XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMjFcMTFcMVwyNzNcNVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwyNzRcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMjc1XDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDI3NlwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTFcMVwyNzdcMjRcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMwMFwxNVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMDFcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXDMwMlwxNFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMDNcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXDMwNFwxMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMDVcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMzA2XDIxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDMwN1wyMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDEzXDExXDFcMzEwXDEzXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxMVwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTJcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMzEzXDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxNFwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwzMTVcMjFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzE2XDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwxXDExXDFcMzE3XDIwXDBcMjdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMyMFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEwXDExXDFcMzIxXDE2XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTVcMTFcMVwzMjJcMTFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDMyM1w0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMjRcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxM1wxMVwxXDMyNVwxM1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE3XDExXDFcMzI2XDdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzI3XDE3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTdcMTFcMVwzMzBcN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzMxXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNFwxMVwxXDMzMlwyMlwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMzNcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwzXDExXDFcMzM0XDIzXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMzVcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxXDMzNlwyNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVwzMzdcMjFcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw0XDExXDFcMzQwXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcN1wxMVwxXDM0MVwxN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDExXDExXDFcMzQyXDE1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNlwxMVwxXDM0M1wyMFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMVwxMVwxXDM0NFwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM0NVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEwXDExXDFcMzQ2XDE2XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTZcMTFcMVwzNDdcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxNFwxMVwxXDM1MFwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNTFcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzUyXDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM1M1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDZcMTFcMVwzNTRcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMzU1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDM1NlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDFcMzU3XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTBcMTFcMVwzNjBcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMVwxMVwxXDM2MVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwzNjJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMzYzXDJcMTFcMVwzNjRcMTZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcMzY1XDIxXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMVwzNjZcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMlwxMVwxXDM2N1wxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMzcwXDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwzNzFcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw3XDExXDFcMzcyXDE3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcN1wxMVwxXDM3M1wxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNzRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDM3NVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDdcMTFcMVwzNzZcMTdcMTFcNFwwXDNcMTFcMVwwXDFcMTEiKwotICAgICJcMVwzNzdcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDIzXDExXDFcdTAxMDBcM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDNcMTFcMVx1MDEwMVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcdTAxMDJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw2XDExXDFcdTAxMDNcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcdTAxMDRcMjFcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDEwNSIrCi0gICAgIlwyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTA2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVx1MDEwNyIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMDgiKwotICAgICJcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMDkiKwotICAgICJcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDEwYSIrCi0gICAgIlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcdTAxMGIiKwotICAgICJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcdTAxMGMiKwotICAgICJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMVwxXHUwMTBkIisKLSAgICAiXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXHUwMTBlIisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVx1MDEwZiIrCi0gICAgIlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExXDFcdTAxMTAiKwotICAgICJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExXDFcdTAxMTEiKwotICAgICJcMjVcMTFcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDExMlwyMFwwXDI3XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMTNcMjBcMFwyN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExXDFcdTAxMTRcNlwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMVwxMVwxXHUwMTE1XDIwXDBcMjdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTE2XDEwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXHUwMTE3XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjFcMTFcMVx1MDExOFw1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTJcMTFcMVx1MDExOVwxNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEyXDExXDFcdTAxMWFcMTRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcdTAxMWJcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcdTAxMWNcMjBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDFcMTFcMVx1MDExZFwyMFwwXDI3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTZcMTFcMVx1MDExZVwxMFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVx1MDExZlwyMlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDdcMTFcMVx1MDEyMFwxN1wxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVx1MDEyMVwyMVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDJcMTFcMVx1MDEyMlwyNFwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMVwxMVwxXHUwMTIzXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjRcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjVcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcdTAxMjZcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMlwxMVwxXHUwMTI3XDE0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXHUwMTI4XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVx1MDEyOVwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVx1MDEyYVwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEzXDExXDFcdTAxMmJcMTNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw2XDExXDFcdTAxMmNcMjBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxM1wxMVwxXHUwMTJkXDEzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTNcMTFcMVx1MDEyZVwxM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDdcMTFcMVx1MDEyZlwxN1wxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTMwIisKLSAgICAiXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxMzFcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTMyXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTRcMTEiKwotICAgICJcMVx1MDEzM1wxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzNFwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzNVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzNlwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTEiKwotICAgICJcMVx1MDEzN1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTEiKwotICAgICJcMVx1MDEzOFwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxMzlcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxM2FcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExIisKLSAgICAiXDFcdTAxM2JcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExIisKLSAgICAiXDFcdTAxM2NcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMSIrCi0gICAgIlwxXHUwMTNkXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTNlXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTNmXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTVcMTEiKwotICAgICJcMVx1MDE0MFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVx1MDE0MVwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTEiKwotICAgICJcMVx1MDE0MlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExIisKLSAgICAiXDFcdTAxNDNcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExIisKLSAgICAiXDFcdTAxNDRcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMSIrCi0gICAgIlwxXHUwMTQ1XDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyMFwxMSIrCi0gICAgIlwxXHUwMTQ2XDZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMSIrCi0gICAgIlwxXHUwMTQ3XDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTVcMTEiKwotICAgICJcMVx1MDE0OFwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcdTAxNDkiKwotICAgICJcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXHUwMTRhIisKLSAgICAiXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMlwxMVwxXHUwMTRiIisKLSAgICAiXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTFcMVx1MDE0YyIrCi0gICAgIlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDE0ZCIrCi0gICAgIlwxN1wxMSI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrVHJhbnMoKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMTI1OTNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrVHJhbnMoWlpfVFJBTlNfUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrVHJhbnMoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICB2YWx1ZS0tOwotICAgICAgZG8gcmVzdWx0W2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotCi0gIC8qIGVycm9yIGNvZGVzICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9VTktOT1dOX0VSUk9SID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX05PX01BVENIID0gMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX1BVU0hCQUNLXzJCSUcgPSAyOwotCi0gIC8qIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgY29kZXMgYWJvdmUgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0VSUk9SX01TR1tdID0gewotICAgICJVbmtvd24gaW50ZXJuYWwgc2Nhbm5lciBlcnJvciIsCi0gICAgIkVycm9yOiBjb3VsZCBub3QgbWF0Y2ggaW5wdXQiLAotICAgICJFcnJvcjogcHVzaGJhY2sgdmFsdWUgd2FzIHRvbyBsYXJnZSIKLSAgfTsKLQotICAvKioKLSAgICogWlpfQVRUUklCVVRFW2FTdGF0ZV0gY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2Ygc3RhdGUgPGNvZGU+YVN0YXRlPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFpaX0FUVFJJQlVURSA9IHp6VW5wYWNrQXR0cmlidXRlKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX0FUVFJJQlVURV9QQUNLRURfMCA9Ci0gICAgIlwyXDBcMlwxMVw1XDFcMlwxMVwyXDFcNlwxMVw0XDFcNFwxMSIrCi0gICAgIlwyMlwxXDFcMFwxXDFcMVwwXDJcMVwxXDBcMTFcMTFcNTNcMSIrCi0gICAgIlwyXDExXDFcMVwxXDBcMzQyXDEiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja0F0dHJpYnV0ZSgpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFszMzNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrQXR0cmlidXRlKFpaX0FUVFJJQlVURV9QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tBdHRyaWJ1dGUoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgICAgICAgLyogaW5kZXggaW4gcGFja2VkIHN0cmluZyAgKi8KLSAgICBpbnQgaiA9IG9mZnNldDsgIC8qIGluZGV4IGluIHVucGFja2VkIGFycmF5ICovCi0gICAgaW50IGwgPSBwYWNrZWQubGVuZ3RoKCk7Ci0gICAgd2hpbGUgKGkgPCBsKSB7Ci0gICAgICBpbnQgY291bnQgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBpbnQgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyByZXN1bHRbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0gIC8qKiB0aGUgaW5wdXQgZGV2aWNlICovCi0gIHByaXZhdGUgamF2YS5pby5SZWFkZXIgenpSZWFkZXI7Ci0KLSAgLyoqIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBERkEgKi8KLSAgcHJpdmF0ZSBpbnQgenpTdGF0ZTsKLQotICAvKiogdGhlIGN1cnJlbnQgbGV4aWNhbCBzdGF0ZSAqLwotICBwcml2YXRlIGludCB6ekxleGljYWxTdGF0ZSA9IFlZSU5JVElBTDsKLQotICAvKiogdGhpcyBidWZmZXIgY29udGFpbnMgdGhlIGN1cnJlbnQgdGV4dCB0byBiZSBtYXRjaGVkIGFuZCBpcwotICAgICAgdGhlIHNvdXJjZSBvZiB0aGUgeXl0ZXh0KCkgc3RyaW5nICovCi0gIHByaXZhdGUgY2hhciB6ekJ1ZmZlcltdID0gbmV3IGNoYXJbWlpfQlVGRkVSU0laRV07Ci0KLSAgLyoqIHRoZSB0ZXh0cG9zaXRpb24gYXQgdGhlIGxhc3QgYWNjZXB0aW5nIHN0YXRlICovCi0gIHByaXZhdGUgaW50IHp6TWFya2VkUG9zOwotCi0gIC8qKiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KLSAgcHJpdmF0ZSBpbnQgenpDdXJyZW50UG9zOwotCi0gIC8qKiBzdGFydFJlYWQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgeXl0ZXh0KCkgc3RyaW5nIGluIHRoZSBidWZmZXIgKi8KLSAgcHJpdmF0ZSBpbnQgenpTdGFydFJlYWQ7Ci0KLSAgLyoqIGVuZFJlYWQgbWFya3MgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIsIHRoYXQgaGFzIGJlZW4gcmVhZAotICAgICAgZnJvbSBpbnB1dCAqLwotICBwcml2YXRlIGludCB6ekVuZFJlYWQ7Ci0KLSAgLyoqIG51bWJlciBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZCB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCAqLwotICBwcml2YXRlIGludCB5eWxpbmU7Ci0KLSAgLyoqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCAqLwotICBwcml2YXRlIGludCB5eWNoYXI7Ci0KLSAgLyoqCi0gICAqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsYXN0IG5ld2xpbmUgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0Ci0gICAqLwotICBwcml2YXRlIGludCB5eWNvbHVtbjsKLQotICAvKiogCi0gICAqIHp6QXRCT0wgPT0gdHJ1ZSA8PT4gdGhlIHNjYW5uZXIgaXMgY3VycmVudGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4genpBdEJPTCA9IHRydWU7Ci0KLSAgLyoqIHp6QXRFT0YgPT0gdHJ1ZSA8PT4gdGhlIHNjYW5uZXIgaXMgYXQgdGhlIEVPRiAqLwotICBwcml2YXRlIGJvb2xlYW4genpBdEVPRjsKLQotICAvKiogZGVub3RlcyBpZiB0aGUgdXNlci1FT0YtY29kZSBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekVPRkRvbmU7Ci0KLSAgLyogdXNlciBjb2RlOiAqLwotCXB1YmxpYyBpbnQgbGluZW5vKCkgeyByZXR1cm4geXlsaW5lICsgMTsgfQotCXB1YmxpYyBpbnQgY29sbm8oKSB7IHJldHVybiB5eWNvbHVtbiArIDE7IH0KLQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSkgewotCQlyZXR1cm4gbmV3IFN5bWJvbCh0eXBlLCBsaW5lbm8oKSwgY29sbm8oKSk7Ci0JfQotCXByaXZhdGUgU3ltYm9sIHN5bWJvbChpbnQgdHlwZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpLCB2YWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgY29tbWVudExldmVsID0gMDsKLQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIKLSAgICogVGhlcmUgaXMgYWxzbyBhIGphdmEuaW8uSW5wdXRTdHJlYW0gdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uUmVhZGVyIHRvIHJlYWQgaW5wdXQgZnJvbS4KLSAgICovCi0gIFhQYXRoRmxleChqYXZhLmlvLlJlYWRlciBpbikgewotICAgIHRoaXMuenpSZWFkZXIgPSBpbjsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIuCi0gICAqIFRoZXJlIGlzIGFsc28gamF2YS5pby5SZWFkZXIgdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uSW5wdXRzdHJlYW0gdG8gcmVhZCBpbnB1dCBmcm9tLgotICAgKi8KLSAgWFBhdGhGbGV4KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pIHsKLSAgICB0aGlzKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKGluKSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFVucGFja3MgdGhlIGNvbXByZXNzZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlLgotICAgKgotICAgKiBAcGFyYW0gcGFja2VkICAgdGhlIHBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICogQHJldHVybiAgICAgICAgIHRoZSB1bnBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNoYXIgW10genpVbnBhY2tDTWFwKFN0cmluZyBwYWNrZWQpIHsKLSAgICBjaGFyIFtdIG1hcCA9IG5ldyBjaGFyWzB4MTAwMDBdOwotICAgIGludCBpID0gMDsgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSAwOyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICB3aGlsZSAoaSA8IDEzMikgewotICAgICAgaW50ICBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGNoYXIgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyBtYXBbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLQotICAvKioKLSAgICogUmVmaWxscyB0aGUgaW5wdXQgYnVmZmVyLgotICAgKgotICAgKiBAcmV0dXJuICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+LCBpZmYgdGhlcmUgd2FzIG5ldyBpbnB1dC4KLSAgICogCi0gICAqIEBleGNlcHRpb24gICBqYXZhLmlvLklPRXhjZXB0aW9uICBpZiBhbnkgSS9PLUVycm9yIG9jY3VycwotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6UmVmaWxsKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotCi0gICAgLyogZmlyc3Q6IG1ha2Ugcm9vbSAoaWYgeW91IGNhbikgKi8KLSAgICBpZiAoenpTdGFydFJlYWQgPiAwKSB7Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHp6QnVmZmVyLCB6elN0YXJ0UmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgenpCdWZmZXIsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIHp6RW5kUmVhZC16elN0YXJ0UmVhZCk7Ci0KLSAgICAgIC8qIHRyYW5zbGF0ZSBzdG9yZWQgcG9zaXRpb25zICovCi0gICAgICB6ekVuZFJlYWQtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6Q3VycmVudFBvcy09IHp6U3RhcnRSZWFkOwotICAgICAgenpNYXJrZWRQb3MtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6U3RhcnRSZWFkID0gMDsKLSAgICB9Ci0KLSAgICAvKiBpcyB0aGUgYnVmZmVyIGJpZyBlbm91Z2g/ICovCi0gICAgaWYgKHp6Q3VycmVudFBvcyA+PSB6ekJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgIC8qIGlmIG5vdDogYmxvdyBpdCB1cCAqLwotICAgICAgY2hhciBuZXdCdWZmZXJbXSA9IG5ldyBjaGFyW3p6Q3VycmVudFBvcyoyXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoenpCdWZmZXIsIDAsIG5ld0J1ZmZlciwgMCwgenpCdWZmZXIubGVuZ3RoKTsKLSAgICAgIHp6QnVmZmVyID0gbmV3QnVmZmVyOwotICAgIH0KLQotICAgIC8qIGZpbmFsbHk6IGZpbGwgdGhlIGJ1ZmZlciB3aXRoIG5ldyBpbnB1dCAqLwotICAgIGludCBudW1SZWFkID0genpSZWFkZXIucmVhZCh6ekJ1ZmZlciwgenpFbmRSZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ekJ1ZmZlci5sZW5ndGgtenpFbmRSZWFkKTsKLQotICAgIGlmIChudW1SZWFkID4gMCkgewotICAgICAgenpFbmRSZWFkKz0gbnVtUmVhZDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gdW5saWtlbHkgYnV0IG5vdCBpbXBvc3NpYmxlOiByZWFkIDAgY2hhcmFjdGVycywgYnV0IG5vdCBhdCBlbmQgb2Ygc3RyZWFtICAgIAotICAgIGlmIChudW1SZWFkID09IDApIHsKLSAgICAgIGludCBjID0genpSZWFkZXIucmVhZCgpOwotICAgICAgaWYgKGMgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB6ekJ1ZmZlclt6ekVuZFJlYWQrK10gPSAoY2hhcikgYzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgCi0gICAgfQotCi0JLy8gbnVtUmVhZCA8IDAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gICAgCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5Y2xvc2UoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgenpBdEVPRiA9IHRydWU7ICAgICAgICAgICAgLyogaW5kaWNhdGUgZW5kIG9mIGZpbGUgKi8KLSAgICB6ekVuZFJlYWQgPSB6elN0YXJ0UmVhZDsgIC8qIGludmFsaWRhdGUgYnVmZmVyICAgICovCi0KLSAgICBpZiAoenpSZWFkZXIgIT0gbnVsbCkKLSAgICAgIHp6UmVhZGVyLmNsb3NlKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIHNjYW5uZXIgdG8gcmVhZCBmcm9tIGEgbmV3IGlucHV0IHN0cmVhbS4KLSAgICogRG9lcyBub3QgY2xvc2UgdGhlIG9sZCByZWFkZXIuCi0gICAqCi0gICAqIEFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgYXJlIHJlc2V0LCB0aGUgb2xkIGlucHV0IHN0cmVhbSAKLSAgICogPGI+Y2Fubm90PC9iPiBiZSByZXVzZWQgKGludGVybmFsIGJ1ZmZlciBpcyBkaXNjYXJkZWQgYW5kIGxvc3QpLgotICAgKiBMZXhpY2FsIHN0YXRlIGlzIHNldCB0byA8dHQ+WlpfSU5JVElBTDwvdHQ+LgotICAgKgotICAgKiBAcGFyYW0gcmVhZGVyICAgdGhlIG5ldyBpbnB1dCBzdHJlYW0gCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eXJlc2V0KGphdmEuaW8uUmVhZGVyIHJlYWRlcikgewotICAgIHp6UmVhZGVyID0gcmVhZGVyOwotICAgIHp6QXRCT0wgID0gdHJ1ZTsKLSAgICB6ekF0RU9GICA9IGZhbHNlOwotICAgIHp6RU9GRG9uZSA9IGZhbHNlOwotICAgIHp6RW5kUmVhZCA9IHp6U3RhcnRSZWFkID0gMDsKLSAgICB6ekN1cnJlbnRQb3MgPSB6ek1hcmtlZFBvcyA9IDA7Ci0gICAgeXlsaW5lID0geXljaGFyID0geXljb2x1bW4gPSAwOwotICAgIHp6TGV4aWNhbFN0YXRlID0gWVlJTklUSUFMOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIGludCB5eXN0YXRlKCkgewotICAgIHJldHVybiB6ekxleGljYWxTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEVudGVycyBhIG5ldyBsZXhpY2FsIHN0YXRlCi0gICAqCi0gICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IGxleGljYWwgc3RhdGUKLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5YmVnaW4oaW50IG5ld1N0YXRlKSB7Ci0gICAgenpMZXhpY2FsU3RhdGUgPSBuZXdTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgY3VycmVudCByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHl5dGV4dCgpIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZyggenpCdWZmZXIsIHp6U3RhcnRSZWFkLCB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZCApOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIDx0dD5wb3M8L3R0PiBmcm9tIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0LiAKLSAgICogCi0gICAqIEl0IGlzIGVxdWl2YWxlbnQgdG8geXl0ZXh0KCkuY2hhckF0KHBvcyksIGJ1dCBmYXN0ZXIKLSAgICoKLSAgICogQHBhcmFtIHBvcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciB0byBmZXRjaC4gCi0gICAqICAgICAgICAgICAgQSB2YWx1ZSBmcm9tIDAgdG8geXlsZW5ndGgoKS0xLgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zCi0gICAqLwotICBwdWJsaWMgZmluYWwgY2hhciB5eWNoYXJhdChpbnQgcG9zKSB7Ci0gICAgcmV0dXJuIHp6QnVmZmVyW3p6U3RhcnRSZWFkK3Bvc107Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCByZWdpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgaW50IHl5bGVuZ3RoKCkgewotICAgIHJldHVybiB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJlcG9ydHMgYW4gZXJyb3IgdGhhdCBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nLgotICAgKgotICAgKiBJbiBhIHdlbGxmb3JtZWQgc2Nhbm5lciAobm8gb3Igb25seSBjb3JyZWN0IHVzYWdlIG9mIAotICAgKiB5eXB1c2hiYWNrKGludCkgYW5kIGEgbWF0Y2gtYWxsIGZhbGxiYWNrIHJ1bGUpIHRoaXMgbWV0aG9kIAotICAgKiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhpbmdzIHRoYXQgIkNhbid0IFBvc3NpYmx5IEhhcHBlbiIuCi0gICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgc29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZwotICAgKiAoZS5nLiBhIEpGbGV4IGJ1ZyBwcm9kdWNpbmcgYSBmYXVsdHkgc2Nhbm5lciBldGMuKS4KLSAgICoKLSAgICogVXN1YWwgc3ludGF4L3NjYW5uZXIgbGV2ZWwgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUKLSAgICogaW4gZXJyb3IgZmFsbGJhY2sgcnVsZXMuCi0gICAqCi0gICAqIEBwYXJhbSAgIGVycm9yQ29kZSAgdGhlIGNvZGUgb2YgdGhlIGVycm9ybWVzc2FnZSB0byBkaXNwbGF5Ci0gICAqLwotICBwcml2YXRlIHZvaWQgenpTY2FuRXJyb3IoaW50IGVycm9yQ29kZSkgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBtZXNzYWdlID0gWlpfRVJST1JfTVNHW2Vycm9yQ29kZV07Ci0gICAgfQotICAgIGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZSA9IFpaX0VSUk9SX01TR1taWl9VTktOT1dOX0VSUk9SXTsKLSAgICB9Ci0KLSAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Ci0gIH0gCi0KLQotICAvKioKLSAgICogUHVzaGVzIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZSBpbnB1dCBzdHJlYW0uCi0gICAqCi0gICAqIFRoZXkgd2lsbCBiZSByZWFkIGFnYWluIGJ5IHRoZW4gbmV4dCBjYWxsIG9mIHRoZSBzY2FubmluZyBtZXRob2QKLSAgICoKLSAgICogQHBhcmFtIG51bWJlciAgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlYWQgYWdhaW4uCi0gICAqICAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiB5eWxlbmd0aCgpIQotICAgKi8KLSAgcHVibGljIHZvaWQgeXlwdXNoYmFjayhpbnQgbnVtYmVyKSAgewotICAgIGlmICggbnVtYmVyID4geXlsZW5ndGgoKSApCi0gICAgICB6elNjYW5FcnJvcihaWl9QVVNIQkFDS18yQklHKTsKLQotICAgIHp6TWFya2VkUG9zIC09IG51bWJlcjsKLSAgfQotCi0KLSAgLyoqCi0gICAqIENvbnRhaW5zIHVzZXIgRU9GLWNvZGUsIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgZXhhY3RseSBvbmNlLAotICAgKiB3aGVuIHRoZSBlbmQgb2YgZmlsZSBpcyByZWFjaGVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgenpEb0VPRigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICBpZiAoIXp6RU9GRG9uZSkgewotICAgICAgenpFT0ZEb25lID0gdHJ1ZTsKLSAgICAgIHl5Y2xvc2UoKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXN1bWVzIHNjYW5uaW5nIHVudGlsIHRoZSBuZXh0IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLAotICAgKiB0aGUgZW5kIG9mIGlucHV0IGlzIGVuY291bnRlcmVkIG9yIGFuIEkvTy1FcnJvciBvY2N1cnMuCi0gICAqCi0gICAqIEByZXR1cm4gICAgICB0aGUgbmV4dCB0b2tlbgotICAgKiBAZXhjZXB0aW9uICAgamF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnMKLSAgICovCi0gIHB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBuZXh0X3Rva2VuKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgIGludCB6eklucHV0OwotICAgIGludCB6ekFjdGlvbjsKLQotICAgIC8vIGNhY2hlZCBmaWVsZHM6Ci0gICAgaW50IHp6Q3VycmVudFBvc0w7Ci0gICAgaW50IHp6TWFya2VkUG9zTDsKLSAgICBpbnQgenpFbmRSZWFkTCA9IHp6RW5kUmVhZDsKLSAgICBjaGFyIFtdIHp6QnVmZmVyTCA9IHp6QnVmZmVyOwotICAgIGNoYXIgW10genpDTWFwTCA9IFpaX0NNQVA7Ci0KLSAgICBpbnQgW10genpUcmFuc0wgPSBaWl9UUkFOUzsKLSAgICBpbnQgW10genpSb3dNYXBMID0gWlpfUk9XTUFQOwotICAgIGludCBbXSB6ekF0dHJMID0gWlpfQVRUUklCVVRFOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIHp6TWFya2VkUG9zTCA9IHp6TWFya2VkUG9zOwotCi0gICAgICBib29sZWFuIHp6UiA9IGZhbHNlOwotICAgICAgZm9yICh6ekN1cnJlbnRQb3NMID0genpTdGFydFJlYWQ7IHp6Q3VycmVudFBvc0wgPCB6ek1hcmtlZFBvc0w7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpDdXJyZW50UG9zTCsrKSB7Ci0gICAgICAgIHN3aXRjaCAoenpCdWZmZXJMW3p6Q3VycmVudFBvc0xdKSB7Ci0gICAgICAgIGNhc2UgJ1x1MDAwQic6Ci0gICAgICAgIGNhc2UgJ1x1MDAwQyc6Ci0gICAgICAgIGNhc2UgJ1x1MDA4NSc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOCc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOSc6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICBpZiAoenpSKQotICAgICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB5eWxpbmUrKzsKLSAgICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgeXljb2x1bW4rKzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoenpSKSB7Ci0gICAgICAgIC8vIHBlZWsgb25lIGNoYXJhY3RlciBhaGVhZCBpZiBpdCBpcyBcbiAoaWYgd2UgaGF2ZSBjb3VudGVkIG9uZSBsaW5lIHRvbyBtdWNoKQotICAgICAgICBib29sZWFuIHp6UGVlazsKLSAgICAgICAgaWYgKHp6TWFya2VkUG9zTCA8IHp6RW5kUmVhZEwpCi0gICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgZWxzZSBpZiAoenpBdEVPRikKLSAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgIHp6RW5kUmVhZEwgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgenpNYXJrZWRQb3NMID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgenpCdWZmZXJMID0genpCdWZmZXI7Ci0gICAgICAgICAgaWYgKGVvZikgCi0gICAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgfQotICAgICAgICBpZiAoenpQZWVrKSB5eWxpbmUtLTsKLSAgICAgIH0KLSAgICAgIHp6QWN0aW9uID0gLTE7Ci0KLSAgICAgIHp6Q3VycmVudFBvc0wgPSB6ekN1cnJlbnRQb3MgPSB6elN0YXJ0UmVhZCA9IHp6TWFya2VkUG9zTDsKLSAgCi0gICAgICB6elN0YXRlID0gWlpfTEVYU1RBVEVbenpMZXhpY2FsU3RhdGVdOwotCi0KLSAgICAgIHp6Rm9yQWN0aW9uOiB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgCi0gICAgICAgICAgaWYgKHp6Q3VycmVudFBvc0wgPCB6ekVuZFJlYWRMKQotICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgIGVsc2UgaWYgKHp6QXRFT0YpIHsKLSAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIHN0b3JlIGJhY2sgY2FjaGVkIHBvc2l0aW9ucwotICAgICAgICAgICAgenpDdXJyZW50UG9zICA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvcyAgID0genpNYXJrZWRQb3NMOwotICAgICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgICAgLy8gZ2V0IHRyYW5zbGF0ZWQgcG9zaXRpb25zIGFuZCBwb3NzaWJseSBuZXcgYnVmZmVyCi0gICAgICAgICAgICB6ekN1cnJlbnRQb3NMICA9IHp6Q3VycmVudFBvczsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCAgID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgICB6ekJ1ZmZlckwgICAgICA9IHp6QnVmZmVyOwotICAgICAgICAgICAgenpFbmRSZWFkTCAgICAgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgICBpZiAoZW9mKSB7Ci0gICAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgICAgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpbnQgenpOZXh0ID0genpUcmFuc0xbIHp6Um93TWFwTFt6elN0YXRlXSArIHp6Q01hcExbenpJbnB1dF0gXTsKLSAgICAgICAgICBpZiAoenpOZXh0ID09IC0xKSBicmVhayB6ekZvckFjdGlvbjsKLSAgICAgICAgICB6elN0YXRlID0genpOZXh0OwotCi0gICAgICAgICAgaW50IHp6QXR0cmlidXRlcyA9IHp6QXR0ckxbenpTdGF0ZV07Ci0gICAgICAgICAgaWYgKCAoenpBdHRyaWJ1dGVzICYgMSkgPT0gMSApIHsKLSAgICAgICAgICAgIHp6QWN0aW9uID0genpTdGF0ZTsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICBpZiAoICh6ekF0dHJpYnV0ZXMgJiA4KSA9PSA4ICkgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gc3RvcmUgYmFjayBjYWNoZWQgcG9zaXRpb24KLSAgICAgIHp6TWFya2VkUG9zID0genpNYXJrZWRQb3NMOwotCi0gICAgICBzd2l0Y2ggKHp6QWN0aW9uIDwgMCA/IHp6QWN0aW9uIDogWlpfQUNUSU9OW3p6QWN0aW9uXSkgewotICAgICAgICBjYXNlIDc0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JVEVNKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQ2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgODE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTU6IGJyZWFrOwotICAgICAgICBjYXNlIDE1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTY6IGJyZWFrOwotICAgICAgICBjYXNlIDM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFR0VSLCBuZXcgQmlnSW50ZWdlcih5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FUSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk4OiBicmVhazsKLSAgICAgICAgY2FzZSA3MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQU1FU1BBQ0UpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDA6IGJyZWFrOwotICAgICAgICBjYXNlIDM0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIzOiAKLSAgICAgICAgICB7IC8vIGdldCByaWQgb2YgcXVvdGVzCi0JCQkJU3RyaW5nIHN0ciA9IHl5dGV4dCgpOwotCQkJCWFzc2VydCBzdHIubGVuZ3RoKCkgPj0gMjsKLQkJCQlyZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUUklORywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkxpdGVyYWxVdGlscy51bnF1b3RlKHN0cikpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDI6IGJyZWFrOwotICAgICAgICBjYXNlIDE6IAotICAgICAgICAgIHsgU3RyaW5nIGVyciA9ICJVbmtub3duIGNoYXJhY3RlciBhdCBsaW5lICIgKyBsaW5lbm8oKTsgCi0JCWVyciArPSAiIGNvbCAiICsgY29sbm8oKTsKLQkJZXJyICs9ICI6ICIgKyB5eXRleHQoKTsgCi0JCQkgICAgIAotCQl0aHJvdyBuZXcgSkZsZXhFcnJvcihlcnIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDM6IGJyZWFrOwotICAgICAgICBjYXNlIDIwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUEpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDQ6IGJyZWFrOwotICAgICAgICBjYXNlIDcwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTX0xFU1MpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDc6IGJyZWFrOwotICAgICAgICBjYXNlIDY1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVFJFQVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDg6IGJyZWFrOwotICAgICAgICBjYXNlIDEzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU1RBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwOTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5VTklPTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0xMQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTE6IGJyZWFrOwotICAgICAgICBjYXNlIDg1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0VMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTI6IGJyZWFrOwotICAgICAgICBjYXNlIDM1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTQ6IGJyZWFrOwotICAgICAgICBjYXNlIDI1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9URE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE1OiBicmVhazsKLSAgICAgICAgY2FzZSA4MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRZUEVTV0lUQ0gpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTY6IGJyZWFrOwotICAgICAgICBjYXNlIDU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQ05BTUUsIHl5dGV4dCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE3OiBicmVhazsKLSAgICAgICAgY2FzZSAyNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFQ0lNQUwsIG5ldyBCaWdEZWNpbWFsKHl5dGV4dCgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExODogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVF9TWU0pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTk6IGJyZWFrOwotICAgICAgICBjYXNlIDI5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU0VRVUFMKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIwOiBicmVhazsKLSAgICAgICAgY2FzZSAyNjogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsgLy8gaW50IG92ZXJmbG93ID1QCi0JCQkgIHl5YmVnaW4oQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0NVTUVOVF9OT0RFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIyOiBicmVhazsKLSAgICAgICAgY2FzZSAzMzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUldBUkRfU0xBU0hTTEFTSCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI0OiBicmVhazsKLSAgICAgICAgY2FzZSA2NzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVYQ0VQVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkdfU0lCTElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlNUQU5DRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTFNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI4OiBicmVhazsKLSAgICAgICAgY2FzZSA0NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI5OiBicmVhazsKLSAgICAgICAgY2FzZSA0NzogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMwOiBicmVhazsKLSAgICAgICAgY2FzZSAzNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMxOiBicmVhazsKLSAgICAgICAgY2FzZSA0MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRPKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMyOiBicmVhazsKLSAgICAgICAgY2FzZSA4NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVNUFRZX1NFUVVFTkNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMzOiBicmVhazsKLSAgICAgICAgY2FzZSA4MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBSRUNFRElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSRVFVQUwpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzU6IGJyZWFrOwotICAgICAgICBjYXNlIDg3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1JfT1JfU0VMRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVFRSSUJVVEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzc6IGJyZWFrOwotICAgICAgICBjYXNlIDg2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0FUVFJJQlVURSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQwOiBicmVhazsKLSAgICAgICAgY2FzZSAxNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBJUEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUVVFU1RJT05NQVJLKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQyOiBicmVhazsKLSAgICAgICAgY2FzZSAzNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQzOiBicmVhazsKLSAgICAgICAgY2FzZSA3NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOVEVSU0VDVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDg6IAotICAgICAgICAgIHsgY29tbWVudExldmVsLS07IAotCQkJICBpZihjb21tZW50TGV2ZWwgPT0gMCkKLQkJICAgICAgICAgIAl5eWJlZ2luKFlZSU5JVElBTCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5PRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DSElMRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ORSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TRUxGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQ5OiBicmVhazsKLSAgICAgICAgY2FzZSAyNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OQ09MT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTA6IGJyZWFrOwotICAgICAgICBjYXNlIDUwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUxOiBicmVhazsKLSAgICAgICAgY2FzZSA4ODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPTExPV0lOR19TSUJMSU5HKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUyOiBicmVhazsKLSAgICAgICAgY2FzZSA2MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRFWFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTM6IGJyZWFrOwotICAgICAgICBjYXNlIDY4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUkVUVVJOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU0OiBicmVhazsKLSAgICAgICAgY2FzZSA1MzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1PRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBMVVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTY6IGJyZWFrOwotICAgICAgICBjYXNlIDI4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9URVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU3OiBicmVhazsKLSAgICAgICAgY2FzZSAzMjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVJfR1JFQVRFUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FVkVSWSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DQVNUQUJMRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UX09SX1NFTEYpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjE6IGJyZWFrOwotICAgICAgICBjYXNlIDc2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0FUSVNGSUVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYyOiBicmVhazsKLSAgICAgICAgY2FzZSA5MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBST0NFU1NJTkdfSU5TVFJVQ1RJT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjM6IGJyZWFrOwotICAgICAgICBjYXNlIDE2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU1RIQU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjQ6IGJyZWFrOwotICAgICAgICBjYXNlIDU0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SUEFSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY2OiBicmVhazsKLSAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IC8qIGlnbm9yZSAqLwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjc6IGJyZWFrOwotICAgICAgICBjYXNlIDEwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEJSQUNLRVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjg6IGJyZWFrOwotICAgICAgICBjYXNlIDYwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9ERSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTcwOiBicmVhazsKLSAgICAgICAgY2FzZSA0OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVUJMRSwgbmV3IERvdWJsZSh5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzE6IGJyZWFrOwotICAgICAgICBjYXNlIDYxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVEhFTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TT01FKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTczOiBicmVhazsKLSAgICAgICAgY2FzZSA2OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBBUkVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1JTlVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc1OiBicmVhazsKLSAgICAgICAgY2FzZSA0MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc2OiBicmVhazsKLSAgICAgICAgY2FzZSA0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc3OiBicmVhazsKLSAgICAgICAgY2FzZSAxMTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJCUkFDS0VUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc4OiBicmVhazsKLSAgICAgICAgY2FzZSAxNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5EKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgwOiBicmVhazsKLSAgICAgICAgY2FzZSA4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFBBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MTogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgyOiBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgaWYgKHp6SW5wdXQgPT0gWVlFT0YgJiYgenpTdGFydFJlYWQgPT0genpDdXJyZW50UG9zKSB7Ci0gICAgICAgICAgICB6ekF0RU9GID0gdHJ1ZTsKLSAgICAgICAgICAgIHp6RG9FT0YoKTsKLSAgICAgICAgICAgICAgeyByZXR1cm4gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKHN5bS5FT0YpOyB9Ci0gICAgICAgICAgfSAKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHp6U2NhbkVycm9yKFpaX05PX01BVENIKTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGguY3VwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvZ3JhbW1hcnMveHBhdGguY3VwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjYyYjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmN1cAorKysgL2Rldi9udWxsCkBAIC0xLDc3MSArMCwwIEBACi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0vLyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAqCi0vLyAqIENvbnRyaWJ1dG9yczoKLS8vICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLS8vICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjk4MzMgLSBBIHdvcmsgYXJvdW5kIGZvciB0aGUga2V5d29yZCBpbiBub2RlIGlzc3VlLgotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBJRiBUSEVOIEVMU0UgcGFyc2luZyBhbmQgdXBkYXRlIGdyYW1tYXJzCi0vLyAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEZpeGVkIFdpbGRjYXJkIGFuZCBOQ05hbWUgaXNzdWUuIAotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDMxMTQ4MCAtIGZpeCBwcm9ibGVtIHdpdGggbmFtZSBtYXRjaGluZyBvbiBrZXl3b3JkcyAKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotIAotcGFyc2VyIGNvZGUgCXs6Ci0KLXB1YmxpYyB2b2lkIHJlcG9ydF9lcnJvcihTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGluZm8pIHsKLQlTdHJpbmcgZXJyID0gIlBhcnNlciBlcnJvcjogIjsKLQotCVhQYXRoRmxleCBsZXhlciA9IChYUGF0aEZsZXgpIGdldFNjYW5uZXIoKTsKLQotCWVyciArPSAibGluZSAiICsgbGV4ZXIubGluZW5vKCk7Ci0JZXJyICs9ICIgY29sICIgKyBsZXhlci5jb2xubygpOwotCWVyciArPSAiOiAiICsgbGV4ZXIueXl0ZXh0KCk7Ci0KLQkKLQl0aHJvdyBuZXcgQ3VwRXJyb3IoZXJyKTsKLX0KLTp9Ci0KLQotCi10ZXJtaW5hbCBMQlJBQ0tFVCwgUkJSQUNLRVQsIExQQVIsIFJQQVI7Ci10ZXJtaW5hbCBQTFVTLCBNSU5VUywgU1RBUiwgUElQRTsKLXRlcm1pbmFsIEVRVUFMUywgTk9URVFVQUxTLCBMRVNTVEhBTiwgTEVTU0VRVUFMLCBHUkVBVEVSLCBHUkVBVEVSRVFVQUw7Ci10ZXJtaW5hbCBMRVNTX0xFU1MsIEdSRUFURVJfR1JFQVRFUjsKLXRlcm1pbmFsIEZPUldBUkRfU0xBU0gsIEZPUldBUkRfU0xBU0hTTEFTSDsKLXRlcm1pbmFsIENPTE9OQ09MT04sIEFUX1NZTSwgRE9URE9ULCBDT0xPTiwgQ09NTUEsIERPTExBUiwgRE9ULCBRVUVTVElPTk1BUks7Ci0KLXRlcm1pbmFsIFN0cmluZyBDSElMRCwgREVTQ0VOREFOVCwgQVRUUklCVVRFLCBTRUxGLCBERVNDRU5EQU5UX09SX1NFTEY7Ci10ZXJtaW5hbCBTdHJpbmcgRk9MTE9XSU5HX1NJQkxJTkcsIEZPTExPV0lORywgTkFNRVNQQUNFLCBQQVJFTlQ7Ci10ZXJtaW5hbCBTdHJpbmcgQU5DRVNUT1IsIFBSRUNFRElOR19TSUJMSU5HLCBQUkVDRURJTkcsIEFOQ0VTVE9SX09SX1NFTEY7Ci10ZXJtaW5hbCBFUSwgTkUsIExULCBMRSwgR1QsIEdFOwotdGVybWluYWwgU3RyaW5nIERJViwgSURJViwgTU9EOwotdGVybWluYWwgU3RyaW5nIFVOSU9OLCBJTlRFUlNFQ1QsIEVYQ0VQVDsKLXRlcm1pbmFsIFN0cmluZyBJTlNUQU5DRSwgT0YsIFRSRUFULCBBUywgQ0FTVEFCTEUsIENBU1QsIElTOwotdGVybWluYWwgU3RyaW5nIEZPUiwgSU4sIFJFVFVSTiwgU0FUSVNGSUVTLCBUTzsKLXRlcm1pbmFsIFN0cmluZyBTT01FLCBFVkVSWTsKLXRlcm1pbmFsIFN0cmluZyBJRiwgVEhFTiwgRUxTRTsKLXRlcm1pbmFsIFN0cmluZyBBTkQsIE9SOwotdGVybWluYWwgRU1QVFlfU0VRVUVOQ0UsIElURU0sIE5PREUsIERPQ1VNRU5UX05PREUsIFRFWFQsIENPTU1FTlQ7Ci10ZXJtaW5hbCBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OLCBTQ0hFTUFfQVRUUklCVVRFLCBFTEVNRU5ULCBTQ0hFTUFfRUxFTUVOVDsKLS8vIFVudXNlZCBpbiBYUGF0aCAyLCBidXQgcmVzZXJ2ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBYUXVlcnkKLXRlcm1pbmFsIFRZUEVTV0lUQ0g7Ci0KLXRlcm1pbmFsIEJpZ0ludGVnZXIgSU5URUdFUjsKLXRlcm1pbmFsIERvdWJsZSBET1VCTEU7Ci10ZXJtaW5hbCBCaWdEZWNpbWFsIERFQ0lNQUw7Ci10ZXJtaW5hbCBTdHJpbmcgU1RSSU5HLCBOQ05BTUU7Ci0KLQotbm9uIHRlcm1pbmFsIFN0cmluZyBOQ05hbWUsIFVucmVzZXJ2ZWROQ05hbWUsIFByZWZpeCwgTG9jYWxQYXJ0Owotbm9uIHRlcm1pbmFsIFN0cmluZ0xpdGVyYWwgU3RyaW5nTGl0ZXJhbDsKLW5vbiB0ZXJtaW5hbCBRTmFtZSBFbGVtZW50RGVjbGFyYXRpb24sIEVsZW1lbnROYW1lT3JXaWxkY2FyZCwgVHlwZU5hbWUsIEVsZW1lbnROYW1lOwotbm9uIHRlcm1pbmFsIFFOYW1lIEF0dHJpYnV0ZURlY2xhcmF0aW9uLCBBdHRyaWJOYW1lT3JXaWxkY2FyZCwgQXR0cmlidXRlTmFtZTsKLW5vbiB0ZXJtaW5hbCBRTmFtZSBBdG9taWNUeXBlLCBRTmFtZSwgVW5yZXNlcnZlZFFOYW1lLCBWYXJOYW1lLCBXaWxkY2FyZDsKLW5vbiB0ZXJtaW5hbCBJbnRlZ2VyIE9jY3VycmVuY2VJbmRpY2F0b3IsIFJldmVyc2VBeGlzLCBGb3J3YXJkQXhpcywgTm9kZUNvbXA7Ci1ub24gdGVybWluYWwgSXRlbVR5cGUgSXRlbVR5cGU7Ci1ub24gdGVybWluYWwgQ29sbGVjdGlvbiBGdW5jdGlvbkNhbGxNaWRkbGUsIFBhcmVudGhlc2l6ZWRFeHByLCBFeHByOwotbm9uIHRlcm1pbmFsIENvbGxlY3Rpb24gUHJlZGljYXRlTGlzdCwgUXVhbnRpZmllZEV4cHJNaWRkbGUsIFNpbXBsZUZvckNsYXVzZTsKLW5vbiB0ZXJtaW5hbCBQcmltYXJ5RXhwciBQcmltYXJ5RXhwcjsKLW5vbiB0ZXJtaW5hbCBOb2RlVGVzdCBOb2RlVGVzdDsKLW5vbiB0ZXJtaW5hbCBSZXZlcnNlU3RlcCBSZXZlcnNlU3RlcCwgQWJicmV2UmV2ZXJzZVN0ZXA7Ci1ub24gdGVybWluYWwgRm9yd2FyZFN0ZXAgRm9yd2FyZFN0ZXAsIEFiYnJldkZvcndhcmRTdGVwOwotbm9uIHRlcm1pbmFsIFN0ZXBFeHByIFN0ZXBFeHByOwotbm9uIHRlcm1pbmFsIFhQYXRoRXhwciBSZWxhdGl2ZVBhdGhFeHByOwotbm9uIHRlcm1pbmFsIEV4cHIgVW5hcnlFeHByOwotbm9uIHRlcm1pbmFsIFNpbmdsZVR5cGUgU2luZ2xlVHlwZTsKLW5vbiB0ZXJtaW5hbCBTZXF1ZW5jZVR5cGUgU2VxdWVuY2VUeXBlOwotbm9uIHRlcm1pbmFsIEV4cHIgVHJlYXRFeHByLCBDYXN0YWJsZUV4cHIsIEluc3RhbmNlb2ZFeHByLCBDYXN0RXhwcjsKLW5vbiB0ZXJtaW5hbCBFeHByIFVuaW9uRXhwciwgTXVsdGlwbGljYXRpdmVFeHByLCBJbnRlcnNlY3RFeGNlcHRFeHByLCBFeHByU2luZ2xlOwotbm9uIHRlcm1pbmFsIEV4cHIgQWRkaXRpdmVFeHByOwotbm9uIHRlcm1pbmFsIEludGVnZXIgR2VuZXJhbENvbXAsIFZhbHVlQ29tcDsKLW5vbiB0ZXJtaW5hbCBFeHByIEFuZEV4cHIsIE9yRXhwciwgUmFuZ2VFeHByLCBDb21wYXJpc29uRXhwcjsKLW5vbiB0ZXJtaW5hbCBOYW1lVGVzdCBOYW1lVGVzdDsKLW5vbiB0ZXJtaW5hbCBLaW5kVGVzdCBLaW5kVGVzdDsKLW5vbiB0ZXJtaW5hbCBMaXRlcmFsIExpdGVyYWw7Ci1ub24gdGVybWluYWwgVmFyUmVmIFZhclJlZjsKLW5vbiB0ZXJtaW5hbCBDbnR4SXRlbUV4cHIgQ29udGV4dEl0ZW1FeHByOwotbm9uIHRlcm1pbmFsIEZ1bmN0aW9uQ2FsbCBGdW5jdGlvbkNhbGw7Ci1ub24gdGVybWluYWwgTnVtZXJpY0xpdGVyYWwgTnVtZXJpY0xpdGVyYWw7Ci1ub24gdGVybWluYWwgRGVjaW1hbExpdGVyYWwgRGVjaW1hbExpdGVyYWw7Ci1ub24gdGVybWluYWwgSW50ZWdlckxpdGVyYWwgSW50ZWdlckxpdGVyYWw7Ci1ub24gdGVybWluYWwgRG91YmxlTGl0ZXJhbCBEb3VibGVMaXRlcmFsOwotbm9uIHRlcm1pbmFsIERvY3VtZW50VGVzdCBEb2N1bWVudFRlc3Q7Ci1ub24gdGVybWluYWwgVGV4dFRlc3QgVGV4dFRlc3Q7Ci1ub24gdGVybWluYWwgQ29tbWVudFRlc3QgQ29tbWVudFRlc3Q7Ci1ub24gdGVybWluYWwgUElUZXN0IFBJVGVzdDsKLW5vbiB0ZXJtaW5hbCBBdHRyaWJ1dGVUZXN0IEF0dHJpYnV0ZVRlc3Q7Ci1ub24gdGVybWluYWwgQW55S2luZFRlc3QgQW55S2luZFRlc3Q7Ci1ub24gdGVybWluYWwgRWxlbWVudFRlc3QgRWxlbWVudFRlc3Q7Ci1ub24gdGVybWluYWwgU2NoZW1hQXR0clRlc3QgU2NoZW1hQXR0cmlidXRlVGVzdDsKLW5vbiB0ZXJtaW5hbCBTY2hlbWFFbGVtVGVzdCBTY2hlbWFFbGVtZW50VGVzdDsKLW5vbiB0ZXJtaW5hbCBYUGF0aCBYUGF0aDsKLW5vbiB0ZXJtaW5hbCBGb3JFeHByIEZvckV4cHI7Ci1ub24gdGVybWluYWwgUXVhbnRpZmllZEV4cHIgUXVhbnRpZmllZEV4cHI7Ci1ub24gdGVybWluYWwgSWZFeHByIElmRXhwcjsKLW5vbiB0ZXJtaW5hbCBYUGF0aEV4cHIgUGF0aEV4cHIsIFZhbHVlRXhwcjsKLW5vbiB0ZXJtaW5hbCBBeGlzU3RlcCBBeGlzU3RlcDsKLW5vbiB0ZXJtaW5hbCBGaWx0ZXJFeHByIEZpbHRlckV4cHI7Ci1ub24gdGVybWluYWwgQ29sbGVjdGlvbiBQcmVkaWNhdGU7Ci0KLXByZWNlZGVuY2UgbGVmdCBQTFVTLCBNSU5VUzsKLXByZWNlZGVuY2UgbGVmdCBTVEFSOwotcHJlY2VkZW5jZSBsZWZ0IENPTE9OOwotcHJlY2VkZW5jZSBsZWZ0IENPTE9OQ09MT047Ci1wcmVjZWRlbmNlIGxlZnQgQ0hJTEQsIERFU0NFTkRBTlQsIEFUVFJJQlVURSwgU0VMRiwgREVTQ0VOREFOVF9PUl9TRUxGOwotcHJlY2VkZW5jZSBsZWZ0IEZPTExPV0lOR19TSUJMSU5HLCBGT0xMT1dJTkcsIE5BTUVTUEFDRSwgUEFSRU5UOwotcHJlY2VkZW5jZSBsZWZ0IEFOQ0VTVE9SLCBQUkVDRURJTkdfU0lCTElORywgUFJFQ0VESU5HLCBBTkNFU1RPUl9PUl9TRUxGOwotcHJlY2VkZW5jZSBsZWZ0IFVOSU9OLCBJTlRFUlNFQ1QsIEVYQ0VQVDsKLXByZWNlZGVuY2UgbGVmdCBJTlNUQU5DRSwgT0YsIFRSRUFULCBBUywgQ0FTVEFCTEUsIENBU1QsIElTOwotcHJlY2VkZW5jZSBsZWZ0IEZPUiwgSU4sIFJFVFVSTiwgU0FUSVNGSUVTLCBUTzsKLXByZWNlZGVuY2UgbGVmdCBTT01FLCBFVkVSWTsKLXByZWNlZGVuY2UgbGVmdCBJRiwgVEhFTiwgRUxTRTsKLXByZWNlZGVuY2UgbGVmdCBBTkQsIE9SOwotcHJlY2VkZW5jZSBsZWZ0IERJViwgSURJViwgTU9EOwotcHJlY2VkZW5jZSBsZWZ0IEVRLCBORSwgTFQsIExFLCBHVCwgR0U7Ci0KLQotCi1YUGF0aCAgICAgICAgICAgICA6Oj0gRXhwcjpleHBzIHs6IFJFU1VMVCA9IG5ldyBYUGF0aChleHBzKTsgOn0gOwotCi1FeHByICAgICAgICAgICAgICA6Oj0gRXhwclNpbmdsZTpleCAKLQkJCXs6IAotCQkJCUNvbGxlY3Rpb24gZXhwcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlleHBzLmFkZChleCk7Ci0JCQkJUkVTVUxUID0gZXhwczsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgIHwgRXhwcjpleHBycyBDT01NQSBFeHByU2luZ2xlOmV4IAotCQkgICAgCXs6IAotCQkJCWV4cHJzLmFkZChleCk7Ci0JCQkJUkVTVUxUID0gZXhwcnM7Ci0JCQk6fSAKLQkJICAgIDsKLQotRXhwclNpbmdsZSAgICAgICAgOjo9IEZvckV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICB8IFF1YW50aWZpZWRFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgfCBJZkV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICB8IE9yRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICA7Ci0KLUZvckV4cHIgICAgICAgICAgIDo6PSBTaW1wbGVGb3JDbGF1c2U6cGFpcnMgUkVUVVJOIEV4cHJTaW5nbGU6ZSAKLQkJCXs6Ci0JCQkJRm9yRXhwciBmZXhwID0gbmV3IEZvckV4cHIocGFpcnMsZSk7Ci0JCQkJUkVTVUxUID0gZmV4cDsKLQkJCTp9CQotCQkgICAgOwotCi1TaW1wbGVGb3JDbGF1c2UgICA6Oj0gRk9SIERPTExBUiBWYXJOYW1lOnYgSU4gRXhwclNpbmdsZTplCi0JCQl7OgotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCTp9Ci0JCQkKLSAgICAgICAgICAgICAgICAgICAgfCBTaW1wbGVGb3JDbGF1c2U6cHMgQ09NTUEgRE9MTEFSIFZhck5hbWU6diBJTiBFeHByU2luZ2xlOmUKLQkJICAgIAl7OgotCQkJCVZhckV4cHJQYWlyIHAgPSBuZXcgVmFyRXhwclBhaXIodixlKTsKLQkJCQlwcy5hZGQocCk7Ci0JCQkJUkVTVUxUID0gcHM7Ci0JCQk6fQkKLQkJICAgIDsKLQotUXVhbnRpZmllZEV4cHIgICAgICAgOjo9IFNPTUUgRE9MTEFSIFF1YW50aWZpZWRFeHByTWlkZGxlOnBhaXJzIFNBVElTRklFUyBFeHByU2luZ2xlOmUKLQkJCXs6Ci0JCQkJUXVhbnRpZmllZEV4cHIgcWUgPSBuZXcgUXVhbnRpZmllZEV4cHIoUXVhbnRpZmllZEV4cHIuU09NRSwKLQkJCQkJCQkJICAgICAgIHBhaXJzLCBlKTsKLQkJCQlSRVNVTFQgPSBxZTsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgRVZFUlkgRE9MTEFSIFF1YW50aWZpZWRFeHByTWlkZGxlOnBhaXJzIFNBVElTRklFUyBFeHByU2luZ2xlOmUKLQkJCXs6Ci0JCQkJUXVhbnRpZmllZEV4cHIgcWUgPSBuZXcgUXVhbnRpZmllZEV4cHIoUXVhbnRpZmllZEV4cHIuQUxMLAotCQkJCQkJCQkgICAgICAgcGFpcnMsIGUpOwotCQkJCVJFU1VMVCA9IHFlOwotCQkJOn0KLQkJICAgICAgIDsKLQotUXVhbnRpZmllZEV4cHJNaWRkbGUgOjo9IFZhck5hbWU6diBJTiBFeHByU2luZ2xlOmUKLQkJCXs6Ci0JCQkJQ29sbGVjdGlvbiBwYWlycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlWYXJFeHByUGFpciBwID0gbmV3IFZhckV4cHJQYWlyKHYsZSk7Ci0JCQkJcGFpcnMuYWRkKHApOwotCQkJCVJFU1VMVCA9IHBhaXJzOwotCQkJOn0KLSAgICAgICAgICAgICAgICAgICAgICAgfCBRdWFudGlmaWVkRXhwck1pZGRsZTpwcyBDT01NQSBET0xMQVIgVmFyTmFtZTp2IElOIEV4cHJTaW5nbGU6ZQotCQkgICAgICAgCXs6Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwczsKLQkJCTp9Ci0JCSAgICAgICA7Ci0KLUlmRXhwciAgICAgICAgICAgIDo6PSBJRiBMUEFSIEV4cHI6ZXhwcyBSUEFSIFRIRU4gRXhwclNpbmdsZTp0IEVMU0UgRXhwclNpbmdsZTplCi0JCQl7OiBSRVNVTFQgPSBuZXcgSWZFeHByKGV4cHMsIHQsIGUpOyA6fQotCQkgICAgOwotCi1PckV4cHIgICAgICAgICAgICA6Oj0gQW5kRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9IAotICAgICAgICAgICAgICAgICAgICB8IE9yRXhwcjpsIE9SIEFuZEV4cHI6ciB7OiBSRVNVTFQgPSBuZXcgT3JFeHByKGwsIHIpOyA6fQotCQkgICAgOwotCi1BbmRFeHByICAgICAgICAgICA6Oj0gQ29tcGFyaXNvbkV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fSAKLSAgICAgICAgICAgICAgICAgICAgfCBBbmRFeHByOmwgQU5EIENvbXBhcmlzb25FeHByOnIKLQkJICAgIAl7OiBSRVNVTFQgPSBuZXcgQW5kRXhwcihsLCByKTsgOn0KLQkJICAgIDsKLQotQ29tcGFyaXNvbkV4cHIgICAgOjo9IFJhbmdlRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgIHwgUmFuZ2VFeHByOmwgVmFsdWVDb21wOnQgUmFuZ2VFeHByOnIKLQkJCXs6IFJFU1VMVCA9IG5ldyBDbXBFeHByKGwsIHIsIHQuaW50VmFsdWUoKSk7IDp9Ci0gICAgICAgICAgICAgICAgICAgIHwgUmFuZ2VFeHByOmwgR2VuZXJhbENvbXA6dCBSYW5nZUV4cHI6cgotCQkJezogUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgfCBSYW5nZUV4cHI6bCBOb2RlQ29tcDp0IFJhbmdlRXhwcjpyCi0JCQl7OiBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyA6fQotCQkgICAgOwotCi1SYW5nZUV4cHIgICAgICAgICA6Oj0gQWRkaXRpdmVFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgIHwgQWRkaXRpdmVFeHByOmwgVE8gQWRkaXRpdmVFeHByOnIKLQkJICAgIAl7OiBSRVNVTFQgPSBuZXcgUmFuZ2VFeHByKGwsIHIpOyA6fQkKLQkJICAgIDsKLQotQWRkaXRpdmVFeHByICAgICAgICA6Oj0gTXVsdGlwbGljYXRpdmVFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aXZlRXhwcjpsIFBMVVMgTXVsdGlwbGljYXRpdmVFeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBBZGRFeHByKGwsIHIpOyA6fQotCQkgICAgICB8IEFkZGl0aXZlRXhwcjpsIE1JTlVTIE11bHRpcGxpY2F0aXZlRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgU3ViRXhwcihsLCByKTsgOn0KLQkJICAgICAgOwotCi1NdWx0aXBsaWNhdGl2ZUV4cHIgIDo6PSBVbmlvbkV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fSAKLSAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwcjpsIFNUQVIgVW5pb25FeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBNdWxFeHByKGwsIHIpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgTXVsdGlwbGljYXRpdmVFeHByOmwgRElWIFVuaW9uRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgRGl2RXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwcjpsIElESVYgVW5pb25FeHByOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJRGl2RXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwcjpsIE1PRCBVbmlvbkV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IE1vZEV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotVW5pb25FeHByICAgICAgICAgICA6Oj0gSW50ZXJzZWN0RXhjZXB0RXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBVbmlvbkV4cHI6bCBVTklPTiBJbnRlcnNlY3RFeGNlcHRFeHByOnIKLQkJICAgICAgICB7OiBSRVNVTFQgPSBuZXcgVW5pb25FeHByKGwsIHIpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgVW5pb25FeHByOmwgUElQRSBJbnRlcnNlY3RFeGNlcHRFeHByOnIKLQkJICAgICAgICB7OiBSRVNVTFQgPSBuZXcgUGlwZUV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotSW50ZXJzZWN0RXhjZXB0RXhwciA6Oj0gSW5zdGFuY2VvZkV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJzZWN0RXhjZXB0RXhwcjpsIElOVEVSU0VDVCBJbnN0YW5jZW9mRXhwcjpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZXJzZWN0RXhwcihsLCByKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEludGVyc2VjdEV4Y2VwdEV4cHI6bCBFWENFUFQgSW5zdGFuY2VvZkV4cHI6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEV4Y2VwdEV4cHIobCwgcik7IDp9Ci0JCSAgICAgIDsKLQotSW5zdGFuY2VvZkV4cHIgICAgICA6Oj0gVHJlYXRFeHByOm4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFRyZWF0RXhwcjpsIElOU1RBTkNFIE9GIFNlcXVlbmNlVHlwZTpyCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW5zdE9mRXhwcihsLCByKTsgOn0KLQkJICAgICAgOwotCi1UcmVhdEV4cHIgICAgICAgICAgIDo6PSBDYXN0YWJsZUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQ2FzdGFibGVFeHByOmwgVFJFQVQgQVMgU2VxdWVuY2VUeXBlOnIKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBUcmVhdEFzRXhwcihsLCByKTsgOn0KLQkJICAgICAgOwotCi1DYXN0YWJsZUV4cHIgICAgICAgIDo6PSBDYXN0RXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBDYXN0RXhwcjpsIENBU1RBQkxFIEFTIFNpbmdsZVR5cGU6cgotCQkgICAgICAJezogUkVTVUxUID0gbmV3IENhc3RhYmxlRXhwcihsLCByKTsgOn0KLQkJICAgICAgOwotCi1DYXN0RXhwciAgICAgICAgICAgIDo6PSBVbmFyeUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgVW5hcnlFeHByOmwgQ0FTVCBBUyBTaW5nbGVUeXBlOnIgCi0JCSAgICAgICAgezogUkVTVUxUID0gbmV3IENhc3RFeHByKGwsIHIpOyA6fQotCQkgICAgICA7Ci0gICAKLVVuYXJ5RXhwciAgICAgICAgICAgOjo9IFZhbHVlRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBNSU5VUyBVbmFyeUV4cHI6YSB7OiBSRVNVTFQgPSBuZXcgTWludXNFeHByKGEpOyA6fQotCQkgICAgICB8IFBMVVMgVW5hcnlFeHByOmEgezogUkVTVUxUID0gbmV3IFBsdXNFeHByKGEpOyA6fQotCQkgICAgICA7Ci0KLVZhbHVlRXhwciAgICAgICAgICAgOjo9IFBhdGhFeHByOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLUdlbmVyYWxDb21wICAgICAgICAgOjo9IEVRVUFMUwotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5FUVVBTFMpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgTk9URVFVQUxTCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLk5PVEVRVUFMUyk7IDp9Ci0JCSAgICAgIHwgTEVTU1RIQU4KLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU1RIQU4pOyA6fQotCQkgICAgICB8IExFU1NFUVVBTAotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MRVNTRVFVQUwpOyA6fSAKLQkJICAgICAgfCBHUkVBVEVSCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdSRUFURVIpOyA6fQotCQkgICAgICB8IEdSRUFURVJFUVVBTAotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSRVFVQUwpOyA6fSAKLQkJICAgICAgOwotCi1WYWx1ZUNvbXAgICAgICAgICAgIDo6PSBFUQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkVRKTsgOn0gCi0gICAgICAgICAgICAgICAgICAgICAgfCBORSAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTkUpOyA6fQotCQkgICAgICB8IExUICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5MVCk7IDp9Ci0JCSAgICAgIHwgTEUgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFKTsgOn0KLQkJICAgICAgfCBHVCAgCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1QpOyA6fQotCQkgICAgICB8IEdFIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkdFKTsgOn0KLQkJICAgICAgOwotCi1Ob2RlQ29tcCAgICAgICAgICAgIDo6PSBJUyAJIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLklTKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IExFU1NfTEVTUyAJCi0JCSAgICAgIAl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NfTEVTUyk7IDp9Ci0JCSAgICAgIHwgR1JFQVRFUl9HUkVBVEVSCQotCQkgICAgICAJezogUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSX0dSRUFURVIpOyA6fQotCQkgICAgICA7Ci0KLVBhdGhFeHByICAgICAgICAgICAgOjo9IEZPUldBUkRfU0xBU0ggezogUkVTVUxUID0gbmV3IFhQYXRoRXhwcigxLG51bGwpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRk9SV0FSRF9TTEFTSCBSZWxhdGl2ZVBhdGhFeHByOnAKLQkJICAgICAgCXs6Ci0JCQkJcC5zZXRfc2xhc2hlcygxKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEZPUldBUkRfU0xBU0hTTEFTSCBSZWxhdGl2ZVBhdGhFeHByOnAKLQkJICAgICAgCXs6Ci0JCQkJcC5zZXRfc2xhc2hlcygyKTsKLQkJCQlSRVNVTFQgPSBwOwotCQkJOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aXZlUGF0aEV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0KLVJlbGF0aXZlUGF0aEV4cHIgICAgOjo9IFN0ZXBFeHByOnMgezogUkVTVUxUID0gbmV3IFhQYXRoRXhwcigwLChTdGVwRXhwcilzKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aXZlUGF0aEV4cHI6cCBGT1JXQVJEX1NMQVNIIFN0ZXBFeHByOnMKLQkJICAgICAgCXs6Ci0JCQkJcC5hZGRfdGFpbCgxLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQk6fQotCQkgICAgICB8IFJlbGF0aXZlUGF0aEV4cHI6cCBGT1JXQVJEX1NMQVNIU0xBU0ggU3RlcEV4cHI6cwotCQkgICAgICAJezoKLQkJCQlwLmFkZF90YWlsKDIscyk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCTp9Ci0JCSAgICAgIDsKLQotU3RlcEV4cHIgICAgICAgICAgICA6Oj0gQXhpc1N0ZXA6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRmlsdGVyRXhwcjpuIHs6IFJFU1VMVCA9IG47IDp9Ci0JCSAgICAgIDsKLQotQXhpc1N0ZXAgICAgICAgICAgICA6Oj0gRm9yd2FyZFN0ZXA6cyBQcmVkaWNhdGVMaXN0OnAgCi0JCQl7OiBSRVNVTFQgPSBuZXcgQXhpc1N0ZXAocywgcCk7IDp9CQotICAgICAgICAgICAgICAgICAgICAgIHwgUmV2ZXJzZVN0ZXA6cyBQcmVkaWNhdGVMaXN0OnAKLQkJCXs6IFJFU1VMVCA9IG5ldyBBeGlzU3RlcChzLCBwKTsgOn0JCi0JCSAgICAgIDsKLQotRm9yd2FyZFN0ZXAgICAgICAgICA6Oj0gRm9yd2FyZEF4aXM6YSBOb2RlVGVzdDpuCi0JCQl7OiBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoYS5pbnRWYWx1ZSgpLG4pOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQWJicmV2Rm9yd2FyZFN0ZXA6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0KLUZvcndhcmRBeGlzICAgICAgICAgOjo9IENISUxEIENPTE9OQ09MT04gCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5DSElMRCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBERVNDRU5EQU5UIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkRFU0NFTkRBTlQpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQVRUUklCVVRFIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkFUVFJJQlVURSk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBTRUxGIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLlNFTEYpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgREVTQ0VOREFOVF9PUl9TRUxGIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkRFU0NFTkRBTlRfT1JfU0VMRik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBGT0xMT1dJTkdfU0lCTElORyBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5GT0xMT1dJTkdfU0lCTElORyk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBGT0xMT1dJTkcgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuRk9MTE9XSU5HKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE5BTUVTUEFDRSBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5OQU1FU1BBQ0UpOyA6fQotCQkgICAgICA7Ci0KLUFiYnJldkZvcndhcmRTdGVwICAgOjo9IEFUX1NZTSBOb2RlVGVzdDpuCi0JCQl7OiBSRVNVTFQgPSBuZXcgRm9yd2FyZFN0ZXAoRm9yd2FyZFN0ZXAuQVRfU1lNLCBuKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE5vZGVUZXN0Om4KLQkJCXs6IFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5OT05FLCBuKTsgOn0KLQkJICAgICAgOwotCi1SZXZlcnNlU3RlcCAgICAgICAgIDo6PSBSZXZlcnNlQXhpczphIE5vZGVUZXN0Om4KLQkJCXs6ICBSRVNVTFQgPSBuZXcgUmV2ZXJzZVN0ZXAoYS5pbnRWYWx1ZSgpLCBuKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFiYnJldlJldmVyc2VTdGVwOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1SZXZlcnNlQXhpcyAgICAgICAgIDo6PSBQQVJFTlQgQ09MT05DT0xPTgotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUEFSRU5UKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFOQ0VTVE9SIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLkFOQ0VTVE9SKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFBSRUNFRElOR19TSUJMSU5HIENPTE9OQ09MT04KLQkJCXs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBSRUNFRElOR19TSUJMSU5HKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFBSRUNFRElORyBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QUkVDRURJTkcpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgQU5DRVNUT1JfT1JfU0VMRiBDT0xPTkNPTE9OCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5BTkNFU1RPUl9PUl9TRUxGKTsgOn0KLQkJICAgICAgOwotCi1BYmJyZXZSZXZlcnNlU3RlcCAgIDo6PSBET1RET1QgCi0JCQl7OiBSRVNVTFQgPSBuZXcgUmV2ZXJzZVN0ZXAoUmV2ZXJzZVN0ZXAuRE9URE9ULG51bGwpOyA6fQotCQkgICAgICA7Ci0KLU5vZGVUZXN0ICAgICAgICAgICAgOjo9IEtpbmRUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IE5hbWVUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotICAgCi1OYW1lVGVzdCAgICAgICAgICAgIDo6PSBRTmFtZTpuICAgIHs6IFJFU1VMVCA9IG5ldyBOYW1lVGVzdChuKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFdpbGRjYXJkOm4gezogUkVTVUxUID0gbmV3IE5hbWVUZXN0KG4pOyA6fQotCQkgICAgICA7Ci0KLS8vIFhYWDogaGF2ZSBzZXAgY2xhc3MgZm9yIHdpbGQgY2FyZC4uLi4gb3Igd2hhdGV2ZXIuLi4KLS8vIFhYWDogaXMgKiA9PSAqOiogPz8/Ci1XaWxkY2FyZCAgICAgICAgICAgIDo6PSBTVEFSIAkJICAgIHs6IFJFU1VMVCA9IG5ldyBRTmFtZSgiKiIsIioiKTsgOn0KLS8vIFhYWDogc29tZTEgZGlzYW1iaWd1YXRlIHRoZSBncmFtbWFyCi0vLyBpLmUuIGdpdmUgaGlnaGVyIHByZWNlZGVuY2UgdG8gYSBRTmFtZSByYXRoZXIgdGhhbiB0byBhIHdpbGRjYXJkCi0gICAgICAgICAgICAgICAgICAgICAgfCBOQ05hbWU6biBDT0xPTiBTVEFSIHs6IFJFU1VMVCA9IG5ldyBRTmFtZShuLCAiKiIpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgU1RBUiBDT0xPTiBOQ05hbWU6biB7OiBSRVNVTFQgPSBuZXcgUU5hbWUoIioiLCBuKTsgOn0KLQkJICAgICAgOwotCi1GaWx0ZXJFeHByICAgICAgICAgIDo6PSBQcmltYXJ5RXhwcjpwZSBQcmVkaWNhdGVMaXN0OmUKLQkJCXs6IFJFU1VMVCA9IG5ldyBGaWx0ZXJFeHByKHBlLCBlKTsgOn0gICAKLQkJICAgICAgOwotCi0vLyBYWFg6IENvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMhCi1QcmVkaWNhdGVMaXN0ICAgICAgIDo6PSBQcmVkaWNhdGVMaXN0OmMgUHJlZGljYXRlOnAKLQkJCXs6Ci0JCQkgICBjLmFkZChwKTsKLQkJCSAgIFJFU1VMVCA9IGM7Ci0JCQk6fQotICAgICAgICAgICAgICAgICAgICAgIHwgLyogZW1wdHkgKi8gezogUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyA6fQotCQkgICAgICA7Ci0KLVByZWRpY2F0ZSAgICAgICAgICAgOjo9IExCUkFDS0VUIEV4cHI6ZSBSQlJBQ0tFVCB7OiBSRVNVTFQgPSBlOyA6fTsKLQotUHJpbWFyeUV4cHIgICAgICAgICA6Oj0gTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9IAotICAgICAgICAgICAgICAgICAgICAgIHwgVmFyUmVmOm4gezogUkVTVUxUID0gbjsgOn0gCi0JCSAgICAgIHwgUGFyZW50aGVzaXplZEV4cHI6ZQotCQkgICAgICAJezogUkVTVUxUID0gbmV3IFBhckV4cHIoZSk7IDp9ICAKLQkJICAgICAgfCBDb250ZXh0SXRlbUV4cHI6biB7OiBSRVNVTFQgPSBuOyA6fSAKLQkJICAgICAgfCBGdW5jdGlvbkNhbGw6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0KLUxpdGVyYWwgICAgICAgICAgICAgOjo9IE51bWVyaWNMaXRlcmFsOm4gezogUkVTVUxUID0gbjsgOn0gCi0gICAgICAgICAgICAgICAgICAgICAgfCBTdHJpbmdMaXRlcmFsOm4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1OdW1lcmljTGl0ZXJhbCAgICAgIDo6PSBJbnRlZ2VyTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBEZWNpbWFsTGl0ZXJhbDpuIHs6IFJFU1VMVCA9IG47IDp9IAotCQkgICAgICB8IERvdWJsZUxpdGVyYWw6biB7OiBSRVNVTFQgPSBuOyA6fQotCQkgICAgICA7Ci0gICAKLVZhclJlZiAgICAgICAgICAgICAgOjo9IERPTExBUiBWYXJOYW1lOnYgezogUkVTVUxUID0gbmV3IFZhclJlZih2KTsgOn07Ci0KLVBhcmVudGhlc2l6ZWRFeHByICAgOjo9IExQQVIgUlBBUgkgezogUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgTFBBUiBFeHByOmUgUlBBUiB7OiBSRVNVTFQgPSBlOyA6fQotCQkgICAgICA7Ci0KLUNvbnRleHRJdGVtRXhwciAgICAgOjo9IERPVCB7OiBSRVNVTFQgPSBuZXcgQ250eEl0ZW1FeHByKCk7IDp9OwotICAgCi1GdW5jdGlvbkNhbGwgICAgICAgIDo6PSBVbnJlc2VydmVkUU5hbWU6biBMUEFSIFJQQVIKLQkJCXs6Ci0JCQkgICBSRVNVTFQgPSBuZXcgRnVuY3Rpb25DYWxsKG4sbmV3IEFycmF5TGlzdCgpKTsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBVbnJlc2VydmVkUU5hbWU6biBMUEFSIEZ1bmN0aW9uQ2FsbE1pZGRsZTphIFJQQVIKLQkJCXs6Ci0JCQkgICBSRVNVTFQgPSBuZXcgRnVuY3Rpb25DYWxsKG4sYSk7Ci0JCQk6fQotCQkgICAgICA7Ci0KLUZ1bmN0aW9uQ2FsbE1pZGRsZSAgOjo9IEV4cHJTaW5nbGU6ZQotCQkJezoKLQkJCSAgIENvbGxlY3Rpb24gYyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCTp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBGdW5jdGlvbkNhbGxNaWRkbGU6YyBDT01NQSBFeHByU2luZ2xlOmUKLQkJICAgICAgICB7OgotCQkJICAgYy5hZGQoZSk7Ci0JCQkgICBSRVNVTFQgPSBjOwotCQkJOn0KLQkJICAgICAgOwotCi0KLVNpbmdsZVR5cGUgICAgICAgICAgOjo9IEF0b21pY1R5cGU6dCB7OiBSRVNVTFQgPSBuZXcgU2luZ2xlVHlwZSh0KTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEF0b21pY1R5cGU6dCBRVUVTVElPTk1BUksKLQkJICAgICAgCXs6IFJFU1VMVCA9IG5ldyBTaW5nbGVUeXBlKHQsdHJ1ZSk7IDp9Ci0JCSAgICAgIDsKLQotU2VxdWVuY2VUeXBlICAgICAgICA6Oj0gSXRlbVR5cGU6dAotCQkJezogUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShTZXF1ZW5jZVR5cGUuTk9ORSwgdCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBJdGVtVHlwZTp0IE9jY3VycmVuY2VJbmRpY2F0b3I6aQotCQkJezogUkVTVUxUID0gbmV3IFNlcXVlbmNlVHlwZShpLmludFZhbHVlKCksIHQpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgRU1QVFlfU0VRVUVOQ0UgTFBBUiBSUEFSCi0JCQl7OiBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKFNlcXVlbmNlVHlwZS5FTVBUWSwgbnVsbCk7IDp9Ci0JCSAgICAgIDsKLQotT2NjdXJyZW5jZUluZGljYXRvciA6Oj0gUVVFU1RJT05NQVJLIAotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlFVRVNUSU9OKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFNUQVIgCi0JCQl7OiBSRVNVTFQgPSBuZXcgSW50ZWdlcihTZXF1ZW5jZVR5cGUuU1RBUik7IDp9Ci0JCSAgICAgIHwgUExVUwotCQkJezogUkVTVUxUID0gbmV3IEludGVnZXIoU2VxdWVuY2VUeXBlLlBMVVMpOyA6fQotCQkgICAgICA7Ci0KLUl0ZW1UeXBlICAgICAgICAgICAgOjo9IEF0b21pY1R5cGU6cQotCQkJezogUkVTVUxUID0gbmV3IEl0ZW1UeXBlKEl0ZW1UeXBlLlFOQU1FLHEpOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgS2luZFRlc3Q6awotCQkgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5LSU5EVEVTVCxrKTsgOn0KLQkJICAgICAgfCBJVEVNIExQQVIgUlBBUgotCQkgICAgICAgIHs6IFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5JVEVNLG51bGwpOyA6fQotCQkgICAgICA7Ci0KLUF0b21pY1R5cGUgICAgICAgICAgOjo9IFFOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLUtpbmRUZXN0ICAgICAgICAgICAgOjo9IERvY3VtZW50VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBFbGVtZW50VGVzdDpuIHs6IFJFU1VMVCA9IG47IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgfCBBdHRyaWJ1dGVUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFNjaGVtYUVsZW1lbnRUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFNjaGVtYUF0dHJpYnV0ZVRlc3Q6biB7OiBSRVNVTFQgPSBuOyA6fQotICAgICAgICAgICAgICAgICAgICAgIHwgUElUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IENvbW1lbnRUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IFRleHRUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IEFueUtpbmRUZXN0Om4gezogUkVTVUxUID0gbjsgOn0KLQkJICAgICAgOwotCi1BbnlLaW5kVGVzdCAgICAgICAgIDo6PSBOT0RFIExQQVIgUlBBUiB7OiBSRVNVTFQgPSBuZXcgQW55S2luZFRlc3QoKTsgOn07Ci0KLURvY3VtZW50VGVzdCAgICAgICAgOjo9IERPQ1VNRU5UX05PREUgTFBBUiBSUEFSIAotCQkJIHs6IFJFU1VMVCA9IG5ldyBEb2N1bWVudFRlc3QoKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IERPQ1VNRU5UX05PREUgTFBBUiBFbGVtZW50VGVzdDplIFJQQVIKLQkJICAgICAgICAgezogUkVTVUxUID0gbmV3IERvY3VtZW50VGVzdChEb2N1bWVudFRlc3QuRUxFTUVOVCxlKTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICB8IERPQ1VNRU5UX05PREUgTFBBUiBTY2hlbWFFbGVtZW50VGVzdDplIFJQQVIKLQkJICAgICAgICAgezogUkVTVUxUID0gbmV3IERvY3VtZW50VGVzdChEb2N1bWVudFRlc3QuU0NIRU1BX0VMRU1FTlQsZSk7IDp9Ci0JCSAgICAgIDsKLQotVGV4dFRlc3QgICAgICAgICAgICA6Oj0gVEVYVCBMUEFSIFJQQVIgezogUkVTVUxUID0gbmV3IFRleHRUZXN0KCk7IDp9OwotCi1Db21tZW50VGVzdCAgICAgICAgIDo6PSBDT01NRU5UIExQQVIgUlBBUiB7OiBSRVNVTFQgPSBuZXcgQ29tbWVudFRlc3QoKTsgOn07Ci0KLVBJVGVzdCAgICAgICAgICAgICAgIDo6PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIExQQVIgUlBBUgotCQkJICB7OiBSRVNVTFQgPSBuZXcgUElUZXN0KCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIE5DTmFtZTpuICBSUEFSCi0JCQkgIHs6IFJFU1VMVCA9IG5ldyBQSVRlc3Qobik7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIFN0cmluZ0xpdGVyYWw6cyBSUEFSCi0JCQkgIHs6IFJFU1VMVCA9IG5ldyBQSVRlc3Qocy5zdHJpbmcoKSk7IDp9Ci0JCSAgICAgICA7Ci0KLUF0dHJpYnV0ZVRlc3QgICAgICAgIDo6PSBBVFRSSUJVVEUgTFBBUiBSUEFSCi0JCQkgIHs6IFJFU1VMVCA9IG5ldyBBdHRyaWJ1dGVUZXN0KCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgQVRUUklCVVRFIExQQVIgQXR0cmliTmFtZU9yV2lsZGNhcmQ6YSBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGEgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdChhLHdpbGQpOwotCQkJICA6fSAgIAotICAgICAgICAgICAgICAgICAgICAgICB8IEFUVFJJQlVURSBMUEFSIEF0dHJpYk5hbWVPcldpbGRjYXJkOmEgQ09NTUEgVHlwZU5hbWU6dCBSUEFSCi0JCSAgICAgICAgICB7OgotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGEgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdChhLHdpbGQsdCk7Ci0JCQkgIDp9ICAgCi0JCSAgICAgICA7Ci0KLUF0dHJpYk5hbWVPcldpbGRjYXJkIDo6PSBBdHRyaWJ1dGVOYW1lOmEgezogUkVTVUxUID0gYTsgOn0KLSAgICAgICAgICAgICAgICAgICAgICAgfCBTVEFSIHs6IFJFU1VMVCA9IG51bGw7IC8qIFhYWCAqLyA6fQotCQkgICAgICAgOwotCi1TY2hlbWFBdHRyaWJ1dGVUZXN0ICA6Oj0gU0NIRU1BX0FUVFJJQlVURSBMUEFSIEF0dHJpYnV0ZURlY2xhcmF0aW9uOmEgUlBBUgotCQkgICAgICAgICAgezogUkVTVUxUID0gbmV3IFNjaGVtYUF0dHJUZXN0KGEpOyA6fQotCQkgICAgICAgOwotCi1BdHRyaWJ1dGVEZWNsYXJhdGlvbiA6Oj0gQXR0cmlidXRlTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1FbGVtZW50VGVzdCAgICAgICAgICA6Oj0gRUxFTUVOVCBMUEFSIFJQQVIgezogUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgRUxFTUVOVCBMUEFSIEVsZW1lbnROYW1lT3JXaWxkY2FyZDplIFJQQVIKLQkJICAgICAgICAgIHs6Ci0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQpOwotCQkJICA6fSAgIAotICAgICAgICAgICAgICAgICAgICAgICB8IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQ6ZSBDT01NQSBUeXBlTmFtZTp0IFJQQVIKLQkJICAgICAgICAgIHs6Ci0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQsdCk7Ci0JCQkgIDp9ICAgCi0gICAgICAgICAgICAgICAgICAgICAgIHwgRUxFTUVOVCBMUEFSIEVsZW1lbnROYW1lT3JXaWxkY2FyZDplIENPTU1BIFR5cGVOYW1lOnQgUVVFU1RJT05NQVJLIFJQQVIKLQkJICAgICAgICAgIHs6Ci0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoZSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdChlLHdpbGQsdCx0cnVlKTsKLQkJCSAgOn0gICAKLQkJICAgICAgIDsKLQotRWxlbWVudE5hbWVPcldpbGRjYXJkIDo6PSBFbGVtZW50TmFtZTplIHs6IFJFU1VMVCA9IGU7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgICB8IFNUQVIgezogUkVTVUxUID0gbnVsbDsgLyogWFhYICovIDp9Ci0JCQk7Ci0KLVNjaGVtYUVsZW1lbnRUZXN0ICAgICA6Oj0gU0NIRU1BX0VMRU1FTlQgTFBBUiBFbGVtZW50RGVjbGFyYXRpb246ZSBSUEFSCi0JCQkgICAgezogUkVTVUxUID0gbmV3IFNjaGVtYUVsZW1UZXN0KGUpOyA6fQotCQkJOwotCi1FbGVtZW50RGVjbGFyYXRpb24gICAgOjo9IEVsZW1lbnROYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLUF0dHJpYnV0ZU5hbWUgICAgICAgICA6Oj0gUU5hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotRWxlbWVudE5hbWUgICAgICAgICAgIDo6PSBRTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1UeXBlTmFtZSAgICAgICAgICAgICAgOjo9IFFOYW1lOm4gezogUkVTVUxUID0gbjsgOn07Ci0KLUludGVnZXJMaXRlcmFsICAgICAgICA6Oj0gSU5URUdFUjppIHs6IFJFU1VMVCA9IG5ldyBJbnRlZ2VyTGl0ZXJhbChpKTsgOn07Ci0gICAKLURlY2ltYWxMaXRlcmFsICAgICAgICA6Oj0gREVDSU1BTDpkIAotCQkJICAgIHs6IFJFU1VMVCA9IG5ldyBEZWNpbWFsTGl0ZXJhbChkKTsgOn0KLQkJCTsgICAgCi0KLURvdWJsZUxpdGVyYWwgICAgICAgICA6Oj0gRE9VQkxFOmQKLQkJCSAgICB7OiBSRVNVTFQgPSBuZXcgRG91YmxlTGl0ZXJhbChkLmRvdWJsZVZhbHVlKCkpOyA6fQotCQkJOyAgICAKLQotU3RyaW5nTGl0ZXJhbCAgICAgICAgIDo6PSBTVFJJTkc6cyB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nTGl0ZXJhbChzKTsgOn07Ci0KLVZhck5hbWUgICAgICAgICAgICAgICA6Oj0gUU5hbWU6biB7OiBSRVNVTFQgPSBuOyA6fTsKLQotUU5hbWUgICAgICAgICAgICAgICAgIDo6PSBOQ05hbWU6bCB7OiBSRVNVTFQgPSBuZXcgUU5hbWUobCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgICB8IE5DTmFtZTpwIENPTE9OIE5DTmFtZTpsIHs6IFJFU1VMVCA9IG5ldyBRTmFtZShwLGwpOyA6fQotCQkJCQkJOwotCi1QcmVmaXggICAgICAgICAgICAgICAgOjo9IE5DTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1Mb2NhbFBhcnQgICAgICAgICAgICAgOjo9IE5DTmFtZTpuIHs6IFJFU1VMVCA9IG47IDp9OwotCi1VbnJlc2VydmVkUU5hbWUgICAgICAgOjo9IFVucmVzZXJ2ZWROQ05hbWU6bCB7OiBSRVNVTFQgPSBuZXcgUU5hbWUobCk7IDp9Ci0gICAgICAgICAgICAgICAgICAgICAgICB8IE5DTmFtZTpwIENPTE9OIE5DTmFtZTpsIHs6IFJFU1VMVCA9IG5ldyBRTmFtZShwLGwpOyA6fQotCQkJCQkJOwotCi1OQ05hbWUgICAgICAgICAgICAgICAgOjo9IE5DTkFNRTpuIHs6IFJFU1VMVCA9IG47IDp9IHwKLQkJCQkJCSAgVE86bgkgICB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0byIpOyA6fSB8Ci0JCQkJCQkgIENISUxEOm4gIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImNoaWxkIik7IDp9IHwKLQkJCQkJCSAgREVTQ0VOREFOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQiKTsgOn0gfAotCQkJCQkJICBBVFRSSUJVVEU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhdHRyaWJ1dGUiKTsgOn0gfAotCQkJCQkJICBTRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2VsZiIpOyA6fSB8Ci0JCQkJCQkgIERFU0NFTkRBTlRfT1JfU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQtb2Ytc2VsZiIpOyA6fSB8Ci0JCQkJCQkgIEZPTExPV0lOR19TSUJMSU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgOn0gfAotCQkJCQkJICBGT0xMT1dJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmciKTsgOn0gfAotCQkJCQkJICBOQU1FU1BBQ0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuYW1lc3BhY2UiKTsgOn0gfAotCQkJCQkJICBQQVJFTlQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwYXJlbnQiKTsgOn0gfAotCQkJCQkJICBBTkNFU1RPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yIik7IDp9IHwKLQkJCQkJCSAgUFJFQ0VESU5HX1NJQkxJTkc6biB7OiBSRVNVTFQgID0gbmV3IFN0cmluZygicHJlY2VkaW5nLXNpYmxpbmciKTsgOn0gfAotCQkJCQkJICBQUkVDRURJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmciKTsgOn0gfAotCQkJCQkJICBBTkNFU1RPUl9PUl9TRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3Itb3Itc2VsZiIpOyA6fSB8Ci0JCQkJCQkgIFVOSU9OOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidW5pb24iKTsgOn0gfAotCQkJCQkJICBJTlRFUlNFQ1Q6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnRlcnNlY3QiKTsgOn0gfAotCQkJCQkJICBFWENFUFQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJleGNlcHQiKTsgOn0gfAotCQkJCQkJICBJTlNUQU5DRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImluc3RhbmNlIik7IDp9IHwKLQkJCQkJCSAgT0Y6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvZiIpOyA6fSB8Ci0JCQkJCQkgIEFTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgOn0gfAotCQkJCQkJICBUUkVBVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IDp9IHwKLQkJCQkJCSAgQ0FTVEFCTEU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0YWJsZSIpOyA6fSB8Ci0JCQkJCQkgIENBU1Q6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0Iik7IDp9IHwKLQkJCQkJCSAgSVM6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpcyIpOyA6fSB8Ci0JCQkJCQkgIEZPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvciIpOyA6fSB8Ci0JCQkJCQkgIElOOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaW4iKTsgOn0gfAotCQkJCQkJICBSRVRVUk46biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJyZXR1cm4iKTsgOn0gfAotCQkJCQkJICBTQVRJU0ZJRVM6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzYXRpc2ZpZXMiKTsgOn0gfAotCQkJCQkJICBTT01FOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic29tZSIpOyA6fSB8Ci0JCQkJCQkgIEVWRVJZOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZXZlcnkiKTsgOn0gfAotCQkJCQkJICBJRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImlmIik7IDp9IHwKLQkJCQkJCSAgVEhFTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInRoZW4iKTsgOn0gfAotCQkJCQkJICBFTFNFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZWxzZSIpOyA6fSB8Ci0JCQkJCQkgIEFORDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuZCIpOyA6fSB8Ci0JCQkJCQkgIE9SOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygib3IiKTsgOn0gfAotCQkJCQkJICBESVY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkaXYiKTsgOn0gfAotCQkJCQkJICBJRElWOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaWRpdiIpOyA6fSB8Ci0JCQkJCQkgIENPTU1FTlQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjb21tZW50Iik7IDp9IHwKLQkJCQkJCSAgRE9DVU1FTlRfTk9ERTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRvY3VtZW50LW5vZGUiKTsgOn0gfAotCQkJCQkJICBFTEVNRU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZWxlbWVudCIpOyA6fSB8Ci0JCQkJCQkgIEVNUFRZX1NFUVVFTkNFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZW1wdHktc2VxdWVuY2UiKTsgOn0gfAotCQkJCQkJICBJVEVNOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaXRlbSIpOyA6fSB8Ci0JCQkJCQkgIE5PREU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJub2RlIik7IDp9IHwKLQkJCQkJCSAgUFJPQ0VTU0lOR19JTlNUUlVDVElPTjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iKTsgOn0gfAotCQkJCQkJICBTQ0hFTUFfQVRUUklCVVRFOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2NoZW1hLWF0dHJpYnV0ZSIpOyA6fSB8Ci0JCQkJCQkgIFNDSEVNQV9FTEVNRU5UOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2NoZW1hLWVsZW1lbnQiKTsgOn0gfAotCQkJCQkJICBURVhUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidGV4dCIpOyA6fSB8Ci0JCQkJCQkgIFRZUEVTV0lUQ0g6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0eXBlc3dpdGNoIik7IDp9IHwKLQkJCQkJCSAgTU9EOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibW9kIik7IDp9IHwKLQkJCQkJCSAgRVE6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlcSIpOyA6fSB8Ci0JCQkJCQkgIE5FOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibmUiKTsgOn0gfAotCQkJCQkJICBMVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImx0Iik7IDp9IHwKLQkJCQkJCSAgTEU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsZSIpOyA6fSB8Ci0JCQkJCQkgIEdUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZ3QiKTsgOn0gfAotCQkJCQkJICBHRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImdlIik7IDp9Ci0JCQk7IAotCi1VbnJlc2VydmVkTkNOYW1lICAgICAgOjo9IE5DTkFNRTpuIHs6IFJFU1VMVCA9IG47IDp9IHwKLQkJCQkJCSAgVE86bgkgICB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0byIpOyA6fSB8Ci0JCQkJCQkgIENISUxEOm4gIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImNoaWxkIik7IDp9IHwKLQkJCQkJCSAgREVTQ0VOREFOVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQiKTsgOn0gfAotCQkJCQkJICBTRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic2VsZiIpOyA6fSB8Ci0JCQkJCQkgIERFU0NFTkRBTlRfT1JfU0VMRjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRlc2NlbmRhbnQtb2Ytc2VsZiIpOyA6fSB8Ci0JCQkJCQkgIEZPTExPV0lOR19TSUJMSU5HOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgOn0gfAotCQkJCQkJICBGT0xMT1dJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb2xsb3dpbmciKTsgOn0gfAotCQkJCQkJICBOQU1FU1BBQ0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuYW1lc3BhY2UiKTsgOn0gfAotCQkJCQkJICBQQVJFTlQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwYXJlbnQiKTsgOn0gfAotCQkJCQkJICBBTkNFU1RPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yIik7IDp9IHwKLQkJCQkJCSAgUFJFQ0VESU5HX1NJQkxJTkc6biB7OiBSRVNVTFQgID0gbmV3IFN0cmluZygicHJlY2VkaW5nLXNpYmxpbmciKTsgOn0gfAotCQkJCQkJICBQUkVDRURJTkc6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmciKTsgOn0gfAotCQkJCQkJICBBTkNFU1RPUl9PUl9TRUxGOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3Itb3Itc2VsZiIpOyA6fSB8Ci0JCQkJCQkgIFVOSU9OOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidW5pb24iKTsgOn0gfAotCQkJCQkJICBJTlRFUlNFQ1Q6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnRlcnNlY3QiKTsgOn0gfAotCQkJCQkJICBFWENFUFQ6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJleGNlcHQiKTsgOn0gfAotCQkJCQkJICBJTlNUQU5DRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImluc3RhbmNlIik7IDp9IHwKLQkJCQkJCSAgT0Y6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvZiIpOyA6fSB8Ci0JCQkJCQkgIEFTOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgOn0gfAotCQkJCQkJICBUUkVBVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImFzIik7IDp9IHwKLQkJCQkJCSAgQ0FTVEFCTEU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0YWJsZSIpOyA6fSB8Ci0JCQkJCQkgIENBU1Q6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjYXN0Iik7IDp9IHwKLQkJCQkJCSAgSVM6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpcyIpOyA6fSB8Ci0JCQkJCQkgIEZPUjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvciIpOyA6fSB8Ci0JCQkJCQkgIElOOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiaW4iKTsgOn0gfAotCQkJCQkJICBSRVRVUk46biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJyZXR1cm4iKTsgOn0gfAotCQkJCQkJICBTQVRJU0ZJRVM6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzYXRpc2ZpZXMiKTsgOn0gfAotCQkJCQkJICBTT01FOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygic29tZSIpOyA6fSB8Ci0JCQkJCQkgIEVWRVJZOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZXZlcnkiKTsgOn0gfAotCQkJCQkJICBUSEVOOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygidGhlbiIpOyA6fSB8Ci0JCQkJCQkgIEVMU0U6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbHNlIik7IDp9IHwKLQkJCQkJCSAgQU5EOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiYW5kIik7IDp9IHwKLQkJCQkJCSAgT1I6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvciIpOyA6fSB8Ci0JCQkJCQkgIERJVjpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImRpdiIpOyA6fSB8Ci0JCQkJCQkgIElESVY6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpZGl2Iik7IDp9IHwKLQkJCQkJCSAgTU9EOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibW9kIik7IDp9IHwKLQkJCQkJCSAgRVE6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlcSIpOyA6fSB8Ci0JCQkJCQkgIE5FOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygibmUiKTsgOn0gfAotCQkJCQkJICBMVDpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImx0Iik7IDp9IHwKLQkJCQkJCSAgTEU6biB7OiBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsZSIpOyA6fSB8Ci0JCQkJCQkgIEdUOm4gezogUkVTVUxUID0gbmV3IFN0cmluZygiZ3QiKTsgOn0gfAotCQkJCQkJICBHRTpuIHs6IFJFU1VMVCA9IG5ldyBTdHJpbmcoImdlIik7IDp9Ci0JCQkJCQkgIAotCQkJOyAKLQkJCQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmxleCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL2dyYW1tYXJzL3hwYXRoLmxleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExMWYyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotLy8gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotLy8gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gKgotLy8gKiBDb250cmlidXRvcnM6Ci0vLyAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0vLyAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwOTg3IC0gZml4ZWQgbGl0ZXJhbCBpc3N1ZXMgZm9yIGludGVnZXIgYW5kIGRlY2ltYWwKLS8vICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODMyMTQgLSBmaXggSUYgVEhFTiBFTFNFIHBhcnNpbmcgYW5kIHVwZGF0ZSBncmFtbWFycwotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NjA2MSAgIGNvcnJlY3QgaGFuZGxpbmcgb2YgcXVvdGVkIHN0cmluZyAKLS8vICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjk3NzA3IC0gTWlzc2luZyB0aGUgZW1wdHktc2VxdWVuY2UoKSB0eXBlCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YV9jdXAucnVudGltZS4qOwotCi0lJQotCi0lY2xhc3MgWFBhdGhGbGV4Ci0ldW5pY29kZQotJWN1cAotJWxpbmUKLSVjb2x1bW4KLQotV2hpdGVzcGFjZSAJPSBbIFx0XHJcbl0KLVN0cmluZ0xpdGVyYWwgCT0gKFwiICgoXCJcIikgfCBbXlwiXSkqIFwiKSB8IChcJyAoKFwnXCcpIHwgW15cJ10pKiBcJykKLURpZ2l0cwkJPSBbMC05XSsKLURvdWJsZUxpdGVyYWwJPSAoKFwuIHtEaWdpdHN9KSB8ICh7RGlnaXRzfSAoXC4gWzAtOV0qKT8pKSBbZUVdIFtcK1wtXT8gIHtEaWdpdHN9Ci1EZWNpbWFsTGl0ZXJhbCAgPSAoXC4ge0RpZ2l0c30pIHwgKHtEaWdpdHN9IFwuIFswLTldKikKLQotTGV0dGVyCQk9IFthLXpBLVpdCi1OQ05hbWVDaGFyICAgICAgPSB7TGV0dGVyfSB8IFswLTldIHwgXC4gfCBcLSB8ICJfIgotTkNOYW1lCQk9ICgge0xldHRlcn0gfCAiXyIpICgge05DTmFtZUNoYXJ9ICkqCi0KLQotJXsKLQlwdWJsaWMgaW50IGxpbmVubygpIHsgcmV0dXJuIHl5bGluZSArIDE7IH0KLQlwdWJsaWMgaW50IGNvbG5vKCkgeyByZXR1cm4geXljb2x1bW4gKyAxOyB9Ci0KLQlwcml2YXRlIFN5bWJvbCBzeW1ib2woaW50IHR5cGUpIHsKLQkJcmV0dXJuIG5ldyBTeW1ib2wodHlwZSwgbGluZW5vKCksIGNvbG5vKCkpOwotCX0KLQlwcml2YXRlIFN5bWJvbCBzeW1ib2woaW50IHR5cGUsIE9iamVjdCB2YWx1ZSkgewotCQlyZXR1cm4gbmV3IFN5bWJvbCh0eXBlLCBsaW5lbm8oKSwgY29sbm8oKSwgdmFsdWUpOwotCX0KLQotCXByaXZhdGUgaW50IGNvbW1lbnRMZXZlbCA9IDA7Ci0lfQotCi0lc3RhdGUgQ09NTUVOVAotCi0lJQotCi08WVlJTklUSUFMPiB7Ci0KLSIoOiIJCQl7IGNvbW1lbnRMZXZlbCsrOyAvLyBpbnQgb3ZlcmZsb3cgPVAKLQkJCSAgeXliZWdpbihDT01NRU5UKTsgCi0JCQl9Ci0KLSJcWyIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxCUkFDS0VUKTsgfQotIlxdIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUkJSQUNLRVQpOyB9Ci0iXCgiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MUEFSKTsgfQotIlwpIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUlBBUik7IH0KLQotIlwrIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUExVUyk7IH0KLSJcLSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1JTlVTKTsgfQotIlwqIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU1RBUik7IH0KLSJcfCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBJUEUpOyB9Ci0KLSI9Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVFVQUxTKTsgfQotIiE9Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9URVFVQUxTKTsgfQotIjwiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTVEhBTik7IH0KLSI8PSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFU1NFUVVBTCk7IH0KLSI+Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1JFQVRFUik7IH0KLSI+PSIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVJFUVVBTCk7IH0KLQotIjw8Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU19MRVNTKTsgfQotIj4+Igl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1JFQVRFUl9HUkVBVEVSKTsgfQotCi0iLyIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUldBUkRfU0xBU0gpOyB9Ci0iLy8iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIU0xBU0gpOyB9Ci0KLSI6OiIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OQ09MT04pOyB9Ci0iQCIJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFUX1NZTSk7IH0KLSJcLlwuIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9URE9UKTsgfQotIjoiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DT0xPTik7IH0KLSIsIgl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUEpOyB9Ci0iXCQiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0xMQVIpOyB9Ci0iXC4iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET1QpOyB9Ci0iXD8iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5RVUVTVElPTk1BUkspOyB9Ci0KLQotImNoaWxkIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0hJTEQpOyB9Ci0iZGVzY2VuZGFudCIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uREVTQ0VOREFOVCk7IH0KLSJhdHRyaWJ1dGUiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFUVFJJQlVURSk7IH0KLSJzZWxmIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0VMRik7IH0KLSJkZXNjZW5kYW50XC1vclwtc2VsZiIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UX09SX1NFTEYpOyB9Ci0KLSJmb2xsb3dpbmdcLXNpYmxpbmciCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9MTE9XSU5HX1NJQkxJTkcpOyB9Ci0iZm9sbG93aW5nIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkcpOyB9Ci0ibmFtZXNwYWNlIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQU1FU1BBQ0UpOyB9Ci0icGFyZW50IgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QQVJFTlQpOyB9Ci0KLSJhbmNlc3RvciIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1IpOyB9Ci0icHJlY2VkaW5nXC1zaWJsaW5nIgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBSRUNFRElOR19TSUJMSU5HKTsgfQotInByZWNlZGluZyIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUFJFQ0VESU5HKTsgfQotImFuY2VzdG9yXC1vclwtc2VsZiIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BTkNFU1RPUl9PUl9TRUxGKTsgfQotCi0iZXEiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FUSk7IH0KLSJuZSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5FKTsgfQotImx0IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFQpOyB9Ci0ibGUiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRSk7IH0KLSJndCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdUKTsgfQotImdlIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR0UpOyB9Ci0KLSJpZGl2IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSURJVik7IH0KLSJkaXYiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ESVYpOyB9Ci0ibW9kIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTU9EKTsgfQotCi0idW5pb24iCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5VTklPTik7IH0KLSJpbnRlcnNlY3QiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOVEVSU0VDVCk7IH0KLSJleGNlcHQiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVYQ0VQVCk7IH0KLQotImluc3RhbmNlIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlNUQU5DRSk7IH0KLSJ0cmVhdCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRSRUFUKTsgfQotImNhc3RhYmxlIgkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DQVNUQUJMRSk7IH0KLSJjYXN0IgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVCk7IH0KLSJhcyIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFTKTsgfQotIm9mIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT0YpOyB9Ci0iaXMiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JUyk7IH0KLQotImZvciIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUik7IH0KLSJpbiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOKTsgfQotInJldHVybiIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUkVUVVJOKTsgfQotInNhdGlzZmllcyIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0FUSVNGSUVTKTsgfQotInRvIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVE8pOyB9Ci0ic29tZSIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNPTUUpOyB9Ci0iZXZlcnkiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FVkVSWSk7IH0KLSJpZiIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklGKTsgfQotInRoZW4iCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5USEVOKTsgfQotImVsc2UiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTFNFKTsgfQotImFuZCIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFORCk7IH0KLSJvciIJCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk9SKTsgfQotCi0iZW1wdHktc2VxdWVuY2UiCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTVBUWV9TRVFVRU5DRSk7IH0KLSJpdGVtIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVRFTSk7IH0KLSJub2RlIgkJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9ERSk7IH0KLSJkb2N1bWVudFwtbm9kZSIJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0NVTUVOVF9OT0RFKTsgfQotInRleHQiCQkJCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5URVhUKTsgfQotImNvbW1lbnQiCQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTU1FTlQpOyB9Ci0icHJvY2Vzc2luZ1wtaW5zdHJ1Y3Rpb24iCXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKTsgfQotInNjaGVtYVwtYXR0cmlidXRlIgkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNDSEVNQV9BVFRSSUJVVEUpOyB9Ci0iZWxlbWVudCIJCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRUxFTUVOVCk7IH0KLSJzY2hlbWFcLWVsZW1lbnQiCQl7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0VMRU1FTlQpOyB9Ci0idHlwZXN3aXRjaCIgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5UWVBFU1dJVENIKTsgfQotCi17U3RyaW5nTGl0ZXJhbH0JCXsKLQkJCQkvLyBnZXQgcmlkIG9mIHF1b3RlcwotCQkJCVN0cmluZyBzdHIgPSB5eXRleHQoKTsKLQkJCQlhc3NlcnQgc3RyLmxlbmd0aCgpID49IDI7Ci0JCQkJcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TVFJJTkcsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5MaXRlcmFsVXRpbHMudW5xdW90ZShzdHIpKTsgCi0JCQl9Ci17RGlnaXRzfQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOVEVHRVIsIG5ldyBCaWdJbnRlZ2VyKHl5dGV4dCgpKSk7IH0KLXtEb3VibGVMaXRlcmFsfQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVUJMRSwgbmV3IERvdWJsZSh5eXRleHQoKSkpOyB9Ci17RGVjaW1hbExpdGVyYWx9CXsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERUNJTUFMLCBuZXcgQmlnRGVjaW1hbCh5eXRleHQoKSkpOyB9Ci17TkNOYW1lfQkJeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk5DTkFNRSwgeXl0ZXh0KCkpOyB9Ci0KLQotCi0KLXtXaGl0ZXNwYWNlfSB7IC8qIGlnbm9yZSAqLyB9Ci0KLQotLgl7IAotCQlTdHJpbmcgZXJyID0gIlVua25vd24gY2hhcmFjdGVyIGF0IGxpbmUgIiArIGxpbmVubygpOyAKLQkJZXJyICs9ICIgY29sICIgKyBjb2xubygpOwotCQllcnIgKz0gIjogIiArIHl5dGV4dCgpOyAKLQkJCSAgICAgCi0JCXRocm93IG5ldyBKRmxleEVycm9yKGVycik7IAotCX0KLQotfQotCi08Q09NTUVOVD4gewotCSIoOiIJCXsgY29tbWVudExldmVsKys7IH0KLQkiOikiCQl7IGNvbW1lbnRMZXZlbC0tOyAKLQkJCSAgaWYoY29tbWVudExldmVsID09IDApCi0JCSAgICAgICAgICAJeXliZWdpbihZWUlOSVRJQUwpOwotCQkJfQotCS58XG4JCXsgLyogaWdub3JlICovIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOTNmMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXByb3ZpZGVyPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1wbHVnaW5OYW1lPVBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3BvbS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y1NDFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yPC9hcnRpZmFjdElkPgotICAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgotICAgPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICA8bmFtZT5Qc3ljaG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3I8L25hbWU+Ci0KLSAgIDxwYXJlbnQ+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMjwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjIuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9kZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucmVsZW5nCi0gICAgICA8L3JlbGF0aXZlUGF0aD4KLSAgIDwvcGFyZW50PgotCi0gICA8YnVpbGQ+Ci0gICAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgotICAgICAgPHBsdWdpbk1hbmFnZW1lbnQ+Ci0gICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1wbWQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICA8L3BsdWdpbnM+Ci0gICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+Ci0gICAgICA8cGx1Z2lucz4KLQkgICAgICA8cGx1Z2luPgotCSAgICAgICAgPGdyb3VwSWQ+b3JnLnNvbmF0eXBlLnR5Y2hvPC9ncm91cElkPgotCSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tb3NnaS1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JICAgICAgICA8dmVyc2lvbj4ke3R5Y2hvLXZlcnNpb259PC92ZXJzaW9uPgotCSAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0JICAgICAgICAgIDxjb21waWxlcklkPmpkdDwvY29tcGlsZXJJZD4KLQkgICAgICAgICAgPHVzZVBkZVNvdXJjZVJvb3RzPnRydWU8L3VzZVBkZVNvdXJjZVJvb3RzPgotCSAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgotCSAgICAgICAgICA8dGFyZ2V0PmpzcjE0PC90YXJnZXQ+Ci0JICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0JICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNzwvdmVyc2lvbj4KLSAgICAgICAgIDwvcGx1Z2luPgotICAgICAgPC9wbHVnaW5zPgotICAgPC9idWlsZD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvQXRvbWljSXRlbVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvQXRvbWljSXRlbVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjMGU2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL0F0b21pY0l0ZW1UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExIEplc3BlciBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotCi0vKioKLSAqIERlZmluZXMgYW4gc2VxdWVuY2Ugb3IgaXRlbSBvZiBhdG9taWMgdHlwZXMuCi0gKiAKLSAqIEBzaW5jZSAyLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBBdG9taWNJdGVtVHlwZSBleHRlbmRzIEl0ZW1UeXBlIHsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNjaGVtYSB0eXBlIG9mIHRoZSBzZXF1ZW5jZSBvciB0eXBlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIFNjaGVtYSB0eXBlIG9mIHRoZSBzZXF1ZW5jZSBvciBpdGVtLgotCSAqLwotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9Db2xsYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9Db2xsYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTcxMWUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvQ29sbGF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci0KLS8qKgotICogU2VydmljZSBwcm92aWRlciBpbnRlcmZhY2UgZm9yIGxvb2tpbmcgdXAgY29sbGF0aW9ucyBmcm9tIHdpdGhpbiB0aGUKLSAqIGR5bmFtaWMgY29udGV4dC4KLSAqIAotICogRGVmaW5pdGlvbiBmcm9tIHRoZSBYUGF0aDIgc3BlY2lmaWNhdGlvbjogQSBjb2xsYXRpb24gaXMgYSBzcGVjaWZpY2F0aW9uIG9mCi0gKiB0aGUgbWFubmVyIGluIHdoaWNoIHN0cmluZ3MgYW5kIFVSSXMgYXJlIGNvbXBhcmVkIGFuZCwgYnkgZXh0ZW5zaW9uLAotICogb3JkZXJlZC4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZWZpbml0aW9uIG9mIGNvbGxhdGlvbiwgc2VlIFtYUXVlcnkgMS4wIGFuZAotICogWFBhdGggMi4wIEZ1bmN0aW9ucyBhbmQgT3BlcmF0b3JzIChTZWNvbmQgRWRpdGlvbildLgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbGxhdGlvblByb3ZpZGVyIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCBjb2xsYXRpb24gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgaW1wbGVtZW50ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0RFUE9JTlRfQ09MTEFUSU9OID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zL2NvbGxhdGlvbi9jb2RlcG9pbnQiOwotCi0JLyoqCi0JICogR2V0cyB0aGUgbmFtZWQgY29sbGF0b3IuIFczQyBkb2VzIG5vdCBkZWZpbmUgY29sbGF0aW9uIG5hbWVzICh5ZXQ/KSBzbwotCSAqIHdlIGFyZSBjb25zdHJhaW5lZCB0byB1c2luZyBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG5hbWluZyBzY2hlbWUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIEEgVVJJIGRlc2lnbmF0aW5nIHRoZSBjb2xsYXRpb24gdG8gdXNlCi0JICogQHJldHVybiBUaGUgY29sbGF0aW9uIHRvIHVzZSwgb3IgbnVsbCBpZiBubyBzdWNoIGNvbGxhdGlvbiBleGlzdHMgYnkKLQkgKiAgICAgICAgIHRoaXMgcHJvdmlkZXIKLQkgKi8KLQlDb21wYXJhdG9yPFN0cmluZz4gZ2V0Q29sbGF0aW9uKFN0cmluZyBuYW1lKTsKLQkKLQlTdHJpbmcgZ2V0RGVmYXVsdENvbGxhdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9EeW5hbWljQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9EeW5hbWljQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2EyNGVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvRHluYW1pY0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEludGVyZmFjZSBmb3IgZHluYW1pYyBjb250ZXh0LiBUaGlzIGNvdmVycyB0aGUgRHluYW1pYyBDb250ZXh0IGFzIGRlZmluZWQgYnkgdGhlIFhQYXRoMiBzcGVjaWZpY2F0aW9uLCBFWENFUFQgZm9yIAotICogY29udGV4dCBpdGVtIGFuZCBzaXplIChoYW5kbGVkIGluIEV2YWx1YXRpb25Db250ZXh0KSAKLSAqIEBzaW5jZSAyLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBEeW5hbWljQ29udGV4dCB7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgInRvcCIgbm9kZSB3aGljaCB0aGUgWFBhdGgyIGVuZ2luZSBpcyBub3QgYWxsb3dlZCB0bwotCSAqIGxlYXZlCi0JICogCi0JICogQHJldHVybiBET00gbm9kZSB3aGljaCBsaW1pdHMgYXhpcyBuYXZpZ2F0aW9uLgotCSAqLwotCXB1YmxpYyBOb2RlIGdldExpbWl0Tm9kZSgpOwotCi0JLyoqCi0JICogR2V0IHZhcmlhYmxlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCi0JICogQHJldHVybiB2YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZ2V0VmFyaWFibGUoUU5hbWUgbmFtZSk7Ci0KLQkvKioKLQkgKiBSZXNvbHZlIGFuIFVSSQotCSAqIAotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwb3NzaWJseSByZWxhdGl2ZSBVUkkgdG8gcmVzb2x2ZQotCSAqIEByZXR1cm4gdGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuCi0JICovCi0JcHVibGljIFVSSSByZXNvbHZlVXJpKFN0cmluZyB1cmkpOwotCi0JLyoqCi0JICogW0RlZmluaXRpb246IEN1cnJlbnQgZGF0ZVRpbWUuIFRoaXMKLQkgKiBpbmZvcm1hdGlvbiByZXByZXNlbnRzIGFuIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBwb2ludCBpbiB0aW1lIGR1cmluZwotCSAqIHRoZSBwcm9jZXNzaW5nIG9mIGFuIGV4cHJlc3Npb24sIGFuZCBpbmNsdWRlcyBhbiBleHBsaWNpdCB0aW1lem9uZS4gSXQKLQkgKiBjYW4gYmUgcmV0cmlldmVkIGJ5IHRoZSBmbjpjdXJyZW50LWRhdGVUaW1lIGZ1bmN0aW9uLiBJZiBpbnZva2VkCi0JICogbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgYW4gZXhwcmVzc2lvbiwgdGhpcyBmdW5jdGlvbgotCSAqIGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIHJlc3VsdC5dCi0gICAgICoKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGRhdGUgdGltZSB1c2luZyB0aGUgR3JlZ29yaWFuQ2FsZW5kYXIuCi0JICogCi0JICogQHJldHVybiBUaGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLCB3aGljaCB3aWxsIGFsd2F5cyBiZSBzYW1lIGZvciB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyBHcmVnb3JpYW5DYWxlbmRhciBnZXRDdXJyZW50RGF0ZVRpbWUoKTsKLQkvKioKLQkgKiBbRGVmaW5pdGlvbjogSW1wbGljaXQgdGltZXpvbmUuIFRoaXMKLQkgKiBpcyB0aGUgdGltZXpvbmUgdG8gYmUgdXNlZCB3aGVuIGEgZGF0ZSwgdGltZSwgb3IgZGF0ZVRpbWUgdmFsdWUgdGhhdAotCSAqIGRvZXMgbm90IGhhdmUgYSB0aW1lem9uZSBpcyB1c2VkIGluIGEgY29tcGFyaXNvbiBvciBhcml0aG1ldGljCi0JICogb3BlcmF0aW9uLiBUaGUgaW1wbGljaXQgdGltZXpvbmUgaXMgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZSBvZgotCSAqIHR5cGUgeHM6ZGF5VGltZUR1cmF0aW9uLiBTZWUgW1hNTCBTY2hlbWFdIGZvciB0aGUgcmFuZ2Ugb2YgbGVnYWwgdmFsdWVzCi0JICogb2YgYSB0aW1lem9uZS5dCi0JICogCi0JICogQHJldHVybiBjdXJyZW50IGRhdGUgdGltZSBhbmQgaW1wbGljaXQgdGltZXpvbmUuCi0JICovCi0JcHVibGljIER1cmF0aW9uIGdldFRpbWV6b25lT2Zmc2V0KCk7Ci0KLQkvKioKLQkgKiBbRGVmaW5pdGlvbjogQXZhaWxhYmxlIGRvY3VtZW50cy4gVGhpcyBpcyBhIG1hcHBpbmcgb2YKLQkgKiBzdHJpbmdzIG9udG8gZG9jdW1lbnQgbm9kZXMuIFRoZSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgYWJzb2x1dGUgVVJJIG9mCi0JICogYSByZXNvdXJjZS4gVGhlIGRvY3VtZW50IG5vZGUgaXMgdGhlIHJvb3Qgb2YgYSB0cmVlIHRoYXQgcmVwcmVzZW50cwotCSAqIHRoYXQgcmVzb3VyY2UgdXNpbmcgdGhlIGRhdGEgbW9kZWwuIFRoZSBkb2N1bWVudCBub2RlIGlzIHJldHVybmVkIGJ5Ci0JICogdGhlIGZuOmRvYyBmdW5jdGlvbiB3aGVuIGFwcGxpZWQgdG8gdGhhdCBVUkkuXSBUaGUgc2V0IG9mIGF2YWlsYWJsZQotCSAqIGRvY3VtZW50cyBpcyBub3QgbGltaXRlZCB0byB0aGUgc2V0IG9mIHN0YXRpY2FsbHkga25vd24gZG9jdW1lbnRzLCBhbmQKLQkgKiBpdCBtYXkgYmUgZW1wdHkuIElmIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBVUklzIGluIGF2YWlsYWJsZSBkb2N1bWVudHMKLQkgKiB0aGF0IG1hcCB0byBhIGRvY3VtZW50IG5vZGUgRCwgdGhlbiB0aGUgZG9jdW1lbnQtdXJpIHByb3BlcnR5IG9mIEQgbXVzdAotCSAqIGVpdGhlciBiZSBhYnNlbnQsIG9yIG11c3QgYmUgb25lIG9mIHRoZXNlIFVSSXMuIE5vdGU6IFRoaXMgbWVhbnMgdGhhdAotCSAqIGdpdmVuIGEgZG9jdW1lbnQgbm9kZSAkTiwgdGhlIHJlc3VsdCBvZiBmbjpkb2MoZm46ZG9jdW1lbnQtdXJpKCROKSkgaXMKLQkgKiAkTiB3aWxsIGFsd2F5cyBiZSBUcnVlLCB1bmxlc3MgZm46ZG9jdW1lbnQtdXJpKCROKSBpcyBhbiBlbXB0eQotCSAqIHNlcXVlbmNlLgotCSAqIAotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIGlzIHRoZSBVUkkgb2YgdGhlIGRvY3VtZW50LgotCSAqIEByZXR1cm4gZG9jdW1lbnQuCi0JICovCi0JcHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50IGdldERvY3VtZW50KFVSSSB1cmkpOwotCQotCS8qKgotCSAqIFtEZWZpbml0aW9uOiBBdmFpbGFibGUgY29sbGVjdGlvbnMuIFRoaXMgaXMgYSBtYXBwaW5nIG9mCi0JICogc3RyaW5ncyBvbnRvIHNlcXVlbmNlcyBvZiBub2Rlcy4gVGhlIHN0cmluZyByZXByZXNlbnRzIHRoZSBhYnNvbHV0ZSBVUkkKLQkgKiBvZiBhIHJlc291cmNlLiBUaGUgc2VxdWVuY2Ugb2Ygbm9kZXMgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRoZQotCSAqIGZuOmNvbGxlY3Rpb24gZnVuY3Rpb24gd2hlbiB0aGF0IFVSSSBpcyBzdXBwbGllZCBhcyB0aGUgYXJndW1lbnQuIF0gVGhlCi0JICogc2V0IG9mIGF2YWlsYWJsZSBjb2xsZWN0aW9ucyBpcyBub3QgbGltaXRlZCB0byB0aGUgc2V0IG9mIHN0YXRpY2FsbHkKLQkgKiBrbm93biBjb2xsZWN0aW9ucywgYW5kIGl0IG1heSBiZSBlbXB0eS4gRm9yIGV2ZXJ5IGRvY3VtZW50IG5vZGUgRCB0aGF0Ci0JICogaXMgaW4gdGhlIHRhcmdldCBvZiBhIG1hcHBpbmcgaW4gYXZhaWxhYmxlIGNvbGxlY3Rpb25zLCBvciB0aGF0IGlzIHRoZQotCSAqIHJvb3Qgb2YgYSB0cmVlIGNvbnRhaW5pbmcgc3VjaCBhIG5vZGUsIHRoZSBkb2N1bWVudC11cmkgcHJvcGVydHkgb2YgRAotCSAqIG11c3QgZWl0aGVyIGJlIGFic2VudCwgb3IgbXVzdCBiZSBhIFVSSSBVIHN1Y2ggdGhhdCBhdmFpbGFibGUgZG9jdW1lbnRzCi0JICogY29udGFpbnMgYSBtYXBwaW5nIGZyb20gVSB0byBELiIgTm90ZTogVGhpcyBtZWFucyB0aGF0IGZvciBhbnkgZG9jdW1lbnQKLQkgKiBub2RlICROIHJldHJpZXZlZCB1c2luZyB0aGUgZm46Y29sbGVjdGlvbiBmdW5jdGlvbiwgZWl0aGVyIGRpcmVjdGx5IG9yCi0JICogYnkgbmF2aWdhdGluZyB0byB0aGUgcm9vdCBvZiBhIG5vZGUgdGhhdCB3YXMgcmV0dXJuZWQsIHRoZSByZXN1bHQgb2YKLQkgKiBmbjpkb2MoZm46ZG9jdW1lbnQtdXJpKCROKSkgaXMgJE4gd2lsbCBhbHdheXMgYmUgVHJ1ZSwgdW5sZXNzCi0JICogZm46ZG9jdW1lbnQtdXJpKCROKSBpcyBhbiBlbXB0eSBzZXF1ZW5jZS4gVGhpcyBpbXBsaWVzIGEgcmVxdWlyZW1lbnQKLQkgKiBmb3IgdGhlIGZuOmRvYyBhbmQgZm46Y29sbGVjdGlvbiBmdW5jdGlvbnMgdG8gYmUgY29uc2lzdGVudCBpbiB0aGVpcgotCSAqIGVmZmVjdC4gSWYgdGhlIGltcGxlbWVudGF0aW9uIHVzZXMgY2F0YWxvZ3Mgb3IgdXNlci1zdXBwbGllZCBVUkkKLQkgKiByZXNvbHZlcnMgdG8gZGVyZWZlcmVuY2UgVVJJcyBzdXBwbGllZCB0byB0aGUgZm46ZG9jIGZ1bmN0aW9uLCB0aGUKLQkgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm46Y29sbGVjdGlvbiBmdW5jdGlvbiBtdXN0IHRha2UgdGhlc2UgbWVjaGFuaXNtcwotCSAqIGludG8gYWNjb3VudC4gRm9yIGV4YW1wbGUsIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IGFjaGlldmUgdGhpcyBieQotCSAqIG1hcHBpbmcgdGhlIGNvbGxlY3Rpb24gVVJJIHRvIGEgc2V0IG9mIGRvY3VtZW50IFVSSXMsIHdoaWNoIGFyZSB0aGVuCi0JICogcmVzb2x2ZWQgdXNpbmcgdGhlIHNhbWUgY2F0YWxvZyBvciBVUkkgcmVzb2x2ZXIgdGhhdCBpcyB1c2VkIGJ5IHRoZQotCSAqIGZuOmRvYyBmdW5jdGlvbi4qLwotCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gZ2V0Q29sbGVjdGlvbnMoKTsKLQkvKioKLQkgKiBbRGVmaW5pdGlvbjogRGVmYXVsdCBjb2xsZWN0aW9uLiBUaGlzIGlzIHRoZSBzZXF1ZW5jZQotCSAqIG9mIG5vZGVzIHRoYXQgd291bGQgcmVzdWx0IGZyb20gY2FsbGluZyB0aGUgZm46Y29sbGVjdGlvbiBmdW5jdGlvbiB3aXRoCi0JICogbm8gYXJndW1lbnRzLl0gVGhlIHZhbHVlIG9mIGRlZmF1bHQgY29sbGVjdGlvbiBtYXkgYmUgaW5pdGlhbGl6ZWQgYnkKLQkgKiB0aGUgaW1wbGVtZW50YXRpb24uCi0JICovCQotCXB1YmxpYyBMaXN0PERvY3VtZW50PiBnZXREZWZhdWx0Q29sbGVjdGlvbigpOwotCi0JLyoqIAotCSAqIEFjdHVhbCBjb2xsYXRpb24gcHJvdmlkZXJzIGF2YWlsYWJsZSBmb3IgdXNlIGR5bmFtaWNhbGx5LiBUaGlzIGNvdWxkCi0JICogZGlmZmVyIGZyb20gdGhlIGNvbGxhdGlvbnMgYXZhaWxhYmxlIHN0YXRpY2FsbHksIGJ1dCB3b3VsZCBnaXZlCi0JICogdW5leHBlY3RlZCByZXN1bHRzLgotCSAqLwotCXB1YmxpYyBDb2xsYXRpb25Qcm92aWRlciBnZXRDb2xsYXRpb25Qcm92aWRlcigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9FdmFsdWF0aW9uQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9FdmFsdWF0aW9uQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjZhNTRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvRXZhbHVhdGlvbkNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi0vKioKLSAqCi0gKiBAbm9pbXBsZW1lbnQgVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKiBAc2luY2UgMi4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRXZhbHVhdGlvbkNvbnRleHQgewotCS8qKgotCSAqIERlZmluaXRpb246IFRoZSBjb250ZXh0IGl0ZW0gaXMgdGhlIGl0ZW0gY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gQW4KLQkgKiBpdGVtIGlzIGVpdGhlciBhbiBhdG9taWMgdmFsdWUgb3IgYSBub2RlLgotCSAqIERlZmluaXRpb246IFdoZW4gdGhlIGNvbnRleHQKLQkgKiBpdGVtIGlzIGEgbm9kZSwgaXQgY2FuIGFsc28gYmUgcmVmZXJyZWQgdG8gYXMgdGhlIGNvbnRleHQgbm9kZS4KLQkgKiAKLQkgKiBUaGUKLQkgKiBjb250ZXh0IGl0ZW0gaXMgcmV0dXJuZWQgYnkgYW4gZXhwcmVzc2lvbiBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGRvdAotCSAqICguKS4gV2hlbiBhbiBleHByZXNzaW9uIEUxL0UyIG9yIEUxW0UyXSBpcyBldmFsdWF0ZWQsIGVhY2ggaXRlbSBpbiB0aGUKLQkgKiBzZXF1ZW5jZSBvYnRhaW5lZCBieSBldmFsdWF0aW5nIEUxIGJlY29tZXMgdGhlIGNvbnRleHQgaXRlbSBpbiB0aGUKLQkgKiBpbm5lciBmb2N1cyBmb3IgYW4gZXZhbHVhdGlvbiBvZiBFMi4KLQkgKi8KLQlJdGVtIGdldENvbnRleHRJdGVtKCk7Ci0KLQkvKioKLQkgKiBbRGVmaW5pdGlvbjogVGhlIGNvbnRleHQgcG9zaXRpb24KLQkgKiBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRleHQgaXRlbSB3aXRoaW4gdGhlIHNlcXVlbmNlIG9mIGl0ZW1zCi0JICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5dIEl0IGNoYW5nZXMgd2hlbmV2ZXIgdGhlIGNvbnRleHQgaXRlbQotCSAqIGNoYW5nZXMuIFdoZW4gdGhlIGZvY3VzIGlzIGRlZmluZWQsIHRoZSB2YWx1ZSBvZiB0aGUgY29udGV4dCBwb3NpdGlvbgotCSAqIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8uIFRoZSBjb250ZXh0IHBvc2l0aW9uIGlzIHJldHVybmVkIGJ5Ci0JICogdGhlIGV4cHJlc3Npb24gZm46cG9zaXRpb24oKS4gV2hlbiBhbiBleHByZXNzaW9uIEUxL0UyIG9yIEUxW0UyXSBpcwotCSAqIGV2YWx1YXRlZCwgdGhlIGNvbnRleHQgcG9zaXRpb24gaW4gdGhlIGlubmVyIGZvY3VzIGZvciBhbiBldmFsdWF0aW9uIG9mCi0JICogRTIgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250ZXh0IGl0ZW0gaW4gdGhlIHNlcXVlbmNlIG9idGFpbmVkIGJ5Ci0JICogZXZhbHVhdGluZyBFMS4gVGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBpdGVtIGluIGEgc2VxdWVuY2UgaXMgYWx3YXlzIDEKLQkgKiAob25lKS4gVGhlIGNvbnRleHQgcG9zaXRpb24gaXMgYWx3YXlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY29udGV4dAotCSAqIHNpemUuCi0JICovCi0JaW50IGdldENvbnRleHRQb3NpdGlvbigpOwotCQotCS8qKgotCSAqIFtEZWZpbml0aW9uOiBUaGUgY29udGV4dCBzaXplIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlCi0JICogc2VxdWVuY2Ugb2YgaXRlbXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5dIEl0cyB2YWx1ZSBpcyBhbHdheXMgYW4KLQkgKiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGUgY29udGV4dCBzaXplIGlzIHJldHVybmVkIGJ5IHRoZQotCSAqIGV4cHJlc3Npb24gZm46bGFzdCgpLiBXaGVuIGFuIGV4cHJlc3Npb24gRTEvRTIgb3IgRTFbRTJdIGlzIGV2YWx1YXRlZCwKLQkgKiB0aGUgY29udGV4dCBzaXplIGluIHRoZSBpbm5lciBmb2N1cyBmb3IgYW4gZXZhbHVhdGlvbiBvZiBFMiBpcyB0aGUKLQkgKiBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIG9idGFpbmVkIGJ5IGV2YWx1YXRpbmcgRTEuIFtEZWZpbml0aW9uOgotCSAqIFZhcmlhYmxlIHZhbHVlcy4gVGhpcyBpcyBhIHNldCBvZiAoZXhwYW5kZWQgUU5hbWUsIHZhbHVlKSBwYWlycy4gSXQKLQkgKiBjb250YWlucyB0aGUgc2FtZSBleHBhbmRlZCBRTmFtZXMgYXMgdGhlIGluLXNjb3BlIHZhcmlhYmxlcyBpbiB0aGUKLQkgKiBzdGF0aWMgY29udGV4dCBmb3IgdGhlIGV4cHJlc3Npb24uIFRoZSBleHBhbmRlZCBRTmFtZSBpcyB0aGUgbmFtZSBvZgotCSAqIHRoZSB2YXJpYWJsZSBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkeW5hbWljIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgd2hpY2gKLQkgKiBpbmNsdWRlcyBpdHMgZHluYW1pYyB0eXBlLl0KLQkgKi8KLQlpbnQgZ2V0TGFzdFBvc2l0aW9uKCk7Ci0JCi0JLyoqCi0JICogQHJldHVybiBUaGUgY3VycmVudCBkeW5hbWljIGNvbnRleHQgaW4gZWZmZWN0LgotCSAqLwotCUR5bmFtaWNDb250ZXh0IGdldER5bmFtaWNDb250ZXh0KCk7Ci0JCi0JLyoqCi0JICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0aWMgY29udGV4dCBpbiBlZmZlY3QuCi0JICovCi0JU3RhdGljQ29udGV4dCBnZXRTdGF0aWNDb250ZXh0KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL0Z1bmN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL0Z1bmN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNTg3NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9GdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBmdW5jdGlvbnMuCi0gKiBAc2luY2UgMi4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRnVuY3Rpb24gewotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogTWluaW1hbCBudW1iZXIgb2YgYWxsb3dlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgc21hbGxlc3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBwb3NzaWJsZQotCSAqLwotCWludCBnZXRNaW5Bcml0eSgpOwotCi0JLyoqCi0JICogTWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgaGlnaGVzdCBudW1iZXIgb2YgYXJndW1lbnRzIHBvc3NpYmxlCi0JICovCi0JaW50IGdldE1heEFyaXR5KCk7Ci0KLQkvKioKLQkgKiBNYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBoaWdoZXN0IG51bWJlciBvZiBhcmd1bWVudHMgcG9zc2libGUKLQkgKi8KLQlib29sZWFuIGlzVmFyaWFibGVBcmd1bWVudCgpOwotCi0JLyoqCi0JICogQ2hlY2tzIGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFuIHRvIHRoZQotCSAqIAotCSAqIEBwYXJhbSBhY3R1YWxfYXJpdHkKLQkgKiBAcmV0dXJuCi0JICovCi0JYm9vbGVhbiBjYW5NYXRjaEFyaXR5KGludCBhY3R1YWxBcml0eSk7Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIGZ1bmN0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gVHlwZURlZmluaXRpb24gZm9yIHRoZSBhcmd1bWVudAotCSAqLwotCVR5cGVEZWZpbml0aW9uIGdldFJlc3VsdFR5cGUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IGF0IHBvc2l0aW9uIGluZGV4LAotCSAqIHN0YXJ0aW5nIGF0IDAuICAKLQkgKiAKLQkgKiBAcmV0dXJuIFR5cGVEZWZpbml0aW9uIGZvciB0aGUgYXJndW1lbnQKLQkgKi8KLQlUeXBlRGVmaW5pdGlvbiBnZXRBcmd1bWVudFR5cGUoaW50IGluZGV4KTsKLQotCS8qKgotCSAqIE5hbWUgaGludCBmb3IgdGhlIGluZGV4J3RoIGFyZ3VtZW50LCAgCi0JICogc3RhcnRpbmcgYXQgMC4KLQkgKiAKLQkgKiBAcmV0dXJuIFR5cGVEZWZpbml0aW9uIGZvciB0aGUgYXJndW1lbnQKLQkgKi8KLQlTdHJpbmcgZ2V0QXJndW1lbnROYW1lSGludChpbnQgaW5kZXgpOwotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCVJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb248UmVzdWx0U2VxdWVuY2U+IGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGV2YWx1YXRpb25Db250ZXh0KTsKLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBleGFjdCByZXN1bHQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlUeXBlRGVmaW5pdGlvbiBjb21wdXRlUmV0dXJuVHlwZShDb2xsZWN0aW9uPFR5cGVEZWZpbml0aW9uPiBhcmdzLCBTdGF0aWNDb250ZXh0IHNjKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvRnVuY3Rpb25MaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL0Z1bmN0aW9uTGlicmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDA0NTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvRnVuY3Rpb25MaWJyYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOw0KLQ0KLQ0KLS8qKg0KLSAqIEludGVyZmFjZSBmb3IgZnVuY3Rpb24gbGlicmFyaWVzIHN1cHBvcnQuDQotICogQHNpbmNlIDIuMA0KLSAqLw0KLXB1YmxpYyBpbnRlcmZhY2UgRnVuY3Rpb25MaWJyYXJ5IHsNCi0NCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFSSUFCTEVfQVJJVFkgPSBJbnRlZ2VyLk1BWF9WQUxVRTsNCi0JDQotCS8qKg0KLQkgKiBDaGVja3Mgd2hldGhlciB0aGUgZnVuY3Rpb24gZXhpc3RzIG9yIG5vdC4NCi0JICogDQotCSAqIEBwYXJhbSBuYW1lDQotCSAqICAgICAgICAgICAgTmFtZSBvZiBmdW5jdGlvbi4NCi0JICogQHBhcmFtIGFyaXR5DQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLCANCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIHRlc3QuDQotCSAqLw0KLQlwdWJsaWMgYm9vbGVhbiBmdW5jdGlvbkV4aXN0cyhTdHJpbmcgbmFtZSwgaW50IGFyaXR5KTsNCi0NCi0JLyoqDQotCSAqIEZ1bmN0aW9uIHN1cHBvcnQuDQotCSAqIA0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKiAgICAgICAgICAgIGxvY2FsIG5hbWUgLg0KLQkgKiBAcGFyYW0gYXJpdHkNCi0JICogICAgICAgICAgICBhcml0eSBvZiB0aGUgZnVuY3Rpb24uDQotCSAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIGZyb20gdGhlIGxpYnJhcnkuDQotCSAqLw0KLQlwdWJsaWMgRnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uKFN0cmluZyBsb2NhbE5hbWUsIGludCBhcml0eSk7DQotDQotCS8qKg0KLQkgKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGZ1bmN0aW9uIGxpYnJhcnkuDQotCSAqIA0KLQkgKiBAcmV0dXJuIE5hbWVzcGFjZS4NCi0JICovDQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7DQotfQ0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvSXRlbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9JdGVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODZiNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9JdGVtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExIEplc3BlciBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotCi0vKioKLSAqIEFuIGl0ZW0gaW4gdGhlIFhQYXRoMiBkYXRhIG1vZGVsCi0gKiAKLSAqIEBzaW5jZSAyLjAKLSAqIEBub2ltcGxlbWVudCBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIEl0ZW0gewotCS8qKgotCSAqIEByZXR1cm4gQSBkZXNjcmlwdGlvbiBvZiB0aGUgaXRlbSB0eXBlLgotCSAqLwotCUl0ZW1UeXBlIGdldEl0ZW1UeXBlKCk7Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFRoZSAiUmF3IiBKYXZhIG9iamVjdCwgZS5nLiBvcmcudzMuTm9kZSBmb3IgYSBub2RlLAotCSAqICAgICAgICAgamF2YS51dGlsLlN0cmluZyBmb3Igc3RyaW5ncywgZXRjLgotCSAqLwotCU9iamVjdCBnZXROYXRpdmVWYWx1ZSgpOwotCi0JU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL01hdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL01hdGNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMGVlYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9NYXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGk7Ci0KLS8qKgotICogQSBtYXRjaCBmb3VuZCBieSB0aGUgWFBhdGgyIHBhdHRlcm4gbWF0Y2hlcgotICogCi0gKiAqIEBub2ltcGxlbWVudCBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqIEBzaW5jZSAyLjAKLSAqCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBNYXRjaCB7Ci0JLyoqCi0JICogQHJldHVybiBUaGUgbnVtYmVyIG9mIG1hdGNoaW5nIHBhdHRlcm5zIG9uIHRoZSBpbnB1dC4KLQkgKi8KLQlpbnQgZ2V0TWF0Y2hpbmdDb3VudCgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIFhQYXRoMiBwYXR0ZXJuIHdoaWNoIGJlc3QgbWF0Y2hlZCB0aGUgaW5wdXQgKGNvbnNpZGVyaW5nIG1vZGUgYW5kIHByaW9yaXR5KQotCSAqIAotCSAqIEByZXR1cm4gUGF0dGVybiB3aGljaCB3YXMgdGhlIGJlc3QgbWF0Y2guCi0JICovCi0JWFBhdGgyUGF0dGVybiBnZXRCZXN0TWF0Y2goKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvUmVzdWx0QnVmZmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1Jlc3VsdEJ1ZmZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlhNDIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvUmVzdWx0QnVmZmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5TaW1wbGVBdG9taWNJdGVtVHlwZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLlNpbmdsZUl0ZW1TZXF1ZW5jZTsKLQotLyoqCi0gKiBAc2luY2UgMi4wCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRCdWZmZXIgewotCi0JcHJpdmF0ZSBBcnJheUxpc3Q8SXRlbT4gdmFsdWVzID0gbmV3IEFycmF5TGlzdDxJdGVtPigpOwotCQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBnZXRTZXF1ZW5jZSgpIHsKLQkJaWYgKHZhbHVlcy5zaXplKCkgPT0gMCkgcmV0dXJuIEVNUFRZOwotCQlpZiAodmFsdWVzLnNpemUoKSA9PSAxKSByZXR1cm4gd3JhcCh2YWx1ZXMuZ2V0KDApKTsKLQkJCi0JCXJldHVybiBuZXcgQXJyYXlSZXN1bHRTZXF1ZW5jZSh2YWx1ZXMudG9BcnJheShuZXcgSXRlbVt2YWx1ZXMuc2l6ZSgpXSkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKLQkJdmFsdWVzLmNsZWFyKCk7Ci0JfQotCQotCXB1YmxpYyBSZXN1bHRCdWZmZXIgYWRkKEl0ZW0gYXQpIHsKLQkJdmFsdWVzLmFkZChhdCk7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBSZXN1bHRCdWZmZXIgYXBwZW5kKEl0ZW0gYXQpIHsKLQkJdmFsdWVzLmFkZChhdCk7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBSZXN1bHRCdWZmZXIgY29uY2F0KFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCXZhbHVlcy5hZGRBbGwoY29sbGVjdGlvbldyYXBwZXIocnMpKTsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTaW5nbGVSZXN1bHRTZXF1ZW5jZSBpbXBsZW1lbnRzIFJlc3VsdFNlcXVlbmNlIHsKLQkJCi0JCXB1YmxpYyBTaW5nbGVSZXN1bHRTZXF1ZW5jZShJdGVtIGF0KSB7Ci0JCQl2YWx1ZSA9IGF0OwotCQl9Ci0JCQotCQlwcml2YXRlIGZpbmFsIEl0ZW0gdmFsdWU7Ci0JCi0JCS8qIChub24tSmF2YWRvYykKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UjZ2V0TGVuZ3RoKCkKLQkJICovCi0JCXB1YmxpYyBpbnQgc2l6ZSgpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JCQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2dldEl0ZW0oaW50KQotCQkgKi8KLQkJcHVibGljIEl0ZW0gaXRlbShpbnQgaW5kZXgpIHsKLQkJCWlmIChpbmRleCAhPSAwKSB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiTGVuZ3RoIGlzIG9uZSwgeW91IGxvb2tlZCB1cCBudW1iZXIgIisgaW5kZXgpOwotCQkJcmV0dXJuIHZhbHVlOwotCQl9Ci0JCQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2ZpcnN0KCkKLQkJICovCi0JCXB1YmxpYyBJdGVtIGZpcnN0KCkgewotCQkJcmV0dXJuIGl0ZW0oMCk7Ci0JCX0KLQkJCi0JCS8qIChub24tSmF2YWRvYykKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UjZ2V0SXRlbShpbnQpCi0JCSAqLwotCQlwdWJsaWMgT2JqZWN0IHZhbHVlKGludCBpbmRleCkgewotCQkJaWYgKGluZGV4ICE9IDApIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJMZW5ndGggaXMgb25lLCB5b3UgbG9va2VkIHVwIG51bWJlciAiKyBpbmRleCk7Ci0JCQlyZXR1cm4gdmFsdWUuZ2V0TmF0aXZlVmFsdWUoKTsKLQkJfQotCQkKLQkJLyogKG5vbi1KYXZhZG9jKQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSNlbXB0eSgpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBlbXB0eSgpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2ZpcnN0KCkKLQkJICovCi0JCXB1YmxpYyBPYmplY3QgZmlyc3RWYWx1ZSgpIHsKLQkJCXJldHVybiB2YWx1ZS5nZXROYXRpdmVWYWx1ZSgpOwotCQl9Ci0JCQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2l0ZXJhdG9yKCkKLQkJICovCi0JCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJCXJldHVybiBuZXcgSXRlcmF0b3IoKSB7Ci0JCQkJYm9vbGVhbiBzZWVuSXQgPSBmYWxzZTsKLQkJCQkKLQkJCQlwdWJsaWMgZmluYWwgdm9pZCByZW1vdmUoKSB7Ci0JCQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVzdWx0U2VxdWVuY2VzIGFyZSBpbW11dGFibGUiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcHVibGljIGZpbmFsIE9iamVjdCBuZXh0KCkgewotCQkJCQlpZiAoISBzZWVuSXQpIHsKLQkJCQkJCXNlZW5JdCA9IHRydWU7Ci0JCQkJCQlyZXR1cm4gdmFsdWU7Ci0JCQkJCX0KLQkJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyBpdGVyYXRvciBpcyBhdCBpdHMgZW5kIik7Ci0JCQkJfQotCQkJCQotCQkJCXB1YmxpYyBmaW5hbCBib29sZWFuIGhhc05leHQoKSB7Ci0JCQkJCXJldHVybiAhc2Vlbkl0OwotCQkJCX0KLQkJCX07Ci0JCX0KLQotCQlwdWJsaWMgSXRlbVR5cGUgaXRlbVR5cGUoaW50IGluZGV4KSB7Ci0JCQlyZXR1cm4gaXRlbShpbmRleCkuZ2V0SXRlbVR5cGUoKTsKLQkJfQotCQkKLQkJcHVibGljIEl0ZW1UeXBlIHNlcXVlbmNlVHlwZSgpIHsKLQkJCXJldHVybiB2YWx1ZS5nZXRJdGVtVHlwZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBBcnJheVJlc3VsdFNlcXVlbmNlIGltcGxlbWVudHMgUmVzdWx0U2VxdWVuY2UgewotCQkKLQkJcHJpdmF0ZSBmaW5hbCBJdGVtW10gcmVzdWx0czsKLQkKLQkJcHVibGljIEFycmF5UmVzdWx0U2VxdWVuY2UoSXRlbSByZXN1bHRzW10pIHsKLQkJCXRoaXMucmVzdWx0cyA9IHJlc3VsdHM7Ci0JCX0KLQkJCi0JCS8qIChub24tSmF2YWRvYykKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UjZ2V0TGVuZ3RoKCkKLQkJICovCi0JCXB1YmxpYyBpbnQgc2l6ZSgpIHsKLQkJCXJldHVybiByZXN1bHRzLmxlbmd0aDsKLQkJfQotCQkKLQkJLyogKG5vbi1KYXZhZG9jKQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSNnZXRJdGVtKGludCkKLQkJICovCi0JCXB1YmxpYyBJdGVtIGl0ZW0oaW50IGluZGV4KSB7Ci0JCQlpZiAoaW5kZXggPCAwICYmIGluZGV4ID49IHJlc3VsdHMubGVuZ3RoKSB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXggIiArIGluZGV4ICsgIiBpcyBvdXQgb2YgYWxsbG93ZWQgYm91bmRzIChsZXNzIHRoYXQgIiArIHJlc3VsdHMubGVuZ3RoKTsKLQkJCXJldHVybiByZXN1bHRzW2luZGV4XTsKLQkJfQotCQkKLQkJLyogKG5vbi1KYXZhZG9jKQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSNlbXB0eSgpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBlbXB0eSgpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2ZpcnN0KCkKLQkJICovCi0JCXB1YmxpYyBPYmplY3QgZmlyc3RWYWx1ZSgpIHsKLQkJCXJldHVybiBpdGVtKDApLmdldE5hdGl2ZVZhbHVlKCk7Ci0JCX0KLQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2ZpcnN0KCkKLQkJICovCi0JCXB1YmxpYyBJdGVtIGZpcnN0KCkgewotCQkJcmV0dXJuIGl0ZW0oMCk7Ci0JCX0KLQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlI2l0ZXJhdG9yKCkKLQkJICovCi0JCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJCXJldHVybiBuZXcgSXRlcmF0b3IoKSB7Ci0JCQkJaW50IG5leHRJbmRleCA9IDA7Ci0JCQkJCi0JCQkJcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlKCkgewotCQkJCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlJlc3VsdFNlcXVlbmNlcyBhcmUgaW1tdXRhYmxlIik7Ci0JCQkJfQotCQkJCQotCQkJCXB1YmxpYyBmaW5hbCBPYmplY3QgbmV4dCgpIHsKLQkJCQkJaWYgKG5leHRJbmRleCA8IHJlc3VsdHMubGVuZ3RoKSB7Ci0JCQkJCQlyZXR1cm4gcmVzdWx0c1tuZXh0SW5kZXgrK107Ci0JCQkJCX0KLQkJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyBpdGVyYXRvciBpcyBhdCBpdHMgZW5kIik7Ci0JCQkJfQotCQkJCQotCQkJCXB1YmxpYyBmaW5hbCBib29sZWFuIGhhc05leHQoKSB7Ci0JCQkJCXJldHVybiBuZXh0SW5kZXggPCByZXN1bHRzLmxlbmd0aDsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0KLQkJcHVibGljIEl0ZW1UeXBlIGl0ZW1UeXBlKGludCBpbmRleCkgewotCQkJaWYgKGluZGV4IDwgMCAmJiBpbmRleCA+PSByZXN1bHRzLmxlbmd0aCkgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4ICIgKyBpbmRleCArICIgaXMgb3V0IG9mIGFsbGxvd2VkIGJvdW5kcyAobGVzcyB0aGF0ICIgKyByZXN1bHRzLmxlbmd0aCk7Ci0JCQlyZXR1cm4gcmVzdWx0c1tpbmRleF0uZ2V0SXRlbVR5cGUoKTsKLQkJfQotCi0JCXB1YmxpYyBJdGVtVHlwZSBzZXF1ZW5jZVR5cGUoKSB7Ci0JCQlyZXR1cm4gbmV3IFNpbXBsZUF0b21pY0l0ZW1UeXBlSW1wbChCdWlsdGluVHlwZUxpYnJhcnkuWFNfQU5ZVFlQRSwgSXRlbVR5cGUuT0NDVVJSRU5DRV9PTkVfT1JfTUFOWSk7Ci0JCX0KLQotCQlwdWJsaWMgT2JqZWN0IHZhbHVlKGludCBpbmRleCkgewotCQkJcmV0dXJuIGl0ZW0oaW5kZXgpLmdldE5hdGl2ZVZhbHVlKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgaW50IHNpemUoKSB7Ci0JCXJldHVybiB2YWx1ZXMuc2l6ZSgpOwotCX0KLQotCXB1YmxpYyBMaXN0SXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiB2YWx1ZXMubGlzdEl0ZXJhdG9yKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcHJlcGVuZChSZXN1bHRTZXF1ZW5jZSBycykgewotCQl2YWx1ZXMuYWRkQWxsKDAsIGNvbGxlY3Rpb25XcmFwcGVyKHJzKSk7Ci0JfQotCi0JcHJpdmF0ZSBDb2xsZWN0aW9uPEl0ZW0+IGNvbGxlY3Rpb25XcmFwcGVyKGZpbmFsIFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCS8vIFRoaXMgaXMgYSBkdW1teSBjb2xsZWN0aW9ucywgc29sZWx5IGV4aXN0cyBmb3IgZmFzdGVyIGluc2VydHMgaW50byBvdXIgYXJyYXkKLQkJcmV0dXJuIG5ldyBDb2xsZWN0aW9uPEl0ZW0+KCkgewotCi0JCQlwdWJsaWMgYm9vbGVhbiBhZGQoSXRlbSBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBhZGRBbGwoQ29sbGVjdGlvbiBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gY29udGFpbnMoT2JqZWN0IGFyZzApIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBib29sZWFuIGNvbnRhaW5zQWxsKENvbGxlY3Rpb24gYXJnMCkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKLQkJCQlyZXR1cm4gcnMuZW1wdHkoKTsKLQkJCX0KLQotCQkJcHVibGljIEl0ZXJhdG9yLyo8SXRlbT4qLyBpdGVyYXRvcigpIHsKLQkJCQlyZXR1cm4gcnMuaXRlcmF0b3IoKTsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gcmVtb3ZlKE9iamVjdCBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGwoQ29sbGVjdGlvbiBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiByZXRhaW5BbGwoQ29sbGVjdGlvbiBhcmcwKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgaW50IHNpemUoKSB7Ci0JCQkJcmV0dXJuIHJzLnNpemUoKTsKLQkJCX0KLQotCQkJcHVibGljIE9iamVjdFtdIHRvQXJyYXkoKSB7Ci0JCQkJcmV0dXJuIHRvQXJyYXkobmV3IEl0ZW1bc2l6ZSgpXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBPYmplY3RbXSB0b0FycmF5KE9iamVjdFtdIGFyZzApIHsKLQkJCQlpZiAoYXJnMC5sZW5ndGggPCBzaXplKCkpCi0JCQkJCWFyZzAgPSBuZXcgSXRlbVtzaXplKCldOwotCQkJCWZvciAoaW50IGkgPSAwOyBpPCBzaXplKCk7ICsraSkgewotCQkJCQlhcmcwW2ldID0gcnMuaXRlbShpKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIGFyZzA7Ci0JCQl9Ci0JCX07Ci0JfQotCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgRU1QVFkgPSBuZXcgUmVzdWx0U2VxdWVuY2UoKSB7Ci0KLQkJcHVibGljIGludCBzaXplKCkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlwdWJsaWMgSXRlbSBpdGVtKGludCBpbmRleCkgewotCQkJdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIlNlcXVlbmNlIGlzIGVtcHR5ISIpOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcHVibGljIEl0ZW1UeXBlIGl0ZW1UeXBlKGludCBpbmRleCkgewotCQkJdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIlNlcXVlbmNlIGlzIGVtcHR5ISIpOwotCQl9Ci0JCQotCQlwdWJsaWMgSXRlbVR5cGUgc2VxdWVuY2VUeXBlKCkgewotCQkJcmV0dXJuIG5ldyBTaW1wbGVBdG9taWNJdGVtVHlwZUltcGwoQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0FOWVRZUEUsIEl0ZW1UeXBlLk9DQ1VSUkVOQ0VfT05FX09SX01BTlkpOwotCQl9Ci0JCQotCQlwdWJsaWMgT2JqZWN0IHZhbHVlKGludCBpbmRleCkgewotCQkJdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIlNlcXVlbmNlIGlzIGVtcHR5ISIpOwotCQl9Ci0JCQotCQlwdWJsaWMgT2JqZWN0IGZpcnN0VmFsdWUoKSB7Ci0JCQl0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiU2VxdWVuY2UgaXMgZW1wdHkhIik7Ci0JCX0KLQotCQlwdWJsaWMgSXRlbSBmaXJzdCgpIHsKLQkJCXRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJTZXF1ZW5jZSBpcyBlbXB0eSEiKTsKLQkJfQotCQkKLQkJcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQkJcmV0dXJuIG5ldyBJdGVyYXRvcigpIHsKLQkJCQkKLQkJCQlwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0JCQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVzdWx0U2VxdWVuY2VzIGFyZSBpbW11dGFibGUiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcHVibGljIE9iamVjdCBuZXh0KCkgewotCQkJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGlzIFJlc3VsdFNlcXVlbmNlIGlzIGVtcHR5Iik7Ci0JCQkJfQotCQkJCQotCQkJCXB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0JfTsKLQotCXB1YmxpYyBDb2xsZWN0aW9uPEl0ZW0+IGdldENvbGxlY3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLnZhbHVlczsKLQl9Ci0KLQlwdWJsaWMgUmVzdWx0QnVmZmVyIGNvbmNhdChDb2xsZWN0aW9uLyo8SXRlbT4qLyBvdGhlcnMpIHsKLQkJdGhpcy52YWx1ZXMuYWRkQWxsKG90aGVycyk7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugd3JhcChJdGVtIGl0ZW0pIHsKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBTaW5nbGVJdGVtU2VxdWVuY2UpCi0JCQlyZXR1cm4gKFNpbmdsZUl0ZW1TZXF1ZW5jZSlpdGVtOwotCQkKLQkJcmV0dXJuIG5ldyBTaW5nbGVSZXN1bHRTZXF1ZW5jZShpdGVtKTsgCi0JfQotCi0JcHVibGljIEl0ZW0gaXRlbShpbnQgaW5kZXgpIHsKLQkJcmV0dXJuIHZhbHVlcy5nZXQoaW5kZXgpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZEF0KGludCBwb3MsIEl0ZW0gZWxlbWVudCkgewotCQl2YWx1ZXMuYWRkKHBvcywgZWxlbWVudCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9SZXN1bHRTZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9SZXN1bHRTZXF1ZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGIxMDVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvUmVzdWx0U2VxdWVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDM0MDkzMyAtIE1pZ3JhdGUgdG8gbmV3IFhQYXRoMiBBUEkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotCi0vKioKLSAqIEltbXV0YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHJlc3VsdAotICogCi0gKiBAc2luY2UgMi4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVzdWx0U2VxdWVuY2UgewotCS8qKgotCSAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldC4gT25seSBjYWxsIHRoaXMgaWYgeW91IG5lZWQgaXQsIHNpbmNlIGl0IG1heSByZXF1aXJlIHRoYXQgdGhlIGVudGlyZSByZXN1bHQKLQkgKiBpcyBmZXRjaGVkLgotCSAqIAotCSAqIEByZXR1cm4gQ291bnQgb2YgaXRlbXMuCi0JICovCi0JaW50IHNpemUoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm4gdGhlIG5hdGl2ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaXRlbS4KLQkgKiAKLQkgKiBAcGFyYW0gaW5kZXgKLQkgKiBAcmV0dXJuIE5hdGl2ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBpdGVtLgotCSAqLwotCU9iamVjdCB2YWx1ZShpbnQgaW5kZXgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBpdGVtLgotCSAqIAotCSAqIEBwYXJhbSBpbmRleAotCSAqIEByZXR1cm4gTmF0aXZlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGl0ZW0uCi0JICovCi0JSXRlbSBpdGVtKGludCBpbmRleCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG5hdGl2ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlyc3QgaXRlbS4KLQkgKiAKLQkgKiBAcmV0dXJuIE5hdGl2ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaXJzdCBpdGVtLgotCSAqLwotCU9iamVjdCBmaXJzdFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBYUGF0aDIgdHlwZSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBpdGVtIGF0IGxvY2F0aW9uICcwJwotCSAqIAotCSAqIEBwYXJhbSBpbmRleAotCSAqIEByZXR1cm4KLQkgKi8KLQlJdGVtVHlwZSBpdGVtVHlwZShpbnQgaW5kZXgpOwotCQotCS8qKgotCSAqIElzIHRoZSBzZXF1ZW5jZSBlbXB0eS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRydWUgZm9yIGVtcHR5IHNlcXVlbmNlcwotCSAqLwotCWJvb2xlYW4gZW1wdHkoKTsKLQotCS8qKgotCSAqIEl0ZXJhdG9yIG9mIEl0ZW0gZWxlbWVudHMgCi0JICogCi0JICogQHJldHVybgotCSAqLwotCUl0ZXJhdG9yPEl0ZW0+IGl0ZXJhdG9yKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JSXRlbSBmaXJzdCgpOwotCQotCS8qKgotCSAqIERlc2NyaWJlIHRoZSB3aG9sZSBzZXF1ZW5jZSdzIHR5cGUuCi0JICogCi0JICogQHJldHVybiBJdGVtIHR5cGUgZGVmaW5pdGlvbi4KLQkgKi8KLQlJdGVtVHlwZSBzZXF1ZW5jZVR5cGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvU3RhdGljQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9TdGF0aWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5M2I4NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9TdGF0aWNDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGk7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuTmFtZXNwYWNlQ29udGV4dDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uSXRlbVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZU1vZGVsOwotCi0vKioKLSAqIGludGVyZmFjZSB0byBzdGF0aWMgY29udGV4dAotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXRpY0NvbnRleHQgewotCS8qKgotCSAqIFhQYXRoIDEuMCBjb21wYXRpYmlsaXR5IG1vZGUuCi0JICogCi0JICogQHJldHVybiB0cnVlIGlmIHJ1bGVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggWFBhdGggVmVyc2lvbiAxLjAKLQkgKiAgICAgICAgIGFyZSBpbiBlZmZlY3Q7IG90aGVyd2lzZSBmYWxzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1hQYXRoMUNvbXBhdGlibGUoKTsKLQotCS8qKgotCSAqIFtEZWZpbml0aW9uOiBJbi1zY29wZSB2YXJpYWJsZXMuIFRoaXMgaXMgYSBzZXQgb2YgKGV4cGFuZGVkIFFOYW1lLAotCSAqIHR5cGUpIHBhaXJzLiBJdCBkZWZpbmVzIHRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IKLQkgKiByZWZlcmVuY2Ugd2l0aGluIGFuIGV4cHJlc3Npb24uIFRoZSBleHBhbmRlZCBRTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUKLQkgKiB2YXJpYWJsZSwgYW5kIHRoZSB0eXBlIGlzIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgdmFyaWFibGUuXSBBbgotCSAqIGV4cHJlc3Npb24gdGhhdCBiaW5kcyBhIHZhcmlhYmxlIChzdWNoIGFzIGEgZm9yLCBzb21lLCBvciBldmVyeQotCSAqIGV4cHJlc3Npb24pIGV4dGVuZHMgdGhlIGluLXNjb3BlIHZhcmlhYmxlcyBvZiBpdHMgc3ViZXhwcmVzc2lvbnMgd2l0aAotCSAqIHRoZSBuZXcgYm91bmQgdmFyaWFibGUgYW5kIGl0cyB0eXBlLgotCSAqLwotCVN0YXRpY1ZhcmlhYmxlUmVzb2x2ZXIgZ2V0SW5TY29wZVZhcmlhYmxlcygpOwotCi0JIC8qKiAKLQkgKiBbRGVmaW5pdGlvbjogQ29udGV4dCBpdGVtIHN0YXRpYyB0eXBlLiBUaGlzIGNvbXBvbmVudCBkZWZpbmVzIHRoZQotCSAqIHN0YXRpYyB0eXBlIG9mIHRoZSBjb250ZXh0IGl0ZW0gd2l0aGluIHRoZSBzY29wZSBvZiBhIGdpdmVuCi0JICogZXhwcmVzc2lvbi5dCi0JICovCi0JVHlwZURlZmluaXRpb24gZ2V0SW5pdGlhbENvbnRleHRUeXBlKCk7Ci0JCi0JIC8qKiAKLQkgKiBbRGVmaW5pdGlvbjogRnVuY3Rpb24gc2lnbmF0dXJlcy4gVGhpcyBjb21wb25lbnQgZGVmaW5lcyB0aGUgc2V0IG9mCi0JICogZnVuY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gZXhwcmVzc2lvbi4KLQkgKiBFYWNoIGZ1bmN0aW9uIGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgaXRzIGV4cGFuZGVkIFFOYW1lIGFuZCBpdHMKLQkgKiBhcml0eSAobnVtYmVyIG9mIHBhcmFtZXRlcnMpLl0gSW4gYWRkaXRpb24gdG8gdGhlIG5hbWUgYW5kIGFyaXR5LCBlYWNoCi0JICogZnVuY3Rpb24gc2lnbmF0dXJlIHNwZWNpZmllcyB0aGUgc3RhdGljIHR5cGVzIG9mIHRoZSBmdW5jdGlvbgotCSAqIHBhcmFtZXRlcnMgYW5kIHJlc3VsdC4gVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgaW5jbHVkZSB0aGUgc2lnbmF0dXJlcwotCSAqIG9mIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGRpc2N1c3NlZCBpbiAzLjEwLjQgQ29uc3RydWN0b3IKLQkgKiBGdW5jdGlvbnMuCi0JICovCi0JcHVibGljIE1hcDxTdHJpbmcsIEZ1bmN0aW9uTGlicmFyeT4gZ2V0RnVuY3Rpb25MaWJyYXJpZXMoKTsKLQotCS8qKiAKLQkgKiBbRGVmaW5pdGlvbjogU3RhdGljYWxseSBrbm93biBjb2xsYXRpb25zLiBUaGlzIGlzIGFuCi0JICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzZXQgb2YgKFVSSSwgY29sbGF0aW9uKSBwYWlycy4gSXQgZGVmaW5lcyB0aGUKLQkgKiBuYW1lcyBvZiB0aGUgY29sbGF0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHVzZSBpbiBwcm9jZXNzaW5nCi0JICogZXhwcmVzc2lvbnMuXQotCSAqLwotCXB1YmxpYyBDb2xsYXRpb25Qcm92aWRlciBnZXRDb2xsYXRpb25Qcm92aWRlcigpOwotCQotCS8qKgotCSAqIFtEZWZpbml0aW9uOiBCYXNlIFVSSS4gVGhpcyBpcyBhbiBhYnNvbHV0ZSBVUkksIHVzZWQgd2hlbiBuZWNlc3NhcnkgaW4KLQkgKiB0aGUgcmVzb2x1dGlvbiBvZiByZWxhdGl2ZSBVUklzIChmb3IgZXhhbXBsZSwgYnkgdGhlIGZuOnJlc29sdmUtdXJpCi0JICogZnVuY3Rpb24uKV0gVGhlIFVSSSB2YWx1ZSBpcyB3aGl0ZXNwYWNlIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZQotCSAqIHJ1bGVzIGZvciB0aGUgeHM6YW55VVJJIHR5cGUgaW4gW1hNTCBTY2hlbWFdLgotCSAqLwotCXB1YmxpYyBVUkkgZ2V0QmFzZVVyaSgpOwotCQotCS8qKgotCSAqIFtEZWZpbml0aW9uOiBTdGF0aWNhbGx5IGtub3duIGRvY3VtZW50cy4gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBzdHJpbmdzCi0JICogb250byB0eXBlcy4gVGhlIHN0cmluZyByZXByZXNlbnRzIHRoZSBhYnNvbHV0ZSBVUkkgb2YgYSByZXNvdXJjZSB0aGF0Ci0JICogaXMgcG90ZW50aWFsbHkgYXZhaWxhYmxlIHVzaW5nIHRoZSBmbjpkb2MgZnVuY3Rpb24uIFRoZSB0eXBlIGlzIHRoZQotCSAqIHN0YXRpYyB0eXBlIG9mIGEgY2FsbCB0byBmbjpkb2Mgd2l0aCB0aGUgZ2l2ZW4gVVJJIGFzIGl0cyBsaXRlcmFsCi0JICogYXJndW1lbnQuIF0gSWYgdGhlIGFyZ3VtZW50IHRvIGZuOmRvYyBpcyBhIHN0cmluZyBsaXRlcmFsIHRoYXQgaXMgbm90Ci0JICogcHJlc2VudCBpbiBzdGF0aWNhbGx5IGtub3duIGRvY3VtZW50cywgdGhlbiB0aGUgc3RhdGljIHR5cGUgb2YgZm46ZG9jCi0JICogaXMgZG9jdW1lbnQtbm9kZSgpPy4gTm90ZTogVGhlIHB1cnBvc2Ugb2YgdGhlIHN0YXRpY2FsbHkga25vd24KLQkgKiBkb2N1bWVudHMgaXMgdG8gcHJvdmlkZSBzdGF0aWMgdHlwZSBpbmZvcm1hdGlvbiwgbm90IHRvIGRldGVybWluZSB3aGljaAotCSAqIGRvY3VtZW50cyBhcmUgYXZhaWxhYmxlLiBBIFVSSSBuZWVkIG5vdCBiZSBmb3VuZCBpbiB0aGUgc3RhdGljYWxseQotCSAqIGtub3duIGRvY3VtZW50cyB0byBiZSBhY2Nlc3NlZCB1c2luZyBmbjpkb2MuCi0JICovCi0JcHVibGljIEl0ZW1UeXBlIGdldERvY3VtZW50VHlwZShVUkkgZG9jdW1lbnRVcmkpOwotCi0JLyoqCi0JICogW0RlZmluaXRpb246IFN0YXRpY2FsbHkga25vd24gbmFtZXNwYWNlcy4gVGhpcyBpcyBhIHNldCBvZiAocHJlZml4LAotCSAqIFVSSSkgcGFpcnMgdGhhdCBkZWZpbmUgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgYXJlIGtub3duIGR1cmluZyBzdGF0aWMKLQkgKiBwcm9jZXNzaW5nIG9mIGEgZ2l2ZW4gZXhwcmVzc2lvbi5dIFRoZSBVUkkgdmFsdWUgaXMgd2hpdGVzcGFjZQotCSAqIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIHhzOmFueVVSSSB0eXBlIGluIFtYTUwKLQkgKiBTY2hlbWFdLiBOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaW4tc2NvcGUgbmFtZXNwYWNlcywgd2hpY2ggaXMgYQotCSAqIGR5bmFtaWMgcHJvcGVydHkgb2YgYW4gZWxlbWVudCBub2RlLCBhbmQgc3RhdGljYWxseSBrbm93biBuYW1lc3BhY2VzLAotCSAqIHdoaWNoIGlzIGEgc3RhdGljIHByb3BlcnR5IG9mIGFuIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBUaGUgc3RhdGljYWxseSBrbm93biBuYW1lc3BhY2UgY29udGV4dCAKLQkgKi8KLQlwdWJsaWMgTmFtZXNwYWNlQ29udGV4dCBnZXROYW1lc3BhY2VDb250ZXh0KCk7Ci0KLQkvKioKLQkgKiAgW0RlZmluaXRpb246IERlZmF1bHQgZWxlbWVudC90eXBlIG5hbWVzcGFjZS4gVGhpcyBpcyBhIG5hbWVzcGFjZSBVUkkgb3IKLQkgKiAibm9uZSIuIFRoZSBuYW1lc3BhY2UgVVJJLCBpZiBwcmVzZW50LCBpcyB1c2VkIGZvciBhbnkgdW5wcmVmaXhlZCBRTmFtZQotCSAqIGFwcGVhcmluZyBpbiBhIHBvc2l0aW9uIHdoZXJlIGFuIGVsZW1lbnQgb3IgdHlwZSBuYW1lIGlzIGV4cGVjdGVkLl0gVGhlCi0JICogVVJJIHZhbHVlIGlzIHdoaXRlc3BhY2Ugbm9ybWFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUKLQkgKiB4czphbnlVUkkgdHlwZSBpbiBbWE1MIFNjaGVtYV0uCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdE5hbWVzcGFjZSgpOwotCQotCS8qKiAKLQkgKiBEZWZpbml0aW9uOiBEZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZS4gVGhpcyBpcyBhIG5hbWVzcGFjZSBVUkkgb3IKLQkgKiAibm9uZSIuIFRoZSBuYW1lc3BhY2UgVVJJLCBpZiBwcmVzZW50LCBpcyB1c2VkIGZvciBhbnkgdW5wcmVmaXhlZCBRTmFtZQotCSAqIGFwcGVhcmluZyBpbiBhIHBvc2l0aW9uIHdoZXJlIGEgZnVuY3Rpb24gbmFtZSBpcyBleHBlY3RlZC5dIFRoZSBVUkkKLQkgKiB2YWx1ZSBpcyB3aGl0ZXNwYWNlIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIHhzOmFueVVSSQotCSAqIHR5cGUgaW4gW1hNTCBTY2hlbWFdLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0RnVuY3Rpb25OYW1lc3BhY2UoKTsKLQotCS8qKgotCSAqIFtEZWZpbml0aW9uOiBJbi1zY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuIFRoaXMgaXMgYSBnZW5lcmljIHRlcm0gZm9yCi0JICogYWxsIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9ucywgYXR0cmlidXRlIGRlY2xhcmF0aW9ucywgYW5kIHNjaGVtYSB0eXBlCi0JICogZGVmaW5pdGlvbnMgdGhhdCBhcmUgaW4gc2NvcGUgZHVyaW5nIHByb2Nlc3Npbmcgb2YgYW4gZXhwcmVzc2lvbi5dIAotICAgICAqCi0gIAkgKiBAcmV0dXJuIEEgdHlwZSBtb2RlbCB3aGljaCBjb3ZlcnMgdGhlIAotCSAqLwotCXB1YmxpYyBUeXBlTW9kZWwgZ2V0VHlwZU1vZGVsKCk7Ci0KLQkvKioKLQkgKiBpcyB0aGUgZnVuY3Rpb24gZGVjbGFyZWQvYXZhaWxhYmxlIGluIHRoZSBzb3VyY2UgY29udGV4dD8KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lIG5hbWUKLQkgKiBAcGFyYW0gYXJpdHkKLQkgKiAgICAgICAgICAgIGludGVnZXIgb2YgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQkvLyBmdW5jdGlvbiBzaWduYXR1cmVzCi0JcHVibGljIEZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpOwotCi0JLyoqCi0JICogW0RlZmluaXRpb246IFN0YXRpY2FsbHkga25vd24gY29sbGVjdGlvbnMuIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20KLQkgKiBzdHJpbmdzIG9udG8gdHlwZXMuIFRoZSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgYWJzb2x1dGUgVVJJIG9mIGEKLQkgKiByZXNvdXJjZSB0aGF0IGlzIHBvdGVudGlhbGx5IGF2YWlsYWJsZSB1c2luZyB0aGUgZm46Y29sbGVjdGlvbgotCSAqIGZ1bmN0aW9uLiBUaGUgdHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgc2VxdWVuY2Ugb2Ygbm9kZXMgdGhhdCB3b3VsZAotCSAqIHJlc3VsdCBmcm9tIGNhbGxpbmcgdGhlIGZuOmNvbGxlY3Rpb24gZnVuY3Rpb24gd2l0aCB0aGlzIFVSSSBhcyBpdHMKLQkgKiBhcmd1bWVudC5dIElmIHRoZSBhcmd1bWVudCB0byBmbjpjb2xsZWN0aW9uIGlzIGEgc3RyaW5nIGxpdGVyYWwgdGhhdCBpcwotCSAqIG5vdCBwcmVzZW50IGluIHN0YXRpY2FsbHkga25vd24gY29sbGVjdGlvbnMsIHRoZW4gdGhlIHN0YXRpYyB0eXBlIG9mCi0JICogZm46Y29sbGVjdGlvbiBpcyBub2RlKCkqLiBOb3RlOiBUaGUgcHVycG9zZSBvZiB0aGUgc3RhdGljYWxseSBrbm93bgotCSAqIGNvbGxlY3Rpb25zIGlzIHRvIHByb3ZpZGUgc3RhdGljIHR5cGUgaW5mb3JtYXRpb24sIG5vdCB0byBkZXRlcm1pbmUKLQkgKiB3aGljaCBjb2xsZWN0aW9ucyBhcmUgYXZhaWxhYmxlLiBBIFVSSSBuZWVkIG5vdCBiZSBmb3VuZCBpbiB0aGUKLQkgKiBzdGF0aWNhbGx5IGtub3duIGNvbGxlY3Rpb25zIHRvIGJlIGFjY2Vzc2VkIHVzaW5nIGZuOmNvbGxlY3Rpb24uCi0JICovCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldENvbGxlY3Rpb25UeXBlKFN0cmluZyBjb2xsZWN0aW9uTmFtZSk7Ci0KLQkvKioKLQkgKiBbRGVmaW5pdGlvbjogU3RhdGljYWxseSBrbm93biBkZWZhdWx0IGNvbGxlY3Rpb24gdHlwZS4gVGhpcyBpcyB0aGUgdHlwZQotCSAqIG9mIHRoZSBzZXF1ZW5jZSBvZiBub2RlcyB0aGF0IHdvdWxkIHJlc3VsdCBmcm9tIGNhbGxpbmcgdGhlCi0JICogZm46Y29sbGVjdGlvbiBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy5dIFVubGVzcyBpbml0aWFsaXplZCB0byBzb21lCi0JICogb3RoZXIgdmFsdWUgYnkgYW4gaW1wbGVtZW50YXRpb24sIHRoZSB2YWx1ZSBvZiBzdGF0aWNhbGx5IGtub3duIGRlZmF1bHQKLQkgKiBjb2xsZWN0aW9uIHR5cGUgaXMgbm9kZSgpKi4KLQkgKi8KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0RGVmYXVsdENvbGxlY3Rpb25UeXBlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1N0YXRpY1ZhcmlhYmxlUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvU3RhdGljVmFyaWFibGVSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Q4Njc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvU3RhdGljVmFyaWFibGVSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGk7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uSXRlbVR5cGU7Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXRpY1ZhcmlhYmxlUmVzb2x2ZXIgewotCi0JLyoqCi0JICogSXMgdGhlIHZhcmlhYmxlIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBWYXJpYWJsZSBuYW1lCi0JICogQHJldHVybiBBdmFpbGFiaWxpdHkgb2YgdGhlIHZhcmlhYmxlCi0JICovCi0JYm9vbGVhbiBpc1ZhcmlhYmxlUHJlc2VudChRTmFtZSBuYW1lKTsKLQkKLQkvKiogCi0JICogQHBhcmFtIG5hbWUKLQkgKiBAcmV0dXJuCi0JICovCi0JSXRlbVR5cGUgZ2V0VmFyaWFibGVUeXBlKFFOYW1lIG5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9YUGF0aDJFbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvWFBhdGgyRW5naW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1Mzc1NTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9YUGF0aDJFbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi0vKioKLSAqIE1haW4gQVBJIGZvciB0aGUgWFBhdGgyIHByb2Nlc3Nvci4KLSAqIAotICogQG5vaW1wbGVtZW50IFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhQYXRoMkVuZ2luZSB7Ci0KLQkvKioKLQkgKiBQYXJzZSBhIGZ1bGwgWFBhdGgyIGV4cHJlc3Npb24gYW5kIHR5cGUgY2hlY2sgaXQgYWdhaW5zdCB0aGUgc3RhdGljIGNvbnRleHQKLQkgKiAoaWYgaXQgcHJvdmlkZXMgYSB0eXBlIG1vZGVsIHRvIGNoZWNrIGFnYWluc3QpCi0JICogCi0JICogQHBhcmFtIGV4cHJlc3Npb24gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFhQYXRoMiBleHByZXNzaW9uCi0JICogQHBhcmFtIGNvbnRleHQgU3RhdGljIGNvbnRleHQgZm9yIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gQSBjb21waWxlZCBleHByZXNzaW9uLgotCSAqLwotCVhQYXRoMkV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uKFN0cmluZyBleHByZXNzaW9uLCBTdGF0aWNDb250ZXh0IGNvbnRleHQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9YUGF0aDJFeHByZXNzaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1hQYXRoMkV4cHJlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY4YjE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1hQYXRoMkV4cHJlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBwYXJzZWQgYW5kIHN0YXRpY2FsbHkgYm91bmQgWFBhdGgyIGV4cHJlc3Npb24uCi0gKiAKLSAqIEBub2ltcGxlbWVudCBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqIEBzaW5jZSAyLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBYUGF0aDJFeHByZXNzaW9uIHsKLQkKLQkvKioKLQkgKiBSZXR1cm4gYSBjb2xsZWN0aW9ucyBvZiBRTmFtZXMgb2YgdGhlIG5hbWVzIG9mIGZyZWUgdmFyaWFibGVzIHJlZmVyZW5jZWQgaW4gdGhlIFhQYXRoIGV4cHJlc3Npb24uCi0JICogVGhlc2UgdmFyaWFibGVzIG1heSBiZSByZXF1ZXN0ZWQgZHVyaW5nIGV2YWx1YXRpb24uCi0JICogIAotCSAqIEByZXR1cm4gQSBDb2xsZWN0aW9uIGNvbnRhaW5pbmcgamF2YXgueG1sLm5hbWVzcGFjaW5nLlFOYW1lIG9mIGZyZWUgdmFyaWFibGVzCi0JICovCi0JQ29sbGVjdGlvbjxRTmFtZT4gZ2V0RnJlZVZhcmlhYmxlcygpOwotCi0JLyoqCi0JICogUmV0dXJuIGEgY29sbGVjdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBYUGF0aDIgZXhwcmVzc2lvbi4KLQkgKiAgCi0JICogQHJldHVybiBBIENvbGxlY3Rpb24gY29udGFpbmluZyBqYXZheC54bWwubmFtZXNwYWNpbmcuUU5hbWUgb2YgZnVuY3Rpb25zIGluIHVzZS4KLQkgKi8KLQlDb2xsZWN0aW9uPFFOYW1lPiBnZXRSZXNvbHZlZEZ1bmN0aW9ucygpOwotCi0JLyoqCi0JICogUmV0dXJuIGEgY29sbGVjdGlvbnMgb2YgdGhlIGF4aXMgdXNlZCBpbiB0aGUgWFBhdGgyIGV4cHJlc3Npb24uCi0JICogIAotCSAqIEByZXR1cm4gQSBDb2xsZWN0aW9uIGNvbnRhaW5pbmcgU3RyaW5ncyB3aXRoIHRoZSBheGlzIG5hbWVzIGluIHVzZS4KLQkgKi8KLQlDb2xsZWN0aW9uPFN0cmluZz4gZ2V0QXhlcygpOwotCi0JLyoqCi0JICogV2hldGhlciBvciBub3QgdGhlIHJvb3QgcGF0aCBpcyBpbiB1c2UgaW4gdGhlIFhQYXRoMiBleHByZXNzaW9uLgotCSAqICAKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gdXNlcyAvIG9yIC8vLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JYm9vbGVhbiBpc1Jvb3RQYXRoVXNlZCgpOwotCQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBYUGF0aDIgZXhwcmVzc2lvbiwgdXNpbmcgdGhlIHN1cHBsaWVkIER5bmFtaWNDb250ZXh0LgotCSAqIAotCSAqIEBwYXJhbSBkeW5hbWljQ29udGV4dCBEeW5hbWljIGNvbnRleHQgZm9yIHRoZSBleHByZXNzaW9uLgotCSAqIEBwYXJhbSBjb250ZXh0SXRlbXMgQ29udGV4dCBpdGVtICh0eXBpY2FsbHkgbm9kZXMsIG9mdGVuIG9uZSkgdG8gZXZhbHVhdGUgdW5kZXIuCi0JICogQHJldHVybiBBIFJlc3VsdFNlcXVlbmNlIAotCSAqLwotCVJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0LCBPYmplY3RbXSBjb250ZXh0SXRlbXMpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9YUGF0aDJQYXR0ZXJuLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1hQYXRoMlBhdHRlcm4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjOWJlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1hQYXRoMlBhdHRlcm4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGlzIGlzIGEgY29tcGlsZWQgcGF0dGVybiAod2hpY2ggaXMgYSBzaW1wbGVyIHZlcnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgdXNlZCB0byBtYXRjaCBpbiBYU0xUIGZpbGVzLCBldGMuKQotICoKLSAqIEBub2ltcGxlbWVudCBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqIEBzaW5jZSAyLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBYUGF0aDJQYXR0ZXJuIHsKLQkvKioKLQkgKiBAcmV0dXJuIFRoZSBvYmplY3QgcGFzc2VkIGluIG15IHRoZSBjYWxsZXIgd2hlbiB0aGUgcGF0dGVuIHdhcyBjcmVhdGVkLgotCSAqLwotCU9iamVjdCBnZXRVc2VyRGF0YSgpOwotCQotCWJvb2xlYW4gbWF0Y2hlcyhEeW5hbWljQ29udGV4dCBkYywgTm9kZSBjb250ZXh0KTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS9YUGF0aDJQYXR0ZXJuU2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1hQYXRoMlBhdHRlcm5TZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRiM2FjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL1hQYXRoMlBhdHRlcm5TZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpOwotCi1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBAbm9pbXBsZW1lbnQgVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKiBAc2luY2UgMi4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWFBhdGgyUGF0dGVyblNldCB7Ci0JCi0JWFBhdGgyUGF0dGVybiBjb21waWxlUGF0dGVybihTdGF0aWNDb250ZXh0IGNvbnRleHQsIFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgbW9kZSwgaW50IHByaW9yaXR5LCBPYmplY3QgdXNlckRhdGEpOwotCXZvaWQgcmVtb3ZlUGF0dGVybihYUGF0aDJQYXR0ZXJuIHBhdHRlcm4pOwotCQotCXZvaWQgY2xlYXIoKTsKLQkKLQlNYXRjaCBtYXRjaChEeW5hbWljQ29udGV4dCBkYywgTm9kZSBjb250ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvdHlwZXN5c3RlbS9Db21wbGV4VHlwZURlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvdHlwZXN5c3RlbS9Db21wbGV4VHlwZURlZmluaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiOWMxMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vQ29tcGxleFR5cGVEZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbTsKLQotLy8gVE9ETzogUmV2aWV3IGFsbCBvZiB0aGlzCi0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbXBsZXhUeXBlRGVmaW5pdGlvbiBleHRlbmRzIFR5cGVEZWZpbml0aW9uIHsKLQotICAgIC8vIENvbnRlbnQgTW9kZWwgVHlwZXMKLSAgICAvKioKLSAgICAgKiBSZXByZXNlbnRzIGFuIGVtcHR5IGNvbnRlbnQgdHlwZS4gQSBjb250ZW50IHR5cGUgd2l0aCB0aGUgZGlzdGluZ3Vpc2hlZCAKLSAgICAgKiB2YWx1ZSBlbXB0eSB2YWxpZGF0ZXMgZWxlbWVudHMgd2l0aCBubyBjaGFyYWN0ZXIgb3IgZWxlbWVudCAKLSAgICAgKiBpbmZvcm1hdGlvbiBpdGVtIGNoaWxkcmVuLiAKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IENPTlRFTlRfRU1QVFkgICAgICAgICA9IDA7Ci0gICAgLyoqCi0gICAgICogUmVwcmVzZW50cyBhIHNpbXBsZSBjb250ZW50IHR5cGUuIEEgY29udGVudCB0eXBlIHdoaWNoIGlzIHNpbXBsZSAKLSAgICAgKiB2YWxpZGF0ZXMgZWxlbWVudHMgd2l0aCBjaGFyYWN0ZXItb25seSBjaGlsZHJlbi4gCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBDT05URU5UX1NJTVBMRSAgICAgICAgPSAxOwotICAgIC8qKgotICAgICAqIFJlcHJlc2VudHMgYW4gZWxlbWVudC1vbmx5IGNvbnRlbnQgdHlwZS4gQW4gZWxlbWVudC1vbmx5IGNvbnRlbnQgdHlwZSAKLSAgICAgKiB2YWxpZGF0ZXMgZWxlbWVudHMgd2l0aCBjaGlsZHJlbiB0aGF0IGNvbmZvcm0gdG8gdGhlIHN1cHBsaWVkIGNvbnRlbnQgCi0gICAgICogbW9kZWwuIAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc2hvcnQgQ09OVEVOVF9FTEVNRU5UICAgICAgID0gMjsKLSAgICAvKioKLSAgICAgKiBSZXByZXNlbnRzIGEgbWl4ZWQgY29udGVudCB0eXBlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc2hvcnQgQ09OVEVOVF9NSVhFRCAgICAgICAgID0gMzsKLQotICAgIC8qKgotICAgICAqIFtkZXJpdmF0aW9uIG1ldGhvZF06IGVpdGhlciA8Y29kZT5ERVJJVkFUSU9OX0VYVEVOU0lPTjwvY29kZT4sIAotICAgICAqIDxjb2RlPkRFUklWQVRJT05fUkVTVFJJQ1RJT048L2NvZGU+LCBvciA8Y29kZT5ERVJJVkFUSU9OX05PTkU8L2NvZGU+IAotICAgICAqIChzZWUgPGNvZGU+WFNDb25zdGFudHM8L2NvZGU+KS4gCi0gICAgICovCi0gICAgcHVibGljIHNob3J0IGdldERlcml2YXRpb25NZXRob2QoKTsKLQotICAgIC8qKgotICAgICAqIFthYnN0cmFjdF06IGEgYm9vbGVhbi4gQ29tcGxleCB0eXBlcyBmb3Igd2hpY2ggPGNvZGU+YWJzdHJhY3Q8L2NvZGU+IGlzIAotICAgICAqIHRydWUgbXVzdCBub3QgYmUgdXNlZCBhcyB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgdmFsaWRhdGlvbiBvZiAKLSAgICAgKiBlbGVtZW50IGluZm9ybWF0aW9uIGl0ZW1zLiAKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRBYnN0cmFjdCgpOwotCi0gICAgLyoqCi0gICAgICogIEEgc2V0IG9mIGF0dHJpYnV0ZSB1c2VzIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGFuIGVtcHR5IAotICAgICAqIDxjb2RlPlhTT2JqZWN0TGlzdDwvY29kZT4uIAotICAgICAqLwotLy8gICAgcHVibGljIFhTT2JqZWN0TGlzdCBnZXRBdHRyaWJ1dGVVc2VzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBbiBhdHRyaWJ1dGUgd2lsZGNhcmQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgPGNvZGU+bnVsbDwvY29kZT4uIAotICAgICAqLwotLy8gICAgcHVibGljIFhTV2lsZGNhcmQgZ2V0QXR0cmlidXRlV2lsZGNhcmQoKTsKLQotICAgIC8qKgotICAgICAqIFtjb250ZW50IHR5cGVdOiBvbmUgb2YgZW1wdHkgKDxjb2RlPkNPTlRFTlRUWVBFX0VNUFRZPC9jb2RlPiksIGEgc2ltcGxlIAotICAgICAqIHR5cGUgZGVmaW5pdGlvbiAoPGNvZGU+Q09OVEVOVFRZUEVfU0lNUExFPC9jb2RlPiksIG1peGVkICgKLSAgICAgKiA8Y29kZT5DT05URU5UVFlQRV9NSVhFRDwvY29kZT4pLCBvciBlbGVtZW50LW9ubHkgKAotICAgICAqIDxjb2RlPkNPTlRFTlRUWVBFX0VMRU1FTlQ8L2NvZGU+KS4gCi0gICAgICovCi0gICAgcHVibGljIHNob3J0IGdldENvbnRlbnRUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHNpbXBsZSB0eXBlIGRlZmluaXRpb24gY29ycmVzcG9uZGluZyB0byBhIHNpbXBsZSBjb250ZW50IG1vZGVsLCAKLSAgICAgKiBvdGhlcndpc2UgPGNvZGU+bnVsbDwvY29kZT4uIAotICAgICAqLwotICAgIHB1YmxpYyBTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRTaW1wbGVUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHBhcnRpY2xlIGZvciBhIG1peGVkIG9yIGVsZW1lbnQtb25seSBjb250ZW50IG1vZGVsLCBvdGhlcndpc2UgCi0gICAgICogPGNvZGU+bnVsbDwvY29kZT4uIAotICAgICAqLwotLy8gICAgcHVibGljIFhTUGFydGljbGUgZ2V0UGFydGljbGUoKTsKLQotICAgIC8qKgotICAgICAqIFtwcm9oaWJpdGVkIHN1YnN0aXR1dGlvbnNdOiBhIHN1YnNldCBvZiB7ZXh0ZW5zaW9uLCByZXN0cmljdGlvbn0KLSAgICAgKiBAcGFyYW0gcmVzdHJpY3Rpb24gIEV4dGVuc2lvbiBvciByZXN0cmljdGlvbiBjb25zdGFudHMgKHNlZSAKLSAgICAgKiAgIDxjb2RlPlhTQ29uc3RhbnRzPC9jb2RlPikuIAotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiA8Y29kZT5yZXN0cmljdGlvbjwvY29kZT4gaXMgYSBwcm9oaWJpdGVkIHN1YnN0aXR1dGlvbiwgCi0gICAgICogICBvdGhlcndpc2UgZmFsc2UuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNQcm9oaWJpdGVkU3Vic3RpdHV0aW9uKHNob3J0IHJlc3RyaWN0aW9uKTsKLQotICAgIC8qKgotICAgICAqICBbcHJvaGliaXRlZCBzdWJzdGl0dXRpb25zXTogQSBzdWJzZXQgb2Yge2V4dGVuc2lvbiwgcmVzdHJpY3Rpb259IG9yIAotICAgICAqIDxjb2RlPkRFUklWQVRJT05fTk9ORTwvY29kZT4gcmVwcmVzZW50ZWQgYXMgYSBiaXQgZmxhZyAoc2VlIAotICAgICAqIDxjb2RlPlhTQ29uc3RhbnRzPC9jb2RlPikuIAotICAgICAqLwotICAgIHB1YmxpYyBzaG9ydCBnZXRQcm9oaWJpdGVkU3Vic3RpdHV0aW9ucygpOwotCi0gICAgLyoqCi0gICAgICogQSBzZXF1ZW5jZSBvZiBbYW5ub3RhdGlvbnNdIG9yIGFuIGVtcHR5IDxjb2RlPlhTT2JqZWN0TGlzdDwvY29kZT4uCi0gICAgICovCi0vLyAgICBwdWJsaWMgWFNPYmplY3RMaXN0IGdldEFubm90YXRpb25zKCk7Ci0KLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS90eXBlc3lzdGVtL0l0ZW1UeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vSXRlbVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1YTcyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vSXRlbVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW07Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEl0ZW1UeXBlIHsKLQkKLQlwdWJsaWMgc2hvcnQgZ2V0T2NjdXJyZW5jZSgpOwotCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgc2hvcnQgT0NDVVJSRU5DRV9PUFRJT05BTCA9IDA7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBzaG9ydCBPQ0NVUlJFTkNFX09ORSA9IDE7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBzaG9ydCBPQ0NVUlJFTkNFX05PTkVfT1JfTUFOWSA9IDI7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBzaG9ydCBPQ0NVUlJFTkNFX09ORV9PUl9NQU5ZID0gMzsKLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgc2hvcnQgQUxXQVlTX09ORV9NQVNLID0gMHgwMTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIHNob3J0IE1BWUJFX01BTllfTUFTSyA9IDB4MDI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vTm9kZUl0ZW1UeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vTm9kZUl0ZW1UeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OTQ1NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS90eXBlc3lzdGVtL05vZGVJdGVtVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5vZGVJdGVtVHlwZSBleHRlbmRzIEl0ZW1UeXBlIHsKLQkvKioKLQkgKiBGb3IgYXR0cmlidXRlIGFuZCBlbGVtZW50IHR5cGVzLCByZXR1cm4gd2hldGhlciB0aGUgbmFtZQotCSAqIHBhcnQgb2YgdGhlIHR5cGUgdGVzdCBpcyBhIHdpbGRjYXJkLgotCSAqIAotCSAqIEByZXR1cm4gV2lsZGNhcmQgdGVzdD8KLQkgKi8KLQlib29sZWFuIGlzV2lsZGNhcmQoKTsKLQkKLQkvKioKLQkgKiBAcmV0dXJuIG5hbWUgb2YgdGhlIGl0ZW0gdHlwZSwgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlIG51bGwKLQkgKi8KLQlRTmFtZSBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBOb2RlIHR5cGUgYXMgcGVyIGxpc3QgaW4gb3JnLnczYy5kb20uTm9kZQotCSAqIAotCSAqIEByZXR1cm4gVGhlIERPTSBub2RlIHR5cGUKLQkgKi8KLQlzaG9ydCBnZXROb2RlVHlwZSgpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvdHlwZXN5c3RlbS9QcmltaXRpdmVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vUHJpbWl0aXZlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDkzYTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvdHlwZXN5c3RlbS9QcmltaXRpdmVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExIEplc3BlciBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByaW1pdGl2ZVR5cGUvKjxUeXBlIGV4dGVuZHMgQW55VHlwZSwgTmF0aXZlVHlwZT4qLyBleHRlbmRzIFR5cGVEZWZpbml0aW9uIHsKLQotICAgIC8qKgotICAgICAqIHZhbGlkYXRlIGEgZ2l2ZW4gc3RyaW5nIGFnYWluc3QgdGhpcyBzaW1wbGUgdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZW50ICAgICAgIHRoZSBzdHJpbmcgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0gY29udGV4dCAgICAgICB0aGUgdmFsaWRhdGlvbiBjb250ZXh0Ci0gICAgICogQHBhcmFtIHZhbGlkYXRlZEluZm8gdXNlZCB0byBzdG9yZSB2YWxpZGF0aW9uIHJlc3VsdAotICAgICAqCi0gICAgICogQHJldHVybiAgICAgICAgICAgICAgdGhlIGFjdHVhbCB2YWx1ZSAoUU5hbWUsIEJvb2xlYW4pIG9mIHRoZSBzdHJpbmcgdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgY29udGVudCk7Ci0KLSAgICAvKioKLSAgICAgKiB2YWxpZGF0ZSBhIGdpdmVuIHN0cmluZyBhZ2FpbnN0IHRoaXMgc2ltcGxlIHR5cGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29udGVudCAgICAgICB0aGUgc3RyaW5nIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtIGNvbnRleHQgICAgICAgdGhlIHZhbGlkYXRpb24gY29udGV4dAotICAgICAqIEBwYXJhbSB2YWxpZGF0ZWRJbmZvIHVzZWQgdG8gc3RvcmUgdmFsaWRhdGlvbiByZXN1bHQKLSAgICAgKgotICAgICAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBhY3R1YWwgdmFsdWUgKFFOYW1lLCBCb29sZWFuKSBvZiB0aGUgc3RyaW5nIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVOYXRpdmUoLypOYXRpdmVUeXBlKi8gT2JqZWN0IGNvbnRlbnQpOwotCi0gICAgLyoqCi0gICAgICogdmFsaWRhdGUgYSBnaXZlbiBzdHJpbmcgYWdhaW5zdCB0aGlzIHNpbXBsZSB0eXBlLgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRlbnQgICAgICAgdGhlIHN0cmluZyB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbSBjb250ZXh0ICAgICAgIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQKLSAgICAgKiBAcGFyYW0gdmFsaWRhdGVkSW5mbyB1c2VkIHRvIHN0b3JlIHZhbGlkYXRpb24gcmVzdWx0Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICB0aGUgYWN0dWFsIHZhbHVlIChRTmFtZSwgQm9vbGVhbikgb2YgdGhlIHN0cmluZyB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyAvKlR5cGUqL0l0ZW0gY29uc3RydWN0KE9iamVjdCBjb250ZW50KTsKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBhY3R1YWwgdmFsdWUgKFFOYW1lLCBCb29sZWFuKSBvZiB0aGUgc3RyaW5nIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIENsYXNzLyo8VHlwZT4qLyBnZXRJbnRlcmZhY2VDbGFzcygpOwotCi0gICAgLyoqCi0gICAgICogQHJldHVybiAgICAgICAgICAgICAgVGhlIGV4cGVjdGVkIG5hdGl2ZSB0eXBlIChjbGFzcyBvciBpbnRlcmZhY2UpIHRvIGV4cGVjdCB3aGVuIGNhbGxpbmcgZ2V0VmFsdWUuIAotICAgICAqLwotICAgIHB1YmxpYyBDbGFzcy8qPE5hdGl2ZVR5cGU+Ki8gZ2V0TmF0aXZlVHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgd2hldGhlciB0d28gYWN0dWFsIHZhbHVlcyBhcmUgZXF1YWwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUxICB0aGUgZmlyc3QgdmFsdWUKLSAgICAgKiBAcGFyYW0gdmFsdWUyICB0aGUgc2Vjb25kIHZhbHVlCi0gICAgICogQHJldHVybiAgICAgICAgdHJ1ZSBpZiB0aGUgdHdvIHZhbHVlIGFyZSBlcXVhbAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRXF1YWwoT2JqZWN0IHZhbHVlMSwgT2JqZWN0IHZhbHVlMik7Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgdHlwZSBpcyBvciBpcyBkZXJpdmVkIGZyb20gSUQuCi0gICAgICogUkVWSVNJVDogdGhpcyBtZXRob2QgbWFrZXMgSUQgc3BlY2lhbCwgd2hpY2ggaXMgbm90IGEgZ29vZCBkZXNpZ24uCi0gICAgICogICAgICAgICAgYnV0IHNpbmNlIElEIGlzIG5vdCBhIHByaW1pdGl2ZSwgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEKLSAgICAgKiAgICAgICAgICBjbGVhbiB3YXkgb2YgZG9pbmcgaXQgZXhjZXB0IHRvIGRlZmluZSBzcGVjaWFsIG1ldGhvZCBsaWtlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuICB3aGV0aGVyIHRoaXMgc2ltcGxlIHR5cGUgaXMgb3IgaXMgZGVyaXZlZCBmcm9tIElELgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzSURUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHdoaXRlc3BhY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIGRhdGF0eXBlLgotICAgICAqIAotICAgICAqIEByZXR1cm4gdmFsaWQgdmFsdWVzIGFyZSBXU19QUkVTRVJWRSwgV1NfUkVQTEFDRSwgV1NfQ09MTEFQU0UuCi0gICAgICogQGV4Y2VwdGlvbiBEYXRhdHlwZUV4Y2VwdGlvbgotICAgICAqICAgICAgICAgICAgICAgICAgIHVuaW9uIGRhdGF0eXBlcyBkb24ndCBoYXZlIHdoaXRlc3BhY2UgZmFjZXQgYXNzb2NpYXRlZCB3aXRoIHRoZW0KLSAgICAgKi8KLS8vICAgIHB1YmxpYyBzaG9ydCBnZXRXaGl0ZXNwYWNlKCkgdGhyb3dzIERhdGF0eXBlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS90eXBlc3lzdGVtL1NpbXBsZVR5cGVEZWZpbml0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vU2ltcGxlVHlwZURlZmluaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1ZDJjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vU2ltcGxlVHlwZURlZmluaXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExIEplc3BlciBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNpbXBsZVR5cGVEZWZpbml0aW9uIGV4dGVuZHMgVHlwZURlZmluaXRpb24gewotICAgIC8qKgotICAgICAqIFRoZSB2YXJpZXR5IGlzIGFic2VudCBmb3IgdGhlIGFueVNpbXBsZVR5cGUgZGVmaW5pdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IFZBUklFVFlfQUJTRU5UICAgICAgICAgICAgPSAwOwotICAgIC8qKgotICAgICAqIDxjb2RlPkF0b21pYzwvY29kZT4gdHlwZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IFZBUklFVFlfQVRPTUlDICAgICAgICAgICAgPSAxOwotICAgIC8qKgotICAgICAqIDxjb2RlPkxpc3Q8L2NvZGU+IHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBWQVJJRVRZX0xJU1QgICAgICAgICAgICAgID0gMjsKLSAgICAvKioKLSAgICAgKiA8Y29kZT5VbmlvbjwvY29kZT4gdHlwZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IFZBUklFVFlfVU5JT04gICAgICAgICAgICAgPSAzOwotCi0gICAgLyoqCi0gICAgICogW3ZhcmlldHldOiBvbmUgb2Yge2F0b21pYywgbGlzdCwgdW5pb259IG9yIGFic2VudC4gCi0gICAgICovCi0gICAgcHVibGljIHNob3J0IGdldFZhcmlldHkoKTsKLQotICAgIC8qKgotICAgICAqIElmIHZhcmlldHkgaXMgPGNvZGU+YXRvbWljPC9jb2RlPiB0aGUgcHJpbWl0aXZlIHR5cGUgZGVmaW5pdGlvbiAoYSAKLSAgICAgKiBidWlsdC1pbiBwcmltaXRpdmUgZGF0YXR5cGUgZGVmaW5pdGlvbiBvciB0aGUgc2ltcGxlIHVyLXR5cGUgCi0gICAgICogZGVmaW5pdGlvbikgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgPGNvZGU+bnVsbDwvY29kZT4uIAotICAgICAqLwotICAgIHB1YmxpYyBTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRQcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGJ1aWx0LWluIHR5cGUgY2F0ZWdvcnkgdGhpcyB0eXBlIHJlcHJlc2VudHMgb3IgCi0gICAgICogZGVyaXZlZCBmcm9tLiBGb3IgZXhhbXBsZSwgaWYgdGhpcyBzaW1wbGUgdHlwZSBpcyBhIGJ1aWx0LWluIGRlcml2ZWQgCi0gICAgICogdHlwZSBpbnRlZ2VyIHRoZSA8Y29kZT5JTlRFR0VSX0RWPC9jb2RlPiBpcyByZXR1cm5lZC4KLSAgICAgKiAKLSAgICAgKiBLSUxMIQotICAgICAqLwotICAgIHB1YmxpYyBzaG9ydCBnZXRCdWlsdEluS2luZCgpOwotCi0gICAgLyoqCi0gICAgICogSWYgdmFyaWV0eSBpcyA8Y29kZT5saXN0PC9jb2RlPiB0aGUgaXRlbSB0eXBlIGRlZmluaXRpb24gKGFuIGF0b21pYyBvciAKLSAgICAgKiB1bmlvbiBzaW1wbGUgdHlwZSBkZWZpbml0aW9uKSBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSAKLSAgICAgKiA8Y29kZT5udWxsPC9jb2RlPi4gCi0gICAgICovCi0gICAgcHVibGljIFR5cGVEZWZpbml0aW9uIGdldEl0ZW1UeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBJZiB2YXJpZXR5IGlzIDxjb2RlPnVuaW9uPC9jb2RlPiB0aGUgbGlzdCBvZiBtZW1iZXIgdHlwZSBkZWZpbml0aW9ucyAoYSAKLSAgICAgKiBub24tZW1wdHkgc2VxdWVuY2Ugb2Ygc2ltcGxlIHR5cGUgZGVmaW5pdGlvbnMpIGlzIGF2YWlsYWJsZSwgCi0gICAgICogb3RoZXJ3aXNlIGFuIGVtcHR5IDxjb2RlPlhTT2JqZWN0TGlzdDwvY29kZT4uIAotICAgICAqLwotICAgIHB1YmxpYyBMaXN0Lyo8U2ltcGxlVHlwZURlZmluaXRpb24+Ki8gZ2V0TWVtYmVyVHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFtmYWNldHNdOiBhbGwgZmFjZXRzIGRlZmluZWQgb24gdGhpcyB0eXBlLiBUaGUgdmFsdWUgaXMgYSBiaXQgCi0gICAgICogY29tYmluYXRpb24gb2YgRkFDRVRfWFhYIGNvbnN0YW50cyBvZiBhbGwgZGVmaW5lZCBmYWNldHMuIAotICAgICAqLwotLy8gICAgcHVibGljIHNob3J0IGdldERlZmluZWRGYWNldHMoKTsKLQotICAgIC8qKgotICAgICAqIENvbnZlbmllbmNlIG1ldGhvZC4gW0ZhY2V0c106IGNoZWNrIHdoZXRoZXIgYSBmYWNldCBpcyBkZWZpbmVkIG9uIHRoaXMgCi0gICAgICogdHlwZS4KLSAgICAgKiBAcGFyYW0gZmFjZXROYW1lICBUaGUgbmFtZSBvZiB0aGUgZmFjZXQuIAotICAgICAqIEByZXR1cm4gIFRydWUgaWYgdGhlIGZhY2V0IGlzIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICAgKi8KLS8vICAgIHB1YmxpYyBib29sZWFuIGlzRGVmaW5lZEZhY2V0KHNob3J0IGZhY2V0TmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBbZmFjZXRzXTogYWxsIGRlZmluZWQgZmFjZXRzIGZvciB0aGlzIHR5cGUgd2hpY2ggYXJlIGZpeGVkLgotICAgICAqLwotLy8gICAgcHVibGljIHNob3J0IGdldEZpeGVkRmFjZXRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QuIFtGYWNldHNdOiBjaGVjayB3aGV0aGVyIGEgZmFjZXQgaXMgZGVmaW5lZCBhbmQgCi0gICAgICogZml4ZWQgb24gdGhpcyB0eXBlLiAKLSAgICAgKiBAcGFyYW0gZmFjZXROYW1lICBUaGUgbmFtZSBvZiB0aGUgZmFjZXQuIAotICAgICAqIEByZXR1cm4gIFRydWUgaWYgdGhlIGZhY2V0IGlzIGZpeGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0vLyAgICBwdWJsaWMgYm9vbGVhbiBpc0ZpeGVkRmFjZXQoc2hvcnQgZmFjZXROYW1lKTsKLQotICAgIC8qKgotICAgICAqIENvbnZlbmllbmNlIG1ldGhvZC4gUmV0dXJucyBhIHZhbHVlIG9mIGEgc2luZ2xlIGNvbnN0cmFpbmluZyBmYWNldCBmb3IgCi0gICAgICogdGhpcyBzaW1wbGUgdHlwZSBkZWZpbml0aW9uLiBUaGlzIG1ldGhvZCBtdXN0IG5vdCBiZSB1c2VkIHRvIHJldHJpZXZlIAotICAgICAqIHZhbHVlcyBmb3IgPGNvZGU+ZW51bWVyYXRpb248L2NvZGU+IGFuZCA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBmYWNldHMuIAotICAgICAqIEBwYXJhbSBmYWNldE5hbWUgVGhlIG5hbWUgb2YgdGhlIGZhY2V0LCBpLmUuIAotICAgICAqICAgPGNvZGU+RkFDRVRfTEVOR1RILCBGQUNFVF9UT1RBTERJR0lUUzwvY29kZT4uCi0gICAgICogICBUbyByZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIGEgcGF0dGVybiBvciAKLSAgICAgKiAgIGFuIGVudW1lcmF0aW9uLCBzZWUgPGNvZGU+ZW51bWVyYXRpb248L2NvZGU+IGFuZCAKLSAgICAgKiAgIDxjb2RlPnBhdHRlcm48L2NvZGU+LgotICAgICAqIEByZXR1cm4gQSB2YWx1ZSBvZiB0aGUgZmFjZXQgc3BlY2lmaWVkIGluIDxjb2RlPmZhY2V0TmFtZTwvY29kZT4gZm9yIAotICAgICAqICAgdGhpcyBzaW1wbGUgdHlwZSBkZWZpbml0aW9uIG9yIDxjb2RlPm51bGw8L2NvZGU+LiAKLSAgICAgKi8KLS8vICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGV4aWNhbEZhY2V0VmFsdWUoc2hvcnQgZmFjZXROYW1lKTsKLQotICAgIC8qKgotICAgICAqIEEgbGlzdCBvZiBlbnVtZXJhdGlvbiB2YWx1ZXMgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYW4gZW1wdHkgCi0gICAgICogPGNvZGU+U3RyaW5nTGlzdDwvY29kZT4uIAotICAgICAqLwotLy8gICAgcHVibGljIFN0cmluZ0xpc3QgZ2V0TGV4aWNhbEVudW1lcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIGxpc3Qgb2YgcGF0dGVybiB2YWx1ZXMgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYW4gZW1wdHkgCi0gICAgICogPGNvZGU+U3RyaW5nTGlzdDwvY29kZT4uIAotICAgICAqLwotLy8gICAgcHVibGljIFN0cmluZ0xpc3QgZ2V0TGV4aWNhbFBhdHRlcm4oKTsKLQotICAgIC8qKgotICAgICAqICBGdW5kYW1lbnRhbCBGYWNldDogb3JkZXJlZC4gCi0gICAgICovCi0gICAgcHVibGljIHNob3J0IGdldE9yZGVyZWQoKTsKLQotICAgIC8qKgotICAgICAqIEZ1bmRhbWVudGFsIEZhY2V0OiBjYXJkaW5hbGl0eS4gCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0RmluaXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBGdW5kYW1lbnRhbCBGYWNldDogYm91bmRlZC4gCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Qm91bmRlZCgpOwotCi0gICAgLyoqCi0gICAgICogRnVuZGFtZW50YWwgRmFjZXQ6IG51bWVyaWMuIAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldE51bWVyaWMoKTsKLQotICAgIC8qKgotICAgICAqICBBIGxpc3Qgb2YgY29uc3RyYWluaW5nIGZhY2V0cyBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBhbiBlbXB0eSAKLSAgICAgKiA8Y29kZT5YU09iamVjdExpc3Q8L2NvZGU+LiBOb3RlOiBUaGlzIG1ldGhvZCBtdXN0IG5vdCBiZSB1c2VkIHRvIAotICAgICAqIHJldHJpZXZlIHZhbHVlcyBmb3IgPGNvZGU+ZW51bWVyYXRpb248L2NvZGU+IGFuZCA8Y29kZT5wYXR0ZXJuPC9jb2RlPiAKLSAgICAgKiBmYWNldHMuIAotICAgICAqLwotLy8gICAgcHVibGljIFhTT2JqZWN0TGlzdCBnZXRGYWNldHMoKTsKLQotICAgIC8qKgotICAgICAqICBBIGxpc3Qgb2YgZW51bWVyYXRpb24gYW5kIHBhdHRlcm4gY29uc3RyYWluaW5nIGZhY2V0cyBpZiBpdCBleGlzdHMsIAotICAgICAqIG90aGVyd2lzZSBhbiBlbXB0eSA8Y29kZT5YU09iamVjdExpc3Q8L2NvZGU+LiAKLSAgICAgKi8KLS8vICAgIHB1YmxpYyBYU09iamVjdExpc3QgZ2V0TXVsdGlWYWx1ZUZhY2V0cygpOwotCi0gICAgLyoqCi0gICAgICogQSBzZXF1ZW5jZSBvZiBbYW5ub3RhdGlvbnNdIG9yIGFuIGVtcHR5IDxjb2RlPlhTT2JqZWN0TGlzdDwvY29kZT4uCi0gICAgICovCi0vLyAgICBwdWJsaWMgWFNPYmplY3RMaXN0IGdldEFubm90YXRpb25zKCk7Ci0gICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9hcGkvdHlwZXN5c3RlbS9UeXBlRGVmaW5pdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS90eXBlc3lzdGVtL1R5cGVEZWZpbml0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYjMzMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS90eXBlc3lzdGVtL1R5cGVEZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExIEplc3BlciBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBAbm9pbXBsZW1lbnQgVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKiBAc2luY2UgMi4wCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHlwZURlZmluaXRpb24gewotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7Ci0JcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0JCi0gICAgcHVibGljIFR5cGVEZWZpbml0aW9uIGdldEJhc2VUeXBlKCk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IERFUklWQVRJT05fTk9ORSAgICAgICAgICAgPSAwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc2hvcnQgREVSSVZBVElPTl9FWFRFTlNJT04gICAgICA9IDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBERVJJVkFUSU9OX1JFU1RSSUNUSU9OICAgID0gMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IERFUklWQVRJT05fU1VCU1RJVFVUSU9OICAgPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc2hvcnQgREVSSVZBVElPTl9VTklPTiAgICAgICAgICA9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBERVJJVkFUSU9OX0xJU1QgICAgICAgICAgID0gMTY7Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBkZXJpdmVkRnJvbVR5cGUoVHlwZURlZmluaXRpb24gYW5jZXN0b3JUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBkZXJpdmF0aW9uTWV0aG9kKTsKLQotICAgIHB1YmxpYyBib29sZWFuIGRlcml2ZWRGcm9tKFN0cmluZyBuYW1lc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgZGVyaXZhdGlvbk1ldGhvZCk7Ci0JCi0gICAgcHVibGljIENsYXNzIGdldE5hdGl2ZVR5cGUoKTsKLSAgICAKLSAgICBMaXN0Lyo8U2hvcnQ+Ki8gZ2V0U2ltcGxlVHlwZXMoQXR0ciBhdHRyKTsKLQotCSAgTGlzdC8qPFNob3J0PiovIGdldFNpbXBsZVR5cGVzKEVsZW1lbnQgYXR0cik7Ci0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vVHlwZU1vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvYXBpL3R5cGVzeXN0ZW0vVHlwZU1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiN2ZjZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL2FwaS90eXBlc3lzdGVtL1R5cGVNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBKZXNwZXIgTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbTsKLQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFR5cGVNb2RlbCB7Ci0JVHlwZURlZmluaXRpb24gZ2V0VHlwZShOb2RlIG5vZGUpOwotCVR5cGVEZWZpbml0aW9uIGxvb2t1cFR5cGUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHR5cGVOYW1lKTsKLQlUeXBlRGVmaW5pdGlvbiBsb29rdXBFbGVtZW50RGVjbGFyYXRpb24oU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGVsZW1lbnROYW1lKTsKLQlUeXBlRGVmaW5pdGlvbiBsb29rdXBBdHRyaWJ1dGVEZWNsYXJhdGlvbihTdHJpbmcgbmFtZXNwYWNlLAotCQkJU3RyaW5nIGF0dHJpYnV0ZU5hbWUpOwotCQotCS8qKgotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgdGhlIG5vZGUgdHlwZQotCSAqIEBwYXJhbSBldAotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0vLwlwdWJsaWMgYm9vbGVhbiBkZXJpdmVzRnJvbShOb2RlIGF0LCBRTmFtZSBldCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIHRoZSBub2RlIHR5cGUKLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0vLwlwdWJsaWMgYm9vbGVhbiBkZXJpdmVzRnJvbShOb2RlIGF0LCBUeXBlRGVmaW5pdGlvbiBldCk7Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9Db2xsYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9Db2xsYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTMyNjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvQ29sbGF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSmVzcGVyIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci0KLS8qKgotICogU2VydmljZSBwcm92aWRlciBpbnRlcmZhY2UgZm9yIGxvb2tpbmcgdXAgY29sbGF0aW9ucyBmcm9tIHdpdGhpbiB0aGUgZHluYW1pYyBjb250ZXh0LgotICogQHNpbmNlIDEuMQotICogCi0gKiBAZGVwcmVjYXRlZCBVc2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkNvbGxhdGlvblByb3ZpZGVyIGluc3RlYWQKLSAqLwotcHVibGljIGludGVyZmFjZSBDb2xsYXRpb25Qcm92aWRlciB7Ci0JLyoqCi0JICogR2V0cyB0aGUgbmFtZWQgY29sbGF0b3IuIFczQyBkb2VzIG5vdCBkZWZpbmUgY29sbGF0aW9uIG5hbWVzICh5ZXQ/KSBzbyB3ZSBhcmUgY29uc3RyYWluZWQgdG8gdXNpbmcgYW4KLQkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG5hbWluZyBzY2hlbWUuCi0JICogCi0JICogQHBhcmFtIG5hbWUgQSBVUkkgZGVzaWduYXRpbmcgdGhlIGNvbGxhdGlvbiB0byB1c2UKLQkgKiBAcmV0dXJuIFRoZSBjb2xsYXRpb24gdG8gdXNlLCBvciBudWxsIGlmIG5vIHN1Y2ggY29sbGF0aW9uIGV4aXN0cyBieSB0aGlzIHByb3ZpZGVyCi0JICovCi0JQ29tcGFyYXRvciBnZXRfY29sbGF0aW9uKFN0cmluZyBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRE9NQnVpbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01CdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZDdmMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01CdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIERvYyBmaXhlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5pby4qOwotCi1pbXBvcnQgb3JnLnczYy5kb20uKjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy4qOwotaW1wb3J0IG9yZy54bWwuc2F4Lio7Ci0KLS8qKgotICogVGhlIERPTSBidWlsZGVyIGxvYWRzIGFuIERPTSBmcm9tIGFuIElucHV0U3RyZWFtLiBUaGUgbG9hZGluZyBpcyBhbHdheXMgbmFtZXNwYWNlIGF3YXJlLgotICovCi1wdWJsaWMgY2xhc3MgRE9NQnVpbGRlciBpbXBsZW1lbnRzIERPTUxvYWRlciB7Ci0JYm9vbGVhbiBfdmFsaWRhdGluZzsKLQlib29sZWFuIF9uYW1lc3BhY2VfYXdhcmU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRE9NIGJ1aWxkZXIuCi0JICovCi0JcHVibGljIERPTUJ1aWxkZXIoKSB7Ci0JCV92YWxpZGF0aW5nID0gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogTG9hZHMgVGhlIFhNTCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gaW4KLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBzdHJlYW0uCi0JICogQHRocm93cyBET01Mb2FkZXJFeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBET00gbG9hZGVyIGV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBsb2FkZWQgZG9jdW1lbnQuCi0JICovCi0JLy8gWFhYOiBmaXggZXJyb3IgcmVwb3J0aW5nCi0JcHVibGljIERvY3VtZW50IGxvYWQoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBET01Mb2FkZXJFeGNlcHRpb24gewotCi0JCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlmYWN0b3J5LnNldFZhbGlkYXRpbmcoX3ZhbGlkYXRpbmcpOwotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0KLQkJCS8vIGlmKF92YWxpZGF0aW5nKSB7Ci0JCQlidWlsZGVyLnNldEVycm9ySGFuZGxlcihuZXcgRXJyb3JIYW5kbGVyKCkgewotCQkJCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQkJCXRocm93IGU7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWFBhcnNlRXhjZXB0aW9uIHsKLQkJCQkJdGhyb3cgZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0JCQkJCQl0aHJvd3MgU0FYUGFyc2VFeGNlcHRpb24gewotCQkJCQl0aHJvdyBlOyAvLyBYWFgKLQkJCQl9Ci0JCQl9KTsKLQkJCS8vIH0KLQkJCXJldHVybiBidWlsZGVyLnBhcnNlKGluKTsKLQkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIlNBWCBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IERPTUxvYWRlckV4Y2VwdGlvbigiUGFyc2VyIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9uOiAiCi0JCQkJCSsgZS5nZXRNZXNzYWdlKCkpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgRE9NTG9hZGVyRXhjZXB0aW9uKCJJTyBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdmFsaWRhdGluZyBib29sZWFuLgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBpcyB0aGUgdmFsdWUgdG8gc2V0IHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4gdG8uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhbGlkYXRpbmcoYm9vbGVhbiB4KSB7Ci0JCV92YWxpZGF0aW5nID0geDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJkMTg1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RPTUxvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBEb2N1bWVudGVkIG5hbWVzcGFjZSBhd2FyZW5lc3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICogVGhlIERPTSBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1bWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBET01Mb2FkZXIgewotCi0JLyoqCi0JICogVGhlIERPTSBsb2FkZXIgbG9hZHMgdGhlIFhNTCBkb2N1ZW1udAotCSAqIAotCSAqIEBwYXJhbSBpbgotCSAqICAgICAgICAgICAgaXMgdGhlIGlucHV0IHN0cmVhbS4KLQkgKiBAdGhyb3dzIERPTUxvYWRlckV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIERPTSBsb2FkZXIgZXhjZXB0aW9uLgotCSAqIEByZXR1cm4gVGhlIGxvYWRlZCBkb2N1bWVudC4gVGhlIGRvY3VtZW50IGlzIGFsd2F5cyBsb2FkZWQgYXMgbmFtZXNwYWNlLWF3YXJlCi0JICovCi0JcHVibGljIERvY3VtZW50IGxvYWQoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBET01Mb2FkZXJFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBTZXQgdmFsaWRhdGluZyBib29sZWFuLgotCSAqIAotCSAqIEBwYXJhbSB2YWwKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YWxpZGF0aW5nIGJvb2xlYW4uCi0JICovCi0JLy8gWFhYOiBkZWZhdWx0IGlzIGZhbHNlID8hIFtkb2N1bWVudCBpdCA/XQotCXB1YmxpYyB2b2lkIHNldF92YWxpZGF0aW5nKGJvb2xlYW4gdmFsKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXJFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRE9NTG9hZGVyRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMDg1ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9ET01Mb2FkZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotCi0vKioKLSAqIEV4Y2VwdGlvbiBjYXVzZWQgYnkgRE9NIGxvYWRlci4KLSAqIEBkZXByZWNhdGVkIE9ubHkgdXNlZCBpbiBkZXByZWNhdGVkIEFQSXMKLSAqLwotcHVibGljIGNsYXNzIERPTUxvYWRlckV4Y2VwdGlvbiBleHRlbmRzIFhQYXRoRXhjZXB0aW9uIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC03NjUyODY1MjIyMjExMDY3MjAxTDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBET00gbG9hZGVyIGV4Y2VwdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBET01Mb2FkZXJFeGNlcHRpb24oU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdER5bmFtaWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHREeW5hbWljQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2UyM2ZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdER5bmFtaWNDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4KLSAqICAgICAgICAgICAgICAgICAgLSBidWcgMjYyNzY1IC0gZml4IGhhbmRsaW5nIG9mIHJhbmdlIGV4cHJlc3Npb24gb3A6dG8gYW5kIGVtcHR5IHNlcXVlbmNlIAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyODExNTkgLSBmaXggZG9jdW1lbnQgbG9hZGluZyBhbmQgcmVzb2x2aW5nIFVSSXMgCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAgKiAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzI1MjYyIC0gcHJvdmlkaW5nIGFiaWxpdHkgdG8gc3RvcmUgYW4gWFBhdGgyIHNlcXVlbmNlIGludG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gdXNlci1kZWZpbmVkIHZhcmlhYmxlLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRGVmYXVsdFN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnVuY3Rpb25MaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXlUaW1lRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLnhlcmNlcy5YZXJjZXNUeXBlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnV0aWwuUmVzdWx0U2VxdWVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEgRHluYW1pYyBDb250ZXh0LgotICogCi0gKiBJbml0aWFsaXplcyBhbmQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBvZiBhIGR5bmFtaWMgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlCi0gKiBYUGF0aCAyLjAgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHREeW5hbWljQ29udGV4dCBleHRlbmRzIERlZmF1bHRTdGF0aWNDb250ZXh0IGltcGxlbWVudHMKLQkJRHluYW1pY0NvbnRleHQgewotCi0JcHJpdmF0ZSBGb2N1cyBfZm9jdXM7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQlwcml2YXRlIE1hcCBfbG9hZGVkX2RvY3VtZW50czsKLQlwcml2YXRlIEdyZWdvcmlhbkNhbGVuZGFyIF9jdXJyZW50X2RhdGVfdGltZTsKLQlwcml2YXRlIFN0cmluZyBfZGVmYXVsdF9jb2xsYXRpb25fbmFtZSA9IENPREVQT0lOVF9DT0xMQVRJT047Ci0JcHJpdmF0ZSBDb2xsYXRpb25Qcm92aWRlciBfY29sbGF0aW9uX3Byb3ZpZGVyOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHNjaGVtYQotCSAqICAgICAgICAgICAgU2NoZW1hIGluZm9ybWF0aW9uIG9mIGRvY3VtZW50LiBNYXkgYmUgbnVsbAotCSAqIEBwYXJhbSBkb2MKLQkgKiAgICAgICAgICAgIERvY3VtZW50IFtyb290XSBub2RlIG9mIFhNTCBzb3VyY2UuCi0JICovCi0JcHVibGljIERlZmF1bHREeW5hbWljQ29udGV4dChYU01vZGVsIHNjaGVtYSwgRG9jdW1lbnQgZG9jKSB7Ci0JCXRoaXMobmV3IFhlcmNlc1R5cGVNb2RlbChzY2hlbWEpKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKiAKLQkgKiBAcGFyYW0gc2NoZW1hCi0JICogICAgICAgICAgICBTY2hlbWEgaW5mb3JtYXRpb24gb2YgZG9jdW1lbnQuIE1heSBiZSBudWxsCi0JICogQHBhcmFtIGRvYwotCSAqICAgICAgICAgICAgRG9jdW1lbnQgW3Jvb3RdIG5vZGUgb2YgWE1MIHNvdXJjZS4KLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIERlZmF1bHREeW5hbWljQ29udGV4dChUeXBlTW9kZWwgc2NoZW1hKSB7Ci0JCXN1cGVyKHNjaGVtYSk7Ci0KLQkJX2ZvY3VzID0gbnVsbDsKLQkJX3R6ID0gbmV3IFhTRGF5VGltZUR1cmF0aW9uKDAsIDUsIDAsIDAsIHRydWUpOwotCQlfbG9hZGVkX2RvY3VtZW50cyA9IG5ldyBIYXNoTWFwKCk7Ci0JfQotCS8qKgotCSAqIFJlYWRzIHRoZSBkYXkgZnJvbSBhIFRpbWVEdXJhdGlvbiB0eXBlCi0JICogCi0JICogQHJldHVybiBhbiB4czppbnRlZ2VyIF90egotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBDdXJyZW50IHN0YWJsZSBkYXRlIHRpbWUgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LgotCSAqIEBzaW5jZSAxLjEKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCNnZXRfY3VycmVudF90aW1lKCkKLQkgKi8KLQlwdWJsaWMgR3JlZ29yaWFuQ2FsZW5kYXIgY3VycmVudF9kYXRlX3RpbWUoKSB7Ci0JCWlmIChfY3VycmVudF9kYXRlX3RpbWUgPT0gbnVsbCkgewotCQkJX2N1cnJlbnRfZGF0ZV90aW1lID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0JCX0KLQkJcmV0dXJuIF9jdXJyZW50X2RhdGVfdGltZTsKLQl9Ci0JCi0JLyoqCi0JICogQ2hhbmdlcyB0aGUgY3VycmVudCBmb2N1cy4KLQkgKiAKLQkgKiBAcGFyYW0gZgotCSAqICAgICAgICAgICAgZm9jdXMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0X2ZvY3VzKEZvY3VzIGYpIHsKLQkJX2ZvY3VzID0gZjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGZvY3VzCi0JICogCi0JICogQHJldHVybiBfZm9jdXMKLQkgKi8KLQlwdWJsaWMgRm9jdXMgZm9jdXMoKSB7Ci0JCXJldHVybiBfZm9jdXM7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgY29udGV4dCBpdGVtIHRoYXQgaXMgaW4gZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIEFueVR5cGUgcmVzdWx0IGZyb20gX2ZvY3VzLmNvbnRleHRfaXRlbSgpCi0JICovCi0JcHVibGljIEFueVR5cGUgY29udGV4dF9pdGVtKCkgewotCQlyZXR1cm4gX2ZvY3VzLmNvbnRleHRfaXRlbSgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLnBvc2l0aW9uKCkKLQkgKi8KLQlwdWJsaWMgaW50IGNvbnRleHRfcG9zaXRpb24oKSB7Ci0JCXJldHVybiBfZm9jdXMucG9zaXRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgZm9jdXMKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGludGVnZXIgcmVzdWx0IGZyb20gX2ZvY3VzLmxhc3QoKQotCSAqLwotCXB1YmxpYyBpbnQgbGFzdCgpIHsKLQkJcmV0dXJuIF9mb2N1cy5sYXN0KCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHZhcmlhYmxlIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIEFueVR5cGUgcmVzdWx0IGZyb20gZ2V0X3ZhcihuYW1lKSBvciByZXR1cm4gTlVMTAotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldF92YXJpYWJsZShRTmFtZSBuYW1lKSB7Ci0JCS8vIFhYWDogYnVpbHQtaW4gdmFyaWFibGVzCi0JCWlmICgiZnMiLmVxdWFscyhuYW1lLnByZWZpeCgpKSkgewotCQkJaWYgKG5hbWUubG9jYWwoKS5lcXVhbHMoImRvdCIpKQotCQkJCXJldHVybiBjb250ZXh0X2l0ZW0oKTsKLQotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGdldF92YXIobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHJldHVybiBhIFJlc3VsdFNlcXVlbmNlIGZyb20gZnVuY3QuZXZhbHVhdGUoYXJncykKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGVfZnVuY3Rpb24oUU5hbWUgbmFtZSwgQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUZ1bmN0aW9uIGZ1bmN0ID0gZnVuY3Rpb24obmFtZSwgYXJncy5zaXplKCkpOwotCi0JCWFzc2VydCBmdW5jdCAhPSBudWxsOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZVV0aWwubmV3VG9PbGQoZnVuY3QuZXZhbHVhdGUoYXJncykpOwotCX0KLQotCS8qKgotCSAqIEFkZHMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCi0JICogCi0JICogQHBhcmFtIGZsCi0JICogICAgICAgICAgICBGdW5jdGlvbiBsaWJyYXJ5IHRvIGFkZC4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfZnVuY3Rpb25fbGlicmFyeShGdW5jdGlvbkxpYnJhcnkgZmwpIHsKLQkJc3VwZXIuYWRkX2Z1bmN0aW9uX2xpYnJhcnkoZmwpOwotCQlmbC5zZXRfZHluYW1pY19jb250ZXh0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIGdldCBkb2N1bWVudAotCSAqIAotCSAqIEByZXR1cm4gYSBSZXN1bHRTZXF1ZW5jZSBmcm9tIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCkKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGdldF9kb2MoVVJJIHJlc29sdmVkKSB7Ci0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCWlmIChfbG9hZGVkX2RvY3VtZW50cy5jb250YWluc0tleShyZXNvbHZlZCkpIHsKLQkJCSAvL3RyaWVkIGJlZm9yZQotCQkJZG9jID0gKERvY3VtZW50KV9sb2FkZWRfZG9jdW1lbnRzLmdldChyZXNvbHZlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlkb2MgPSByZXRyaWV2ZV9kb2MocmVzb2x2ZWQpOwotCQkJX2xvYWRlZF9kb2N1bWVudHMucHV0KHJlc29sdmVkLCBkb2MpOwotCQl9Ci0KLQkJaWYgKGRvYyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBEb2NUeXBlKGRvYywgZ2V0VHlwZU1vZGVsKGRvYykpKTsKLQl9Ci0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBVUkkgcmVzb2x2ZV91cmkoU3RyaW5nIHVyaSkgewotCQl0cnkgewotCQkJVVJJIHJlYWxVUkkgPSBVUkkuY3JlYXRlKHVyaSk7Ci0JCQlpZiAocmVhbFVSSS5pc0Fic29sdXRlKCkpIHsKLQkJCQlyZXR1cm4gcmVhbFVSSTsKLQkJCX0gZWxzZSB7Ci0JCQkJVVJJIGJhc2VVUkkgPSBVUkkuY3JlYXRlKGJhc2VfdXJpKCkuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJcmV0dXJuIGJhc2VVUkkucmVzb2x2ZSh1cmkpOwotCQkJfQotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8vIFhYWCBtYWtlIGl0IG5pY2UsIGFuZCBtb3ZlIGl0IG91dCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24KLQlwcml2YXRlIERvY3VtZW50IHJldHJpZXZlX2RvYyhVUkkgdXJpKSB7Ci0JCXRyeSB7Ci0JCQlET01Mb2FkZXIgbG9hZGVyID0gbmV3IFhlcmNlc0xvYWRlcigpOwotCQkJbG9hZGVyLnNldF92YWxpZGF0aW5nKGZhbHNlKTsKLQotCQkJRG9jdW1lbnQgZG9jID0gbG9hZGVyLmxvYWQobmV3IFVSTCh1cmkudG9TdHJpbmcoKSkub3BlblN0cmVhbSgpKTsKLQkJCWRvYy5zZXREb2N1bWVudFVSSSh1cmkudG9TdHJpbmcoKSk7Ci0JCQlyZXR1cm4gZG9jOwotCQl9IGNhdGNoIChET01Mb2FkZXJFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCi0JICogCi0JICogQHBhcmFtIHZhcgotCSAqICAgICAgICAgICAgVmFyaWFibGUgbmFtZS4KLQkgKiBAcGFyYW0gdmFsCi0JICogICAgICAgICAgICBWYXJpYWJsZSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfdmFyaWFibGUoUU5hbWUgdmFyLCBBbnlUeXBlIHZhbCkgewotCQlzdXBlci5zZXRfdmFyaWFibGUodmFyLCB2YWwpOwotCX0KLQkKLQkKLQkvKgotCSAqIFNldCBhIFhQYXRoMiBzZXF1ZW5jZSBpbnRvIGEgdmFyaWFibGUuCi0JICovCi0JLyoqCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyB2b2lkIHNldF92YXJpYWJsZShRTmFtZSB2YXIsIFJlc3VsdFNlcXVlbmNlIHZhbCkgewotCQlzdXBlci5zZXRfdmFyaWFibGUodmFyLCB2YWwpOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfZGVmYXVsdF9jb2xsYXRpb24oU3RyaW5nIF9kZWZhdWx0X2NvbGxhdGlvbikgewotCQl0aGlzLl9kZWZhdWx0X2NvbGxhdGlvbl9uYW1lID0gX2RlZmF1bHRfY29sbGF0aW9uOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGRlZmF1bHRfY29sbGF0aW9uX25hbWUoKSB7Ci0JCXJldHVybiBfZGVmYXVsdF9jb2xsYXRpb25fbmFtZTsKLQl9Ci0KLQkvLyBXZSBhcmUgZXhwbGljaXRseSBOT1QgdXNpbmcgZ2VuZXJpY3MgaGVyZSwgaW4gYW50aWNpcGF0aW9uIG9mIEpESzEuNCBjb21wYXRpYmlsaXR5Ci0JcHJpdmF0ZSBzdGF0aWMgQ29tcGFyYXRvciBDT0RFUE9JTlRfQ09NUEFSQVRPUiA9IG5ldyBDb21wYXJhdG9yKCkgewotCQkKLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlyZXR1cm4gKChTdHJpbmcpbzEpLmNvbXBhcmVUbygoU3RyaW5nKW8yKTsKLQkJfQotCX07Ci0JCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqIAotCSAqLwotCXB1YmxpYyBDb21wYXJhdG9yIGdldF9jb2xsYXRpb24oU3RyaW5nIHVyaSkgewotCQlpZiAoQ09ERVBPSU5UX0NPTExBVElPTi5lcXVhbHModXJpKSkgcmV0dXJuIENPREVQT0lOVF9DT01QQVJBVE9SOwotCQkKLQkJcmV0dXJuIF9jb2xsYXRpb25fcHJvdmlkZXIgIT0gbnVsbCA/IF9jb2xsYXRpb25fcHJvdmlkZXIuZ2V0X2NvbGxhdGlvbih1cmkpIDogbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogCi0JICogQHBhcmFtIHByb3ZpZGVyCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9jb2xsYXRpb25fcHJvdmlkZXIoQ29sbGF0aW9uUHJvdmlkZXIgcHJvdmlkZXIpIHsKLQkJdGhpcy5fY29sbGF0aW9uX3Byb3ZpZGVyID0gcHJvdmlkZXI7Ci0JfQotCQotCS8qKgotCSAqIFVzZSBmb2N1cygpLnBvc2l0aW9uKCkgdG8gcmV0cmlldmUgdGhlIHZhbHVlLgotCSAqIEBkZXByZWNhdGVkICBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHVzZSBmb2N1cygpLnBvc2l0aW9uKCkuCi0JICovCi0JcHVibGljIGludCBub2RlX3Bvc2l0aW9uKE5vZGUgbm9kZSkgewotCSAgLy8gdW51c2VkIHBhcmFtZXRlciEKLQkgIHJldHVybiBfZm9jdXMucG9zaXRpb24oKTsJCi0JfQotCQotCS8qKgotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgVHlwZU1vZGVsIGdldFR5cGVNb2RlbChOb2RlIG5vZGUpIHsKLQkJcmV0dXJuIHN1cGVyLmdldFR5cGVNb2RlbChub2RlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0RlZmF1bHRFdmFsdWF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdEV2YWx1YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA5ZTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRGVmYXVsdEV2YWx1YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDExIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGNoZWNrIGFyZ3VtZW50cyB0byBvcDp0bwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIG5vZGUgc3RhdGUgaXRlcmF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIHVuZGVmaW5lZCBjb250ZXh0IHNob3VsZCByYWlzZSBlcnJvcgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIHVzZSBjb3JyZWN0ICdlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZScKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzMTIxOTEgLSBpbnN0YW5jZSBvZiB0ZXN0IGZhaWxzIHdpdGggcGFydGlhbCBtYXRjaGVzCi0gICogICAgTXVrdWwgR2FuZGhpICAgICAgICAgLSBidWcgMzI1MjYyIC0gcHJvdmlkaW5nIGFiaWxpdHkgdG8gc3RvcmUgYW4gWFBhdGgyIHNlcXVlbmNlIGludG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiB1c2VyLWRlZmluZWQgdmFyaWFibGUuCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRnVuY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkF4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlc2NlbmRhbnRPclNlbGZBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EeW5hbWljQ29udGV4dEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvY3VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5Gb3J3YXJkQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUGFyZW50QXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmV2ZXJzZUF4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlbGZBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNDb250ZXh0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNUeXBlTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BZGRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFueUtpbmRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0cmlidXRlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF4aXNTdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ21wRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNudHhJdGVtRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhjZXB0RXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZWdlckxpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NaW51c0V4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTXVsRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5hbWVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuT3JFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUElUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGFyRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBpcGVFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGx1c0V4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5RdWFudGlmaWVkRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJhbmdlRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJldmVyc2VTdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNpbmdsZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0cmluZ0xpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdWJFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UcmVhdEFzRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlVuaW9uRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhckV4cHJQYWlyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuWFBhdGhWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Db25zdHJ1Y3RvckZMOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GbkJvb2xlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZuRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRm5Sb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0RpdjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnNFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnNHZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnNHdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnNJRGl2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc0x0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc01pbnVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc01vZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnNOZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnNQbHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Gc1RpbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GdW5jdGlvbkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk9wRXhjZXB0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5PcEludGVyc2VjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uT3BUbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uT3BVbmlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNvbW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5QSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5UZXh0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci51dGlsLlJlc3VsdFNlcXVlbmNlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogRGVmYXVsdCBldmFsdWF0b3IgaW50ZXJmYWNlCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0RXZhbHVhdG9yIGltcGxlbWVudHMgWFBhdGhWaXNpdG9yLCBFdmFsdWF0b3IgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9TQ0hFTUFfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgQU5ZX0FUT01JQ19UWVBFID0gbmV3IFFOYW1lKCJ4cyIsCi0JCQkiYW55QXRvbWljVHlwZSIsIFhNTF9TQ0hFTUFfTlMpOwotCi0JcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQgX2RjOwotCi0JLy8gdGhpcyBpcyBhIHBhcmFtZXRlciB0aGF0IG1heSBiZSBzZXQgb24gYSBjYWxsLi4uCi0JLy8gdGhlIHBhcmFtZXRlciBtYXkgYmVjb21lIGludmFsaWQgb24gdGhlIG5leHQgY2FsbC4uLiBpLmUuIHRoZQotCS8vIHByZXZpb3VzIHBhcmFtZXRlciBpcyBub3Qgc2F2ZWQuLi4gc28gdXNlIHdpdGggY2FyZSEgW3JlbWVtYmVyLi4uCi0JLy8gdGhpcyB0aGluZyBpcyBoaWdobHkgcmVjdXJzaXZlXQotCXByaXZhdGUgT2JqZWN0IF9wYXJhbTsKLQlwcml2YXRlIEV2YWx1YXRpb25Db250ZXh0IF9lYzsKLQotCXByaXZhdGUgU3RhdGljQ29udGV4dCBfc2M7Ci0KLQlwcml2YXRlIEZvY3VzIF9mb2N1cyA9IG5ldyBGb2N1cyhSZXN1bHRCdWZmZXIuRU1QVFkpOwotCi0JRm9jdXMgZm9jdXMoKSB7IHJldHVybiBfZm9jdXMgOyB9Ci0JCi0Jdm9pZCBzZXRfZm9jdXMoRm9jdXMgZikgeyBfZm9jdXMgPSBmOyB9Ci0KLQlzdGF0aWMgY2xhc3MgUGFpciB7Ci0JCXB1YmxpYyBPYmplY3QgX29uZTsKLQkJcHVibGljIE9iamVjdCBfdHdvOwotCi0JCXB1YmxpYyBQYWlyKE9iamVjdCBvLCBPYmplY3QgdCkgewotCQkJX29uZSA9IG87Ci0JCQlfdHdvID0gdDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwb3BTY29wZSgpIHsKLQkJaWYgKF9pbm5lclNjb3BlID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVubWF0Y2hlZCBzY29wZSBwb3AiKTsKLQkJX2lubmVyU2NvcGUgPSBfaW5uZXJTY29wZS5uZXh0U2NvcGU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHB1c2hTY29wZShRTmFtZSB2YXIsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSB2YWx1ZSkgewotCQlfaW5uZXJTY29wZSA9IG5ldyBWYXJpYWJsZVNjb3BlKHZhciwgdmFsdWUsIF9pbm5lclNjb3BlKTsJCQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBkZXJpdmVzRnJvbShOb2RlVHlwZSBhdCwgUU5hbWUgZXQpIHsKLQkJVHlwZURlZmluaXRpb24gdGQgPSBfc2MuZ2V0VHlwZU1vZGVsKCkuZ2V0VHlwZShhdC5ub2RlX3ZhbHVlKCkpOwotCi0JCXNob3J0IG1ldGhvZCA9IFR5cGVEZWZpbml0aW9uLkRFUklWQVRJT05fRVhURU5TSU9OIHwgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9SRVNUUklDVElPTjsKLQkJcmV0dXJuIHRkICE9IG51bGwgJiYgdGQuZGVyaXZlZEZyb20oZXQubmFtZXNwYWNlKCksIGV0LmxvY2FsKCksIG1ldGhvZCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGRlcml2ZXNGcm9tKE5vZGVUeXBlIGF0LCBUeXBlRGVmaW5pdGlvbiB0ZCkgewotCQlUeXBlRGVmaW5pdGlvbiBub2RlVGQgPSBfc2MuZ2V0VHlwZU1vZGVsKCkuZ2V0VHlwZShhdC5ub2RlX3ZhbHVlKCkpOwotCQlzaG9ydCBtZXRob2QgPSBUeXBlRGVmaW5pdGlvbi5ERVJJVkFUSU9OX0VYVEVOU0lPTiB8IFR5cGVEZWZpbml0aW9uLkRFUklWQVRJT05fUkVTVFJJQ1RJT047Ci0JCXJldHVybiBub2RlVGQgIT0gbnVsbCAmJiBub2RlVGQuZGVyaXZlZEZyb21UeXBlKHRkLCBtZXRob2QpOwotCX0KLQotCXB1YmxpYyBEZWZhdWx0RXZhbHVhdG9yKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCwgRG9jdW1lbnQgZG9jKSB7Ci0JCXRoaXMobmV3IFN0YXRpY0NvbnRleHRBZGFwdGVyKGR5bmFtaWNDb250ZXh0KSwgbmV3IER5bmFtaWNDb250ZXh0QWRhcHRlcihkeW5hbWljQ29udGV4dCkpOwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgZm9jdXNTZXF1ZW5jZSA9IChkb2MgIT0gbnVsbCkgPyBuZXcgRG9jVHlwZShkb2MsIF9zYy5nZXRUeXBlTW9kZWwoKSkgOiBSZXN1bHRCdWZmZXIuRU1QVFk7ICAgCi0JCXNldF9mb2N1cyhuZXcgRm9jdXMoZm9jdXNTZXF1ZW5jZSkpOwotCQlkeW5hbWljQ29udGV4dC5zZXRfZm9jdXMoZm9jdXMoKSk7Ci0JfQotCQotCS8qKgotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgRGVmYXVsdEV2YWx1YXRvcihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dCBzdGF0aWNDb250ZXh0LCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQsIE9iamVjdFtdIGNvbnRleHRJdGVtcykgewotCQl0aGlzKHN0YXRpY0NvbnRleHQsIGR5bmFtaWNDb250ZXh0KTsKLQotCQkvLyBpbml0aWFsaXplIGNvbnRleHQgaXRlbSB3aXRoIHJvb3Qgb2YgZG9jdW1lbnQKLQkJUmVzdWx0QnVmZmVyIHJzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQlmb3IgKE9iamVjdCBvYmogOiBjb250ZXh0SXRlbXMpIHsKLQkJCWlmIChvYmogaW5zdGFuY2VvZiBOb2RlKSBycy5hZGQoTm9kZVR5cGUuZG9tX3RvX3hwYXRoKChOb2RlKW9iaiwgX3NjLmdldFR5cGVNb2RlbCgpKSk7Ci0JCX0KLQotCQlzZXRfZm9jdXMobmV3IEZvY3VzKHJzLmdldFNlcXVlbmNlKCkpKTsKLQkJX3BhcmFtID0gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIERlZmF1bHRFdmFsdWF0b3Iob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQgc3RhdGljQ29udGV4dCwgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB7Ci0JCV9zYyA9IHN0YXRpY0NvbnRleHQ7Ci0JCV9kYyA9IGR5bmFtaWNDb250ZXh0OwotCQlfZWMgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKSB7Ci0JCQkKLQkJCXB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQgZ2V0RHluYW1pY0NvbnRleHQoKSB7Ci0JCQkJcmV0dXJuIF9kYzsKLQkJCX0KLQkJCQotCQkJcHVibGljIEFueVR5cGUgZ2V0Q29udGV4dEl0ZW0oKSB7Ci0JCQkJcmV0dXJuIF9mb2N1cy5jb250ZXh0X2l0ZW0oKTsKLQkJCX0KLQkJCQotCQkJcHVibGljIGludCBnZXRDb250ZXh0UG9zaXRpb24oKSB7Ci0JCQkJcmV0dXJuIF9mb2N1cy5wb3NpdGlvbigpOwotCQkJfQotCQkKLQkJCXB1YmxpYyBpbnQgZ2V0TGFzdFBvc2l0aW9uKCkgewotCQkJCXJldHVybiBfZm9jdXMubGFzdCgpOwotCQkJfQotCQkJCi0JCQlwdWJsaWMgU3RhdGljQ29udGV4dCBnZXRTdGF0aWNDb250ZXh0KCkgewotCQkJCXJldHVybiBfc2M7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JY2xhc3MgVmFyaWFibGVTY29wZSB7Ci0JCXB1YmxpYyBWYXJpYWJsZVNjb3BlKFFOYW1lIG5hbWUsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSB2YWx1ZSwgVmFyaWFibGVTY29wZSBuZXh0U2NvcGUpIHsKLQkJCXRoaXMubmFtZSA9IG5hbWU7Ci0JCQl0aGlzLnZhbHVlID0gdmFsdWU7Ci0JCQl0aGlzLm5leHRTY29wZSA9IG5leHRTY29wZTsKLQkJfQotCQlmaW5hbCBwdWJsaWMgUU5hbWUgbmFtZTsKLQkJZmluYWwgcHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSB2YWx1ZTsKLQkJZmluYWwgcHVibGljIFZhcmlhYmxlU2NvcGUgbmV4dFNjb3BlOyAKLQl9CQotCQotCXByaXZhdGUgVmFyaWFibGVTY29wZSBfaW5uZXJTY29wZSA9IG51bGw7Ci0KLQlwcml2YXRlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSBnZXRWYXJpYWJsZShRTmFtZSBuYW1lKSB7Ci0JCS8vIEZpcnN0LCB0cnkgbG9jYWwgc2NvcGVzCi0JCVZhcmlhYmxlU2NvcGUgc2NvcGUgPSBfaW5uZXJTY29wZTsKLQkJd2hpbGUgKHNjb3BlICE9IG51bGwpIHsKLQkJCWlmIChuYW1lLmVxdWFscyhzY29wZS5uYW1lKSkgcmV0dXJuIHNjb3BlLnZhbHVlOwotCQkJc2NvcGUgPSBzY29wZS5uZXh0U2NvcGU7Ci0JCX0KLQkJcmV0dXJuIChvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UpIF9kYy5nZXRWYXJpYWJsZShuYW1lLmFzUU5hbWUoKSk7Ci0JfQotCi0JLy8gWFhYIHRoaXMga2luZGEgc3V4Ci0JLy8gdGhlIHByb2JsZW0gaXMgdGhhdCB2aXNpc3RvciBpbnRlcmZhY2UgZG9lcyBub3QgdGhyb3cgZXhjZXB0aW9ucy4uLgotCS8vIHNvIHdlIGdldCBhcm91bmQgaXQgO0QKLQlwcml2YXRlIHZvaWQgcmVwb3J0X2Vycm9yKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJdGhyb3cgZXJyOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXBvcnRfZXJyb3IoVHlwZUVycm9yIGVycikgewotCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKGVycik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlcG9ydF9lcnJvcihTdGF0aWNOYW1lRXJyb3IgZXJyKSB7Ci0JCXRocm93IGVycjsKLQl9Ci0KLQlwcml2YXRlIEFueUF0b21pY1R5cGUgbWFrZUF0b21pYyhRTmFtZSBuYW1lKSB7Ci0JCUZ1bmN0aW9uTGlicmFyeSBmbCA9IChGdW5jdGlvbkxpYnJhcnkpIF9zYy5nZXRGdW5jdGlvbkxpYnJhcmllcygpLmdldChuYW1lLm5hbWVzcGFjZSgpKTsKLQkJaWYgKGZsIGluc3RhbmNlb2YgQ29uc3RydWN0b3JGTCkgewotCQkJQ29uc3RydWN0b3JGTCBjZmwgPSAoQ29uc3RydWN0b3JGTClmbDsKLQkJCXJldHVybiBjZmwuYXRvbWljX3R5cGUobmFtZSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogZXZhbHVhdGUgdGhlIHhwYXRoIG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoIG5vZGUuCi0JICogQHRocm93cyBkeW5hbWljCi0JICogICAgICAgICAgICAgZXJyb3IuCi0JICogQHJldHVybiByZXN1bHQgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShYUGF0aE5vZGUgbm9kZSkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VVdGlsLm5ld1RvT2xkKGV2YWx1YXRlMihub2RlKSk7Ci0JfQotCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlMihYUGF0aE5vZGUgbm9kZSkgewotCQlyZXR1cm4gKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSkgbm9kZS5hY2NlcHQodGhpcyk7Ci0JfQotCQotCS8vIGJhc2ljYWxseSB0aGUgY29tbWEgb3BlcmF0b3IuLi4KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGRvX2V4cHIoSXRlcmF0b3IgaSkgewotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gbnVsbDsKLQkJUmVzdWx0QnVmZmVyIGJ1ZmZlciA9IG51bGw7Ci0KLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlFeHByIGUgPSAoRXhwcikgaS5uZXh0KCk7Ci0KLQkJCVJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IChSZXN1bHRTZXF1ZW5jZSkgZS5hY2NlcHQodGhpcyk7Ci0KLQkJCWlmIChycyA9PSBudWxsICYmIGJ1ZmZlciA9PSBudWxsKQotCQkJCXJzID0gcmVzdWx0OwotCQkJZWxzZSB7Ci0JCQkJaWYgKGJ1ZmZlciA9PSBudWxsKSB7Ci0JCQkJCWJ1ZmZlciA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJCQkJYnVmZmVyLmNvbmNhdChycyk7Ci0JCQkJCXJzID0gbnVsbDsKLQkJCQl9Ci0JCQkJYnVmZmVyLmNvbmNhdChyZXN1bHQpOwotCQkJfQotCQl9Ci0KLQkJaWYgKGJ1ZmZlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYnVmZmVyLmdldFNlcXVlbmNlKCk7Ci0JCX0gZWxzZSBpZiAocnMgIT0gbnVsbCkgewotCQkJcmV0dXJuIHJzOwotCQl9IGVsc2UgcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQl9Ci0KLQkvKioKLQkgKiBpdGVyYXRlIHRocm91Z2ggeHBhdGggZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSB4cAotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoLgotCSAqIEByZXR1cm4gcmVzdWx0IHNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGggeHApIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBkb19leHByKHhwLml0ZXJhdG9yKCkpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9fZm9yX2VhY2goTGlzdEl0ZXJhdG9yIGl0ZXIsCi0JCQlFeHByIGZpbmFsZXhwciwgUmVzdWx0QnVmZmVyIGRlc3RpbmF0aW9uKSB7Ci0KLQkJLy8gd2UgaGF2ZSBtb3JlIHZhcnMgdG8gYmluZC4uLgotCQlpZiAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCVZhckV4cHJQYWlyIHZlID0gKFZhckV4cHJQYWlyKSBpdGVyLm5leHQoKTsKLQotCQkJLy8gZXZhbHVhdGUgYmluZGluZyBzZXF1ZW5jZQotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIHZlLmV4cHIoKS5hY2NlcHQodGhpcyk7Ci0KLQkJCS8vIFhYWAotCQkJaWYgKHJzLmVtcHR5KCkpIHsKLQkJCQlpdGVyLnByZXZpb3VzKCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQlRTmFtZSB2YXJuYW1lID0gdmUudmFybmFtZSgpOwotCi0JCQkvLyBmb3IgZWFjaCBpdGVtIG9mIGJpbmRpbmcgc2VxdWVuY2UsIGJpbmQgdGhlIHJhbmdlCi0JCQkvLyB2YXJpYWJsZSBhbmQgZG8gdGhlIGV4cHJlc3Npb24sIGNvbmNhdGVuYXRpbmcgdGhlCi0JCQkvLyByZXN1bHQKLQotCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQkJcHVzaFNjb3BlKHZhcm5hbWUsIGl0ZW0pOwotCQkJCWRvX2Zvcl9lYWNoKGl0ZXIsIGZpbmFsZXhwciwgZGVzdGluYXRpb24pOwotCQkJCXBvcFNjb3BlKCk7Ci0JCQl9Ci0JCQlpdGVyLnByZXZpb3VzKCk7Ci0JCX0KLQkJLy8gd2UgZmluYWxseSBnb3QgdG8gZG8gdGhlICJsYXN0IGV4cHJlc3Npb24iCi0JCWVsc2UgewotCQkJZGVzdGluYXRpb24uY29uY2F0KChSZXN1bHRTZXF1ZW5jZSkgZmluYWxleHByLmFjY2VwdCh0aGlzKSk7Ci0JCX0KLQl9Ci0KLQotCS8vIFhYWCB1Z2x5Ci0JLy8gdHlwZTogMCA9IGZvciBbcmV0dXJuID09ICJjb3JyZWN0Il0KLQkvLyAxID0gZm9yIGFsbCBbcmV0dXJuIGZhbHNlLCByZXR1cm4gZW1wdHkgb24gdHJ1ZV0KLQkvLyAyID0gdGhlcmUgZXhpc3RzIFtyZXR1cm4gdHJ1ZSwgcmV0dXJuIGVtcHR5IG9uIGZhbHNlXQotCXByaXZhdGUgWFNCb29sZWFuIGRvX2Zvcl9hbGwoTGlzdEl0ZXJhdG9yIGl0ZXIsCi0JCQlFeHByIGZpbmFsZXhwcikgewotCi0JCS8vIHdlIGhhdmUgbW9yZSB2YXJzIHRvIGJpbmQuLi4KLQkJaWYgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlWYXJFeHByUGFpciB2ZSA9IChWYXJFeHByUGFpcikgaXRlci5uZXh0KCk7Ci0KLQkJCS8vIGV2YWx1YXRlIGJpbmRpbmcgc2VxdWVuY2UKLQkJCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSB2ZS5leHByKCkuYWNjZXB0KHRoaXMpOwotCi0JCQlRTmFtZSB2YXJuYW1lID0gdmUudmFybmFtZSgpOwotCi0JCQkvLyBmb3IgZWFjaCBpdGVtIG9mIGJpbmRpbmcgc2VxdWVuY2UsIGJpbmQgdGhlIHJhbmdlCi0JCQkvLyB2YXJpYWJsZSBhbmQgY2hlY2sgdGhlIHByZWRpY2F0ZQotCi0JCQl0cnkgewotCQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0JCi0JCQkJCXB1c2hTY29wZSh2YXJuYW1lLCBpdGVtKTsKLQkJCQkJWFNCb29sZWFuIGVmZmJvb2wgPSBkb19mb3JfYWxsKGl0ZXIsIGZpbmFsZXhwcik7Ci0JCQkJCXBvcFNjb3BlKCk7Ci0JCQkJCQotCQkJCQkvLyBvayBoZXJlIHdlIGdvdCBhICJyZWFsIiByZXN1bHQsIG5vdyBmaWd1cmUKLQkJCQkJLy8gb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAotCQkJCQlpZiAoIWVmZmJvb2wudmFsdWUoKSkKLQkJCQkJCXJldHVybiBYU0Jvb2xlYW4uRkFMU0U7Ci0JCQkJfQotCQkJfSBmaW5hbGx5IHsKLQkJCQlpdGVyLnByZXZpb3VzKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gWFNCb29sZWFuLlRSVUU7Ci0JCX0KLQkJLy8gd2UgZmluYWxseSBnb3QgdG8gZG8gdGhlICJsYXN0IGV4cHJlc3Npb24iCi0JCWVsc2UgewotCQkJcmV0dXJuIGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKChSZXN1bHRTZXF1ZW5jZSkgZmluYWxleHByLmFjY2VwdCh0aGlzKSk7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgWFNCb29sZWFuIGRvX2V4aXN0cyhMaXN0SXRlcmF0b3IgaXRlciwKLQkJCUV4cHIgZmluYWxleHByKSB7Ci0KLQkJLy8gd2UgaGF2ZSBtb3JlIHZhcnMgdG8gYmluZC4uLgotCQlpZiAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCVZhckV4cHJQYWlyIHZlID0gKFZhckV4cHJQYWlyKSBpdGVyLm5leHQoKTsKLQotCQkJLy8gZXZhbHVhdGUgYmluZGluZyBzZXF1ZW5jZQotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIHZlLmV4cHIoKS5hY2NlcHQodGhpcyk7Ci0KLQkJCVFOYW1lIHZhcm5hbWUgPSB2ZS52YXJuYW1lKCk7Ci0KLQkJCS8vIGZvciBlYWNoIGl0ZW0gb2YgYmluZGluZyBzZXF1ZW5jZSwgYmluZCB0aGUgcmFuZ2UKLQkJCS8vIHZhcmlhYmxlIGFuZCBjaGVjayB0aGUgZXhwcmVzc2lvbgotCi0JCQl0cnkgewotCQkJCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0JCi0JCQkJCXB1c2hTY29wZSh2YXJuYW1lLCBpdGVtKTsKLQkJCQkJWFNCb29sZWFuIGVmZmJvb2wgPSBkb19leGlzdHMoaXRlciwgZmluYWxleHByKTsKLQkJCQkJcG9wU2NvcGUoKTsKLQkKLQkJCQkJLy8gb2sgaGVyZSB3ZSBnb3QgYSAicmVhbCIgcmVzdWx0LCBub3cgZmlndXJlCi0JCQkJCS8vIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKLQkJCQkJaWYgKGVmZmJvb2wudmFsdWUoKSkKLQkJCQkJCXJldHVybiBYU0Jvb2xlYW4uVFJVRTsKLQkJCQl9Ci0JCQl9IGZpbmFsbHkgewotCQkJCWl0ZXIucHJldmlvdXMoKTsKLQkJCX0KLQkJCQotCQkJLy8gc2luY2Ugbm9uZSBpbiB0aGlzIHNlcXVlbmNlIGV2YWx1YXRlZCB0byB0cnVlLCByZXR1cm4gZmFsc2UKLQkJCXJldHVybiBYU0Jvb2xlYW4uRkFMU0U7Ci0JCX0KLQkJLy8gd2UgZmluYWxseSBnb3QgdG8gZG8gdGhlICJsYXN0IGV4cHJlc3Npb24iCi0JCWVsc2UgewotCQkJcmV0dXJuIGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKChSZXN1bHRTZXF1ZW5jZSkgZmluYWxleHByLmFjY2VwdCh0aGlzKSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGZvciBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGZleAotCSAqICAgICAgICAgICAgaXMgdGhlIGZvciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3JFeHByIGZleCkgewotCQkvLyBYWFgKLQkJTGlzdCBwYWlycyA9IG5ldyBBcnJheUxpc3QoZmV4LnZlX3BhaXJzKCkpOwotCQlSZXN1bHRCdWZmZXIgcmIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7IAotCQlkb19mb3JfZWFjaChwYWlycy5saXN0SXRlcmF0b3IoKSwgZmV4LmV4cHIoKSwgcmIpOwotCQlyZXR1cm4gcmIuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBxdWFudGlmaWVkIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gcWV4Ci0JICogICAgICAgICAgICBpcyB0aGUgcXVhbnRpZmllZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24gb3IgbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFF1YW50aWZpZWRFeHByIHFleCkgewotCQlMaXN0IHBhaXJzID0gbmV3IEFycmF5TGlzdChxZXgudmVfcGFpcnMoKSk7Ci0KLQkJc3dpdGNoIChxZXgudHlwZSgpKSB7Ci0JCWNhc2UgUXVhbnRpZmllZEV4cHIuU09NRToKLQkJCXJldHVybiBkb19leGlzdHMocGFpcnMubGlzdEl0ZXJhdG9yKCksIHFleC5leHByKCkpOwotCQljYXNlIFF1YW50aWZpZWRFeHByLkFMTDoKLQkJCXJldHVybiBkb19mb3JfYWxsKHBhaXJzLmxpc3RJdGVyYXRvcigpLCBxZXguZXhwcigpKTsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGlmIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gaWZleAotCSAqICAgICAgICAgICAgaXMgdGhlIGlmIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIGlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcykuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJZkV4cHIgaWZleCkgewotCQlSZXN1bHRTZXF1ZW5jZSB0ZXN0X3JlcyA9IGRvX2V4cHIoaWZleC5pdGVyYXRvcigpKTsKLQotCQlYU0Jvb2xlYW4gcmVzID0gZWZmZWN0aXZlX2Jvb2xlYW5fdmFsdWUodGVzdF9yZXMpOwotCi0JCWlmIChyZXMudmFsdWUoKSkKLQkJCXJldHVybiBpZmV4LnRoZW5fY2xhdXNlKCkuYWNjZXB0KHRoaXMpOwotCQllbHNlCi0JCQlyZXR1cm4gaWZleC5lbHNlX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW5bXSBkb19sb2dpY19leHAoQmluRXhwciBlKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGUpOwotCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlib29sZWFuIG9uZWIgPSBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZShvbmUpLnZhbHVlKCk7Ci0JCWJvb2xlYW4gdHdvYiA9IGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKHR3bykudmFsdWUoKTsKLQotCQlib29sZWFuIHJlc1tdID0geyBvbmViLCB0d29iIH07Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgb3IgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBvcmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgb3IgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChPckV4cHIgb3JleCkgewotCQlib29sZWFuIHJlc1tdID0gZG9fbG9naWNfZXhwKG9yZXgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkKLQkJCQkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKHJlc1swXSB8fCByZXNbMV0pKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhbmQgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBhbmRleAotCSAqICAgICAgICAgICAgaXMgdGhlIGFuZCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFuZEV4cHIgYW5kZXgpIHsKLQkJYm9vbGVhbiByZXNbXSA9IGRvX2xvZ2ljX2V4cChhbmRleCk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4ocmVzWzBdICYmIHJlc1sxXSkpOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2Ugbm9kZV9jbXAoaW50IHR5cGUsIENvbGxlY3Rpb24gYXJncykgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMjsKLQotCQlJdGVyYXRvciBhcmdzaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBvbmUgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3NpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzaXRlci5uZXh0KCk7Ci0KLQkJaW50IHNpemVfb25lID0gb25lLnNpemUoKTsKLQkJaW50IHNpemVfdHdvID0gdHdvLnNpemUoKTsKLQotCQlpZiAoc2l6ZV9vbmUgPiAxIHx8IHNpemVfdHdvID4gMSkKLQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQlpZiAoc2l6ZV9vbmUgPT0gMCB8fCBzaXplX3R3byA9PSAwKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlJdGVtIGF0X29uZSA9IG9uZS5pdGVtKDApOwotCQlJdGVtIGF0X3R3byA9IHR3by5pdGVtKDApOwotCi0JCWlmICghKGF0X29uZSBpbnN0YW5jZW9mIE5vZGVUeXBlKSB8fCAhKGF0X3R3byBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQotCQkvLyBvayB3ZSBnb3QgdGhlIGFyZ3MgZmluYWxseQotCQlOb2RlVHlwZSBudF9vbmUgPSAoTm9kZVR5cGUpIGF0X29uZTsKLQkJTm9kZVR5cGUgbnRfdHdvID0gKE5vZGVUeXBlKSBhdF90d287Ci0KLQkJYm9vbGVhbiBhbnN3ZXIgPSBmYWxzZTsgLy8gd2UgYXJlIHBlc3NpbWlzdGljIGFzIHVzdWFsCi0KLQkJLy8gZG8gY29tcGFyaXNvbgotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBDbXBFeHByLklTOgotCQkJYW5zd2VyID0gbnRfb25lLm5vZGVfdmFsdWUoKSA9PSBudF90d28ubm9kZV92YWx1ZSgpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDbXBFeHByLkxFU1NfTEVTUzoKLQkJCWFuc3dlciA9IG50X29uZS5iZWZvcmUobnRfdHdvKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ21wRXhwci5HUkVBVEVSX0dSRUFURVI6Ci0JCQlhbnN3ZXIgPSBudF9vbmUuYWZ0ZXIobnRfdHdvKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0KLQotCQlyZXR1cm4gWFNCb29sZWFuLnZhbHVlT2YoYW5zd2VyKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBjb21wYXJlIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gY21wZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjb21wYXJlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbiBvciBudWxsCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbXBFeHByIGNtcGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhjbXBleCk7Ci0KLQkJCXN3aXRjaCAoY21wZXgudHlwZSgpKSB7Ci0JCQljYXNlIENtcEV4cHIuRVE6Ci0JCQkJcmV0dXJuIEZzRXEuZnNfZXFfdmFsdWUoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLk5FOgotCQkJCXJldHVybiBGc05lLmZzX25lX3ZhbHVlKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5HVDoKLQkJCQlyZXR1cm4gRnNHdC5mc19ndF92YWx1ZShhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuTFQ6Ci0JCQkJcmV0dXJuIEZzTHQuZnNfbHRfdmFsdWUoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkdFOgotCQkJCXJldHVybiBGc0dlLmZzX2dlX3ZhbHVlKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5MRToKLQkJCQlyZXR1cm4gRnNMZS5mc19sZV92YWx1ZShhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuRVFVQUxTOgotCQkJCXJldHVybiBGc0VxLmZzX2VxX2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLk5PVEVRVUFMUzoKLQkJCQlyZXR1cm4gRnNOZS5mc19uZV9nZW5lcmFsKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5HUkVBVEVSOgotCQkJCXJldHVybiBGc0d0LmZzX2d0X2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkxFU1NUSEFOOgotCQkJCXJldHVybiBGc0x0LmZzX2x0X2dlbmVyYWwoYXJncywgX2RjKTsKLQotCQkJY2FzZSBDbXBFeHByLkdSRUFURVJFUVVBTDoKLQkJCQlyZXR1cm4gRnNHZS5mc19nZV9nZW5lcmFsKGFyZ3MsIF9kYyk7Ci0KLQkJCWNhc2UgQ21wRXhwci5MRVNTRVFVQUw6Ci0JCQkJcmV0dXJuIEZzTGUuZnNfbGVfZ2VuZXJhbChhcmdzLCBfZGMpOwotCi0JCQljYXNlIENtcEV4cHIuSVM6Ci0JCQljYXNlIENtcEV4cHIuTEVTU19MRVNTOgotCQkJY2FzZSBDbXBFeHByLkdSRUFURVJfR1JFQVRFUjoKLQkJCQlyZXR1cm4gbm9kZV9jbXAoY21wZXgudHlwZSgpLCBhcmdzKTsKLQotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQl9Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQl9Ci0JCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JfQotCi0JLyoqCi0JICogdmlzaXQgcmFuZ2UgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSByZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSByYW5nZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJhbmdlRXhwciByZXgpIHsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSByZXgubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSByZXgucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0JCWlmIChvbmUuZW1wdHkoKSB8fCB0d28uZW1wdHkoKSkgcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7IAotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKG9uZSk7Ci0JCWFyZ3MuYWRkKHR3byk7Ci0KLQkJdHJ5IHsKLQkJCXJldHVybiBPcFRvLm9wX3RvKGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQlwcml2YXRlIFhTQm9vbGVhbiBlZmZlY3RpdmVfYm9vbGVhbl92YWx1ZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQl0cnkgewotCQkJcmV0dXJuIEZuQm9vbGVhbi5mbl9ib29sZWFuKHJzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JCi0JLyoqCi0JICogdmlzaXQgYW5kIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gYWRkZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhbmQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBZGRFeHByIGFkZGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhhZGRleCk7Ci0JCQlyZXR1cm4gRnNQbHVzLmZzX3BsdXMoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHN1YiBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHN1YmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgc3ViIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3ViRXhwciBzdWJleCkgewotCQl0cnkgewotCQkJQ29sbGVjdGlvbiBhcmdzID0gZG9fYmluX2FyZ3Moc3ViZXgpOwotCQkJcmV0dXJuIEZzTWludXMuZnNfbWludXMoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IG11bHRpcGx5IGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtdWwgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNdWxFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNUaW1lcy5mc190aW1lcyhhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZGl2aXNpb24gZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGRpdmlzaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGl2RXhwciBtdWxleCkgewotCQl0cnkgewotCQkJQ29sbGVjdGlvbiBhcmdzID0gZG9fYmluX2FyZ3MobXVsZXgpOwotCQkJcmV0dXJuIEZzRGl2LmZzX2RpdihhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElEaXZFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNJRGl2LmZzX2lkaXYoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IG1vZHVsYXIgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIG1vZHVsYXIgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChNb2RFeHByIG11bGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhtdWxleCk7Ci0JCQlyZXR1cm4gRnNNb2QuZnNfbW9kKGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQlwcml2YXRlIENvbGxlY3Rpb24gZG9fYmluX2FyZ3MoQmluRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIG9uZSA9IChSZXN1bHRTZXF1ZW5jZSkgZS5sZWZ0KCkuYWNjZXB0KHRoaXMpOwotCQlSZXN1bHRTZXF1ZW5jZSB0d28gPSAoUmVzdWx0U2VxdWVuY2UpIGUucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChvbmUpOwotCQlhcmdzLmFkZCh0d28pOwotCi0JCXJldHVybiBhcmdzOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHVuaW9uIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gdW5leAotCSAqICAgICAgICAgICAgaXMgdGhlIHVuaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVW5pb25FeHByIHVuZXgpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKHVuZXgpOwotCQkJcmV0dXJuIE9wVW5pb24ub3BfdW5pb24oYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHBpcGUgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBwaXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIHBpcGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JLy8gWFhYIHNhbWUgYXMgYWJvdmUKLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBpcGVFeHByIHBpcGV4KSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhwaXBleCk7Ci0JCQlyZXR1cm4gT3BVbmlvbi5vcF91bmlvbihhcmdzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCQlyZXR1cm4gbnVsbDsgLy8gdW5yZWFjaAotCQl9Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgaW50ZXJzZWN0IGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gaWV4cHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlcnNlY3QgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlcnNlY3RFeHByIGlleHByKSB7Ci0JCXRyeSB7Ci0JCQlDb2xsZWN0aW9uIGFyZ3MgPSBkb19iaW5fYXJncyhpZXhwcik7Ci0JCQlyZXR1cm4gT3BJbnRlcnNlY3Qub3BfaW50ZXJzZWN0KGFyZ3MpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBleGNlcHQgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlZXhwcgotCSAqICAgICAgICAgICAgaXMgdGhlIGV4Y2VwdCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEV4Y2VwdEV4cHIgZWV4cHIpIHsKLQkJdHJ5IHsKLQkJCUNvbGxlY3Rpb24gYXJncyA9IGRvX2Jpbl9hcmdzKGVleHByKTsKLQkJCXJldHVybiBPcEV4Y2VwdC5vcF9leGNlcHQoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IGluc3RhbmNlIG9mIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gaW9leHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnN0YW5jZSBvZiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEluc3RPZkV4cHIgaW9leHApIHsKLQkJLy8gZ2V0IHRoZSB2YWx1ZQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgaW9leHAubGVmdCgpLmFjY2VwdCh0aGlzKTsKLQotCQkvLyBnZXQgdGhlIHNlcXVlbmNlIHR5cGUKLQkJU2VxdWVuY2VUeXBlIHNlcXQgPSAoU2VxdWVuY2VUeXBlKSBpb2V4cC5yaWdodCgpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihpc0luc3RhbmNlT2YocnMsIHNlcXQpKSk7Ci0JfQotCQkKLQlwcml2YXRlIGJvb2xlYW4gaXNJbnN0YW5jZU9mKFJlc3VsdFNlcXVlbmNlIHJzLCBTZXF1ZW5jZVR5cGUgc2VxdCkgewotCQlPYmplY3Qgb2xkUGFyYW0gPSB0aGlzLl9wYXJhbTsKLQkJdHJ5IHsKLQkJCXRoaXMuX3BhcmFtID0gbmV3IFBhaXIobnVsbCwgcnMpOwotCQkJaW50IHNlcXVlbmNlTGVuZ3RoID0gcnMuc2l6ZSgpOwotCQkJLy8gUnVuIHRoZSBtYXRjaGVyCi0JCQlzZXF0LmFjY2VwdCh0aGlzKTsKLQkJCXJzID0gKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpX3BhcmFtKS5fdHdvOwotCQkJaW50IGxlbmd0aEFmdGVyID0gcnMuc2l6ZSgpOwotCQkKLQkJCWlmIChzZXF1ZW5jZUxlbmd0aCAhPSBsZW5ndGhBZnRlcikKLQkJCQlyZXR1cm4gZmFsc2U7IC8vIFNvbWV0aGluZyBkaWRuJ3QgbWF0Y2gsIHNvIGl0J3Mgbm90IGFuIGluc3RhbmNlIG9mIGl0Ci0JCQkKLQkJCXJldHVybiBzZXF0LmlzTGVuZ3RoVmFsaWQoc2VxdWVuY2VMZW5ndGgpOwotCQl9IGZpbmFsbHkgewotCQkJdGhpcy5fcGFyYW0gPSBvbGRQYXJhbTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHRyZWF0LWFzIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gdGFleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0cmVhdC1hcyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRyZWF0QXNFeHByIHRhZXhwKSB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIHRhZXhwLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0KLQkJU2VxdWVuY2VUeXBlIHNlcXQgPSAoU2VxdWVuY2VUeXBlKSB0YWV4cC5yaWdodCgpOwotCQlTZXFUeXBlIHN0ID0gbmV3IFNlcVR5cGUoc2VxdCwgX3NjLCBycyk7Ci0KLQkJdHJ5IHsKLQkJCXN0Lm1hdGNoKHJzKTsKLQkJfSBjYXRjaCAoRHluYW1pY0Vycm9yIGVycikgewotCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY2FzdGFibGUgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBjZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgY2FzdGFibGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0YWJsZUV4cHIgY2V4cCkgewotCQlib29sZWFuIGNhc3RhYmxlID0gZmFsc2U7Ci0JCXRyeSB7Ci0JCQlDYXN0RXhwciBjZSA9IG5ldyBDYXN0RXhwcigoRXhwcikgY2V4cC5sZWZ0KCksIChTaW5nbGVUeXBlKSBjZXhwCi0JCQkJCS5yaWdodCgpKTsKLQotCQkJdmlzaXQoY2UpOwotCQkJY2FzdGFibGUgPSB0cnVlOwotCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgewotCQkJY2FzdGFibGUgPSBmYWxzZTsKLQkJfQotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGNhc3RhYmxlKSk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY2FzdCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGNleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjYXN0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdEV4cHIgY2V4cCkgewotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBjZXhwLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0JCVNpbmdsZVR5cGUgc3QgPSAoU2luZ2xlVHlwZSkgY2V4cC5yaWdodCgpOwotCi0JCXJzID0gRm5EYXRhLmF0b21pemUocnMpOwotCi0JCWlmIChycy5zaXplKCkgPiAxKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCi0JCWlmIChycy5lbXB0eSgpKSB7Ci0JCQlpZiAoc3QucW1hcmsoKSkKLQkJCQlyZXR1cm4gcnM7Ci0JCQllbHNlCi0JCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQl9Ci0KLQkJQW55VHlwZSBhdCA9IChBbnlUeXBlKSBycy5pdGVtKDApOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQlyZXBvcnRfZXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXQ7Ci0JCVFOYW1lIHR5cGUgPSBzdC50eXBlKCk7Ci0KLQkJLy8gcHJlcGFyZSBhcmdzIGZyb20gZnVuY3Rpb24KLQkJQ29sbGVjdGlvbiBhcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQlhcmdzLmFkZChSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhYXQpKTsKLQotCQl0cnkgewotCQkJRnVuY3Rpb24gZnVuY3Rpb24gPSBjZXhwLmZ1bmN0aW9uKCk7Ci0JCQlpZiAoZnVuY3Rpb24gPT0gbnVsbCkgewotCQkJCWZ1bmN0aW9uID0gX3NjLnJlc29sdmVGdW5jdGlvbih0eXBlLmFzUU5hbWUoKSwgYXJncy5zaXplKCkpOwotCQkJCWNleHAuc2V0X2Z1bmN0aW9uKGZ1bmN0aW9uKTsKLQkJCX0KLQkJCWlmIChmdW5jdGlvbiA9PSBudWxsKQotCQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCXJldHVybiBmdW5jdGlvbi5ldmFsdWF0ZShhcmdzLCBfZWMpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBtaW51cyBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtaW51cyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1pbnVzRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBlLmFyZygpLmFjY2VwdCh0aGlzKTsKLQotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFyZ3MuYWRkKHJzKTsKLQotCQl0cnkgewotCQkJcmV0dXJuIEZzTWludXMuZnNfbWludXNfdW5hcnkoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8qKgotCSAqIHZpc2l0IHBsdXMgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgcGx1cyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBsdXNFeHByIGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGUuYXJnKCkuYWNjZXB0KHRoaXMpOwotCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQocnMpOwotCi0JCXRyeSB7Ci0JCQlyZXR1cm4gRnNQbHVzLmZzX3BsdXNfdW5hcnkoYXJncyk7Ci0JCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCXJlcG9ydF9lcnJvcihlcnIpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0KLQotCS8vIHRoaXMgd2lsbCBldmFsdWF0ZSB0aGUgc3RlcCBleHByZXNzaW9uIGZvciB0aGUgd2hvbGUgZm9jdXMgYW5kIHJldHVybgotCS8vIHRoZSByZXN1bHQuCi0JLy8KLQkvLyBpLmUuIEl0IHdpbGwgZXhlY3V0ZSB0aGUgc3RlcCBleHByZXNzaW9uIGZvciBlYWNoIGl0ZW0gaW4gdGhlIGZvY3VzCi0JLy8gW2VhY2ggdGltZSBjaGFuZ2luZyB0aGUgY29udGV4dCBpdGVtXS4KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGRvX3N0ZXAoU3RlcEV4cHIgc2UpIHsKLQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCUFycmF5TGlzdCByZXN1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotCQlpbnQgdHlwZSA9IDA7IC8vIDA6IGRvbid0IGtub3cgeWV0Ci0JCS8vIDE6IGF0b21pYwotCQkvLyAyOiBub2RlCi0KLQkJRm9jdXMgZm9jdXMgPSBmb2N1cygpOwotCQlpbnQgb3JpZ2luYWxfcG9zID0gZm9jdXMucG9zaXRpb24oKTsKLQotCQkvLyBleGVjdXRlIHN0ZXAgZm9yIGFsbCBpdGVtcyBpbiBmb2N1cwotCQl3aGlsZSAodHJ1ZSkgewotCQkJcmVzdWx0cy5hZGQoc2UuYWNjZXB0KHRoaXMpKTsKLQotCQkJLy8gZ28gdG8gbmV4dAotCQkJaWYgKCFmb2N1cy5hZHZhbmNlX2NwKCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJCi0JCS8vIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgY2hhbmdlIGZvY3VzCi0JCWZvY3VzLnNldF9wb3NpdGlvbihvcmlnaW5hbF9wb3MpOwotCi0JCWJvb2xlYW4gbm9kZV90eXBlcyA9IGZhbHNlOwotCi0JCS8vIGNoZWNrIHRoZSByZXN1bHRzCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJlc3VsdHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSAoUmVzdWx0U2VxdWVuY2UpIGkubmV4dCgpOwotCi0JCQkvLyBtYWtlIHN1cmUgcmVzdWx0cyBhcmUgb2Ygc2FtZSB0eXBlLCBhbmQgYWRkIHRoZW0gaW4KLQkJCWZvciAoSXRlcmF0b3IgaiA9IHJlc3VsdC5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlBbnlUeXBlIGl0ZW0gPSAoQW55VHlwZSkgai5uZXh0KCk7Ci0KLQkJCQkvLyBmaXJzdCBpdGVtCi0JCQkJaWYgKHR5cGUgPT0gMCkgewotCQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpCi0JCQkJCQl0eXBlID0gMTsKLQkJCQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKQotCQkJCQkJdHlwZSA9IDI7Ci0JCQkJCWVsc2UKLQkJCQkJCWFzc2VydCBmYWxzZTsKLQotCQkJCX0KLQotCQkJCS8vIG1ha2Ugc3VyZSB3ZSBnb3QgY29oZXJlbnQgdHlwZXMKLQkJCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCQkvLyBhdG9taWMuLi4ganVzdCBjb25jYXQKLQkJCQljYXNlIDE6Ci0JCQkJCWlmICghKGl0ZW0gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3IubWl4ZWRfdmFscyhudWxsKSk7Ci0JCQkJCXJzLmFkZChpdGVtKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIDI6Ci0JCQkJCW5vZGVfdHlwZXMgPSB0cnVlOwotCQkJCQlpZiAoIShpdGVtIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5taXhlZF92YWxzKG51bGwpKTsKLQkJCQkJcnMuYWRkKGl0ZW0pOwotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkJCWFzc2VydCBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLy8gWFhYIGxhbWUKLQkJaWYgKG5vZGVfdHlwZXMpIHsKLQkJCXJzID0gTm9kZVR5cGUubGluYXJpemUocnMpOwotCQl9Ci0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2Ugcm9vdF9zZWxmX25vZGUoKSB7Ci0JCUF4aXMgYXhpcyA9IG5ldyBTZWxmQXhpcygpOwotCQlSZXN1bHRCdWZmZXIgYnVmZmVyID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCi0JCS8vIFhYWCB0aGUgY2FzdCEhIQotCQlheGlzLml0ZXJhdGUoKE5vZGVUeXBlKSBmb2N1cygpLmNvbnRleHRfaXRlbSgpLCBidWZmZXIsIF9kYy5nZXRMaW1pdE5vZGUoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoYnVmZmVyLmdldFNlcXVlbmNlKCksIE5vZGVUeXBlLmNsYXNzKTsKLQotCQlMaXN0IHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXJlY29yZHMuYWRkKHJzKTsKLQkJcnMgPSBGblJvb3QuZm5fcm9vdChyZWNvcmRzLCBfZWMpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBkZXNjZW5kYW50X29yX3NlbGZfbm9kZShSZXN1bHRTZXF1ZW5jZSBycykgewotCQlSZXN1bHRCdWZmZXIgcmVzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQlBeGlzIGF4aXMgPSBuZXcgRGVzY2VuZGFudE9yU2VsZkF4aXMoKTsKLQotCQkvLyBmb3IgYWxsIG5vZGVzLCBnZXQgZGVzY2VuZGFudCBvciBzZWxmIG5vZGVzCi0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgaXRlbSA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWF4aXMuaXRlcmF0ZShpdGVtLCByZXMsIF9kYy5nZXRMaW1pdE5vZGUoKSk7Ci0JCX0KLQotCQlyZXR1cm4gcmVzLmdldFNlcXVlbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgWFBhdGggZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgWFBhdGggZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSkgewotCQlYUGF0aEV4cHIgeHAgPSBlOwotCi0JCVJlc3VsdFNlcXVlbmNlIHJzID0gbnVsbDsKLQkJRm9jdXMgb3JpZ2luYWxfZm9jdXMgPSBmb2N1cygpOwotCi0JCS8vIGRvIGFsbCB0aGUgc3RlcHMKLQkJd2hpbGUgKHhwICE9IG51bGwpIHsKLQkJCVN0ZXBFeHByIHNlID0geHAuZXhwcigpOwotCi0JCQlpZiAoc2UgIT0gbnVsbCkgewotCQkJCS8vIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzdGVwCi0JCQkJaWYgKHJzICE9IG51bGwpIHsKLQkJCQkJLy8gWFhYID8KLQkJCQkJLy8gdGhlIGV4cHJlc3Npb24gZGlkbid0IHJldHVybiBhbnkKLQkJCQkJLy8gcmVzdWx0cy4uLgotCQkJCQlpZiAocnMuc2l6ZSgpID09IDApCi0JCQkJCQlicmVhazsKLQotCQkJCQkvLyBtYWtlIHN1cmUgcmVzdWx0IG9mIHByZXZpb3VzIHN0ZXAgYXJlCi0JCQkJCS8vIG5vZGVzIQotCQkJCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCQkJCUFueVR5cGUgaXRlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJCQkJaWYgKCEoaXRlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKSkgewotCQkJCQkJCXJlcG9ydF9lcnJvcihUeXBlRXJyb3Iuc3RlcF9jb25hdGluc19hdG9tcyhudWxsKSk7Ci0JCQkJCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCS8vIGNoZWNrIGlmIHdlIGdvdCBhIC8vCi0JCQkJCWlmICh4cC5zbGFzaGVzKCkgPT0gMikgewotCQkJCQkJcnMgPSBkZXNjZW5kYW50X29yX3NlbGZfbm9kZShycyk7Ci0KLQkJCQkJCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCS8vIG1ha2UgcmVzdWx0IG9mIHByZXZpb3VzIHN0ZXAgdGhlIG5ldwotCQkJCQkvLyBmb2N1cwotCQkJCQlzZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0KLQkJCQkJLy8gZG8gdGhlIHN0ZXAgZm9yIGFsbCBpdGVtIGluIGNvbnRleHQKLQkJCQkJcnMgPSBkb19zdGVwKHNlKTsKLQkJCQl9Ci0JCQkJLy8gdGhpcyBpcyBmaXJzdCBzdGVwLi4uCi0JCQkJLy8gbm90ZS4uLiB3ZSBtYXkgYmUgY2FsbGVkIGZyb20gdXBzdHJlYW0uLi4KLQkJCQkvLyBsaWtlIGluIHRoZSBleHByZXNzaW9uIHNvcmJvLypbMl0gLi4uIHdlIG1heQotCQkJCS8vIGJlIGNhbGxlZCB0byBldmFsdWF0ZSB0aGUgMi4uLiB0aGUgY2FsbGVyCi0JCQkJLy8gd2lsbCBpdGVyYXRlIHRocm91Z2ggdGhlIHdob2xlIG91dGVyIGZvY3VzCi0JCQkJLy8gZm9yIHVzCi0JCQkJZWxzZSB7Ci0JCQkJCS8vIFhYWCA/Pz8KLQkJCQkJaWYgKHhwLnNsYXNoZXMoKSA9PSAxKSB7Ci0JCQkJCQlycyA9IHJvb3Rfc2VsZl9ub2RlKCk7Ci0JCQkJCQlzZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0KLQkJCQkJCXJzID0gZG9fc3RlcChzZSk7Ci0JCQkJCX0gZWxzZSBpZiAoeHAuc2xhc2hlcygpID09IDIpIHsKLQkJCQkJCXJzID0gcm9vdF9zZWxmX25vZGUoKTsKLQotCQkJCQkJcnMgPSBkZXNjZW5kYW50X29yX3NlbGZfbm9kZShycyk7Ci0KLQkJCQkJCXNldF9mb2N1cyhuZXcgRm9jdXMocnMpKTsKLQotCQkJCQkJcnMgPSBkb19zdGVwKHNlKTsKLQkJCQkJfSBlbHNlCi0JCQkJCQlycyA9IChSZXN1bHRTZXF1ZW5jZSkgc2UuYWNjZXB0KHRoaXMpOwotCQkJCX0KLQkJCX0KLQkJCS8vIHRoZSBleHByZXNzaW9uIGlzICIvIgotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0IHhwLnNsYXNoZXMoKSA9PSAxOwotCi0JCQkJcnMgPSByb290X3NlbGZfbm9kZSgpOwotCQkJfQotCi0JCQl4cCA9IHhwLm5leHQoKTsKLQkJfQotCi0JCS8vIHJlc3RvcmUgZm9jdXMKLQkJc2V0X2ZvY3VzKG9yaWdpbmFsX2ZvY3VzKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYSBmb3J3YXJkIHN0ZXAgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZm9yd2FyZCBzdGVwLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvcndhcmRTdGVwIGUpIHsKLQotCQkvLyBnZXQgY29udGV4dCBub2RlCi0JCUFueVR5cGUgY2kgPSBmb2N1cygpLmNvbnRleHRfaXRlbSgpOwotCQkKLQkJaWYgKGNpID09IG51bGwpIAotCQkJcmVwb3J0X2Vycm9yKER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCkpOwotCi0JCWlmICghKGNpIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5jaV9ub3Rfbm9kZShjaS5zdHJpbmdfdHlwZSgpKSk7Ci0KLQkJTm9kZVR5cGUgY24gPSAoTm9kZVR5cGUpIGNpOwotCi0JCS8vIGdldCB0aGUgbm9kZXMgb24gdGhlIGF4aXMKLQkJRm9yd2FyZEF4aXMgYXhpcyA9IGUuaXRlcmF0b3IoKTsKLQkJUmVzdWx0QnVmZmVyIHJiID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQlheGlzLml0ZXJhdGUoY24sIHJiLCBfZGMuZ2V0TGltaXROb2RlKCkpOwotCQkvLyBnZXQgYWxsIG5vZGVzIGluIHRoZSBheGlzLCBhbmQgcHJpbmNpcGFsIG5vZGUKLQkJUGFpciBhcmcgPSBuZXcgUGFpcihheGlzLnByaW5jaXBhbF9ub2RlX2tpbmQoKS5zdHJpbmdfdHlwZSgpLCByYi5nZXRTZXF1ZW5jZSgpKTsKLQotCQkvLyBkbyB0aGUgbmFtZSB0ZXN0Ci0JCV9wYXJhbSA9IGFyZzsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGUubm9kZV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhIHJldmVyc2Ugc3RlcCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZXZlcnNlIHN0ZXAuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCS8vIFhYWCB1bmlmeSB3aXRoIHRvcAotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmV2ZXJzZVN0ZXAgZSkgewotCQkvLyBnZXQgY29udGV4dCBub2RlCi0JCUFueVR5cGUgY2kgPSBmb2N1cygpLmNvbnRleHRfaXRlbSgpOwotCi0JCWlmICghKGNpIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJcmVwb3J0X2Vycm9yKFR5cGVFcnJvci5jaV9ub3Rfbm9kZShjaS5zdHJpbmdfdHlwZSgpKSk7Ci0KLQkJTm9kZVR5cGUgY24gPSAoTm9kZVR5cGUpIGNpOwotCi0JCS8vIGdldCB0aGUgbm9kZXMgb24gdGhlIGF4aXMKLQkJUmV2ZXJzZUF4aXMgYXhpcyA9IGUuaXRlcmF0b3IoKTsKLQkJCi0JCVJlc3VsdEJ1ZmZlciByZXN1bHQgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCS8vIHNob3J0IGZvciAiZ2ltbWUgZGEgcGFyZW50IgotCQlpZiAoZS5heGlzKCkgPT0gUmV2ZXJzZVN0ZXAuRE9URE9UKSB7Ci0JCQluZXcgUGFyZW50QXhpcygpLml0ZXJhdGUoY24sIHJlc3VsdCwgX2RjLmdldExpbWl0Tm9kZSgpKTsKLQkJCXJldHVybiByZXN1bHQuZ2V0U2VxdWVuY2UoKTsKLQkJfQotCi0JCWFzc2VydCBheGlzICE9IG51bGw7Ci0KLQkJYXhpcy5pdGVyYXRlKGNuLCByZXN1bHQsIG51bGwpOwotCQkvLyBnZXQgYWxsIG5vZGVzIGluIHRoZSBheGlzLCBhbmQgcHJpbmNpcGFsIG5vZGUKLQkJUGFpciBhcmcgPSBuZXcgUGFpcihheGlzLnByaW5jaXBhbF9ub2RlX2tpbmQoKS5zdHJpbmdfdHlwZSgpLCByZXN1bHQuZ2V0U2VxdWVuY2UoKSk7Ci0KLQkJLy8gZG8gdGhlIG5hbWUgdGVzdAotCQlfcGFyYW0gPSBhcmc7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBlLm5vZGVfdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLy8gWFhYIHRoaXMgcm91dGluZSBzdXgKLQlwcml2YXRlIGJvb2xlYW4gbmFtZV90ZXN0KE5vZGVUeXBlIG5vZGUsIFFOYW1lIG5hbWUsIFN0cmluZyB0eXBlKSB7Ci0JCS8vIG1ha2Ugc3VyZSBwcmluY2lwYWwgbm9kZSBraW5kIGlzIHRoZSBzYW1lCi0JCWlmIChub2RlID09IG51bGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlpZiAoIXR5cGUuZXF1YWxzKG5vZGUuc3RyaW5nX3R5cGUoKSkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCVN0cmluZyB0ZXN0X3ByZWZpeCA9IG5hbWUucHJlZml4KCk7Ci0KLQkJLy8gaWYgdW5wcmVmaXhlZCBhbmQgcHJpbmNpcGFsIG5vZGUga2luZCBpcyBlbGVtZW50LCBzZXQgZGVmYXVsdAotCQkvLyBlbGVtZW50IG5hbWVzcGFjZQotCQlpZiAodGVzdF9wcmVmaXggPT0gbnVsbCAmJiB0eXBlLmVxdWFscygiZWxlbWVudCIpKSB7Ci0JCQkvLyBYWFggbWFrZSBhIG5ldyBjb3B5Ci0JCQluYW1lID0gbmV3IFFOYW1lKG51bGwsIG5hbWUubG9jYWwoKSk7Ci0JCQluYW1lLnNldF9uYW1lc3BhY2UoX3NjLmdldERlZmF1bHROYW1lc3BhY2UoKSk7Ci0KLQkJCS8vIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBuYW1lc3BhY2UsIHByZXRlbmQgd2UgZG8gPUQKLQkJCWlmIChuYW1lLm5hbWVzcGFjZSgpICE9IG51bGwgJiYgbmFtZS5uYW1lc3BhY2UoKS5sZW5ndGgoKSA+IDApCi0JCQkJdGVzdF9wcmVmaXggPSAiIjsKLQkJfQotCi0JCVFOYW1lIG5vZGVfbmFtZSA9IG5vZGUubm9kZV9uYW1lKCk7Ci0KLQkJYXNzZXJ0IG5vZGVfbmFtZSAhPSBudWxsOwotCi0JCS8vIG1ha2Ugc3VyZSBuYW1lc3BhY2UgbWF0Y2hlcwotCQlTdHJpbmcgbm9kZV9uYW1lc3BhY2UgPSBub2RlX25hbWUubmFtZXNwYWNlKCk7Ci0KLQkJU3RyaW5nIHRlc3RfbmFtZXNwYWNlID0gbnVsbDsKLQkJaWYgKG5hbWUuZXhwYW5kZWQoKSkKLQkJCXRlc3RfbmFtZXNwYWNlID0gbmFtZS5uYW1lc3BhY2UoKTsKLQotCQkvLyBuYW1lIHRlc3QgaGFzIG5vIHByZWZpeAotCQlpZiAodGVzdF9wcmVmaXggPT0gbnVsbCkgewotCQkJLy8gb2sgbm8gbmFtZXNwYWNlLi4uIG1hdGNoCi0JCQlpZiAobm9kZV9uYW1lc3BhY2UgPT0gbnVsbCkgewotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJLy8gbmFtZSB0ZXN0IGhhcyBhIHByZWZpeCBhbmQgaXMgbm90IHdpbGRjYXJkCi0JCS8vIFhYWCBBVCBUSElTIFBPSU5UIEFMTCBQUkVGSVhFUyBORUVEIFRPIEJFIFJFU09MVkVEIQotCQllbHNlIGlmICghdGVzdF9uYW1lc3BhY2UuZXF1YWxzKCIqIikpIHsKLQkJCS8vIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhIG5hbWVzcGFjZS4uLiBubyBtYXRjaAotCQkJaWYgKG5vZGVfbmFtZXNwYWNlID09IG51bGwpIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQkvLyBjaGVjayBuYW1lc3BhY2VzCi0JCQllbHNlIHsKLQkJCQlpZiAobm9kZV9uYW1lc3BhY2UuZXF1YWxzKHRlc3RfbmFtZXNwYWNlKSkgewotCQkJCQkvLyBuYW1lc3BhY2UgbWF0Y2hlcwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBtYWtlIHN1cmUgbG9jYWwgcGFydCBtYXRjaGVzCi0JCS8vIGNoZWNrIGZvciB3aWxkY2FyZCBpbiBsb2NhbHBhcnQKLQkJaWYgKG5hbWUubG9jYWwoKS5lcXVhbHMoIioiKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8vIGNoZWNrIGlmIGxvY2FsIHBhcnQgbWF0Y2hlcwotCQlpZiAoIW5hbWUubG9jYWwoKS5lcXVhbHMobm9kZV9uYW1lLmxvY2FsKCkpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhIG5hbWUgdGVzdCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZW5hbWUgdGVzdC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChOYW1lVGVzdCBlKSB7Ci0JCVFOYW1lIG5hbWUgPSBlLm5hbWUoKTsKLQotCQkvLyBnZXQgdGhlIGFyZ3VtZW50cwotCQlQYWlyIGFyZyA9IChQYWlyKSBfcGFyYW07Ci0JCVN0cmluZyB0eXBlID0gKFN0cmluZykgYXJnLl9vbmU7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBhcmcuX3R3bzsKLQotCQlSZXN1bHRCdWZmZXIgcmIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gY2hlY2sgaWYgbm9kZSBwYXNzZXMgbmFtZSB0ZXN0Ci0JCQlpZiAobmFtZV90ZXN0KG50LCBuYW1lLCB0eXBlKSkKLQkJCQlyYi5hZGQobnQpOwotCQl9Ci0JCXJzID0gcmIuZ2V0U2VxdWVuY2UoKTsKLQkJYXJnLl90d28gPSByczsKLQkJCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCB2YXJpYWJsZSByZWZlcmVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHZhcmlhYmxlIHJlZmVyZW5jZS4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChWYXJSZWYgZSkgewotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJT2JqZWN0IHZhciA9IGdldFZhcmlhYmxlKGUubmFtZSgpKTsKLQotCQlhc3NlcnQgdmFyICE9IG51bGw7Ci0KLQkJaWYgKHZhciBpbnN0YW5jZW9mIEFueVR5cGUpIHsKLQkJICAgcnMuYWRkKChBbnlUeXBlKSB2YXIpOwotCQl9Ci0JCWVsc2UgaWYgKHZhciBpbnN0YW5jZW9mIFJlc3VsdFNlcXVlbmNlKSB7Ci0JCSAgIHJzLmNvbmNhdCgoUmVzdWx0U2VxdWVuY2UpIHZhcik7CQotCQl9Ci0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc3RyaW5nIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdHJpbmcgbGl0ZXJhbC4KLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdHJpbmdMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIGUudmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBpbnRlZ2VyIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIGxpdGVyYWwuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZWdlckxpdGVyYWwgZSkgewotCQlyZXR1cm4gZS52YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGRvdWJsZSBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZG91YmxlIGxpdGVyYWwuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG91YmxlTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBlLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZGVjaW1hbCBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZGVjaW1hbCBsaXRlcmFsLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERlY2ltYWxMaXRlcmFsIGUpIHsKLQkJUmVzdWx0QnVmZmVyIHJzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCi0JCXJzLmFkZChlLnZhbHVlKCkpOwotCQlyZXR1cm4gcnMuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBwYXJlbnQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBhckV4cHIgZSkgewotCQlyZXR1cm4gZG9fZXhwcihlLml0ZXJhdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGNvbnRleHQgaXRlbSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgY29udGV4dCBpdGVtIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ250eEl0ZW1FeHByIGUpIHsKLQkJUmVzdWx0QnVmZmVyIHJzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCi0JCUFueVR5cGUgY29udGV4dEl0ZW0gPSBmb2N1cygpLmNvbnRleHRfaXRlbSgpOwotCQlpZiAoY29udGV4dEl0ZW0gPT0gbnVsbCkgewotCQkJcmVwb3J0X2Vycm9yKER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCkpOwotCQl9Ci0JCXJzLmFkZChjb250ZXh0SXRlbSk7Ci0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGZ1bmN0aW9uIGNhbGwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmdW5jdGlvbiBjYWxsLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24gb3IgbnVsbAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRnVuY3Rpb25DYWxsIGUpIHsKLQkJQXJyYXlMaXN0IGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUV4cHIgYXJnID0gKEV4cHIpIGkubmV4dCgpOwotCQkJLy8gZWFjaCBhcmd1bWVudCB3aWxsIHByb2R1Y2UgYSByZXN1bHQgc2VxdWVuY2UKLQkJCWFyZ3MuYWRkKChSZXN1bHRTZXF1ZW5jZSlhcmcuYWNjZXB0KHRoaXMpKTsKLQkJfQotCi0JCXRyeSB7Ci0JCQlGdW5jdGlvbiBmdW5jdGlvbiA9IGUuZnVuY3Rpb24oKTsKLQkJCWlmIChmdW5jdGlvbiA9PSBudWxsKSB7Ci0JCQkJZnVuY3Rpb24gPSBfc2MucmVzb2x2ZUZ1bmN0aW9uKGUubmFtZSgpLmFzUU5hbWUoKSwgYXJncy5zaXplKCkpOwotCQkJCWUuc2V0X2Z1bmN0aW9uKGZ1bmN0aW9uKTsKLQkJCX0KLQkJCXJldHVybiBmdW5jdGlvbi5ldmFsdWF0ZShhcmdzLCBfZWMpOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXBvcnRfZXJyb3IoZXJyKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBzaW5nbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNpbmdsZSB0eXBlLgotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2luZ2xlVHlwZSBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IHNlcXVlbmNlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzZXF1ZW5jZSB0eXBlLgotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpIHsKLQkJSXRlbVR5cGUgaXQgPSBlLml0ZW1fdHlwZSgpOwotCi0JCWlmIChpdCAhPSBudWxsKQotCQkJaXQuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IGl0ZW0gdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGl0ZW0gdHlwZS4KLQkgKiBAcmV0dXJuIG51bGwKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEl0ZW1UeXBlIGUpIHsKLQotCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCWNhc2UgSXRlbVR5cGUuSVRFTToKLQkJCWJyZWFrOwotCQljYXNlIEl0ZW1UeXBlLlFOQU1FOgotCi0JCQlib29sZWFuIG9rID0gZmFsc2U7Ci0JCQlUeXBlTW9kZWwgbW9kZWwgPSBfc2MuZ2V0VHlwZU1vZGVsKCk7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW9rID0gX3NjLmdldFR5cGVNb2RlbCgpLmxvb2t1cFR5cGUoZS5xbmFtZSgpLm5hbWVzcGFjZSgpLCBlLnFuYW1lKCkubG9jYWwoKSkgIT0gbnVsbDsKLQkJCX0KLQkJCWlmICghIG9rICkgewotCQkJCW9rID0gQnVpbHRpblR5cGVMaWJyYXJ5LkJVSUxUSU5fVFlQRVMubG9va3VwVHlwZShlLnFuYW1lKCkubmFtZXNwYWNlKCksIGUucW5hbWUoKS5sb2NhbCgpKSAhPSBudWxsOwotCQkJfQotCQkJaWYgKCEgb2spIHJlcG9ydF9lcnJvcihuZXcgU3RhdGljVHlwZU5hbWVFcnJvcigiVHlwZSBub3QgZGVmaW5lZDogIgotCQkJCQkrIGUucW5hbWUoKS5zdHJpbmcoKSkpOwotCQkJCi0JCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCQkJKChQYWlyKSBfcGFyYW0pLl90d28gPSBpdGVtX3Rlc3QoYXJnLCBlLnFuYW1lKCkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJdGVtVHlwZS5LSU5EVEVTVDoKLQkJCSgoUGFpcikgX3BhcmFtKS5fdHdvID0gZS5raW5kX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgaXRlbV90ZXN0KFJlc3VsdFNlcXVlbmNlIHJzLCBRTmFtZSBxbmFtZSkgewotCQlSZXN1bHRCdWZmZXIgcmIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCQkJCi0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJTm9kZVR5cGUgbm9kZSA9ICgoTm9kZVR5cGUpaXRlbSk7Ci0JCQkJaWYgKGRlcml2ZXNGcm9tKG5vZGUsIHFuYW1lKSkgcmIuYWRkKG5vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvLyBhdG9taWMgb2Ygc29tZSBzb3J0Ci0JCQkJaWYgKHFuYW1lLmVxdWFscyhBTllfQVRPTUlDX1RZUEUpKSB7Ci0JCQkJCXJiLmFkZChpdGVtKTsKLQkJCQkJY29udGludWU7IC8vIG1hdGNoICEKLQkJCQl9Ci0JCQkJCi0JCQkJZmluYWwgQW55QXRvbWljVHlwZSBhYXQgPSBtYWtlQXRvbWljKHFuYW1lKTsKLQkJCQlpZiAoYWF0LmdldENsYXNzKCkuaXNJbnN0YW5jZShpdGVtKSkgcmIuYWRkKGl0ZW0pOwotCQkJCQotCQkJCS8vIGZhbGwgdGhyb3VnaCA9PiBub24tbWF0Y2gKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmIuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLSAgICBwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGtpbmRfdGVzdChSZXN1bHRTZXF1ZW5jZSBycywgQ2xhc3Mga2luZCkgewotICAgIAlSZXN1bHRCdWZmZXIgcmIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJSXRlbSBpdGVtID0gKEl0ZW0pIGkubmV4dCgpOwotCQkJaWYgKGtpbmQuaXNJbnN0YW5jZShpdGVtKSkKLQkJCQlyYi5hZGQoaXRlbSk7Ci0JCX0KLQkJcmV0dXJuIHJiLmdldFNlcXVlbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgYW55IGtpbmQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGFueSBraW5kIHRlc3QuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW55S2luZFRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCi0JCXJldHVybiBraW5kX3Rlc3QoYXJnLCBOb2RlVHlwZS5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZG9jdW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGRvY3VtZW50IHRlc3QuCi0JICogQHJldHVybiByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvY3VtZW50VGVzdCBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgKChQYWlyKSBfcGFyYW0pLl90d287Ci0JCWludCB0eXBlID0gZS50eXBlKCk7Ci0KLQkJLy8gZmlsdGVyIGRvYyBub2RlcwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdChhcmcsIERvY1R5cGUuY2xhc3MpOwotCi0JCWlmICh0eXBlID09IERvY3VtZW50VGVzdC5OT05FKQotCQkJcmV0dXJuIHJzOwotCi0JCS8vIGZvciBhbGwgZG9jcywgZmluZCB0aGUgb25lcyB3aXRoIGV4YWN0bHkgb25lIGVsZW1lbnQsIGFuZCBkbwotCQkvLyB0aGUgZWxlbWVudCB0ZXN0Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJRG9jVHlwZSBkb2MgPSAoRG9jVHlwZSkgaS5uZXh0KCk7Ci0JCQlpbnQgZWxlbV9jb3VudCA9IDA7Ci0JCQlFbGVtZW50VHlwZSBlbGVtID0gbnVsbDsKLQotCQkJLy8gbWFrZSBzdXJlIGRvYyBoYXMgb25seSAxIGVsZW1lbnQKLQkJCU5vZGVMaXN0IGNoaWxkcmVuID0gZG9jLm5vZGVfdmFsdWUoKS5nZXRDaGlsZE5vZGVzKCk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBqKyspIHsKLQkJCQlOb2RlIGNoaWxkID0gY2hpbGRyZW4uaXRlbShqKTsKLQotCQkJCS8vIGJpbmdvCi0JCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJZWxlbV9jb3VudCsrOwotCi0JCQkJCWlmIChlbGVtX2NvdW50ID4gMSkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCWVsZW0gPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpIGNoaWxkLCBfc2MuZ2V0VHlwZU1vZGVsKCkpOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gdGhpcyBkb2MgaXMgbm8gZ29vZC4uLiBzZW5kIGhpbSB0byBoZWxsCi0JCQlpZiAoZWxlbV9jb3VudCAhPSAxKSB7Ci0JCQkJaS5yZW1vdmUoKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJYXNzZXJ0IGVsZW0gIT0gbnVsbDsKLQotCQkJLy8gc2V0dXAgcGFyYW1ldGVyIGZvciBlbGVtZW50IHRlc3QKLQkJCVJlc3VsdFNlcXVlbmNlIHJlcyA9IG5ldyBSZXN1bHRCdWZmZXIuU2luZ2xlUmVzdWx0U2VxdWVuY2UoZWxlbSk7Ci0JCQlfcGFyYW0gPSBuZXcgUGFpcigiZWxlbWVudCIsIHJlcyk7Ci0KLQkJCS8vIGRvIG5hbWUgdGVzdAotCQkJcmVzID0gbnVsbDsKLQkJCWlmICh0eXBlID09IERvY3VtZW50VGVzdC5FTEVNRU5UKQotCQkJCXJlcyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5lbGVtX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQllbHNlIGlmICh0eXBlID09IERvY3VtZW50VGVzdC5TQ0hFTUFfRUxFTUVOVCkKLQkJCQlyZXMgPSAoUmVzdWx0U2VxdWVuY2UpIGUuc2NoZW1hX2VsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWVsc2UKLQkJCQlhc3NlcnQgZmFsc2U7Ci0KLQkJCS8vIGNoZWNrIGlmIGVsZW1lbnQgc3Vydml2ZWQgbmFtZXRlc3QKLQkJCWlmIChyZXMuc2l6ZSgpICE9IDEpCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCB0ZXh0IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0ZXh0IHRlc3QuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVGV4dFRlc3QgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvOwotCi0JCSgoUGFpcikgX3BhcmFtKS5fdHdvID0ga2luZF90ZXN0KGFyZywgVGV4dFR5cGUuY2xhc3MpOwotCQlyZXR1cm4gKChQYWlyKSBfcGFyYW0pLl90d287Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgY29tbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgdGV4dCB0ZXN0LgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENvbW1lbnRUZXN0IGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bzsKLQotCQlyZXR1cm4ga2luZF90ZXN0KGFyZywgQ29tbWVudFR5cGUuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIHZpc2l0IFBJIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBQSSB0ZXN0LgotCSAqIEByZXR1cm4gYSBhcmd1bWVudAotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUElUZXN0IGUpIHsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bzsKLQotCQlTdHJpbmcgcGl0X2FyZyA9IGUuYXJnKCk7Ci0KLQkJLy8gbWF0Y2ggYW55IHBpCi0JCWlmIChwaXRfYXJnID09IG51bGwpCi0JCQlyZXR1cm4ga2luZF90ZXN0KGFyZywgUElUeXBlLmNsYXNzKTsKLQotICAgIAlSZXN1bHRCdWZmZXIgcmIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgaXRlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gbWF0Y2ggUEkKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgUElUeXBlKSB7Ci0JCQkJUElUeXBlIHBpID0gKFBJVHlwZSkgaXRlbTsKLQotCQkJCS8vIG1hdGNoIHRhcmdldAotCQkJCWlmIChwaXRfYXJnLmVxdWFscyhwaS52YWx1ZSgpLmdldFRhcmdldCgpKSkKLQkJCQkJcmIuYWRkKHBpKTsKLQkJCX0KLQkJfQotCQlhcmcgPSByYi5nZXRTZXF1ZW5jZSgpOwotCQkoKFBhaXIpIF9wYXJhbSkuX3R3byA9IGFyZzsKLQkJcmV0dXJuIGFyZzsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBhdHRyaWJ1dGUgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF0dHJpYnV0ZVRlc3QgZSkgewotCQkvLyBmaWx0ZXIgb3V0IGFsbCBhdHRycwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdCgoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvLAotCQkJCUF0dHJUeXBlLmNsYXNzKTsKLQotCQlSZXN1bHRCdWZmZXIgcmIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCQotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0JCVFOYW1lIHR5cGUgPSBlLnR5cGUoKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCQkJLy8gbWF0Y2ggdGhlIG5hbWUgaWYgaXQncyBub3QgYSB3aWxkIGNhcmQKLQkJCWlmIChuYW1lICE9IG51bGwgJiYgIWUud2lsZCgpKSB7Ci0JCQkJaWYgKCFuYW1lX3Rlc3Qobm9kZSwgbmFtZSwgImF0dHJpYnV0ZSIpKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJCS8vIG1hdGNoIHRoZSB0eXBlCi0JCQlpZiAodHlwZSAhPSBudWxsKSB7Ci0JCQkJLy8gY2hlY2sgaWYgZWxlbWVudCBkZXJpdmVzIGZyb20KLQkJCQlpZiAoISBkZXJpdmVzRnJvbShub2RlLCB0eXBlKSkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0JCQlyYi5hZGQobm9kZSk7Ci0JCX0KLQkJKChQYWlyKSBfcGFyYW0pLl90d28gPSByYi5nZXRTZXF1ZW5jZSgpOwotCQlyZXR1cm4gKChQYWlyKSBfcGFyYW0pLl90d287Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2NoZW1hIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUF0dHJUZXN0IGUpIHsKLQkJLy8gZmlsdGVyIG91dCBhbGwgYXR0cnMKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bywKLQkJCQlBdHRyVHlwZS5jbGFzcyk7Ci0KLQkJLy8gbWF0Y2ggdGhlIG5hbWUKLQkJUU5hbWUgbmFtZSA9IGUuYXJnKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaWYgKCFuYW1lX3Rlc3QoKE5vZGVUeXBlKSBpLm5leHQoKSwgbmFtZSwgImF0dHJpYnV0ZSIpKQotCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCS8vIGNoZWNrIHRoZSB0eXBlCi0JCVR5cGVEZWZpbml0aW9uIGV0ID0gX3NjLmdldFR5cGVNb2RlbCgpLmxvb2t1cEF0dHJpYnV0ZURlY2xhcmF0aW9uKG5hbWUubmFtZXNwYWNlKCksIG5hbWUubG9jYWwoKSk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJTm9kZVR5cGUgbm9kZSA9IChOb2RlVHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmICghIGRlcml2ZXNGcm9tKG5vZGUsIGV0KSkKLQkJCQlpLnJlbW92ZSgpOwotCi0JCX0KLQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZWxlbWVudCB0ZXN0LgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEVsZW1lbnRUZXN0IGUpIHsKLQkJLy8gZmlsdGVyIG91dCBhbGwgZWxlbWVudHMKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBraW5kX3Rlc3QoKFJlc3VsdFNlcXVlbmNlKSAoKFBhaXIpIF9wYXJhbSkuX3R3bywKLQkJCQlFbGVtZW50VHlwZS5jbGFzcyk7Ci0KLQkJLy8gbWF0Y2ggdGhlIG5hbWUgaWYgaXQncyBub3QgYSB3aWxkIGNhcmQKLQkJUmVzdWx0QnVmZmVyIHJiID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQlRTmFtZSBuYW1lVGVzdCA9IGUubmFtZSgpOwotCQlRTmFtZSB0eXBlVGVzdCA9IGUudHlwZSgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCi0JCQlpZiAobmFtZVRlc3QgIT0gbnVsbCAmJiAhZS53aWxkKCkpIHsKLQkJCQkvLyBza2lwIGlmIHRoZXJlJ3MgYSBuYW1lIHRlc3QgYW5kIHRoZSBuYW1lIGRvZXMgbm90IG1hdGNoCi0JCQkJaWYgKCFuYW1lX3Rlc3QoKEVsZW1lbnRUeXBlKSBub2RlLCBuYW1lVGVzdCwgImVsZW1lbnQiKSkgY29udGludWU7Ci0JCQl9Ci0JCQlpZiAodHlwZVRlc3QgIT0gbnVsbCkgewotCQkJCS8vIGNoZWNrIGlmIGVsZW1lbnQgZGVyaXZlcyBmcm9tCi0JCQkJaWYgKCEgZGVyaXZlc0Zyb20obm9kZSwgdHlwZVRlc3QpKSBjb250aW51ZTsKLQkJCQkKLQkJCQkvLyBuaWxsZWQgbWF5IGJlIHRydWUgb3IgZmFsc2UKLQkJCQlpZiAoISBlLnFtYXJrKCkpIHsKLQkJCQkJWFNCb29sZWFuIG5pbGxlZCA9IChYU0Jvb2xlYW4pIG5vZGUubmlsbGVkKCkuZmlyc3QoKTsKLQkJCQkJaWYgKG5pbGxlZC52YWx1ZSgpKSBjb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlyYi5hZGQobm9kZSk7Ci0JCX0KLQkJKChQYWlyKSBfcGFyYW0pLl90d28gPSByYi5nZXRTZXF1ZW5jZSgpOwotCQlyZXR1cm4gKChQYWlyKSBfcGFyYW0pLl90d287Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgc2NoZW1hIGVsZW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hRWxlbVRlc3QgZSkgewotCQkvLyBmaWx0ZXIgb3V0IGFsbCBlbGVtZW50cwotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGtpbmRfdGVzdCgoUmVzdWx0U2VxdWVuY2UpICgoUGFpcikgX3BhcmFtKS5fdHdvLAotCQkJCUVsZW1lbnRUeXBlLmNsYXNzKTsKLQotCQkvLyBtYXRjaCB0aGUgbmFtZQotCQkvLyBYWFggc3Vic3RpdHV0aW9uIGdyb3VwcwotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHJzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaWYgKCFuYW1lX3Rlc3QoKEVsZW1lbnRUeXBlKSBpLm5leHQoKSwgbmFtZSwgImVsZW1lbnQiKSkKLQotCQkJCWkucmVtb3ZlKCk7Ci0JCX0KLQotCQkvLyBjaGVjayB0aGUgdHlwZQotCQlUeXBlRGVmaW5pdGlvbiBldCA9IF9zYy5nZXRUeXBlTW9kZWwoKS5sb29rdXBFbGVtZW50RGVjbGFyYXRpb24obmFtZS5uYW1lc3BhY2UoKSwgbmFtZS5sb2NhbCgpKTsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJaWYgKCEgZGVyaXZlc0Zyb20obm9kZSwgZXQpKSB7Ci0JCQkJaS5yZW1vdmUoKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJWFNCb29sZWFuIG5pbGxlZCA9IChYU0Jvb2xlYW4pIG5vZGUubmlsbGVkKCkuZmlyc3QoKTsKLQkJCS8vIFhYWCBvciwgaW4gc2NoZW1hIGl0IGlzIG5pbGxhYmxlCi0JCQlpZiAobmlsbGVkLnZhbHVlKCkpCi0JCQkJaS5yZW1vdmUoKTsKLQkJfQotCi0JCXJldHVybiByczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gcHJlZGljYXRlX3RydXRoKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCS8vIHJ1bGUgMSBvZiBzcGVjLi4uIGlmIG51bWVyaWMgdHlwZToKLQkJLy8gaWYgbnVtIGVxIHBvc2l0aW9uIHRoZW4gdHJ1ZSBlbHNlIGZhbHNlCi0JCWlmIChycy5zaXplKCkgPT0gMSkgewotCQkJQW55VHlwZSBhdCA9IChBbnlUeXBlKSBycy5pdGVtKDApOwotCi0JCQlpZiAoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJCXRyeSB7Ci0JCQkJCXJldHVybiBGc0VxLmZzX2VxX2Zhc3QoYXQsIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGZvY3VzKCkucG9zaXRpb24oKSkpLCBfZGMpOwotCQkJCX0gY2F0Y2ggKER5bmFtaWNFcnJvciBlcnIpIHsKLQkJCQkJcmVwb3J0X2Vycm9yKGVycik7Ci0KLQkJCQkJLy8gdW5yZWFjaAotCQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBydWxlIDIKLQkJWFNCb29sZWFuIHJldCA9IGVmZmVjdGl2ZV9ib29sZWFuX3ZhbHVlKHJzKTsKLQotCQlyZXR1cm4gcmV0LnZhbHVlKCk7Ci0JfQotCi0JLy8gZG8gdGhlIHByZWRpY2F0ZSBmb3IgYWxsIGl0ZW1zIGluIGZvY3VzCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBkb19wcmVkaWNhdGUoQ29sbGVjdGlvbiBleHBycykgewotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJRm9jdXMgZm9jdXMgPSBmb2N1cygpOwotCQlpbnQgb3JpZ2luYWxfY3AgPSBmb2N1cy5wb3NpdGlvbigpOwotCi0JCS8vIG9wdGltaXphdGlvbgotCQkvLyBjaGVjayBpZiBwcmVkaWNhdGUgaXMgc2luZ2xlIG51bWVyaWMgY29uc3RhbnQKLQkJaWYgKGV4cHJzLnNpemUoKSA9PSAxKSB7Ci0JCQlFeHByIGV4cHIgPSAoRXhwcikgZXhwcnMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJCWlmIChleHByIGluc3RhbmNlb2YgWFBhdGhFeHByKSB7Ci0JCQkJWFBhdGhFeHByIHhwZSA9IChYUGF0aEV4cHIpIGV4cHI7Ci0JCQkJaWYgKHhwZS5uZXh0KCkgPT0gbnVsbCAmJiB4cGUuc2xhc2hlcygpID09IDAKLQkJCQkJCSYmIHhwZS5leHByKCkgaW5zdGFuY2VvZiBGaWx0ZXJFeHByKSB7Ci0JCQkJCUZpbHRlckV4cHIgZmV4ID0gKEZpbHRlckV4cHIpIHhwZS5leHByKCk7Ci0JCQkJCWlmIChmZXgucHJpbWFyeSgpIGluc3RhbmNlb2YgSW50ZWdlckxpdGVyYWwpIHsKLQkJCQkJCWludCBwb3MgPSAoKChJbnRlZ2VyTGl0ZXJhbCkgZmV4LnByaW1hcnkoKSkudmFsdWUoKQotCQkJCQkJCQkuaW50X3ZhbHVlKCkpLmludFZhbHVlKCk7Ci0KLQkJCQkJCWlmIChwb3MgPD0gZm9jdXMubGFzdCgpICYmIHBvcyA+IDApIHsKLQkJCQkJCQlmb2N1cy5zZXRfcG9zaXRpb24ocG9zKTsKLQkJCQkJCQlycy5hZGQoZm9jdXMuY29udGV4dF9pdGVtKCkpOwotCQkJCQkJfQotCQkJCQkJZm9jdXMuc2V0X3Bvc2l0aW9uKG9yaWdpbmFsX2NwKTsKLQkJCQkJCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gZ28gdGhyb3VnaCBhbGwgZWxlbWVudHMKLQkJd2hpbGUgKHRydWUpIHsKLQkJCS8vIGRvIHRoZSBwcmVkaWNhdGUKLQkJCS8vIFhYWCBzYXhvbiBkb2Vzbid0IGFsbG93IGZvciBwcmVkaWNhdGVzIHRvIGhhdmUKLQkJCS8vIGNvbW1hcy4uLiBidXQgWFBhdGggMi4wIHNwZWMgc2VlbXMgdG8gZG8KLQkJCVJlc3VsdFNlcXVlbmNlIHJlcyA9IGRvX2V4cHIoZXhwcnMuaXRlcmF0b3IoKSk7Ci0KLQkJCS8vIGlmIHByZWRpY2F0ZSBpcyB0cnVlLCB0aGUgY29udGV4dCBpdGVtIGlzIGRlZmluaXRlbHkKLQkJCS8vIGluIHRoZSBzZXF1ZW5jZQotCQkJaWYgKHByZWRpY2F0ZV90cnV0aChyZXMpKQotCQkJCXJzLmFkZChmb2N1cygpLmNvbnRleHRfaXRlbSgpKTsKLQotCQkJaWYgKCFmb2N1cy5hZHZhbmNlX2NwKCkpCi0JCQkJYnJlYWs7Ci0KLQkJfQotCi0JCS8vIHJlc3RvcmUKLQkJZm9jdXMuc2V0X3Bvc2l0aW9uKG9yaWdpbmFsX2NwKTsKLQotCQlyZXR1cm4gcnMuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpdCBheGlzIHN0ZXAuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBheGlzIHN0ZXAuCi0JICogQHJldHVybiBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXhpc1N0ZXAgZSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IChSZXN1bHRTZXF1ZW5jZSkgZS5zdGVwKCkuYWNjZXB0KHRoaXMpOwotCi0JCWlmIChlLnByZWRpY2F0ZV9jb3VudCgpID09IDApCi0JCQlyZXR1cm4gcnM7Ci0KLQkJLy8gSSB0YWtlIGl0IHByZWRpY2F0ZXMgYXJlIGxvZ2ljYWwgQU5EUy4uLgotCQlGb2N1cyBvcmlnaW5hbF9mb2N1cyA9IGZvY3VzKCk7Ci0KLQkJLy8gZ28gdGhyb3VnaCBhbGwgcHJlZGljYXRlcwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBlLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJLy8gZW1wdHkgcmVzdWx0cy4uLiBnZXQgb3V0IG9mIGhlcmUgPyBYWFgKLQkJCWlmIChycy5zaXplKCkgPT0gMCkKLQkJCQlicmVhazsKLQotCQkJc2V0X2ZvY3VzKG5ldyBGb2N1cyhycykpOwotCQkJcnMgPSBkb19wcmVkaWNhdGUoKENvbGxlY3Rpb24pIGkubmV4dCgpKTsKLQotCQl9Ci0KLQkJLy8gcmVzdG9yZSBmb2N1cyBbY29udGV4dCBzd2l0Y2hpbmcgO0QgXQotCQlzZXRfZm9jdXMob3JpZ2luYWxfZm9jdXMpOwotCQlyZXR1cm4gcnM7Ci0JfQotCi0JLyoqCi0JICogdmlzaXQgZmlsdGVyIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZpbHRlciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQkvLyBYWFggdW5pZnkgd2l0aCB0b3AgPwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRmlsdGVyRXhwciBlKSB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gKFJlc3VsdFNlcXVlbmNlKSBlLnByaW1hcnkoKS5hY2NlcHQodGhpcyk7Ci0KLQkJLy8gaWYgbm8gcHJlZGljYXRlcyBhcmUgcHJlc2VudCwgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzCi0JCS8vIHRoZSBwcmltYXJ5IGV4cHJlc3Npb24KLQkJaWYgKGUucHJlZGljYXRlX2NvdW50KCkgPT0gMCkKLQkJCXJldHVybiByczsKLQotCQlGb2N1cyBvcmlnaW5hbF9mb2N1cyA9IGZvY3VzKCk7Ci0KLQkJLy8gZ28gdGhyb3VnaCBhbGwgcHJlZGljYXRlcwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBlLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJaWYgKHJzLnNpemUoKSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlzZXRfZm9jdXMobmV3IEZvY3VzKHJzKSk7Ci0JCQlycyA9IGRvX3ByZWRpY2F0ZSgoQ29sbGVjdGlvbikgaS5uZXh0KCkpOwotCi0JCX0KLQotCQkvLyByZXN0b3JlIGZvY3VzIFtjb250ZXh0IHN3aXRjaGluZyA7RCBdCi0JCXNldF9mb2N1cyhvcmlnaW5hbF9mb2N1cyk7Ci0JCXJldHVybiByczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRHluYW1pY0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvRHluYW1pY0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMwY2JiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0R5bmFtaWNDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZXMuIAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyODExNTkgLSBmaXggZG9jdW1lbnQgbG9hZGluZyBhbmQgcmVzb2x2aW5nIFVSSXMgCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzI1MjYyIC0gcHJvdmlkaW5nIGFiaWxpdHkgdG8gc3RvcmUgYW4gWFBhdGgyIHNlcXVlbmNlIGludG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gdXNlci1kZWZpbmVkIHZhcmlhYmxlLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9jdXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogSW50ZXJmYWNlIGZvciBkeW5hbWljIGNvbnRleHQuCi0gKiAKLSAqIEBkZXByZWNhdGVkIFVzZSAKLSAqLwotcHVibGljIGludGVyZmFjZSBEeW5hbWljQ29udGV4dCBleHRlbmRzIFN0YXRpY0NvbnRleHQgewotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgY29sbGF0aW9uIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIGJlIGltcGxlbWVudGVkCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPREVQT0lOVF9DT0xMQVRJT04gPSAiaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMvY29sbGF0aW9uL2NvZGVwb2ludCI7Ci0KLQkvKioKLQkgKiBHZXQgY29udGV4dCBpdGVtLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGNvbnRleHQgaXRlbS4KLQkgKi8KLQlwdWJsaWMgQW55VHlwZSBjb250ZXh0X2l0ZW0oKTsKLQotCS8qKgotCSAqIEdldCBjb250ZXh0IG5vZGUgcG9zaXRpb24uCi0JICogCi0JICogQHJldHVybiBwb3NpdGlvbiBvZiBjb250ZXh0IG5vZGUuCi0JICovCi0JcHVibGljIGludCBjb250ZXh0X3Bvc2l0aW9uKCk7Ci0KLQkvKioKLQkgKiBHZXQgcG9zaXRpb24gb2YgbGFzdCBpdGVtLgotCSAqIAotCSAqIEByZXR1cm4gbGFzdCBpdGVtIHBvc2l0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgbGFzdCgpOwotCi0JLyoqCi0JICogR2V0IHZhcmlhYmxlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCi0JICogQHJldHVybiB2YXJpYWJsZS4KLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRfdmFyaWFibGUoUU5hbWUgbmFtZSk7Ci0JCi0JLyoqCi0JICogU2V0IHZhcmlhYmxlLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIGlzIG5hbWUgb2YgdGhlIHZhcmlhYmxlLgotCSAqIEBwYXJhbSB2YWwKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YWx1ZSB0byBiZSBzZXQgZm9yIHRoZSB2YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfdmFyaWFibGUoUU5hbWUgdmFyLCBBbnlUeXBlIHZhbCk7Ci0JCi0JCi0JLyoqCi0JICogU2V0cyBhIFhQYXRoMiBzZXF1ZW5jZSBpbnRvIGEgdmFyaWFibGUuCi0JICoKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3ZhcmlhYmxlKFFOYW1lIHZhciwgUmVzdWx0U2VxdWVuY2UgdmFsKTsKLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZS4KLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHRoZSBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBkeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZV9mdW5jdGlvbihRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yOwotCi0JLyoqCi0JICogUmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuIGN1cnJlbnQgZGF0ZSB0aW1lIGFuZCBpbXBsaWNpdCB0aW1lem9uZS4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKTsKLQotCS8qKgotCSAqIEdldCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJpCi0JICogICAgICAgICAgICBpcyB0aGUgVVJJIG9mIHRoZSBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGRvY3VtZW50LgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQkvLyBhdmFpbGFibGUgZG9jCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGdldF9kb2MoVVJJIHVyaSk7Ci0KLQkvKioKLQkgKiBSZXNvbHZlIGFuIFVSSQotCSAqIAotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwb3NzaWJseSByZWxhdGl2ZSBVUkkgdG8gcmVzb2x2ZQotCSAqIEByZXR1cm4gdGhlIGFic29sdXRpemVkLCByZXNvbHZlZCBVUkkuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBVUkkgcmVzb2x2ZV91cmkoU3RyaW5nIHVyaSk7Ci0KLQkvLyBhdmFpbGFibGUgY29sbGVjdGlvbnMKLQotCS8vIGRlZmF1bHQgY29sbGVjdGlvbgotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBkYXRlIHRpbWUgdXNpbmcgdGhlIEdyZWdvcmlhbkNhbGVuZGFyLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgd2hpY2ggd2lsbCBhbHdheXMgYmUgc2FtZSBmb3IgdGhlIGR5bmFtaWMgY29udGV4dC4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyIGN1cnJlbnRfZGF0ZV90aW1lKCk7Ci0JCi0JLyoqCi0JICogU2V0IGZvY3VzLgotCSAqIAotCSAqIEBwYXJhbSBmb2N1cwotCSAqICAgICAgICAgICAgaXMgZm9jdXMgdG8gYmUgc2V0LgotCSAqLwotCS8vIE90aGVyIGZ1bmN0aW9ucwotCXB1YmxpYyB2b2lkIHNldF9mb2N1cyhGb2N1cyBmb2N1cyk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gZm9jdXMuCi0JICogCi0JICogQHJldHVybiBGb2N1cwotCSAqLwotCXB1YmxpYyBGb2N1cyBmb2N1cygpOwotCQotCS8qKgotCSAqIFJldHVybiBhIHVzZWZ1bCBjb2xsYXRvciBmb3IgdGhlIHNwZWNpZmllZCBVUkkKLQkgKiAKLQkgKiBAcGFyYW0gdXJpCi0JICogQHJldHVybiBBIEphYSBjb2xsYXRvciwgb3IgbnVsbCwgaWYgbm8gc3VjaCBDb2xsYXRvciBleGlzdHMgCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBDb21wYXJhdG9yIGdldF9jb2xsYXRpb24oU3RyaW5nIHVyaSk7IAotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb2xsYXRvcgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGRlZmF1bHQgbmFtZSB0byB1c2UgYXMgdGhlIGNvbGxhdG9yCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9jb2xsYXRpb25fbmFtZSgpOwotCQotCS8vIGRlcHJlY2F0ZWQKLQkvKioKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBpbnQgbm9kZV9wb3NpdGlvbihOb2RlIG5vZGUpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0R5bmFtaWNFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9EeW5hbWljRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlYmZjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0R5bmFtaWNFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjczNzYzIC0gY29ycmVjdCBlcnJvciBjb2Rlcy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnIDI4MDEwNiAtIENvcnJlY3QgWFBEWTAwMjEgLSBYUFNUMDAwMyAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODE0OSAtIGFkZCBtb3JlIGZuOmVycm9yIGluZm8KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyODExNTkgLSBmaXggZG9jdW1lbnQgbG9hZGluZyBhbmQgcmVzb2x2aW5nIFVSSXMgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBCdWcgMjg2MDYyIC0gQWRkIEZPQVIwMDAyICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjYyNzY1IC0gQWRkIEZPUkcwMDA2Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjkwMzM3IC0gUmV2aXNpdCB1c2Ugb2YgSUNVCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLQotLyoqCi0gKiBEeW5hbWljIEVycm9yIGxpa2UgZGl2aXNpb24gYnkgMCBvciB0eXBlIGVycm9ycy4KLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNFcnJvciBleHRlbmRzIFhQYXRoRXhjZXB0aW9uIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNjE0NjgzMDc2NDc1MzY4NTc5MUw7Ci0KLQkvLyBlcnJvcmNvZGUgc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAveHF0LWVycm9ycyBpIGZpbmsKLQlwcml2YXRlIFN0cmluZyBfY29kZTsKLQotCS8vIFhYWCBkaXJ0eS4uLiBzaG91bGQgZml4IHRoZSBlcnJvciBzdHVmZgotCS8vIGhhdmUgYSB0eXBlIGVycm9yIGVuY2Fwc3VsYXRlZCBpbiBhIGR5bmFtaWMgZXJyb3IKLQlwcml2YXRlIFR5cGVFcnJvciBfdGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRHluYW1pYyBFcnJvci4KLQkgKiAKLQkgKiBAcGFyYW0gY29kZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvZGUgdGhhdCBpcyBzZXQuCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBEeW5hbWljRXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIpIHsKLQkJc3VwZXIoZXJyKTsKLQkJX2NvZGUgPSBjb2RlOwotCQlfdGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEeW5hbWljIEVycm9yLgotCSAqIAotCSAqIEBwYXJhbSB0ZQotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yIHR5cGUuCi0JICovCi0JcHVibGljIER5bmFtaWNFcnJvcihUeXBlRXJyb3IgdGUpIHsKLQkJc3VwZXIodGUucmVhc29uKCkpOwotCQlfdGUgPSB0ZTsKLQkJX2NvZGUgPSB0ZS5jb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIG9mIHRoZSBjb2RlLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGNvZGUuCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlpZiAoX3RlICE9IG51bGwpCi0JCQlyZXR1cm4gX3RlLmNvZGUoKTsKLQkJcmV0dXJuIF9jb2RlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGNhbnRfY2FzdChTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJDYW4ndCBjYXN0IHRvIHJlcXVpcmVkIHR5cGUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUkcwMDAxIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBhIER5bmFtaWMgRXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgdGhyb3dfdHlwZV9lcnJvcigpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQl0aHJvdyBhcmd1bWVudF90eXBlX2Vycm9yKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICoKLQkgKiBAcGFyYW0gdHlwZSBUeXBlIGZvdW5kCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBhcmd1bWVudF90eXBlX2Vycm9yKENsYXNzIHR5cGUpIHsKLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUkcwMDA2IiwgdHlwZSAhPSBudWxsID8KLQkJCQkiSW52YWxpZCBhcmd1bWVudCB0eXBlIDoiICsgdHlwZS5nZXROYW1lKCkgOiAiSW52YWxpZCBhcmd1bWVudCB0eXBlIik7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRUeXBlKCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGlucHV0VG9MYXJnZUZvckRlY2ltYWwoKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiRk9DQTAwMDEiLCAiSW5wdXQgdmFsdWUgdG9vIGxhcmdlIGZvciBkZWNpbWFsIik7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGRlc2MKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHVzZXJfZXJyb3IoU3RyaW5nIG5zLCBTdHJpbmcgY29kZSwgU3RyaW5nIGRlc2MpIHsKLQkJU3RyaW5nIGVycm9yID0gIkVycm9yIHJlcG9ydGVkIGJ5IGZuOmVycm9yLiI7Ci0KLQkJaWYgKGRlc2MgIT0gbnVsbCkKLQkJCWVycm9yID0gZGVzYyArICIgKHJlcG9ydGVkIGJ5IGZuOmVycm9yKSI7Ci0KLQkJLy8gWFhYOiBOZWVkIHRvIHBhc3MgdGhlIG5hbWVzcGFjZSBhbHNvLi4uCi0JCXJldHVybiBuZXcgRHluYW1pY0Vycm9yKGNvZGUsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgdXNlcl9lcnJvcihTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJFcnJvciByZXBvcnRlZCBieSBmbjplcnJvci4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yID0gZXJyICsgIiAocmVwb3J0ZWQgYnkgZm46ZXJyb3IpIjsKLQotCQkvLyBYWFg6IE5lZWQgdG8gcGFzcyB0aGUgbmFtZXNwYWNlIGFsc28uLi4KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPRVIwMDAwIiwgZXJyb3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBEeW5hbWljIEVycm9yIGZvciBpbnZhbGlkIGZsYWdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLQkgKiBAcGFyYW0gZXJyCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciByZWdleF9mbGFnc19lcnJvcihTdHJpbmcgZXJyKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnIHBhcmFtZXRlci4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9SWDAwMDEiLCBlcnJvcik7Ci0JCQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IuCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHJlZ2V4X2Vycm9yKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uLiI7Ci0KLQkJaWYgKGVyciAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgZXJyOwotCi0JCXJldHVybiBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwMiIsIGVycm9yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkeW5hbWljIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBlcnIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBlcnJvcgotCSAqIEByZXR1cm4gdGhlIER5bmFtaWNFcnJvci4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgcmVnZXhfbWF0Y2hfemVyb19sZW5ndGgoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDAzIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIFVuaWNvZGUgY29kZXBvaW50Ci0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciB1bnN1cHBvcnRlZF9jb2RlcG9pbnQoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgY29kZXBvaW50IjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBEeW5hbWljRXJyb3IoIkZPQ0gwMDAxIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGR5bmFtaWMgZXJyb3IgZm9yIGFuIHVuc3VwcG9ydGVkIG5vcm1hbGl6YXRpb24gZm9ybQotCSAqIAotCSAqIEBwYXJhbSBjb2xsYXRpb25OYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgZXJyb3IKLQkgKiBAcmV0dXJuIHRoZSBEeW5hbWljRXJyb3IuCi0JICogQHNpbmNlIDEuMQotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIHVuc3VwcG9ydGVkX2NvbGxhdGlvbihTdHJpbmcgY29sbGF0aW9uTmFtZSkgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgY29sbGF0aW9uIFVSSS4gIjsKLQotCQlpZiAoY29sbGF0aW9uTmFtZSAhPSBudWxsKQotCQkJZXJyb3IgKz0gIiAiICsgY29sbGF0aW9uTmFtZTsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9DSDAwMDIiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciB1bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0oU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtOiAiOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9DSDAwMDMiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZHluYW1pYyBlcnJvciBmb3IgYW4gdW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiBmb3JtCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIGVycm9yCi0JICogQHJldHVybiB0aGUgRHluYW1pY0Vycm9yLgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBydW50aW1lX2Vycm9yKFN0cmluZyBtc2csIFRocm93YWJsZSBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIkVycm9yIGF0IHJ1bnRpbWU6ICIgKyBtc2cgKyAiOiAiICsgZXJyLmdldE1lc3NhZ2UoKTsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcigiRk9FUjAwMDAiLCBlcnJvcik7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRHluYW1pY0Vycm9yIG1ha2VfZXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyBlcnIsIFN0cmluZyBtc2cpIHsKLQkJU3RyaW5nIGVycm9yID0gZXJyOwotCi0JCWlmIChtc2cgIT0gbnVsbCkKLQkJCWVycm9yICs9IG1zZzsKLQotCQlyZXR1cm4gbmV3IER5bmFtaWNFcnJvcihjb2RlLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEludmFsaWQgbGV4aWNhbCB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGxleGljYWxfZXJyb3IoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9DQTAwMDIiLCAiSW52YWxpZCBsZXhpY2FsIHZhbHVlLiIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGFuIEl0ZW1zIG5vdCBjb21wYXJhYmxlCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm90X2NtcChTdHJpbmcgbXNnKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT1RZMDAxMiIsICJJdGVtcyBub3QgY29tcGFyYWJsZSIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG1vcmVfb25lX2l0ZW0oU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigKLQkJCQkiRk9SRzAwMDMiLAotCQkJCSJmbjp6ZXJvLW9yLW9uZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgbW9yZSB0aGFuIG9uZSBpdGVtIiwKLQkJCQltc2cpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UKLQkgKiAKLQkgKiBAcGFyYW0gbXNnCi0JICogICAgICAgICAgICBpcyB0aGUgbWVzc2FnZQotCSAqIEByZXR1cm4gdGhlIG1ha2VfZXJyb3IKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBlbXB0eV9zZXEoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9SRzAwMDQiLAotCQkJCSJmbjpvbmUtb3ItbW9yZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgbm8gaXRlbXMiLAotCQkJCW1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZQotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG5vdF9vbmUoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigKLQkJCQkiRk9SRzAwMDUiLAotCQkJCSJmbjpleGFjdGx5LW9uZSBjYWxsZWQgd2l0aCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIHRoYW4gb25lIGl0ZW0iLAotCQkJCW1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46Y29sbGVjdGlvbgotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBpbnZhbGlkQ29sbGVjdGlvbkFyZ3VtZW50KCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDQiLCAiSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2MiLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIEludmFsaWQgYXJndW1lbnQgdG8gZm46ZG9jCi0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZF9kb2MoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDUiLCAiSW52YWxpZCBhcmd1bWVudCB0byBmbjpkb2MiLCBtc2cpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiBmbjpkb2MgY2Fubm90IGxvYWQgaXRzIGRvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIG1zZwotCSAqICAgICAgICAgICAgaXMgdGhlIG1lc3NhZ2UKLQkgKiBAcmV0dXJuIHRoZSBtYWtlX2Vycm9yCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGRvY19ub3RfZm91bmQoU3RyaW5nIG1zZykgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDIiLCAiRG9jdW1lbnQgYXJndW1lbnQgZm46ZG9jIG5vdCBmb3VuZCIsIG1zZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHJlYWRzIGEgRGl2aXNpb24gYnkgemVybwotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGRpdl96ZXJvKFN0cmluZyBtc2cpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQVIwMDAxIiwgIkRpdmlzaW9uIGJ5IHplcm8iLCBtc2cpOwotCX0KLQotCS8qKgotCSAqIE51bWVyaWMgb3BlcmF0aW9uIG92ZXJmbG93L3VuZGVyZmxvdwotCSAqIAotCSAqIEBwYXJhbSBtc2cKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtZXNzYWdlCi0JICogQHJldHVybiB0aGUgbWFrZV9lcnJvcgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBudW1lcmljX292ZXJmbG93KFN0cmluZyBtc2cpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQVIwMDAyIiwgIk51bWVyaWMgb3ZlcmZsb3cvdW5kZXJmbG93IiwgbXNnKTsKLQl9Ci0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGNvbnRleHRVbmRlZmluZWQoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJYUERZMDAwMiIsICJDb250ZXh0IGlzIHVuZGVmaW5lZC4iLCAiIik7Ci0JfQotCi0JLyoqCi0JICogRGF0YSBpcyBpbnZhbGlkIGZvciBjYXN0aW5nIG9yIHRoZSBkYXRhIHR5cGUgY29uc3RydWN0b3IuCi0JICogQHBhcmFtIG1zZwotCSAqIEByZXR1cm4gRk9SRzAwMDEKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvcigpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoCi0JCQkJIkZPUkcwMDAxIiwKLQkJCQkiZGF0YSB0eXBlIGludmFsaWQgZm9yIGNhc3Qgb3IgY29uc3RydWN0b3IiLAotCQkJCW51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRQcmVmaXgoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT05TMDAwNCIsICJObyBuYW1lc3BhY2UgZm91bmQgZm9yIHByZWZpeC4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogTm8gY29udGV4dCBkb2N1bWVudAotCSAqIEByZXR1cm4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm9Db250ZXh0RG9jKCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9EQzAwMDEiLCAiTm8gY29udGV4dCBkb2N1bWVudC4iLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBObyBiYXNlLXVyaSBkZWZpbmVkLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3Igbm9CYXNlVVJJKCkgewotCQlyZXR1cm4gbWFrZV9lcnJvcigiRk9OUzAwMDUiLCAiQmFzZS11cmkgbm90IGRlZmluZWQgaW4gdGhlIHN0YXRpYyBjb250ZXh0LiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBFcnJvciByZXNvbHZpbmcgcmVsYXRpdmUgdXJpIGFnYWluc3QgYmFzZS11cmkuCi0JICogCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBlcnJvclJlc29sdmluZ1VSSSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPUkcwMDAyIiwgIkludmFsaWQgYXJndW1lbnQgdG8gZm46cmVzb2x2ZS11cmkoKS4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogSW52YWxpZCBUaW1lem9uZSB2YWx1ZS4KLQkgKiBAcmV0dXJuCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIGludmFsaWRUaW1lem9uZSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPRFQwMDAzIiwgIkludmFsaWQgdGltZXpvbmUgdmFsdWUuIiwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBvdmVyZmxvd1VuZGVyZmxvdygpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPRFQwMDAyIiwgIk92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uIiwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIE92ZXJmbG93L3VuZGVyZmxvdyBpbiBkdXJhdGlvbiBvcGVyYXRpb24uCi0JICogQHJldHVybgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgc3RhdGljIER5bmFtaWNFcnJvciBuYW4oKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT0NBMDAwNSIsICJOYU4gc3VwcGxpZWQgYXMgZmxvYXQvZG91YmxlIHZhbHVlLiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBJbnZhbGlkIGxleGljYWwgdmFsdWUKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW52YWxpZExleGljYWxWYWx1ZSgpIHsKLQkJcmV0dXJuIG1ha2VfZXJyb3IoIkZPQ0EwMDAyIiwgIkludmFsaWQgbGV4aWNhbCB2YWx1ZS4iLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogT3ZlcmZsb3cvdW5kZXJmbG93IGluIGRhdGUvdGltZSBvcGVyYXRpb24gCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRHluYW1pY0Vycm9yIG92ZXJmbG93RGF0ZVRpbWUoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT0RUMDAwMSIsICJPdmVyZmxvdy91bmRlcmZsb3cgaW4gZGF0ZS90aW1lIG9wZXJhdGlvbiIsIG51bGwpOwotCX0KLQkKLQkvKioKLQkgKiBUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXMKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHN0YXRpYyBEeW5hbWljRXJyb3IgaW5jb25zaXN0ZW50VGltZVpvbmUoKSB7Ci0JCXJldHVybiBtYWtlX2Vycm9yKCJGT1JHMDAwOCIsICJUaGUgdHdvIGFyZ3VtZW50cyB0byBmbjpkYXRlVGltZSBoYXZlIGluY29uc2lzdGVudCB0aW1lem9uZXMiLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0VuZ2luZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9FbmdpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1ZjlhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0VuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlhQYXRoMkVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuWFBhdGgyRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GbkJvb2xlYW47Ci0KLS8qKgotICogQHNpbmNlIDIuMAotICovCi1wdWJsaWMgY2xhc3MgRW5naW5lIGltcGxlbWVudHMgWFBhdGgyRW5naW5lIHsKLQotCXB1YmxpYyBYUGF0aDJFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbihTdHJpbmcgZXhwcmVzc2lvbiwgU3RhdGljQ29udGV4dCBjb250ZXh0KSB7Ci0KLQkJWFBhdGggeFBhdGggPSBuZXcgSkZsZXhDdXBQYXJzZXIoKS5wYXJzZShleHByZXNzaW9uKTsKLQkJeFBhdGguc2V0U3RhdGljQ29udGV4dChjb250ZXh0KTsKLQkJU3RhdGljTmFtZVJlc29sdmVyIG5hbWVfY2hlY2sgPSBuZXcgU3RhdGljTmFtZVJlc29sdmVyKGNvbnRleHQpOwotCQluYW1lX2NoZWNrLmNoZWNrKHhQYXRoKTsKLQkJCi0JCXhQYXRoLnNldEF4ZXMobmFtZV9jaGVjay5nZXRBeGVzKCkpOwotCQl4UGF0aC5zZXRGcmVlVmFyaWFibGVzKG5hbWVfY2hlY2suZ2V0RnJlZVZhcmlhYmxlcygpKTsKLQkJeFBhdGguc2V0UmVzb2x2ZWRGdW5jdGlvbnMobmFtZV9jaGVjay5nZXRSZXNvbHZlZEZ1bmN0aW9ucygpKTsKLQkJeFBhdGguc2V0Um9vdFVzZWQobmFtZV9jaGVjay5pc1Jvb3RVc2VkKCkpOwotCQkKLQkJcmV0dXJuIHhQYXRoOwotCX0KLQotCWJvb2xlYW4gZWZmZWN0aXZlQm9vbGVhblZhbHVlKFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCXJldHVybiBGbkJvb2xlYW4uZm5fYm9vbGVhbihycykudmFsdWUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0V2YWx1YXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9FdmFsdWF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYyNzk1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL0V2YWx1YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC4qOwotCi0vKioKLSAqIGludGVyZmFjZSB0byBFdmFsdWF0b3IKLSAqLwotcHVibGljIGludGVyZmFjZSBFdmFsdWF0b3IgewotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIHJvb3Qgbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gcm9vdAotCSAqICAgICAgICAgICAgaXMgdGhlIFhQYXRoIG5vZGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBkeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKFhQYXRoTm9kZSByb290KSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9KRmxleEN1cFBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9KRmxleEN1cFBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjU4NjRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvSkZsZXhDdXBQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIEJ1ZyAzMzg0OTQgICAgLSBwcm9oaWJpdGluZyB4cGF0aCBleHByZXNzaW9ucyBzdGFydGluZyB3aXRoIC8gb3IgLy8gdG8gYmUgcGFyc2VkLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkN1cEVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5KRmxleEVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEN1cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuWFBhdGhDdXBSZXN0cmljdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEZsZXg7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sOwotCi0vKioKLSAqIEpGbGV4Q3VwUGFyc2VyIHBhcnNlcyB0aGUgeHBhdGggZXhwcmVzc2lvbgotICovCi1wdWJsaWMgY2xhc3MgSkZsZXhDdXBQYXJzZXIgaW1wbGVtZW50cyBYUGF0aFBhcnNlciB7Ci0KLQkvKioKLQkgKiBUcmllcyB0byBwYXJzZSB0aGUgeHBhdGggZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSB4cGF0aAotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoIHN0cmluZy4KLQkgKiBAdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uLgotCSAqIEByZXR1cm4gdGhlIHhwYXRoIHZhbHVlLgotCSAqLwotCXB1YmxpYyBYUGF0aCBwYXJzZShTdHJpbmcgeHBhdGgpIHRocm93cyBYUGF0aFBhcnNlckV4Y2VwdGlvbiB7Ci0KLQkJWFBhdGhGbGV4IGxleGVyID0gbmV3IFhQYXRoRmxleChuZXcgU3RyaW5nUmVhZGVyKHhwYXRoKSk7Ci0KLQkJWFBhdGhDdXAgcCA9IG5ldyBYUGF0aEN1cChsZXhlcik7Ci0JCXRyeSB7Ci0JCQlTeW1ib2wgcmVzID0gcC5wYXJzZSgpOwotCQkJcmV0dXJuIChYUGF0aCkgcmVzLnZhbHVlOwotCQl9IGNhdGNoIChKRmxleEVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbigiSkZsZXggbGV4ZXIgZXJyb3I6ICIgKyBlLnJlYXNvbigpKTsKLQkJfSBjYXRjaCAoQ3VwRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IFhQYXRoUGFyc2VyRXhjZXB0aW9uKCJDVVAgcGFyc2VyIGVycm9yOiAiICsgZS5yZWFzb24oKSk7Ci0JCX0gY2F0Y2ggKFN0YXRpY0Vycm9yIGUpIHsKLQkJCXRocm93IGU7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTdHJpbmcgZXJyID0gIlVua25vd24gZXJyb3IgYXQgbGluZSAiICsgbGV4ZXIubGluZW5vKCk7Ci0KLQkJCWVyciArPSAiIGNvbCAiICsgbGV4ZXIuY29sbm8oKTsKLQkJCWVyciArPSAiOiAiICsgbGV4ZXIueXl0ZXh0KCk7Ci0KLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbihlcnIpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIFRyaWVzIHRvIHBhcnNlIHRoZSB4cGF0aCBleHByZXNzaW9uCi0JICogCi0JICogQHBhcmFtIHhwYXRoCi0JICogICAgICAgICAgICBpcyB0aGUgeHBhdGggc3RyaW5nLgotCSAqIEBwYXJhbSBpc1Jvb3RsZXNzQWNjZXNzCi0JICogICAgICAgICAgICBpZiAndHJ1ZScgdGhlbiBQc3ljaG9QYXRoIGVuZ2luZSBjYW4ndCBwYXJzZSB4cGF0aCBleHByZXNzaW9ucyBzdGFydGluZyB3aXRoIC8gb3IgLy8uCi0JICogQHRocm93cyBYUGF0aFBhcnNlckV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIHRoZSB4cGF0aCB2YWx1ZS4KLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIFhQYXRoIHBhcnNlKFN0cmluZyB4cGF0aCwgYm9vbGVhbiBpc1Jvb3RsZXNzQWNjZXNzKSB0aHJvd3MgWFBhdGhQYXJzZXJFeGNlcHRpb24gewotCi0JCVhQYXRoRmxleCBsZXhlciA9IG5ldyBYUGF0aEZsZXgobmV3IFN0cmluZ1JlYWRlcih4cGF0aCkpOwotCi0JCVhQYXRoQ3VwIHAgPSBudWxsOwotCQlpZiAoaXNSb290bGVzc0FjY2VzcykgewotCQkJcCA9IG5ldyBYUGF0aEN1cFJlc3RyaWN0ZWQobGV4ZXIpOyAKLQkJfQotCQllbHNlIHsKLQkJCXAgPSBuZXcgWFBhdGhDdXAobGV4ZXIpOyAKLQkJfQotCQl0cnkgewotCQkJU3ltYm9sIHJlcyA9IHAucGFyc2UoKTsKLQkJCXJldHVybiAoWFBhdGgpIHJlcy52YWx1ZTsKLQkJfSBjYXRjaCAoSkZsZXhFcnJvciBlKSB7Ci0JCQl0aHJvdyBuZXcgWFBhdGhQYXJzZXJFeGNlcHRpb24oIkpGbGV4IGxleGVyIGVycm9yOiAiICsgZS5yZWFzb24oKSk7Ci0JCX0gY2F0Y2ggKEN1cEVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBYUGF0aFBhcnNlckV4Y2VwdGlvbigiQ1VQIHBhcnNlciBlcnJvcjogIiArIGUucmVhc29uKCkpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFhQYXRoUGFyc2VyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUHN5Y2hvUGF0aFR5cGVIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUHN5Y2hvUGF0aFR5cGVIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY2NmNlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1BzeWNob1BhdGhUeXBlSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMyMzkwMCAtIGltcHJvdmluZyBjb21wdXRpbmcgdGhlIHR5cGVkIHZhbHVlIG9mIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEgdHlwZSBvZiBub2RlcyBhcmUgc2ltcGxlLCB3aXRoIHZhcmlldGllcyAnbGlzdCcgYW5kICd1bmlvbicuIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci0KLQotLyoqCi0gKiBBbiBQc3ljaG9QYXRoIEVuZ2luZSBoZWxwZXIgY2xhc3MgcHJvdmlkaW5nIHVzZWZ1bCBtb2R1bGUgaW1wbGVtZW50YXRpb25zIGZvciBjb21tb25seSAKLSAqIHBlcmZvcm1lZCAiWE1MIHNjaGVtYSIgZXZhbHVhdGlvbiB0YXNrcy4gIAotICoKLSAqIEBzaW5jZSAyLjAKLSAqLwotcHVibGljIGNsYXNzIFBzeWNob1BhdGhUeXBlSGVscGVyIHsKLQkKLQkvLyBQc3ljaG9QYXRoIGVuZ2luZSBzcGVjaWZpYyBjb25zdGFudHMgdG8gc3VwcG9ydCBuZXcgYnVpbHQtaW4gdHlwZXMsIGludHJvZHVjZWQgaW4gWE1MIFNjaGVtYSAxLjEuCi0JcHVibGljIHN0YXRpYyBzaG9ydCBEQVlUSU1FRFVSQVRJT05fRFQgPSAtMTAwOwotCXB1YmxpYyBzdGF0aWMgc2hvcnQgWUVBUk1PTlRIRFVSQVRJT05fRFQgPSAtMTAxOwotCQotCQotCS8qIAotCSAqIEdldCBYZXJjZXMgInNjaGVtYSB0eXBlIiBzaG9ydCBjb2RlLCBnaXZlbiBhIHR5cGUgZGVmaW5pdGlvbiBpbnN0YW5jZSBvYmplY3QuIFBzeWNob1BhdGggZW5naW5lIHVzZXMgZmV3IGN1c3RvbSAKLQkgKiB0eXBlICdzaG9ydCBjb2RlcycsIHRvIHN1cHBvcnQgWE1MIFNjaGVtYSAxLjEuCi0JICovCi0JcHVibGljIHN0YXRpYyBzaG9ydCBnZXRYU0RUeXBlU2hvcnRDb2RlKFR5cGVEZWZpbml0aW9uIHR5cGVEZWYpIHsKLQkJCi0JCS8vIGR1bW15IHR5cGUgInNob3J0IGNvZGUiIGluaXRpYWxpemVyCi0JCXNob3J0IHR5cGVDb2RlID0gLTEwMDsKLQkJCi0JCWlmICgiZGF5VGltZUR1cmF0aW9uIi5lcXVhbHModHlwZURlZi5nZXROYW1lKCkpKSB7Ci0JCQl0eXBlQ29kZSA9IERBWVRJTUVEVVJBVElPTl9EVDsgCi0JCX0KLQkJZWxzZSBpZiAoInllYXJNb250aER1cmF0aW9uIi5lcXVhbHModHlwZURlZi5nZXROYW1lKCkpKSB7Ci0JCQl0eXBlQ29kZSA9IFlFQVJNT05USERVUkFUSU9OX0RUOyAKLQkJfQotCQkKLQkJcmV0dXJuICh0eXBlQ29kZSAhPSAtMTAwKSA/IHR5cGVDb2RlIDogKChTaW1wbGVUeXBlRGVmaW5pdGlvbikgdHlwZURlZikuZ2V0QnVpbHRJbktpbmQoKTsKLQkJCi0JfSAvLyBnZXRYU0RUeXBlU2hvcnRDb2RlCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvUmVzdWx0U2VxdWVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiNTdjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5JdGVtVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIEludGVyZmFjZSB0byB0aGUgbWV0aG9kcyBvZiByYW5nZSBvZiByZXN1bHQgc2VxdWVuY2UKLSAqIEBkZXByZWNhdGVkIFVzZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgaW5zdGVhZAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVzdWx0U2VxdWVuY2UgaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgewotCi0JLyoqCi0JICogYWRkIGl0ZW0KLQkgKiAKLQkgKiBAcGFyYW0gaXRlbQotCSAqICAgICAgICAgICAgaXMgYW4gaXRlbSBvZiBhbnkgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGQoQW55VHlwZSBpdGVtKTsKLQotCS8qKgotCSAqIGNvbmNhdGluYXRlIGZyb20gcnMKLQkgKiAKLQkgKiBAcGFyYW0gcnMKLQkgKiAgICAgICAgICAgIGlzIGEgUmVzdWx0IFNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGNvbmNhdChSZXN1bHRTZXF1ZW5jZSBycyk7Ci0KLQkvKioKLQkgKiBMaXN0IEl0ZXJhdG9yLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBMaXN0SXRlcmF0b3IgaXRlcmF0b3IoKTsKLQotCS8qKgotCSAqIGdldCBpdGVtIGluIGluZGV4IGkKLQkgKiAKLQkgKiBAcGFyYW0gaQotCSAqICAgICAgICAgICAgaXMgdGhlIHBvc2l0aW9uLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBBbnlUeXBlIGdldChpbnQgaSk7Ci0KLQkvKioKLQkgKiBnZXQgdGhlIHNpemUKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzaXplLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBpbnQgc2l6ZSgpOwotCi0JLyoqCi0JICogY2xlYXIKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjbGVhcigpOwotCi0JLyoqCi0JICogY3JlYXRlIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZQotCSAqIAotCSAqIEByZXR1cm4gYSBuZXcgcmVzdWx0IHNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBSZXN1bHRTZXF1ZW5jZSBjcmVhdGVfbmV3KCk7Ci0KLQkvKioKLQkgKiByZXRyaWV2ZSB0aGUgZmlyc3QgaXRlbQotCSAqIAotCSAqIEByZXR1cm4gdGhlIGZpcnN0IGl0ZW0uCi0JICovCi0JcHVibGljIEFueVR5cGUgZmlyc3QoKSB7Ci0JCXJldHVybiBnZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogY2hlY2sgaXMgdGhlIHNlcXVlbmNlIGlzIGVtcHR5Ci0JICogCi0JICogQHJldHVybiBib29sZWFuLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVtcHR5KCkgewotCQlpZiAoc2l6ZSgpID09IDApCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIHJldHJpZXZlIGl0ZW1zIGluIHNlcXVlbmNlCi0JICogCi0JICogQHJldHVybiByZXN1bHQgc3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmcoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSAiIjsKLQkJaW50IG51bSA9IDE7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBbnlUeXBlIGVsZW0gPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWJ1Zi5hcHBlbmQobnVtICsgIikgIik7Ci0KLQkJCWJ1Zi5hcHBlbmQoZWxlbS5zdHJpbmdfdHlwZSgpICsgIjogIik7Ci0KLQkJCVN0cmluZyB2YWx1ZSA9IGVsZW0uZ2V0U3RyaW5nVmFsdWUoKTsKLQotCQkJaWYgKGVsZW0gaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJCVFOYW1lIHRtcCA9ICgoTm9kZVR5cGUpIGVsZW0pLm5vZGVfbmFtZSgpOwotCi0JCQkJaWYgKHRtcCAhPSBudWxsKQotCQkJCQl2YWx1ZSA9IHRtcC5leHBhbmRlZF9uYW1lKCk7Ci0JCQl9Ci0JCQlidWYuYXBwZW5kKHZhbHVlICsgIlxuIik7Ci0KLQkJCW51bSsrOwotCQl9Ci0JCXJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotCQlpZiAobnVtID09IDEpCi0JCQlyZXN1bHQgPSAiRW1wdHkgcmVzdWx0c1xuIjsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiByZWxlYXNlIHRoZSByZXN1bHQgc2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotCQlSZXN1bHRTZXF1ZW5jZUZhY3RvcnkucmVsZWFzZSh0aGlzKTsKLQl9Ci0JCi0JLyoqCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyBJdGVtIGl0ZW0oaW50IGluZGV4KSB7Ci0JCXJldHVybiBnZXQoaW5kZXgpOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIEl0ZW1UeXBlIGl0ZW1UeXBlKGludCBpbmRleCkgewotCQlyZXR1cm4gZ2V0KGluZGV4KS5nZXRJdGVtVHlwZSgpOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIE9iamVjdCB2YWx1ZShpbnQgaW5kZXgpIHsKLQkJcmV0dXJuIGdldChpbmRleCkuZ2V0TmF0aXZlVmFsdWUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9SZXN1bHRTZXF1ZW5jZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBkYzgzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1Jlc3VsdFNlcXVlbmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlZmF1bHRSU0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogUmVzdWx0IHNlcXVlbmNlIGZhY3RvcnkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc3VsdFNlcXVlbmNlRmFjdG9yeSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzdWx0U2VxdWVuY2VGYWN0b3J5IF9mYWN0b3J5ID0gbmV3IERlZmF1bHRSU0ZhY3RvcnkoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBSZXN1bHRTZXF1ZW5jZSBmYWN0X2NyZWF0ZV9uZXcoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGZhY3RfcmVsZWFzZShSZXN1bHRTZXF1ZW5jZSBycyk7Ci0KLQlwcm90ZWN0ZWQgUmVzdWx0U2VxdWVuY2UgZmFjdF9jcmVhdGVfbmV3KEFueVR5cGUgaXRlbSkgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IGZhY3RfY3JlYXRlX25ldygpOwotCQlycy5hZGQoaXRlbSk7Ci0JCXJldHVybiByczsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBmYWN0X3ByaW50X2RlYnVnKCkgewotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpIHsKLQkJcmV0dXJuIF9mYWN0b3J5LmZhY3RfY3JlYXRlX25ldygpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpdGVtCi0JICogICAgICAgICAgICBpcyBhbiBpdGVtIG9mIGFueSB0eXBlLgotCSAqIEByZXR1cm4gZmFjdG9yeSBjcmVhdGluZyBuZXcgaXRlbQotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldyhBbnlUeXBlIGl0ZW0pIHsKLQkJcmV0dXJuIF9mYWN0b3J5LmZhY3RfY3JlYXRlX25ldyhpdGVtKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcnMKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZXN1bHQgc2VxdWVuY2UgZmFjdG9yeSByZWxlYXNlIHJzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHJlbGVhc2UoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJX2ZhY3RvcnkuZmFjdF9yZWxlYXNlKHJzKTsKLQl9Ci0KLQkvKioKLQkgKiBmYWN0b3J5IGRlYnVnCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50X2RlYnVnKCkgewotCQlfZmFjdG9yeS5mYWN0X3ByaW50X2RlYnVnKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDaGVja2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NoZWNrZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiN2VjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0NoZWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgdG8gc3RhdGljIGNoZWNrZXIuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdGljQ2hlY2tlciB7Ci0KLQkvKioKLQkgKiBjaGVja3MgWFBhdGhOb2RlCi0JICogCi0JICogQHRocm93cyBzdGF0aWMgZXJyb3IuCi0JICogQHBhcmFtIHJvb3QKLQkgKiAgICAgICAgICAgIGlzIGFuIFhQYXRoIG5vZGUuCi0JICovCi0JcHVibGljIHZvaWQgY2hlY2soWFBhdGhOb2RlIHJvb3QpIHRocm93cyBTdGF0aWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5M2QxNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBhZGQgYWJpbGl0eSB0byBzZXQgdGhlIGJhc2UgdXJpIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZ1bmN0aW9uTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIGludGVyZmFjZSB0byBzdGF0aWMgY29udGV4dAotICogCi0gKiBAZGVwcmVjYXRlZCBTZWUgPHR0Pm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0PC90dD4gaW5zdGVhZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXRpY0NvbnRleHQgewotCi0JLyoqCi0JICogaXMgaXQgeHBhdGggMS4wIGNvbXBhdGlibGUuCi0JICogCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHVibGljIGJvb2xlYW4geHBhdGgxX2NvbXBhdGlibGUoKTsKLQotCS8qKgotCSAqIG5hbWVzcGFjZXMgZG9lcyB0aGUgcHJlZml4IGV4aXN0Ci0JICogCi0JICogQHBhcmFtIHByZWZpeAotCSAqICAgICAgICAgICAgaXMgdGhlIHByZWZpeAotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIHByZWZpeF9leGlzdHMoU3RyaW5nIHByZWZpeCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJlZml4Ci0JICogICAgICAgICAgICBpcyB0aGUgcHJlZml4Ci0JICogQHJldHVybiBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlc29sdmVfcHJlZml4KFN0cmluZyBwcmVmaXgpOwotCi0JLyoqCi0JICogdGhlIGRlZmF1bHQgbmFtZXNwYWNlCi0JICogCi0JICogQHJldHVybiBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGRlZmF1bHRfbmFtZXNwYWNlKCk7Ci0KLQkvKioKLQkgKiB0aGUgZGVmYXVsdCBmdW5jdGlvbiBuYW1lc3BhY2UKLQkgKiAKLQkgKiBAcmV0dXJuIHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9mdW5jdGlvbl9uYW1lc3BhY2UoKTsKLQotCS8vIGluIHNjb3BlIHNjaGVtYSBkZWZpbml0aW9ucwotCS8qKgotCSAqIEBwYXJhbSBhdHRyCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUgdmFyaWFibGUKLQkgKiBAcmV0dXJuIGF0dHJpYnV0ZXMncyB0eXBlIGRlZmluaXRpb24KLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGF0dHJpYnV0ZV90eXBlX2RlZmluaXRpb24oUU5hbWUgYXR0cik7Ci0KLQkvKioKLQkgKiBAcGFyYW0gZWxlbQotCSAqICAgICAgICAgICAgaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lCi0JICogQHJldHVybiBlbGVtZW50J3MgdHlwZSBkZWZpbml0aW9uCi0JICovCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGVsZW1lbnRfdHlwZV9kZWZpbml0aW9uKFFOYW1lIGVsZW0pOwotCi0JLyoqCi0JICogaXMgdGhlIGF0dHJpYnV0ZSBkZWNsYXJlZD8KLQkgKiAKLQkgKiBAcGFyYW0gYXR0cgotCSAqICAgICAgICAgICAgaXMgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgcW5hbWUKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBhdHRyaWJ1dGVfZGVjbGFyZWQoUU5hbWUgYXR0cik7Ci0KLQkvKioKLQkgKiBpcyB0aGUgZWxlbWVudCBkZWNsYXJlZD8KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbQotCSAqICAgICAgICAgICAgaXMgdGhlIGVsZW0gb2YgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZWxlbWVudF9kZWNsYXJlZChRTmFtZSBlbGVtKTsKLQotCS8vIGluIHNjb3BlIHZhcmlhYmxlcwotCi0JLy8gY29udGV4dCBpdGVtIHR5cGUKLQotCS8qKgotCSAqIGlzIHRoZSBlbGVtZW50IGRlY2xhcmVkPwotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUgbmFtZQotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgaW50ZWdlciBvZiBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCS8vIGZ1bmN0aW9uIHNpZ25hdHVyZXMKLQlwdWJsaWMgYm9vbGVhbiBmdW5jdGlvbl9leGlzdHMoUU5hbWUgbmFtZSwgaW50IGFyaXR5KTsKLQotCS8vIGNvbGxhdGlvbnMKLQotCS8qKgotCSAqIGJhc2UgdXJpCi0JICogCi0JICogQHJldHVybiB1cmkKLQkgKi8KLQkvLyBiYXNlIHVyaQotCXB1YmxpYyBYU0FueVVSSSBiYXNlX3VyaSgpOwotCi0JLy8gc3RhdGljYWxseSBrbm93biBkb2N1bWVudHMKLQotCS8vIGNvbGxlY3Rpb25zCi0KLQkvLyBvdGhlciBzdHVmZgotCS8qKgotCSAqIG5ldyBzY29wZQotCSAqLwotCXB1YmxpYyB2b2lkIG5ld19zY29wZSgpOwotCi0JLyoqCi0JICogZGVzdHJveSBzY29wZQotCSAqLwotCXB1YmxpYyB2b2lkIGRlc3Ryb3lfc2NvcGUoKTsKLQotCS8qKgotCSAqIGFkZCB2YXJpYWJsZQotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgcW5hbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfdmFyaWFibGUoUU5hbWUgbmFtZSk7Ci0KLQkvKioKLQkgKiBkZWxldGUgdGhlIHZhcmlhYmxlCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbiBpZiBkZWxldGVkIHZhcmlhYmxlCi0JICovCi0JcHVibGljIGJvb2xlYW4gZGVsX3ZhcmlhYmxlKFFOYW1lIG5hbWUpOwotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbiBpZiB2YXJpYWJsZSBleGlzdHMKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YXJpYWJsZV9leGlzdHMoUU5hbWUgbmFtZSk7IC8vIGluIGN1cnJlbnQgc2NvcGUgb25seQotCi0JLyoqCi0JICogQHBhcmFtIHZhcgotCSAqICAgICAgICAgICAgaXMgdGhlIHZhcmlhYmxlIG9mIHFuYW1lCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFyaWFibGVfaW5fc2NvcGUoUU5hbWUgdmFyKTsKLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyBxbmFtZQotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIHR5cGVfZGVmaW5lZChRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgdGhlIG5vZGUgdHlwZQotCSAqIEBwYXJhbSBldAotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZGVyaXZlc19mcm9tKE5vZGVUeXBlIGF0LCBRTmFtZSBldCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIHRoZSBub2RlIHR5cGUKLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIGlzIHRoZSBYU1R5cGVEZWZpbml0aW9uIG9mIHRoZSBub2RlCi0JICogQHJldHVybiBib29sZWFuCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyBib29sZWFuIGRlcml2ZXNfZnJvbShOb2RlVHlwZSBhdCwgVHlwZURlZmluaXRpb24gZXQpOwotCi0JLyoqCi0JICogYWRkIG5hbWVzcGFjZQotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIHRoZSBwcmVmaXggb2YgdGhlIG5hbWVzcGFjZQotCSAqIEBwYXJhbSBucwotCSAqICAgICAgICAgICAgaXMgdGhlIFhTVHlwZURlZmluaXRpb24gb2YgdGhlIG5vZGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfbmFtZXNwYWNlKFN0cmluZyBwcmVmaXgsIFN0cmluZyBucyk7Ci0KLQkvKioKLQkgKiBleHBhbmQgZnVuY3Rpb24KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9mdW5jdGlvbl9xbmFtZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIGV4cGFuZCBlbGVtZW50IHR5cGUgcW5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9lbGVtX3R5cGVfcW5hbWUoUU5hbWUgbmFtZSk7Ci0KLQkvKioKLQkgKiBleHBhbmQgcW5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBib29sZWFuIGlmIGZ1bmN0aW9uIGNhbiBiZSBleHBhbmRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lKTsKLQotCS8qKgotCSAqIGFkZCBmdW5jdGlvbiB0byBsaWJyYXJ5Ci0JICogCi0JICogQHBhcmFtIGZsCi0JICogICAgICAgICAgICBpcyB0aGUgZnVuY3Rpb24gbGlicmFyeQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF9mdW5jdGlvbl9saWJyYXJ5KEZ1bmN0aW9uTGlicmFyeSBmbCk7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIHFuYW1lCi0JICogQHJldHVybiBhbnkgYXRvbWljIHR5cGUKLQkgKi8KLQlwdWJsaWMgQW55QXRvbWljVHlwZSBtYWtlX2F0b21pYyhRTmFtZSBuYW1lKTsKLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBiYXNlIHVyaSBmb3IgdGhlIGNvbnRleHQuCi0JICogQHBhcmFtIGJhc2V1cmkKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2Jhc2VfdXJpKFN0cmluZyBiYXNldXJpKTsKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICogCi0JICogR2V0cyB0aGUgY29sbGVjdGlvbnMgbWFwLCB3aGljaCBtYXBzIGEgU3RyaW5nIGludG8gYSBMaXN0IG9mIERvY3VtZW50LCBpbgotCSAqIEphdmE1IGl0IHdvdWxkIGJlIDxjb2RlPk1hcDxTdHJpbmcsIExpc3Q8RG9jdW1lbnQ+PjwvY29kZT4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgTWFwIGdldF9jb2xsZWN0aW9ucygpOwotCQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKiAKLQkgKiBTZXRzIHRoZSBjb2xsZWN0aW9ucyBtYXAsIHdoaWNoIG1hcHMgYSBTdHJpbmcgaW50byBhIExpc3Qgb2YgRG9jdW1lbnQsIGluCi0JICogSmF2YTUgaXQgd291bGQgYmUgPGNvZGU+TWFwPFN0cmluZywgTGlzdDxEb2N1bWVudD4+PC9jb2RlPgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9jb2xsZWN0aW9ucyhNYXAgY29sbGVjdGlvbnMpOwotCi0JLyoqCi0JICogR2V0cyB0aGUgdHlwZSBwcm92aWRlciBpbiB1c2UgZm9yIHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuCi0JICogCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyBUeXBlTW9kZWwgZ2V0VHlwZU1vZGVsKE5vZGUgZWxlbWVudCk7Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0Vycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1N0YXRpY0Vycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZWRiYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yOwotCi0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgYWxsIHN0YXRpYyBlcnJvcnMgYXMgZGVmaW5lZCBieSB0aGUgWFBhdGggMi4wIHNwZWNpZmljYXRpb24KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgU3RhdGljRXJyb3IgZXh0ZW5kcyBYUGF0aEV4Y2VwdGlvbiB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNzg3MDg2NjEzMDgzNzg3MDk3MUw7Ci0JLy8gZXJyb3Jjb2RlIHNwZWNpZmllZCBpbiBodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwL3hxdC1lcnJvcnMgaSBmaW5rCi0JcHJpdmF0ZSBTdHJpbmcgX2NvZGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgYSBnZW5lcmljIHN0YXRpYyBlcnJvcgotCSAqIAotCSAqIEBwYXJhbSBjb2RlCi0JICogICAgICAgICAgICBUaGUgZXJyb3IgY29kZSBhcyBzcGVjaWZpZWQgaW4gWFBhdGggMi4wCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgSHVtYXIgcmVhZGFibGUgZXJyb3IgbWVzc2FnZQotCSAqLwotCXB1YmxpYyBTdGF0aWNFcnJvcihTdHJpbmcgY29kZSwgU3RyaW5nIGVycikgewotCQlzdXBlcihlcnIpOwotCQlfY29kZSA9IGNvZGU7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBlcnJvciBjb2RlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGVycm9yCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlyZXR1cm4gX2NvZGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNOYW1lUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvU3RhdGljTmFtZVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5Y2JlYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9TdGF0aWNOYW1lUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDM0MDkzMyAtIE1pZ3JhdGUgdG8gbmV3IFhQYXRoMiBBUEkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgamF2YXgueG1sLlhNTENvbnN0YW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5SZXZlcnNlQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljQXR0ck5hbWVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU3RhdGljQ29udGV4dEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0VsZW1OYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY0Z1bmN0TmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlN0YXRpY05zTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNUeXBlTmFtZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TdGF0aWNWYXJOYW1lRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BZGRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW5kRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFueUtpbmRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXR0cmlidXRlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkF4aXNTdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQmluRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNhc3RFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdGFibGVFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ21wRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNudHhJdGVtRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkNvbW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRGVjaW1hbExpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EaXZFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG9jdW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRG91YmxlTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkVsZW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhjZXB0RXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GaWx0ZXJFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZvcndhcmRTdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRnVuY3Rpb25DYWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSURpdkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JZkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnN0T2ZFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSW50ZWdlckxpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlcnNlY3RFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NaW51c0V4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Nb2RFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTXVsRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk5hbWVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTm9kZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5PckV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QSVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QYXJFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUGlwZUV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QbHVzRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlF1YW50aWZpZWRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmFuZ2VFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUmV2ZXJzZVN0ZXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFBdHRyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNjaGVtYUVsZW1UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2VxdWVuY2VUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2luZ2xlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN0ZXBFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RyaW5nTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlN1YkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5UZXh0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRyZWF0QXNFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVW5pb25FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVmFyRXhwclBhaXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5TaW1wbGVBdG9taWNJdGVtVHlwZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlc29sdmVzIHN0YXRpYyBuYW1lcy4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY05hbWVSZXNvbHZlciBpbXBsZW1lbnRzIFhQYXRoVmlzaXRvciwgU3RhdGljQ2hlY2tlciB7Ci0Jc3RhdGljIGNsYXNzIER1bW15RXJyb3IgZXh0ZW5kcyBFcnJvciB7Ci0KLQkJLyoqCi0JCSAqIAotCQkgKi8KLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzg5ODU2NDQwMjk4MTc0MTk1MEw7Ci0JfQotCi0JcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dCBfc2M7Ci0JcHJpdmF0ZSBTdGF0aWNOYW1lRXJyb3IgX2VycjsKLQkKLQlwcml2YXRlIFNldDxqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lPiBfcmVzb2x2ZWRGdW5jdGlvbnMgPSBuZXcgSGFzaFNldDxqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lPigpOwotCXByaXZhdGUgU2V0PFN0cmluZz4gX2F4ZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JcHJpdmF0ZSBTZXQ8amF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZT4gX2ZyZWVWYXJpYWJsZXMgPSBuZXcgSGFzaFNldDxqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lPigpOwotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzdGF0aWMgbmFtZSByZXNvbHZlcgotCSAqIAotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgaXMgdGhlIHN0YXRpYyBjb250ZXh0LgotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgU3RhdGljTmFtZVJlc29sdmVyKGZpbmFsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IHNjKSB7Ci0JCV9zYyA9IG5ldyBTdGF0aWNDb250ZXh0QWRhcHRlcihzYyk7Ci0JCV9lcnIgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgU3RhdGljTmFtZVJlc29sdmVyKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0IGNvbnRleHQpIHsKLQkJX3NjID0gY29udGV4dDsKLQkJX2VyciA9IG51bGw7Ci0JfQotCi0JY2xhc3MgVmFyaWFibGVTY29wZSB7Ci0JCXB1YmxpYyBWYXJpYWJsZVNjb3BlKFFOYW1lIG5hbWUsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlIHR5cGVEZWYsIFZhcmlhYmxlU2NvcGUgbmV4dFNjb3BlKSB7Ci0JCQl0aGlzLm5hbWUgPSBuYW1lOwotCQkJdGhpcy50eXBlRGVmID0gdHlwZURlZjsKLQkJCXRoaXMubmV4dFNjb3BlID0gbmV4dFNjb3BlOwotCQl9Ci0JCWZpbmFsIHB1YmxpYyBRTmFtZSBuYW1lOwotCQlmaW5hbCBwdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uSXRlbVR5cGUgdHlwZURlZjsKLQkJZmluYWwgcHVibGljIFZhcmlhYmxlU2NvcGUgbmV4dFNjb3BlOyAKLQl9CQotCQotCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBeGVzKCkgewotCQlyZXR1cm4gX2F4ZXM7Ci0JfQotCQotCXB1YmxpYyBTZXQ8amF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZT4gZ2V0RnJlZVZhcmlhYmxlcygpIHsKLQkJcmV0dXJuIF9mcmVlVmFyaWFibGVzOwotCX0KLQkKLQlwdWJsaWMgU2V0PGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU+IGdldFJlc29sdmVkRnVuY3Rpb25zKCkgewotCQlyZXR1cm4gX3Jlc29sdmVkRnVuY3Rpb25zOwotCX0KLQkKLQlwcml2YXRlIFZhcmlhYmxlU2NvcGUgX2lubmVyU2NvcGUgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBfcm9vdFVzZWQ7Ci0KLQlwcml2YXRlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlIGdldFZhcmlhYmxlVHlwZShRTmFtZSBuYW1lKSB7Ci0JCVZhcmlhYmxlU2NvcGUgc2NvcGUgPSBfaW5uZXJTY29wZTsKLQkJd2hpbGUgKHNjb3BlICE9IG51bGwpIHsKLQkJCWlmIChuYW1lLmVxdWFscyhzY29wZS5uYW1lKSkgcmV0dXJuIHNjb3BlLnR5cGVEZWY7Ci0JCQlzY29wZSA9IHNjb3BlLm5leHRTY29wZTsKLQkJfQotCQlyZXR1cm4gX3NjLmdldEluU2NvcGVWYXJpYWJsZXMoKS5nZXRWYXJpYWJsZVR5cGUobmFtZS5hc1FOYW1lKCkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1ZhcmlhYmxlQ2FwdHVyZWQoUU5hbWUgbmFtZSkgewotCQlWYXJpYWJsZVNjb3BlIHNjb3BlID0gX2lubmVyU2NvcGU7Ci0JCXdoaWxlIChzY29wZSAhPSBudWxsKSB7Ci0JCQlpZiAobmFtZS5lcXVhbHMoc2NvcGUubmFtZSkpIHJldHVybiB0cnVlOwotCQkJc2NvcGUgPSBzY29wZS5uZXh0U2NvcGU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1ZhcmlhYmxlSW5TY29wZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBpc1ZhcmlhYmxlQ2FwdHVyZWQobmFtZSkgfHwgX3NjLmdldEluU2NvcGVWYXJpYWJsZXMoKS5pc1ZhcmlhYmxlUHJlc2VudChuYW1lLmFzUU5hbWUoKSk7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBjYW5SZXNvbHZlKFFOYW1lIHZhcikgewotCQlpZiAodmFyLnByZWZpeCgpID09IG51bGwpIHJldHVybiB0cnVlOwotCQlyZXR1cm4gISBYTUxDb25zdGFudHMuTlVMTF9OU19VUkkuZXF1YWxzKF9zYy5nZXROYW1lc3BhY2VDb250ZXh0KCkuZ2V0TmFtZXNwYWNlVVJJKHZhci5wcmVmaXgoKSkpOwotCX0KLQotCXByaXZhdGUgUU5hbWUgcmVzb2x2ZShRTmFtZSB2YXIpIHsKLQkJU3RyaW5nIG5zID0gX3NjLmdldE5hbWVzcGFjZUNvbnRleHQoKS5nZXROYW1lc3BhY2VVUkkodmFyLnByZWZpeCgpKTsKLQkJUU5hbWUgcU5hbWUgPSBuZXcgUU5hbWUodmFyLnByZWZpeCgpLCB2YXIubG9jYWwoKSk7Ci0JCXFOYW1lLnNldF9uYW1lc3BhY2UoWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLmVxdWFscyhucykgPyBudWxsIDogbnMpOwotCQlyZXR1cm4gcU5hbWU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBvcFNjb3BlKCkgewotCQlpZiAoX2lubmVyU2NvcGUgPT0gbnVsbCkgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5tYXRjaGVkIHNjb3BlIHBvcCIpOwotCQlfaW5uZXJTY29wZSA9IF9pbm5lclNjb3BlLm5leHRTY29wZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHVzaFNjb3BlKFFOYW1lIHZhciwgQnVpbHRpblR5cGVEZWZpbml0aW9uIHhzQW55dHlwZSkgewotCQlfaW5uZXJTY29wZSA9IG5ldyBWYXJpYWJsZVNjb3BlKHJlc29sdmUodmFyKSwgbmV3IFNpbXBsZUF0b21pY0l0ZW1UeXBlSW1wbCh4c0FueXR5cGUpLCBfaW5uZXJTY29wZSk7CQkKLQl9Ci0gCi0JcHJpdmF0ZSBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lLCBTdHJpbmcgZGVmKSB7Ci0JCVN0cmluZyBwcmVmaXggPSBuYW1lLnByZWZpeCgpOwotCi0JCWlmICgiKiIuZXF1YWxzKHByZWZpeCkpIHsKLQkJCW5hbWUuc2V0X25hbWVzcGFjZSgiKiIpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlpZiAocHJlZml4ID09IG51bGwpIHsKLQkJCW5hbWUuc2V0X25hbWVzcGFjZShkZWYpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0gX3NjLmdldE5hbWVzcGFjZUNvbnRleHQoKS5nZXROYW1lc3BhY2VVUkkocHJlZml4KTsKLQkJaWYgKFhNTENvbnN0YW50cy5OVUxMX05TX1VSSS5lcXVhbHMobmFtZXNwYWNlVVJJKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQluYW1lLnNldF9uYW1lc3BhY2UobmFtZXNwYWNlVVJJKTsKLQkJcmV0dXJuIHRydWU7Ci0KLQl9Ci0KLQkvKioKLQkgKiBFeHBhbmRzIHRoZSBxbmFtZSdzIHByZWZpeCBpbnRvIGEgbmFtZXNwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuCi0JICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBleHBhbmRfcW5hbWUobmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRXhwYW5kcyBhIHFuYW1lIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZSBpZiB1bnByZWZpeGVkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuCi0JICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGV4cGFuZF9mdW5jdGlvbl9xbmFtZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBleHBhbmRfcW5hbWUobmFtZSwgX3NjLmdldERlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBFeHBhbmRzIGEgcW5hbWUgYW5kIHVzZXMgdGhlIGRlZmF1bHQgdHlwZS9lbGVtZW50IG5hbWVzcGFjZSBpZgotCSAqIHVucHJlZml4ZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHFuYW1lIHRvIGV4cGFuZC4KLQkgKiBAcmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBleHBhbmRfcW5hbWUobmFtZSwgX3NjLmdldERlZmF1bHROYW1lc3BhY2UoKSk7Ci0JfQotCi0JCi0JCi0JLy8gdGhlIHByb2JsZW0gaXMgdGhhdCB2aXNpc3RvciBpbnRlcmZhY2UgZG9lcyBub3QgdGhyb3cgZXhjZXB0aW9ucy4uLgotCS8vIHNvIHdlIGdldCBhcm91bmQgaXQgO0QKLQlwcml2YXRlIHZvaWQgcmVwb3J0X2Vycm9yKFN0YXRpY05hbWVFcnJvciBlcnIpIHsKLQkJX2VyciA9IGVycjsKLQkJdGhyb3cgbmV3IER1bW15RXJyb3IoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVwb3J0X2JhZF9wcmVmaXgoU3RyaW5nIHByZWZpeCkgewotCQlyZXBvcnRfZXJyb3IoU3RhdGljTnNOYW1lRXJyb3IudW5rbm93bl9wcmVmaXgocHJlZml4KSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgdGhlIFhQYXRoIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBYUGF0aCBub2RlIHRvIGNoZWNrLgotCSAqIEB0aHJvd3MgU3RhdGljRXJyb3IKLQkgKiAgICAgICAgICAgICBzdGF0aWMgZXJyb3IuCi0JICovCi0JcHVibGljIHZvaWQgY2hlY2soWFBhdGhOb2RlIG5vZGUpIHRocm93cyBTdGF0aWNFcnJvciB7Ci0JCXRyeSB7Ci0JCQlub2RlLmFjY2VwdCh0aGlzKTsKLQkJfSBjYXRjaCAoRHVtbXlFcnJvciBlKSB7Ci0JCQl0aHJvdyBfZXJyOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gWFBhdGggYnkgdmlzaXRpbmcgYWxsIHRoZSBub2Rlcy4KLQkgKiAKLQkgKiBAcGFyYW0geHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBYUGF0aC4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aCB4cCkgewotCQlmb3IgKEl0ZXJhdG9yIGkgPSB4cC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUV4cHIgZSA9IChFeHByKSBpLm5leHQoKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvLyBkb2VzIGEgZm9yIGFuZCBhIHF1YW50aWZpZWQgZXhwcmVzc2lvbgotCS8vIHRha2VzIHRoZSBpdGVyYXRvciBmb3IgdmFyIGV4cHIgcGFyaXMKLQlwcml2YXRlIHZvaWQgZG9Gb3JFeHByKEl0ZXJhdG9yIGl0ZXIsIEV4cHIgZXhwcikgewotCQlpbnQgc2NvcGVzID0gMDsKLQotCQkvLyBhZGQgdmFyaWFibGVzIHRvIHNjb3BlIGFuZCBjaGVjayB0aGUgYmluZGluZyBzZXF1ZW5jZQotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCVZhckV4cHJQYWlyIHBhaXIgPSAoVmFyRXhwclBhaXIpIGl0ZXIubmV4dCgpOwotCi0JCQlRTmFtZSB2YXIgPSBwYWlyLnZhcm5hbWUoKTsKLQkJCWlmICghZXhwYW5kX3FuYW1lKHZhcikpCi0JCQkJcmVwb3J0X2JhZF9wcmVmaXgodmFyLnByZWZpeCgpKTsKLQotCQkJRXhwciBlID0gcGFpci5leHByKCk7Ci0KLQkJCWUuYWNjZXB0KHRoaXMpOwotCi0JCQlwdXNoU2NvcGUodmFyLCBCdWlsdGluVHlwZUxpYnJhcnkuWFNfQU5ZVFlQRSk7Ci0JCQlzY29wZXMrKzsKLQkJfQotCi0JCWV4cHIuYWNjZXB0KHRoaXMpOwotCi0JCS8vIGtpbGwgdGhlIHNjb3BlcwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNjb3BlczsgaSsrKQotCQkJcG9wU2NvcGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGZvciBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBmZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmb3IgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3JFeHByIGZleCkgewotCi0JCWRvRm9yRXhwcihmZXguaXRlcmF0b3IoKSwgZmV4LmV4cHIoKSk7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBxdWFudGlmaWVkIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIHFleAotCSAqICAgICAgICAgICAgaXMgdGhlIHF1YW50aWZpZWQgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChRdWFudGlmaWVkRXhwciBxZXgpIHsKLQkJLy8gbGV0cyBjaGVhdAotCQlkb0ZvckV4cHIocWV4Lml0ZXJhdG9yKCksIHFleC5leHByKCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEV4cHJzKEl0ZXJhdG9yIGkpIHsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlFeHByIGUgPSAoRXhwcikgaS5uZXh0KCk7Ci0KLQkJCWUuYWNjZXB0KHRoaXMpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gaWYgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gaWZleAotCSAqICAgICAgICAgICAgaXMgdGhlIGlmIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSWZFeHByIGlmZXgpIHsKLQotCQlwcmludEV4cHJzKGlmZXguaXRlcmF0b3IoKSk7Ci0KLQkJaWZleC50aGVuX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQotCQlpZmV4LmVsc2VfY2xhdXNlKCkuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgYmluYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIGxlZnQgYW5kIHJpZ2h0IGNoaWxkcmVuLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGV4cHJlc3Npb24uCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBwcmludEJpbkV4cHIoU3RyaW5nIG5hbWUsIEJpbkV4cHIgZSkgewotCQllLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0JCWUucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gT1IgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gb3JleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoT3JFeHByIG9yZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJPUiIsIG9yZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBBTkQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYW5kZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFuZEV4cHIgYW5kZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJBTkQiLCBhbmRleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBjbXBleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ21wRXhwciBjbXBleCkgewotCQlwcmludEJpbkV4cHIoIkNNUCIgKyBjbXBleC50eXBlKCksIGNtcGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSByYW5nZSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSByZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJhbmdlRXhwciByZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJSQU5HRSIsIHJleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGFkZGl0b24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYWRkZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFkZEV4cHIgYWRkZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJBREQiLCBhZGRleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc3VidHJhY3Rpb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gc3ViZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFN1YkV4cHIgc3ViZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJTVUIiLCBzdWJleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgbXVsdGlwbGljYXRpb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE11bEV4cHIgbXVsZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJNVUwiLCBtdWxleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZGl2aXNpb24gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERpdkV4cHIgbXVsZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJESVYiLCBtdWxleCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGludGVnZXIgZGl2aXNvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSURpdkV4cHIgbXVsZXgpIHsKLQkJcHJpbnRCaW5FeHByKCJJRElWIiwgbXVsZXgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIG1vZCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTW9kRXhwciBtdWxleCkgewotCQlwcmludEJpbkV4cHIoIk1PRCIsIG11bGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSB1bmlvbiBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSB1bmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChVbmlvbkV4cHIgdW5leCkgewotCQlwcmludEJpbkV4cHIoIlVOSU9OIiwgdW5leCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcGlwZWQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGlwZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBpcGVFeHByIHBpcGV4KSB7Ci0JCXByaW50QmluRXhwcigiUElQRSIsIHBpcGV4KTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gaW50ZXJzZWN0aW9uIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGlleHByCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlcnNlY3RFeHByIGlleHByKSB7Ci0JCXByaW50QmluRXhwcigiSU5URVJTRUNUIiwgaWV4cHIpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBleGNlcHQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZWV4cHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEV4Y2VwdEV4cHIgZWV4cHIpIHsKLQkJcHJpbnRCaW5FeHByKCJJTlRfRVhDRVBUIiwgZWV4cHIpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiAnaW5zdGFuY2Ugb2YnIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGlvZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnN0T2ZFeHByIGlvZXhwKSB7Ci0JCXByaW50QmluRXhwcigiSU5TVEFOQ0VPRiIsIGlvZXhwKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSAndHJlYXQgYXMnIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIHRhZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChUcmVhdEFzRXhwciB0YWV4cCkgewotCQlwcmludEJpbkV4cHIoIlRSRUFUQVMiLCB0YWV4cCk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgY2FzdGFibGUgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gY2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdGFibGVFeHByIGNleHApIHsKLQkJcHJpbnRCaW5FeHByKCJDQVNUQUJMRSIsIGNleHApOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGNhc3QgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gY2V4cAotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdEV4cHIgY2V4cCkgewotCQlwcmludEJpbkV4cHIoIkNBU1QiLCBjZXhwKTsKLQkJCi0JCVNpbmdsZVR5cGUgc3QgPSAoU2luZ2xlVHlwZSkgY2V4cC5yaWdodCgpOwotCQlRTmFtZSB0eXBlID0gc3QudHlwZSgpOwotCQkKLQkJamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZSA9IHR5cGUuYXNRTmFtZSgpOwotCQlGdW5jdGlvbiBmID0gX3NjLnJlc29sdmVGdW5jdGlvbihxTmFtZSwgMSk7Ci0JCWlmIChmID09IG51bGwpCi0JCQlyZXBvcnRfZXJyb3IobmV3IFN0YXRpY0Z1bmN0TmFtZUVycm9yKCJUeXBlIGRvZXMgbm90IGV4aXN0OiAiCi0JCQkJCSsgdHlwZS50b1N0cmluZygpKSk7Ci0JCWNleHAuc2V0X2Z1bmN0aW9uKGYpOwotCQlfcmVzb2x2ZWRGdW5jdGlvbnMuYWRkKHFOYW1lKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHVuYXJ5IGV4cHJlc3Npb24gYnkgY2hlY2tpbmcgaXRzIG9uZSBjaGlsZC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGV4cHJlc3Npb24uCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uIGl0c2VsZi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBwcmludFVuRXhwcihTdHJpbmcgbmFtZSwgVW5FeHByIGUpIHsKLQkJZS5hcmcoKS5hY2NlcHQodGhpcyk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIG1pbnVzIGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1pbnVzRXhwciBlKSB7Ci0JCXByaW50VW5FeHByKCJNSU5VUyIsIGUpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHBsdXMgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGx1c0V4cHIgZSkgewotCQlwcmludFVuRXhwcigiUExVUyIsIGUpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiB4cGF0aCBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSkgewotCQlYUGF0aEV4cHIgeHAgPSBlOwotCQlib29sZWFuIGZpcnN0U3RlcCA9IHRydWU7Ci0JCQotCQl3aGlsZSAoeHAgIT0gbnVsbCkgewotCQkJaWYgKGZpcnN0U3RlcCAmJiB4cC5zbGFzaGVzKCkgIT0gMCkKLQkJCQlfcm9vdFVzZWQgPSB0cnVlOwotCQkJCi0JCQlmaXJzdFN0ZXAgPSBmYWxzZTsKLQkJCVN0ZXBFeHByIHNlID0geHAuZXhwcigpOwotCi0JCQlpZiAoc2UgIT0gbnVsbCkKLQkJCQlzZS5hY2NlcHQodGhpcyk7Ci0KLQkJCXhwID0geHAubmV4dCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZm9yd2FyZCBzdGVwLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3J3YXJkU3RlcCBlKSB7Ci0JCWUubm9kZV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCi0JCV9heGVzLmFkZChlLml0ZXJhdG9yKCkubmFtZSgpKTsKLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgcmV2ZXJzZSBzdGVwLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSZXZlcnNlU3RlcCBlKSB7Ci0KLQkJTm9kZVRlc3QgbnQgPSBlLm5vZGVfdGVzdCgpOwotCQlpZiAobnQgIT0gbnVsbCkKLQkJCW50LmFjY2VwdCh0aGlzKTsKLQkJCi0JCVJldmVyc2VBeGlzIGl0ZXJhdG9yID0gZS5pdGVyYXRvcigpOwotCQlpZiAoaXRlcmF0b3IgIT0gbnVsbCkKLQkJCV9heGVzLmFkZChpdGVyYXRvci5uYW1lKCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgbmFtZSB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChOYW1lVGVzdCBlKSB7Ci0JCVFOYW1lIG5hbWUgPSBlLm5hbWUoKTsKLQotCQlpZiAoIWV4cGFuZF9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgdmFyaWFibGUgcmVmZXJlbmNlLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChWYXJSZWYgZSkgewotCQlRTmFtZSB2YXIgPSBlLm5hbWUoKTsKLQkJCi0JCWlmICghIGlzVmFyaWFibGVJblNjb3BlKHZhcikpCi0JCQlyZXBvcnRfZXJyb3IobmV3IFN0YXRpY05hbWVFcnJvcihTdGF0aWNOYW1lRXJyb3IuTkFNRV9OT1RfRk9VTkQpKTsKLQkJCi0JCWlmIChnZXRWYXJpYWJsZVR5cGUodmFyKSA9PSBudWxsKQotCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNOYW1lRXJyb3IoU3RhdGljTmFtZUVycm9yLk5BTUVfTk9UX0ZPVU5EKSk7Ci0JCQotCQlpZiAoIWV4cGFuZF9xbmFtZSh2YXIpKQotCQkJcmVwb3J0X2JhZF9wcmVmaXgodmFyLnByZWZpeCgpKTsKLQotCQlpZiAoIWNhblJlc29sdmUodmFyKSkKLQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljVmFyTmFtZUVycm9yKCJWYXJpYWJsZSBub3QgaW4gc2NvcGU6ICIKLQkJCQkJKyB2YXIuc3RyaW5nKCkpKTsKLQotCQkvLyBUaGUgdmFyaWFibGUgaXMgZ29vZC4gSWYgaXQgd2FzIG5vdCBjYXB0dXJlZCwgaXQgbXVzdCBiZSByZWZlcnJpbmcgdG8gYW4gZXh0ZXJuYWwgdmFyCi0JCWlmICghIGlzVmFyaWFibGVDYXB0dXJlZCh2YXIpKSBfZnJlZVZhcmlhYmxlcy5hZGQodmFyLmFzUU5hbWUoKSk7Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHN0cmluZyBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdHJpbmdMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYW4gaW50ZWdlciBsaXRlcmFsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlZ2VyTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgZG91YmxlIGxpdGVyYWwuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvdWJsZUxpdGVyYWwgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGRlY2ltYWwgbGl0ZXJhbC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGVjaW1hbExpdGVyYWwgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGFyRXhwciBlKSB7Ci0JCXByaW50RXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ250eEl0ZW1FeHByIGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBmdW5jdGlvbiBjYWxsLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGdW5jdGlvbkNhbGwgZSkgewotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0KLQkJaWYgKCFleHBhbmRfZnVuY3Rpb25fcW5hbWUobmFtZSkpCi0JCQlyZXBvcnRfYmFkX3ByZWZpeChuYW1lLnByZWZpeCgpKTsKLQotCQlqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHFOYW1lID0gbmFtZS5hc1FOYW1lKCk7Ci0JCUZ1bmN0aW9uIGYgPSBfc2MucmVzb2x2ZUZ1bmN0aW9uKHFOYW1lLCBlLmFyaXR5KCkpOwotCQlpZiAoZiA9PSBudWxsKQotCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNGdW5jdE5hbWVFcnJvcigiRnVuY3Rpb24gZG9lcyBub3QgZXhpc3Q6ICIKLQkJCQkJKyBuYW1lLnN0cmluZygpICsgIiBhcml0eTogIiArIGUuYXJpdHkoKSkpOwotCQllLnNldF9mdW5jdGlvbihmKTsKLQkJX3Jlc29sdmVkRnVuY3Rpb25zLmFkZChxTmFtZSk7Ci0JCQotCQlwcmludEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc2luZ2xlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNpbmdsZVR5cGUgZSkgewotCQlRTmFtZSB0eXBlID0gZS50eXBlKCk7Ci0JCWlmICghZXhwYW5kX2VsZW1fdHlwZV9xbmFtZSh0eXBlKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KHR5cGUucHJlZml4KCkpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGEgc2VxdWVuY2UgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpIHsKLQkJSXRlbVR5cGUgaXQgPSBlLml0ZW1fdHlwZSgpOwotCi0JCWlmIChpdCAhPSBudWxsKQotCQkJaXQuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGl0ZW0gdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSXRlbVR5cGUgZSkgewotCi0JCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJY2FzZSBJdGVtVHlwZS5JVEVNOgotCQkJYnJlYWs7Ci0JCWNhc2UgSXRlbVR5cGUuUU5BTUU6Ci0JCQlRTmFtZSB0eXBlID0gZS5xbmFtZSgpOwotCQkJaWYgKCFleHBhbmRfZWxlbV90eXBlX3FuYW1lKHR5cGUpKQotCQkJCXJlcG9ydF9iYWRfcHJlZml4KHR5cGUucHJlZml4KCkpOwotCi0JCQlpZiAoQnVpbHRpblR5cGVMaWJyYXJ5LkJVSUxUSU5fVFlQRVMubG9va3VwVHlwZShlLnFuYW1lKCkubmFtZXNwYWNlKCksIGUucW5hbWUoKS5sb2NhbCgpKSA9PSBudWxsKSB7Ci0JCQkJaWYgKF9zYy5nZXRUeXBlTW9kZWwoKSA9PSBudWxsIHx8IF9zYy5nZXRUeXBlTW9kZWwoKS5sb29rdXBUeXBlKGUucW5hbWUoKS5uYW1lc3BhY2UoKSwgZS5xbmFtZSgpLmxvY2FsKCkpID09IG51bGwpCi0JCQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljVHlwZU5hbWVFcnJvcigiVHlwZSBub3QgZGVmaW5lZDogIgotCQkJCQkJCSsgZS5xbmFtZSgpLnN0cmluZygpKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIEl0ZW1UeXBlLktJTkRURVNUOgotCQkJZS5raW5kX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGFueSBraW5kIHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFueUtpbmRUZXN0IGUpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgYSBkb2N1bWVudCB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb2N1bWVudFRlc3QgZSkgewotCi0JCXN3aXRjaCAoZS50eXBlKCkpIHsKLQkJY2FzZSBEb2N1bWVudFRlc3QuRUxFTUVOVDoKLQkJCWUuZWxlbV90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBEb2N1bWVudFRlc3QuU0NIRU1BX0VMRU1FTlQ6Ci0JCQllLnNjaGVtYV9lbGVtX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHRleHQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVGV4dFRlc3QgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGNvbW1lbnQgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ29tbWVudFRlc3QgZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3RpbmcgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUElUZXN0IGUpIHsKLQkJU3RyaW5nIGFyZyA9IGUuYXJnKCk7Ci0JCWlmIChhcmcgPT0gbnVsbCkKLQkJCWFyZyA9ICIiOwotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGF0dHJpYnV0ZSB0ZXN0LgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JLy8gWFhYIE5PIENIRUNLID8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF0dHJpYnV0ZVRlc3QgZSkgewotCQlRTmFtZSBuYW1lID0gZS5uYW1lKCk7Ci0JCWlmIChuYW1lICE9IG51bGwpIHsKLQkJCWlmICghZXhwYW5kX3FuYW1lKG5hbWUpKQotCQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCQl9Ci0JCQotCQluYW1lID0gZS50eXBlKCk7Ci0JCWlmIChuYW1lICE9IG51bGwpIHsKLQkJCWlmICghZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShuYW1lKSkKLQkJCQlyZXBvcnRfYmFkX3ByZWZpeChuYW1lLnByZWZpeCgpKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHNjaGVtYSBhdHRyaWJ1dGUgdGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hQXR0clRlc3QgZSkgewotCQlRTmFtZSBuYW1lID0gZS5hcmcoKTsKLQotCQlpZiAoIWV4cGFuZF9xbmFtZShuYW1lKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KG5hbWUucHJlZml4KCkpOwotCi0JCWlmIChfc2MuZ2V0VHlwZU1vZGVsKCkubG9va3VwQXR0cmlidXRlRGVjbGFyYXRpb24obmFtZS5uYW1lc3BhY2UoKSwgbmFtZS5sb2NhbCgpKSA9PSBudWxsKQotCQkJcmVwb3J0X2Vycm9yKG5ldyBTdGF0aWNBdHRyTmFtZUVycm9yKCJBdHRyaWJ1dGUgbm90IGRlY2xlYXJlZDogIgotCQkJCQkrIG5hbWUuc3RyaW5nKCkpKTsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhbiBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQkvLyBYWFggTk8gU0VNQU5USUMgQ0hFQ0s/IQotCXB1YmxpYyBPYmplY3QgdmlzaXQoRWxlbWVudFRlc3QgZSkgewotCQlpZiAoZS5uYW1lKCkgIT0gbnVsbCkgewotCQkJaWYgKCFleHBhbmRfZWxlbV90eXBlX3FuYW1lKGUubmFtZSgpKSkKLQkJCQlyZXBvcnRfYmFkX3ByZWZpeChlLm5hbWUoKS5wcmVmaXgoKSk7Ci0JCX0KLQkJCi0JCWlmIChlLnR5cGUoKSAhPSBudWxsKSB7Ci0JCQlpZiAoIWV4cGFuZF9lbGVtX3R5cGVfcW5hbWUoZS50eXBlKCkpKQotCQkJCXJlcG9ydF9iYWRfcHJlZml4KGUudHlwZSgpLnByZWZpeCgpKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIHNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbnVsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNjaGVtYUVsZW1UZXN0IGUpIHsKLQkJUU5hbWUgZWxlbSA9IGUubmFtZSgpOwotCi0JCWlmICghZXhwYW5kX2VsZW1fdHlwZV9xbmFtZShlbGVtKSkKLQkJCXJlcG9ydF9iYWRfcHJlZml4KGVsZW0ucHJlZml4KCkpOwotCi0JCWlmIChfc2MuZ2V0VHlwZU1vZGVsKCkubG9va3VwRWxlbWVudERlY2xhcmF0aW9uKGVsZW0ubmFtZXNwYWNlKCksIGVsZW0ubG9jYWwoKSkgPT0gbnVsbCkKLQkJCXJlcG9ydF9lcnJvcihuZXcgU3RhdGljRWxlbU5hbWVFcnJvcigiRWxlbWVudCBub3QgZGVjbGFyZWQ6ICIKLQkJCQkJKyBlbGVtLnN0cmluZygpKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludENvbGxFeHBycyhJdGVyYXRvciBpKSB7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJQ29sbGVjdGlvbiBleHBycyA9IChDb2xsZWN0aW9uKSBpLm5leHQoKTsKLQotCQkJcHJpbnRFeHBycyhleHBycy5pdGVyYXRvcigpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIGFuIGF4aXMgc3RlcC4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXhpc1N0ZXAgZSkgewotCi0JCWUuc3RlcCgpLmFjY2VwdCh0aGlzKTsKLQotCQlwcmludENvbGxFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZSBhIGZpbHRlciBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGaWx0ZXJFeHByIGUpIHsKLQkJZS5wcmltYXJ5KCkuYWNjZXB0KHRoaXMpOwotCi0JCXByaW50Q29sbEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzUm9vdFVzZWQoKSB7Ci0JCXJldHVybiBfcm9vdFVzZWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDY0ZThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyOTAzMzcgLSBSZXZpc2l0IHVzZSBvZiBJQ1UKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLS8qKgotICogVGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYW4gWFBhdGggZXhjZXB0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMzgwMzk0MTcwMTYzOTgzODYzTDsKLQlwcml2YXRlIFN0cmluZyBfcmVhc29uOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFhQYXRoRXhjZXB0aW9uCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uCi0JICovCi0JcHVibGljIFhQYXRoRXhjZXB0aW9uKFN0cmluZyByZWFzb24pIHsKLQkJX3JlYXNvbiA9IHJlYXNvbjsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgcmVhc29uIHdoeSB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSByZWFzb24gd2h5IHRoZSBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3cuCi0JICovCi0JcHVibGljIFN0cmluZyByZWFzb24oKSB7Ci0JCXJldHVybiBfcmVhc29uOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBfcmVhc29uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4ZGM2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hQYXRoUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBCdWcgMzM4NDk0ICAgIC0gcHJvaGliaXRpbmcgeHBhdGggZXhwcmVzc2lvbnMgc3RhcnRpbmcgd2l0aCAvIG9yIC8vIHRvIGJlIHBhcnNlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5hc3QuWFBhdGg7Ci0KLS8qKgotICogVGhpcyBpcyBhbiBpbnRlcmZhY2UgY2xhc3MgZm9yIHRoZSBYUGF0aCBwYXJzZXIuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWFBhdGhQYXJzZXIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHRoZSBYUGF0aCBwYXJzZXIgaW50ZXJmYWNlLgotCSAqIAotCSAqIEBwYXJhbSB4cGF0aAotCSAqICAgICAgICAgICAgaXMgdGhlIGlucHV0IFhQYXRoIHRvIGJlIHBhcnNlZC4KLQkgKiBAdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgWFBhdGggcGFyc2VyIGV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwYXJzZWQgWFBhdGguCi0JICovCi0JcHVibGljIFhQYXRoIHBhcnNlKFN0cmluZyB4cGF0aCkgdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciB0aGUgWFBhdGggcGFyc2VyIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcGFyYW0geHBhdGgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBYUGF0aCB0byBiZSBwYXJzZWQuCi0JICogQHBhcmFtIGlzUm9vdGxlc3NBY2Nlc3MKLQkgKiAgICAgICAgICAgIGlmICd0cnVlJyB0aGVuIFBzeWNob1BhdGggZW5naW5lIGNhbid0IHBhcnNlIHhwYXRoIGV4cHJlc3Npb25zIHN0YXJ0aW5nIHdpdGggLyBvciAvLy4KLQkgKiBAdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgWFBhdGggcGFyc2VyIGV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwYXJzZWQgWFBhdGguCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyBYUGF0aCBwYXJzZShTdHJpbmcgeHBhdGgsIGJvb2xlYW4gaXNSb290bGVzc0FjY2VzcykgdGhyb3dzIFhQYXRoUGFyc2VyRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aFBhcnNlckV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9YUGF0aFBhcnNlckV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjQzNWZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWFBhdGhQYXJzZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjczNzYzIC0gY29ycmVjdCBlcnJvciBjb2RlcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvcjsKLQotCi0vKioKLSAqIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgWFBhdGggcGFyc2VyLgotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhQYXJzZXJFeGNlcHRpb24gZXh0ZW5kcyBTdGF0aWNFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNDk3NDgwNTIzMDQ4OTc2MjQxOUw7Ci0JLyoqCi0JICogVGhlIHR5cGUgb2YgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVkFMSURfWFBBVEhfRVhQUkVTU0lPTiA9ICJYUFNUMDAwMyI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgWFBhdGhQYXJzZXJFeGNlcHRpb24uCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiB3aHkgdGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiB0aHJvd24uCi0JICovCi0JcHVibGljIFhQYXRoUGFyc2VyRXhjZXB0aW9uKFN0cmluZyByZWFzb24pIHsKLQkJc3VwZXIoSU5WQUxJRF9YUEFUSF9FWFBSRVNTSU9OLCByZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWGVyY2VzTG9hZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL1hlcmNlc0xvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTU3NmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvWGVyY2VzTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NjEzNCAtIGltcHJvdmVtZW50cyB0byBzY2hlbWEgYXdhcmUgcHJpbWl0aXZlIHR5cGUgc3VwcG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0cmlidXRlL2VsZW1lbnQgbm9kZXMgIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBGaXhlZCBuYW1lc3BhY2UgYXdhcmVuZXNzCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYuICBDb3JyZWN0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nIG9mIGdyYW1tYXJzIGlmIG5vbi12YWxpZGF0aW5nLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSAgUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLmlvLio7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS4qOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7Ci1pbXBvcnQgamF2YXgueG1sLnZhbGlkYXRpb24uU2NoZW1hOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguKjsKLQotLyoqCi0gKiBYZXJjZXMgbG9hZGVyIGNsYXNzLiBUaGUgbG9hZGluZyBpcyBhbHdheXMgbmFtZXNwYWNlIGF3YXJlLgotICovCi1wdWJsaWMgY2xhc3MgWGVyY2VzTG9hZGVyIGltcGxlbWVudHMgRE9NTG9hZGVyIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05WQUxJREFUSU5HX0xPQURfRFREX0dSQU1NQVIgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL25vbnZhbGlkYXRpbmcvbG9hZC1kdGQtZ3JhbW1hciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VTX0ZFQVRVUkUgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVElPTl9GRUFUVVJFID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9GVUxMX0NIRUNLSU5HX0ZFQVRVUkUgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hLWZ1bGwtY2hlY2tpbmciOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFlOQU1JQ19WQUxJREFUSU9OX0ZFQVRVUkUgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vZHluYW1pYyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ub252YWxpZGF0aW5nL2xvYWQtZXh0ZXJuYWwtZHRkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpBWFBfU0NIRU1BX0xBTkdVQUdFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFMYW5ndWFnZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVzNDX1hNTF9TQ0hFTUEgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVU1FTlRfSU1QTEVNRU5UQVRJT05fUFJPUEVSVFkgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvZG9tL2RvY3VtZW50LWNsYXNzLW5hbWUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT04gPSAib3JnLmFwYWNoZS54ZXJjZXMuZG9tLlBTVklEb2N1bWVudEltcGwiOwotCi0JYm9vbGVhbiBfdmFsaWRhdGluZzsKLQkKLQlTY2hlbWEgX3NjaGVtYSA9IG51bGw7OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFhlcmNlcyBsb2FkZXIuCi0JICovCi0JcHVibGljIFhlcmNlc0xvYWRlcigpIHsKLQkJX3ZhbGlkYXRpbmcgPSBmYWxzZTsKLQl9Ci0JCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBYZXJjZXNMb2FkZXIoU2NoZW1hIHNjaGVtYSkgewotCQlfdmFsaWRhdGluZyA9IGZhbHNlOwotCQlfc2NoZW1hID0gc2NoZW1hOwotCX0KLQotCS8qKgotCSAqIFRoZSBYZXJjZXMgbG9hZGVyIGxvYWRzIHRoZSBYTUwgZG9jdW1lbnQKLQkgKiAKLQkgKiBAcGFyYW0gaW4KLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnB1dCBzdHJlYW0uCi0JICogQHRocm93cyBET01Mb2FkZXJFeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBET00gbG9hZGVyIGV4Y2VwdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBsb2FkZWQgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIERvY3VtZW50IGxvYWQoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBET01Mb2FkZXJFeGNlcHRpb24gewotCi0JCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShTQ0hFTUFfVkFMSURBVElPTl9GRUFUVVJFLAotCQkJCUJvb2xlYW4udmFsdWVPZihfdmFsaWRhdGluZykpOwotCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShMT0FEX0VYVEVSTkFMX0RURF9GRUFUVVJFLCBCb29sZWFuLlRSVUUpOwotCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShOT05WQUxJREFUSU5HX0xPQURfRFREX0dSQU1NQVIsIEJvb2xlYW4uVFJVRSk7Ci0JCWZhY3Rvcnkuc2V0QXR0cmlidXRlKERPQ1VNRU5UX0lNUExFTUVOVEFUSU9OX1BST1BFUlRZLAotCQkJCURPQ1VNRU5UX1BTVklfSU1QTEVNRU5UQVRJT04pOwotCQkKLQkJaWYgKF9zY2hlbWEgIT0gbnVsbCkgewotCQkgIGZhY3Rvcnkuc2V0U2NoZW1hKF9zY2hlbWEpOwotCQl9Ci0JCWVsc2UgewotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhfdmFsaWRhdGluZyk7CQotCQl9Ci0KLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQotCQkJaWYgKF92YWxpZGF0aW5nKSB7Ci0JCQkJYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVycm9ySGFuZGxlcigpIHsKLQkJCQkJcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKQotCQkJCQkJCXRocm93cyBTQVhFeGNlcHRpb24gewotCQkJCQkJdGhyb3cgZTsKLQkJCQkJfQotCi0JCQkJCXB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0JCQkJCQkJdGhyb3dzIFNBWFBhcnNlRXhjZXB0aW9uIHsKLQkJCQkJCXRocm93IGU7Ci0JCQkJCX0KLQotCQkJCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpCi0JCQkJCQkJdGhyb3dzIFNBWFBhcnNlRXhjZXB0aW9uIHsKLQkJCQkJCXRocm93IGU7IC8vIFhYWAotCQkJCQl9Ci0JCQkJfSk7Ci0JCQl9Ci0JCQlyZXR1cm4gYnVpbGRlci5wYXJzZShpbik7Ci0JCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7Ci0JCQkvL3Rocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIlNBWCBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBET01Mb2FkZXJFeGNlcHRpb24oIlBhcnNlciBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbjogIgotCQkJCQkrIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IERPTUxvYWRlckV4Y2VwdGlvbigiSU8gZXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQotCX0KLQotCS8qKgotCSAqIFNldCB2YWxpZGF0aW5nIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIGlzIHRoZSB2YWx1ZSB0byBzZXQgdGhlIHZhbGlkYXRpbmcgYm9vbGVhbiB0by4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfdmFsaWRhdGluZyhib29sZWFuIHgpIHsKLQkJX3ZhbGlkYXRpbmcgPSB4OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvYXN0L1hQYXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2FzdC9YUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjcyZDE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvYXN0L1hQYXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlhQYXRoMkV4cHJlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkRlZmF1bHRFdmFsdWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5YUGF0aFZpc2l0b3I7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgWFBhdGguCi0gKiAKLSAqIEBkZXByZWNhdGVkIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgdXNlLCB1c2UgWFBhdGgyRXhwcmVzc2lvbiBpbnN0ZWFkCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aCBleHRlbmRzIFhQYXRoTm9kZSBpbXBsZW1lbnRzIFhQYXRoMkV4cHJlc3Npb24gewotCXByaXZhdGUgQ29sbGVjdGlvbiBfZXhwcnM7Ci0JcHJpdmF0ZSBTdGF0aWNDb250ZXh0IF9zdGF0aWNDb250ZXh0OwotCXByaXZhdGUgQ29sbGVjdGlvbjxRTmFtZT4gX3Jlc29sdmVkRnVuY3Rpb25zOwotCXByaXZhdGUgQ29sbGVjdGlvbjxTdHJpbmc+IF9heGVzOwotCXByaXZhdGUgQ29sbGVjdGlvbjxRTmFtZT4gX2ZyZWVWYXJpYWJsZXM7Ci0JcHJpdmF0ZSBib29sZWFuIF9yb290VXNlZDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBYUGF0aC4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwcnMKLQkgKiAgICAgICAgICAgIFhQYXRoIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBYUGF0aChDb2xsZWN0aW9uIGV4cHJzKSB7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2V4cHJzLml0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyBDb2xsZWN0aW9uPFFOYW1lPiBnZXRGcmVlVmFyaWFibGVzKCkgewotCQlyZXR1cm4gX2ZyZWVWYXJpYWJsZXM7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZyZWVWYXJpYWJsZXMoQ29sbGVjdGlvbjxRTmFtZT4gX2ZyZWVWYXJpYWJsZXMpIHsKLQkJdGhpcy5fZnJlZVZhcmlhYmxlcyA9IF9mcmVlVmFyaWFibGVzOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIENvbGxlY3Rpb248UU5hbWU+IGdldFJlc29sdmVkRnVuY3Rpb25zKCkgewotCQlyZXR1cm4gX3Jlc29sdmVkRnVuY3Rpb25zOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNvbHZlZEZ1bmN0aW9ucyhDb2xsZWN0aW9uPFFOYW1lPiBfcmVzb2x2ZWRGdW5jdGlvbnMpIHsKLQkJdGhpcy5fcmVzb2x2ZWRGdW5jdGlvbnMgPSBfcmVzb2x2ZWRGdW5jdGlvbnM7Ci0JfQotCQotCS8qKgotCSAqIEBzaW5jZSAyLjAKLQkgKi8KLQlwdWJsaWMgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEF4ZXMoKSB7Ci0JCXJldHVybiBfYXhlczsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIHZvaWQgc2V0QXhlcyhDb2xsZWN0aW9uPFN0cmluZz4gX2F4ZXMpIHsKLQkJdGhpcy5fYXhlcyA9IF9heGVzOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNSb290UGF0aFVzZWQoKSB7Ci0JCXJldHVybiBfcm9vdFVzZWQ7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJvb3RVc2VkKGJvb2xlYW4gX3Jvb3RVc2VkKSB7Ci0JCXRoaXMuX3Jvb3RVc2VkID0gX3Jvb3RVc2VkOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0LCBPYmplY3RbXSBjb250ZXh0SXRlbXMpIHsKLQkJaWYgKF9zdGF0aWNDb250ZXh0ID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN0YXRpYyBDb250ZXh0IG5vdCBzZXQgeWV0ISIpOwotCQlyZXR1cm4gbmV3IERlZmF1bHRFdmFsdWF0b3IoX3N0YXRpY0NvbnRleHQsIGR5bmFtaWNDb250ZXh0LCBjb250ZXh0SXRlbXMpLmV2YWx1YXRlMih0aGlzKTsKLQl9Ci0JCi0JLyoqCi0JICogQHNpbmNlIDIuMAotCSAqLwotCXB1YmxpYyBTdGF0aWNDb250ZXh0IGdldFN0YXRpY0NvbnRleHQoKSB7Ci0JCXJldHVybiBfc3RhdGljQ29udGV4dDsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMi4wCi0JICovCi0JcHVibGljIHZvaWQgc2V0U3RhdGljQ29udGV4dChTdGF0aWNDb250ZXh0IGNvbnRleHQpIHsKLQkJaWYgKF9zdGF0aWNDb250ZXh0ICE9IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN0YXRpYyBDb250ZXh0IGFscmVhZHkgc2V0ISIpOwotCQl0aGlzLl9zdGF0aWNDb250ZXh0ID0gY29udGV4dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uL0ZuRnVuY3Rpb25MaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2Z1bmN0aW9uL0ZuRnVuY3Rpb25MaWJyYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzEwYjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9GbkZ1bmN0aW9uTGlicmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gQWRkZWQgRm5EZWZhdWx0Q29sbGF0aW9uLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjg1MzIxIC0gaW1wbGVtZW50ZWQgZm46ZW5jb2RlLWZvci11cmkoKQotICogICAgIEplc3BlciBNb2xsZXIgICAgICAgLSBidWcgMjg3MzY5IC0gU3VwcG9ydCBmbjpjb2RlcG9pbnQtZXF1YWwoKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLio7Ci0KLS8vIHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgbGliYyA9RAotLyoqCi0gKiBNYWludGFpbnMgYSBsaWJyYXJ5IG9mIGNvcmUgZnVuY3Rpb25zIGFuZCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgotICovCi1wdWJsaWMgY2xhc3MgRm5GdW5jdGlvbkxpYnJhcnkgZXh0ZW5kcyBGdW5jdGlvbkxpYnJhcnkgewotCS8qKgotCSAqIFBhdGggdG8geHBhdGggZnVuY3Rpb25zIHNwZWNpZmljYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfRlVOQ1RJT05TX05TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zIjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkZ1bmN0aW9uTGlicmFyeS4KLQkgKi8KLQlwdWJsaWMgRm5GdW5jdGlvbkxpYnJhcnkoKSB7Ci0JCXN1cGVyKFhQQVRIX0ZVTkNUSU9OU19OUyk7Ci0KLQkJLy8gYWRkIGZ1bmN0aW9ucyBoZXJlCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5Cb29sZWFuKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUm9vdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vdCgpKTsKLQotCQkvLyBhY2Nlc3NvcnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vZGVOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTmlsbGVkKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF0YSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0cmluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkJhc2VVcmkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdGF0aWNCYXNlVXJpKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRG9jdW1lbnRVcmkoKSk7Ci0KLQkJLy8gZXJyb3IKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVycm9yKCkpOwotCi0JCS8vIHRyYWNlCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5UcmFjZSgpKTsKLQotCQkvLyBudW1lcmljIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQWJzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ2VpbGluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkZsb29yKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUm91bmQoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Sb3VuZEhhbGZUb0V2ZW4oKSk7Ci0KLQkJLy8gc3RyaW5nIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ29kZXBvaW50c1RvU3RyaW5nKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RyaW5nVG9Db2RlcG9pbnRzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ29tcGFyZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvZGVwb2ludEVxdWFsKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ29uY2F0KCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RyaW5nSm9pbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN1YnN0cmluZygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN0cmluZ0xlbmd0aCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5vcm1hbGl6ZVNwYWNlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTm9ybWFsaXplVW5pY29kZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblVwcGVyQ2FzZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkxvd2VyQ2FzZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRyYW5zbGF0ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVzY2FwZUhUTUxVcmkoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5JcmlUb1VSSSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvbnRhaW5zKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3RhcnRzV2l0aCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkVuZHNXaXRoKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3Vic3RyaW5nQmVmb3JlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuU3Vic3RyaW5nQWZ0ZXIoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NYXRjaGVzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVwbGFjZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRva2VuaXplKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRW5jb2RlRm9yVVJJKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVzb2x2ZVVSSSgpKTsKLQotCQkvLyBib29sZWFuIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVHJ1ZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkZhbHNlKCkpOwotCi0JCS8vIGRhdGUgZXh0cmFjdGlvbiBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblllYXJzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTW9udGhzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF5c0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkhvdXJzRnJvbUR1cmF0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTWludXRlc0Zyb21EdXJhdGlvbigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblNlY29uZHNGcm9tRHVyYXRpb24oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5ZZWFyRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTW9udGhGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5EYXlGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Ib3Vyc0Zyb21EYXRlVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1pbnV0ZXNGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TZWNvbmRzRnJvbURhdGVUaW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVGltZXpvbmVGcm9tRGF0ZVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5ZZWFyRnJvbURhdGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Nb250aEZyb21EYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuRGF5RnJvbURhdGUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5UaW1lem9uZUZyb21EYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuSG91cnNGcm9tVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk1pbnV0ZXNGcm9tVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblNlY29uZHNGcm9tVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblRpbWV6b25lRnJvbVRpbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5EYXRlVGltZSgpKTsKLQotCQkvLyB0aW1lem9uZSBmdW5jdHMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkltcGxpY2l0VGltZXpvbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BZGp1c3RUaW1lVG9UaW1lWm9uZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkFkanVzdERhdGVUb1RpbWVab25lKCkpOwotCi0JCS8vIFFOYW1lIGZ1bmN0cwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVzb2x2ZVFOYW1lKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUU5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5Mb2NhbE5hbWVGcm9tUU5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5QcmVmaXhGcm9tUU5hbWUoKSk7Ci0KLQkJLy8gWFhYIGltcGxlbWVudCBoZXggJiBiaW5hcnkgJiBub3RhdGlvbnMKLQotCQkvLyBub2RlIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTmFtZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkxvY2FsTmFtZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk5hbWVzcGFjZVVyaSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbk51bWJlcigpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkluU2NvcGVQcmVmaXhlcygpKTsKLQotCQkvLyBub2RlIGZ1bmN0cwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTGFuZygpKTsKLQotCQkvLyBzZXF1ZW5jZSBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkluZGV4T2YoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5FbXB0eSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkV4aXN0cygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRpc3RpbmN0VmFsdWVzKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuSW5zZXJ0QmVmb3JlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmVtb3ZlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuUmV2ZXJzZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblN1YnNlcXVlbmNlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuVW5vcmRlcmVkKCkpOwotCi0JCS8vIHNlcXVlbmNlIGNhcmlkbmFsaXR5Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5aZXJvT3JPbmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5PbmVPck1vcmUoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5FeGFjdGx5T25lKCkpOwotCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5EZWVwRXF1YWwoKSk7Ci0KLQkJLy8gYWdncmVnYXRlIGZ1bmN0aW9ucwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ291bnQoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5BdmcoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NYXgoKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5NaW4oKSk7Ci0JCWFkZF9mdW5jdGlvbihuZXcgRm5TdW0oKSk7Ci0KLQkJLy8gWFhYIGltcGxlbWVudCBmdW5jdGlvbnMgdGhhdCBnZW5lcmF0ZSBzZXF1ZW5jZXMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkRvYygpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkNvbGxlY3Rpb24oKSk7Ci0KLQkJLy8gY29udGV4dCBmdW5jdGlvbnMKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGblBvc2l0aW9uKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuTGFzdCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkN1cnJlbnREYXRlVGltZSgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbkN1cnJlbnREYXRlKCkpOwotCQlhZGRfZnVuY3Rpb24obmV3IEZuQ3VycmVudFRpbWUoKSk7Ci0JCQotCQkvLyBYWFggY29sbGF0aW9uCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5EZWZhdWx0Q29sbGF0aW9uKCkpOwotCQkKLQkJLy8gSUQgYW5kIElEUmVmCi0JCWFkZF9mdW5jdGlvbihuZXcgRm5JRCgpKTsKLQkJYWRkX2Z1bmN0aW9uKG5ldyBGbklEUkVGKCkpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9YU0N0ckxpYnJhcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvZnVuY3Rpb24vWFNDdHJMaWJyYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNDUxN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9mdW5jdGlvbi9YU0N0ckxpYnJhcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0OTUyIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6bG9uZyBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc1MTA1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6aW50IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc1OTkgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpub25Qb3NpdGl2ZUludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYwMiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOm5lZ2F0aXZlSW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjA4IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6c2hvcnQgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYwOSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOm5vbk5lZ2F0aXZlSW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NjI5IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6dW5zaWduZWRMb25nIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzIgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpwb3NpdGl2ZUludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYzOSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmJ5dGUgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0MiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOnVuc2lnbmVkSW50IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NDUgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnNpZ2hlZFNob3J0IGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2NTAgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnNpZ25lZEJ5dGUgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MTA0NiAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmJhc2U2NEJpbmFyeSBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp1bnR5cGVkQXRvbWljIGRhdGEgdHlwZS4KLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMDk1ODUgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpub3JtYWxpemVkU3RyaW5nIGRhdGEgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ0NzggLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp0b2tlbiBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0ODQyIC0gaW1wcm92aW5nIHN1cHBvcnQgZm9yIHRoZSBkYXRhIHR5cGVzIE5hbWUsIE5DTmFtZSwgRU5USVRZLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQsIElEUkVGIGFuZCBOTVRPS0VOLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Db25zdHJ1Y3RvckZMOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFhNTCBTY2hlbWEgY29udHJvbCBsaWJyYXJ5IHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0N0ckxpYnJhcnkgZXh0ZW5kcyBDb25zdHJ1Y3RvckZMIHsKLQkvKioKLQkgKiBQYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1NDSEVNQV9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgWFNDdHJMaWJyYXJ5LgotCSAqLwotCXB1YmxpYyBYU0N0ckxpYnJhcnkoKSB7Ci0JCXN1cGVyKFhNTF9TQ0hFTUFfTlMpOwotCi0JCS8vIGFkZCB0eXBlcyBoZXJlCi0JCWFkZF90eXBlKG5ldyBYU1N0cmluZygpKTsKLQkJYWRkX3R5cGUobmV3IFhTTm9ybWFsaXplZFN0cmluZygpKTsKLQkJYWRkX3R5cGUobmV3IFhTVG9rZW4oKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05hbWUoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05DTmFtZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTTk1UT0tFTigpKTsKLQkJYWRkX3R5cGUobmV3IFhTQm9vbGVhbigpKTsKLQkJYWRkX3R5cGUobmV3IFhTVW50eXBlZEF0b21pYygpKTsKLQkJYWRkX3R5cGUobmV3IFhTTm90YXRpb24oKSk7Ci0KLQkJYWRkX2Fic3RyYWN0X3R5cGUoImFueUF0b21pY1R5cGUiLCBuZXcgQW55QXRvbWljVHlwZSgpIHsKLQotCQkJcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCQotCQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlwdWJsaWMgSXRlbVR5cGUgc2VxdWVuY2VUeXBlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJLy8gbnVtZXJpYwotCQlhZGRfdHlwZShuZXcgWFNEZWNpbWFsKCkpOwotCQlhZGRfdHlwZShuZXcgWFNGbG9hdCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTRG91YmxlKCkpOwotCQlhZGRfdHlwZShuZXcgWFNJbnRlZ2VyKCkpOwotCQlhZGRfdHlwZShuZXcgWFNMb25nKCkpOwotCQlhZGRfdHlwZShuZXcgWFNJbnQoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU05vblBvc2l0aXZlSW50ZWdlcigpKTsKLQkJYWRkX3R5cGUobmV3IFhTTmVnYXRpdmVJbnRlZ2VyKCkpOwotCQlhZGRfdHlwZShuZXcgWFNTaG9ydCgpKTsKLQkJYWRkX3R5cGUobmV3IFhTTm9uTmVnYXRpdmVJbnRlZ2VyKCkpOwotCQlhZGRfdHlwZShuZXcgWFNVbnNpZ25lZExvbmcoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Bvc2l0aXZlSW50ZWdlcigpKTsKLQkJYWRkX3R5cGUobmV3IFhTQnl0ZSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTVW5zaWduZWRJbnQoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Vuc2lnbmVkU2hvcnQoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1Vuc2lnbmVkQnl0ZSgpKTsKLQotCQkvLyBkYXRlCi0JCWFkZF90eXBlKG5ldyBYU0RhdGVUaW1lKCkpOwotCQlhZGRfdHlwZShuZXcgWFNEYXRlKCkpOwotCQlhZGRfdHlwZShuZXcgWFNUaW1lKCkpOwotCQlhZGRfdHlwZShuZXcgWFNHWWVhck1vbnRoKCkpOwotCQlhZGRfdHlwZShuZXcgWFNHWWVhcigpKTsKLQkJYWRkX3R5cGUobmV3IFhTR01vbnRoRGF5KCkpOwotCQlhZGRfdHlwZShuZXcgWFNHTW9udGgoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0dEYXkoKSk7Ci0KLQkJYWRkX3R5cGUobmV3IFFOYW1lKCkpOwotCQlhZGRfdHlwZShuZXcgWFNBbnlVUkkoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU1llYXJNb250aER1cmF0aW9uKCkpOwotCQlhZGRfdHlwZShuZXcgWFNEYXlUaW1lRHVyYXRpb24oKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0R1cmF0aW9uKCkpOwotCQlhZGRfdHlwZShuZXcgWFNFbnRpdHkoKSk7Ci0JCWFkZF90eXBlKG5ldyBYU0lEKCkpOwotCQlhZGRfdHlwZShuZXcgWFNJRFJFRigpKTsKLQkJCi0JCWFkZF90eXBlKG5ldyBYU0Jhc2U2NEJpbmFyeSgpKTsKLQkJYWRkX3R5cGUobmV3IFhTSGV4QmluYXJ5KCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9BbmNlc3RvckF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MjA5MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9BbmNlc3RvckF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGFuY2VzdG9ycyBvZiB0aGUgY29udGV4dCBub2RlLCB0aGlzIGFsd2F5cyBpbmNsdWRlcyB0aGUgcm9vdAotICogbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIEFuY2VzdG9yQXhpcyBleHRlbmRzIFBhcmVudEF4aXMgewotCi0JLyoqCi0JICogR2V0IHRoZSBhbmNlc3RvcnMgb2YgdGhlIGNvbnRleHQgbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKi8KLQkvLyBYWFggdW5pZnkgdGhpcyB3aXRoIGRlc2NlbmRhbnRzIGF4aXMgPwotCXB1YmxpYyB2b2lkIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgUmVzdWx0QnVmZmVyIGNvcHlJbnRvLCBOb2RlIGxpbWl0Tm9kZSkgewotCi0JCWlmIChsaW1pdE5vZGUgIT0gbnVsbCAmJiBsaW1pdE5vZGUuaXNTYW1lTm9kZShub2RlLm5vZGVfdmFsdWUoKSkpIHJldHVybjsKLQkJCi0JCWludCBiZWZvcmUgPSBjb3B5SW50by5zaXplKCk7Ci0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCXN1cGVyLml0ZXJhdGUobm9kZSwgY29weUludG8sIGxpbWl0Tm9kZSk7Ci0KLQkJLy8gbm8gcGFyZW50Ci0JCWlmIChjb3B5SW50by5zaXplKCkgPT0gYmVmb3JlKQotCQkJcmV0dXJuOwotCi0JCU5vZGVUeXBlIHBhcmVudCA9IChOb2RlVHlwZSkgY29weUludG8uaXRlbShiZWZvcmUpOwotCi0JCS8vIGdldCBhbmNlc3RvcnMgb2YgcGFyZW50Ci0JCWl0ZXJhdGUocGFyZW50LCBjb3B5SW50bywgbGltaXROb2RlKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAiYW5jZXN0b3IiOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JPclNlbGZBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0FuY2VzdG9yT3JTZWxmQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2E2Yzk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQW5jZXN0b3JPclNlbGZBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoZSBhbmNlc3Rvci1vci1zZWxmIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSBhbmQgdGhlIGFuY2VzdG9ycyBvZiB0aGUKLSAqIGNvbnRleHQgbm9kZSwgdGhpcyBhbHdheXMgaW5jbHVkZXMgdGhlIHJvb3Qgbm9kZS4KLSAqLwotLy8gbXVsdGlwbGUgaW5oZXJldGFuY2UgbWlnaHQgYmUgY29vbCBoZXJlID1ECi1wdWJsaWMgY2xhc3MgQW5jZXN0b3JPclNlbGZBeGlzIGV4dGVuZHMgUmV2ZXJzZUF4aXMgewotCi0JLyoqCi0JICogR2V0IGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBjb250ZXh0IG5vZGUgaXRzZWxmLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqLwotCXB1YmxpYyB2b2lkIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgUmVzdWx0QnVmZmVyIGNvcHlJbnRvLCBOb2RlIGxpbWl0Tm9kZSkgewotCQkvLyBnZXQgYW5jZXN0b3JzCi0JCUFuY2VzdG9yQXhpcyBhYSA9IG5ldyBBbmNlc3RvckF4aXMoKTsKLQkJYWEuaXRlcmF0ZShub2RlLCBjb3B5SW50bywgbnVsbCk7Ci0KLQkJLy8gYWRkIHNlbGYKLQkJY29weUludG8uYWRkKG5vZGUpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgbmFtZSgpIHsKLQkJcmV0dXJuICJhbmNlc3Rvci1vci1zZWxmIjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F0dHJpYnV0ZUF4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXR0cmlidXRlQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzEwNzU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXR0cmlidXRlQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoZSBhdHRyaWJ1dGUgYXhpcyBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY29udGV4dCBub2RlLiBUaGUgYXhpcyB3aWxsCi0gKiBiZSBlbXB0eSB1bmxlc3MgdGhlIGNvbnRleHQgbm9kZSBpcyBhbiBlbGVtZW50LgotICovCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgY29udGV4dCBub2RlJ3MgYXR0cmlidXRlcy4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciBjb3B5SW50bywgTm9kZSBsaW1pdE5vZGUpIHsKLQkJLy8gb25seSBlbGVtZW50cyBoYXZlIGF0dHJpYnV0ZXMKLQkJaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnRUeXBlKSkKLQkJCXJldHVybjsKLQotCQkvLyBnZXQgYXR0cmlidXRlcwotCQlFbGVtZW50VHlwZSBlbGVtID0gKEVsZW1lbnRUeXBlKSBub2RlOwotCQlOYW1lZE5vZGVNYXAgYXR0cnMgPSBlbGVtLnZhbHVlKCkuZ2V0QXR0cmlidXRlcygpOwotCi0JCS8vIGFkZCBhdHRyaWJ1dGVzCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJzLml0ZW0oaSk7Ci0KLQkJCWNvcHlJbnRvLmFkZChOb2RlVHlwZS5kb21fdG9feHBhdGgoYXR0ciwgbm9kZS5nZXRUeXBlTW9kZWwoKSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBub2RlJ3MgcHJpbmNpcGxlIG5vZGUga2luZC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSB0eXBlIG9mIG5vZGUuCi0JICovCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKSB7Ci0JCXJldHVybiBuZXcgQXR0clR5cGUoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAiYXR0cmlidXRlIjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0F4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzRiNzQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgY2xhc3MgZm9yIGFuIEF4aXMuCi0gKiAKLSAqIEFuIGF4aXMgZGVmaW5lcyB0aGUgImRpcmVjdGlvbiBvZiBtb3ZlbWVudCIgZm9yIGEgc3RlcCBiZXR3ZWVuIGEgY29udGV4dCBub2RlCi0gKiBhbmQgYW5vdGhlciBub2RlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYXhpcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBBeGlzIHsKLQkvKioKLQkgKiBHZXQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICogQHBhcmFtIGNvcHlJbnRvIFRPRE8KLQkgKiBAcGFyYW0gbGltaXROb2RlIFRPRE8KLQkgKi8KLQlwdWJsaWMgdm9pZCBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciBjb3B5SW50bywgTm9kZSBsaW1pdE5vZGUpOwotCi0JLyoqCi0JICogR2V0IHRoZSBwcmluY2lwbGUga2luZCBvZiBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHByaW5jaXBsZSBub2RlIGtpbmQuCi0JICovCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0aXRsZSBvZiB0aGUgc2VxdWVuY2UgYXMgaXQgYXBwZWFycyBpbiB0aGUgWFBhdGggc291cmNlCi0JICogCi0JICogQHJldHVybiBBeGlzIHRpdGxlCi0JICovCi0JcHVibGljIFN0cmluZyBuYW1lKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0NoaWxkQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9DaGlsZEF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1N2NjNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0NoaWxkQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBXYXMgbm90IGhhbmRsaW5nIHhtbCBsb2FkZWQgZHluYW1pY2FsbHkgaW4gdmFyaWFibGVzLiAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRG9jVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogVGhlIGNoaWxkIGF4aXMgY29udGFpbnMgdGhlIGNoaWxkcmVuIG9mIHRoZSBjb250ZXh0IG5vZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBDaGlsZEF4aXMgZXh0ZW5kcyBGb3J3YXJkQXhpcyB7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgbm9kZSdzIGNoaWxkcmVuLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqLwotCXB1YmxpYyB2b2lkIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgUmVzdWx0QnVmZmVyIGNvcHlJbnRvLCBOb2RlIGxpbWl0Tm9kZSkgewotCQlhZGRDaGlsZHJlbihub2RlLCBjb3B5SW50bywgZmFsc2UpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZENoaWxkcmVuKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciBjb3B5SW50bywgYm9vbGVhbiByZWN1cnNlKSB7Ci0JCU5vZGVMaXN0IG5sID0gbnVsbDsKLQkJCi0JCS8vIG9ubHkgZG9jdW1lbnQgYW5kIGVsZW1lbnQgbm9kZXMgaGF2ZSBjaGlsZHJlbgotCQlpZiAobm9kZSBpbnN0YW5jZW9mIERvY1R5cGUpIHsKLQkJCW5sID0gKChEb2NUeXBlKSBub2RlKS52YWx1ZSgpLmdldENoaWxkTm9kZXMoKTsKLQkJfQotCQlpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnRUeXBlKQotCQkJbmwgPSAoKEVsZW1lbnRUeXBlKSBub2RlKS52YWx1ZSgpLmdldENoaWxkTm9kZXMoKTsKLQotCQkvLyBhZGQgdGhlIGNoaWxkcmVuIHRvIHRoZSByZXN1bHQKLQkJaWYgKG5sICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgZG5vZGUgPSBubC5pdGVtKGkpOwotCQkJCU5vZGVUeXBlIG4gPSBOb2RlVHlwZS5kb21fdG9feHBhdGgoZG5vZGUsIG5vZGUuZ2V0VHlwZU1vZGVsKCkpOwotCQkJCWNvcHlJbnRvLmFkZChuKTsKLQkJCQkKLQkJCQlpZiAocmVjdXJzZSkgYWRkQ2hpbGRyZW4obiwgY29weUludG8sIHJlY3Vyc2UpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgbmFtZSgpIHsKLQkJcmV0dXJuICJjaGlsZCI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9DdXBFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9DdXBFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODVjNmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvQ3VwRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgQ1VQIFBhcnNlci4KLSAqLwotcHVibGljIGNsYXNzIEN1cEVycm9yIGV4dGVuZHMgWFBhdGhFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMTgzNTc4NDYyMzI4MDY5MjI3NEw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ1VQIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgQ3VwRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVmYXVsdFJTRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0UlNGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYjM0YWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0UlNGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci0KLS8qKgotICogRmFjdG9yeSBpbXBsZW1lbnRhdGlvbiB3aGljaCBjcmVhdGVzIHNlcXVlbmNlcyBvZiB0eXBlIERlZmF1bHRSZXN1bHRTZXF1ZW5jZS4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFJTRmFjdG9yeSBleHRlbmRzIFJlc3VsdFNlcXVlbmNlRmFjdG9yeSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzdWx0U2VxdWVuY2UgX3JzX2NyZWF0b3IgPSBuZXcgRGVmYXVsdFJlc3VsdFNlcXVlbmNlKCk7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT09MX1NJWkUgPSA1MDsKLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2VbXSBfcnNfcG9vbCA9IG5ldyBSZXN1bHRTZXF1ZW5jZVtQT09MX1NJWkVdOwotCXByaXZhdGUgaW50IF9oZWFkX3BvczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIG9mIGZhY3RvcnkuCi0JICogCi0JICovCi0JcHVibGljIERlZmF1bHRSU0ZhY3RvcnkoKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgUE9PTF9TSVpFOyBpKyspCi0JCQlfcnNfcG9vbFtpXSA9IF9yc19jcmVhdG9yLmNyZWF0ZV9uZXcoKTsKLQotCQlfaGVhZF9wb3MgPSBQT09MX1NJWkUgLSAxOwotCX0KLQotCXByb3RlY3RlZCBSZXN1bHRTZXF1ZW5jZSBmYWN0X2NyZWF0ZV9uZXcoKSB7Ci0JCWlmIChfaGVhZF9wb3MgPiAwKSB7Ci0JCQlyZXR1cm4gX3JzX3Bvb2xbX2hlYWRfcG9zLS1dOwotCQl9Ci0KLQkJcmV0dXJuIF9yc19jcmVhdG9yLmNyZWF0ZV9uZXcoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBmYWN0X3JlbGVhc2UoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJaW50IG5ld19wb3MgPSBfaGVhZF9wb3MgKyAxOwotCi0JCWlmIChuZXdfcG9zIDwgUE9PTF9TSVpFKSB7Ci0JCQlycy5jbGVhcigpOwotCi0JCQlfaGVhZF9wb3MgPSBuZXdfcG9zOwotCQkJX3JzX3Bvb2xbbmV3X3Bvc10gPSByczsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZhY3RfcHJpbnRfZGVidWcoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSGVhZCBwb3M6ICIgKyBfaGVhZF9wb3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVmYXVsdFJlc3VsdFNlcXVlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRSZXN1bHRTZXF1ZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY0MDhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVmYXVsdFJlc3VsdFNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uSXRlbVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5TaW1wbGVBdG9taWNJdGVtVHlwZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSByZXN1bHQgc2VxdWVuY2UuCi0gKiBAZGVwcmVjYXRlZCB1c2UgUmVzdWx0QnVmZmVyIGluc3RlYWQKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRSZXN1bHRTZXF1ZW5jZSBleHRlbmRzIFJlc3VsdFNlcXVlbmNlIHsKLQotCXByaXZhdGUgTGlzdCBfc2VxOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogYW4gZW1wdHkgYXJyYXkgaXMgY3JlYXRlZAotCSAqLwotCXB1YmxpYyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UoKSB7Ci0JCV9zZXEgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFkZGVkCi0JICovCi0JcHVibGljIERlZmF1bHRSZXN1bHRTZXF1ZW5jZShBbnlUeXBlIGl0ZW0pIHsKLQkJdGhpcygpOwotCQlhZGQoaXRlbSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGl0ZW0KLQkgKiAgICAgICAgICAgIGlzIGFkZGVkIHRvIGFycmF5IF9zZXEKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGQoQW55VHlwZSBpdGVtKSB7Ci0JCWFzc2VydCBpdGVtICE9IG51bGw7Ci0JCV9zZXEuYWRkKGl0ZW0pOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBycwotCSAqICAgICAgICAgICAgUmVzdWx0U2VxdWVuY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25jYXQoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJX3NlcS5hZGQoaS5uZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIG9mIGFycmF5IF9zZXEKLQkgKi8KLQlwdWJsaWMgTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX3NlcS5saXN0SXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGludGVnZXIgb2YgdGhlIHNpemUgb2YgYXJyYXkgX3NlcQotCSAqLwotCXB1YmxpYyBpbnQgc2l6ZSgpIHsKLQkJcmV0dXJuIF9zZXEuc2l6ZSgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogICAgICAgICAgICBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGFycmF5IGl0ZW0gdGhhdCBpcyB3YW50ZWQuCi0JICogQHJldHVybiBpdGVtIGkgZnJvbSBhcnJheSBfc2VxCi0JICovCi0JcHVibGljIEFueVR5cGUgZ2V0KGludCBpKSB7Ci0JCXJldHVybiAoQW55VHlwZSkgX3NlcS5nZXQoaSk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBmaXJzdCBpdGVtIGZyb20gYXJyYXkgX3NlcQotCSAqLwotCXB1YmxpYyBBbnlUeXBlIGZpcnN0KCkgewotCQlpZiAoX3NlcS5zaXplKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBnZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBmaXJzdCBpdGVtIGZyb20gYXJyYXkgX3NlcQotCSAqLwotCXB1YmxpYyBPYmplY3QgZmlyc3RWYWx1ZSgpIHsKLQkJcmV0dXJuIGdldCgwKS5nZXROYXRpdmVWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIFdoZXRoZXIgb3Igbm90IGFycmF5IF9zZXEgaXMgZW1wdHkKLQkgKiAKLQkgKiBAcmV0dXJuIGEgYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVtcHR5KCkgewotCQlyZXR1cm4gX3NlcS5pc0VtcHR5KCk7Ci0JfQotCi0JcHVibGljIEl0ZW1UeXBlIHNlcXVlbmNlVHlwZSgpIHsKLQkJcmV0dXJuIG5ldyBTaW1wbGVBdG9taWNJdGVtVHlwZUltcGwoQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0FOWVRZUEUsIEl0ZW1UeXBlLk9DQ1VSUkVOQ0VfTk9ORV9PUl9NQU5ZKTsKLQl9Ci0KLQkvKioKLQkgKiBDbGVhcnMgdGhlIHNlcXVlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIGNsZWFyKCkgewotCQlfc2VxLmNsZWFyKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IHNlcXVlbmNlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5ldyBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0UmVzdWx0U2VxdWVuY2UoKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRTdGF0aWNDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0RlZmF1bHRTdGF0aWNDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NDExZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZWZhdWx0U3RhdGljQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjc3NzkyIC0gYWRkIGJ1aWx0IGluIHR5cGVzIHRvIHN0YXRpYyBjb250ZXh0LiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI5NzcwNyAtIE1pc3NpbmcgdGhlIGVtcHR5LXNlcXVlbmNlKCkgdHlwZQotICogICAgIE11a3VsIEdhbmRoaSAgICAgICAgLSBidWcgMzI1MjYyIC0gcHJvdmlkaW5nIGFiaWxpdHkgdG8gc3RvcmUgYW4gWFBhdGgyIHNlcXVlbmNlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFuIHVzZXItZGVmaW5lZCB2YXJpYWJsZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLkZuRnVuY3Rpb25MaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5YU0N0ckxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNvbnN0cnVjdG9yRkw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkZ1bmN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GdW5jdGlvbkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEgc3RhdGljIGNvbnRleHQgYXMgZGVzY3JpYmVkIGJ5IHRoZSBYUGF0aCAyLjAKLSAqIHNwZWNpZmljYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0U3RhdGljQ29udGV4dCBpbXBsZW1lbnRzIFN0YXRpY0NvbnRleHQgewotCi0JcHJpdmF0ZSBib29sZWFuIF94cGF0aDFfY29tcGF0aWJsZTsKLQlwcml2YXRlIFN0cmluZyBfZGVmYXVsdF9uYW1lc3BhY2U7Ci0JcHJpdmF0ZSBTdHJpbmcgX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlOwotCXByaXZhdGUgVHlwZU1vZGVsIF9tb2RlbDsKLQlwcml2YXRlIFhTQ3RyTGlicmFyeSBidWlsdGluVHlwZXM7Ci0KLQkvLyBrZXk6IFN0cmluZyBwcmVmaXgsIGNvbnRlbnRzOiBTdHJpbmcgbmFtZXNwYWNlCi0JcHJpdmF0ZSBNYXAgX25hbWVzcGFjZXM7Ci0KLQlwcml2YXRlIFN0cmluZyBfY250eHRfaXRlbV90eXBlOwotCXByaXZhdGUgTWFwIF9mdW5jdGlvbnM7Ci0KLQkvLyBYWFggY29sbGF0aW9ucwotCi0JcHJpdmF0ZSBYU0FueVVSSSBfYmFzZV91cmk7Ci0JcHJpdmF0ZSBNYXAgX2RvY3VtZW50czsKLQlwcml2YXRlIE1hcCBfY29sbGVjdGlvbnM7Ci0JCi0JcHVibGljIFN0cmluZyBnZXRfY250eHRfaXRlbV90eXBlKCkgewotCQlyZXR1cm4gX2NudHh0X2l0ZW1fdHlwZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRfY250eHRfaXRlbV90eXBlKFN0cmluZyBjbnR4dEl0ZW1UeXBlKSB7Ci0JCV9jbnR4dF9pdGVtX3R5cGUgPSBjbnR4dEl0ZW1UeXBlOwotCX0KLQotCXB1YmxpYyBNYXAgZ2V0X2NvbGxlY3Rpb25zKCkgewotCQlyZXR1cm4gX2NvbGxlY3Rpb25zOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldF9jb2xsZWN0aW9ucyhNYXAgY29sbGVjdGlvbnMpIHsKLQkJX2NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGUoKSB7Ci0JCXJldHVybiBfZGVmYXVsdF9jb2xsZWN0aW9uX3R5cGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0X2RlZmF1bHRfY29sbGVjdGlvbl90eXBlKFN0cmluZyBkZWZhdWx0Q29sbGVjdGlvblR5cGUpIHsKLQkJX2RlZmF1bHRfY29sbGVjdGlvbl90eXBlID0gZGVmYXVsdENvbGxlY3Rpb25UeXBlOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIF9kZWZhdWx0X2NvbGxlY3Rpb25fdHlwZTsKLQotCS8vIFZhcmlhYmxlcyBhcmUgaGVsZCBsaWtlIHRoaXM6Ci0JLy8gQSBzdGFjayBvZiBtYXBzIG9mIHZhcmlhYmxlcy4uLi4KLQkvLyBvciBpbiBtb3JlIGh1bWFuIHRlcm1zOgotCS8vIGEgc3RhY2sgb2Ygc2NvcGVzIGVhY2ggY29udGFpbmluZyBhIHN5bWJvbCB0YWJsZQotCS8vIFhYWCB2YXJzIGNvbnRhaW4gQW55VHlwZS4uLiBzaG91bGQgdGhleSBiZSBSZXN1bHRTZXF1ZW5jZSA/Ci0JcHJpdmF0ZSBTdGFjayBfc2NvcGVzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHNjaGVtYQotCSAqICAgICAgICAgICAgU2NoZW1hIGluZm9ybWF0aW9uIGZyb20gZG9jdW1lbnQuIE1heSBiZSBudWxsLgotCSAqLwotCXB1YmxpYyBEZWZhdWx0U3RhdGljQ29udGV4dChUeXBlTW9kZWwgbW9kZWwpIHsKLQkJX3hwYXRoMV9jb21wYXRpYmxlID0gZmFsc2U7Ci0KLQkJX2RlZmF1bHRfbmFtZXNwYWNlID0gbnVsbDsKLQkJX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlID0gRm5GdW5jdGlvbkxpYnJhcnkuWFBBVEhfRlVOQ1RJT05TX05TOwotCQlfbW9kZWwgPSBtb2RlbDsKLQkJYnVpbHRpblR5cGVzID0gbmV3IFhTQ3RyTGlicmFyeSgpOwotCi0JCV9mdW5jdGlvbnMgPSBuZXcgSGFzaE1hcCgyMCk7IC8vIGFsbG93IG51bGwga2V5czogbnVsbCBuYW1lc3BhY2UKLQkJX25hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcCgyMCk7IC8vIGRpdHRvCi0KLQkJX2NudHh0X2l0ZW1fdHlwZSA9IG51bGw7Ci0KLQkJX3Njb3BlcyA9IG5ldyBTdGFjaygpOwotCQluZXdfc2NvcGUoKTsKLQotCQlpZiAoX21vZGVsICE9IG51bGwpCi0JCQlpbml0X3NjaGVtYShtb2RlbCk7Ci0KLQkJX2Jhc2VfdXJpID0gbmV3IFhTQW55VVJJKCk7Ci0KLQkJLy8gWFhYIHdpbGRjYXJkIHByZWZpeAotCQlhZGRfbmFtZXNwYWNlKCIqIiwgIioiKTsKLQotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzY2hlbWEtbGVzcyBkb2N1bWVudHMuCi0JICogCi0JICovCi0JcHVibGljIERlZmF1bHRTdGF0aWNDb250ZXh0KCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0X3NjaGVtYShUeXBlTW9kZWwgc2NoZW1hKSB7Ci0JCV9tb2RlbCA9IHNjaGVtYTsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm4gdGhlIGJhc2UgVVJJCi0JICogCi0JICogQHJldHVybiBYU0FueVVSSQotCSAqLwotCXB1YmxpYyBYU0FueVVSSSBiYXNlX3VyaSgpIHsKLQkJcmV0dXJuIF9iYXNlX3VyaTsKLQl9Ci0KLQkvKioKLQkgKiBpcyBpdCB4cGF0aDEgY29tcGF0aWJsZT8KLQkgKiAKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB4cGF0aDFfY29tcGF0aWJsZSgpIHsKLQkJcmV0dXJuIF94cGF0aDFfY29tcGF0aWJsZTsKLQl9Ci0KLQkvKioKLQkgKiBhZGRzIG5hbWVzcGFjZQotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIG5hbWVzcGFjZSBwcmVmaXgKLQkgKiBAcGFyYW0gbmFtZXNwYWNlCi0JICogICAgICAgICAgICBuYW1lc3BhY2UgVVJJCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgYWRkX25hbWVzcGFjZShTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCS8vIFhYWCBhcmUgdGhlc2UgcmVzZXJ2ZWQgPwotCQkvLyByZWZlciB0byBmb3JtYWwgc2VtYW50aWNzIHNlY3Rpb24gMi41LjEKLQkJaWYgKChwcmVmaXggIT0gbnVsbCkgJiYgKHByZWZpeC5lcXVhbHMoImZzIikgfHwgcHJlZml4LmVxdWFscygib3AiKSB8fCBwcmVmaXguZXF1YWxzKCJkbSIpKSkKLQkJCXJldHVybjsKLQkJIGlmIChwcmVmaXggPT0gbnVsbCkgewotCQkgICBfZGVmYXVsdF9uYW1lc3BhY2UgPSBuYW1lc3BhY2U7IAotCQkgICBfbmFtZXNwYWNlcy5wdXQoIiIsIG5hbWVzcGFjZSk7Ci0JCSB9IGVsc2UgewotCQkgICBfbmFtZXNwYWNlcy5wdXQocHJlZml4LCBuYW1lc3BhY2UpOwotCQkgfQotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHdoZW4gb25lIGlzIG5vdCBhbGxvY2F0ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZGVmYXVsdF9uYW1lc3BhY2UoKSB7Ci0JCXJldHVybiBfZGVmYXVsdF9uYW1lc3BhY2U7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkZWZhdWwgZnVuY3Rpb24gbmFtZXNwYWNlCi0JICogCi0JICogQHJldHVybiBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlKCkgewotCQlyZXR1cm4gX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIEFkZHMgYSBmdW5jdGlvbiB0byB0aGUgbGlicmFyeS4KLQkgKiAKLQkgKiBAcGFyYW0gZmwKLQkgKiAgICAgICAgICAgIEZ1bmN0aW9uIGxpYnJhcnkgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF9mdW5jdGlvbl9saWJyYXJ5KEZ1bmN0aW9uTGlicmFyeSBmbCkgewotCQlmbC5zZXRfc3RhdGljX2NvbnRleHQodGhpcyk7Ci0JCV9mdW5jdGlvbnMucHV0KGZsLm5hbWVzcGFjZSgpLCBmbCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIGV4aXN0YW5jZSBvZiBmdW5jdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgZnVuY3Rpb24gbmFtZS4KLQkgKiBAcGFyYW0gYXJpdHkKLQkgKiAgICAgICAgICAgIGFyaXR5IG9mIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBmdW5jdGlvbl9leGlzdHMoUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCVN0cmluZyBucyA9IG5hbWUubmFtZXNwYWNlKCk7Ci0JCWlmICghX2Z1bmN0aW9ucy5jb250YWluc0tleShucykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJRnVuY3Rpb25MaWJyYXJ5IGZsID0gKEZ1bmN0aW9uTGlicmFyeSkgX2Z1bmN0aW9ucy5nZXQobnMpOwotCi0JCXJldHVybiBmbC5mdW5jdGlvbl9leGlzdHMobmFtZSwgYXJpdHkpOwotCX0KLQotCXB1YmxpYyBGdW5jdGlvbiBmdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJU3RyaW5nIG5zID0gbmFtZS5uYW1lc3BhY2UoKTsKLQkJaWYgKCFfZnVuY3Rpb25zLmNvbnRhaW5zS2V5KG5zKSkKLQkJCXJldHVybiBudWxsOwotCi0JCUZ1bmN0aW9uTGlicmFyeSBmbCA9IChGdW5jdGlvbkxpYnJhcnkpIF9mdW5jdGlvbnMuZ2V0KG5zKTsKLQotCQlyZXR1cm4gZmwuZnVuY3Rpb24obmFtZSwgYXJpdHkpOwotCX0KLQotCS8qKgotCSAqIAotCSAqIENyZWF0ZXMgYW4gYXRvbWljIGZyb20gYSBzcGVjaWZpYyB0eXBlIG5hbWUgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlZmF1bHQKLQkgKiB2YWx1ZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgbmFtZSBvZiB0eXBlIHRvIGNyZWF0ZQotCSAqIEByZXR1cm4gQXRvbWljIHR5cGUgb2YgZGVzaXJlZCB0eXBlLgotCSAqLwotCXB1YmxpYyBBbnlBdG9taWNUeXBlIG1ha2VfYXRvbWljKFFOYW1lIG5hbWUpIHsKLQkJU3RyaW5nIG5zID0gbmFtZS5uYW1lc3BhY2UoKTsKLQotCQlpZiAoIV9mdW5jdGlvbnMuY29udGFpbnNLZXkobnMpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJRnVuY3Rpb25MaWJyYXJ5IGZsID0gKEZ1bmN0aW9uTGlicmFyeSkgX2Z1bmN0aW9ucy5nZXQobnMpOwotCi0JCWlmICghKGZsIGluc3RhbmNlb2YgQ29uc3RydWN0b3JGTCkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlDb25zdHJ1Y3RvckZMIGNmbCA9IChDb25zdHJ1Y3RvckZMKSBmbDsKLQotCQlyZXR1cm4gY2ZsLmF0b21pY190eXBlKG5hbWUpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBleHBhbmRfcW5hbWUoUU5hbWUgbmFtZSwgU3RyaW5nIGRlZikgewotCQlTdHJpbmcgcHJlZml4ID0gbmFtZS5wcmVmaXgoKTsKLQotCQlpZiAocHJlZml4ID09IG51bGwpIHsKLQkJCW5hbWUuc2V0X25hbWVzcGFjZShkZWYpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlpZiAoIXByZWZpeF9leGlzdHMocHJlZml4KSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQluYW1lLnNldF9uYW1lc3BhY2UocmVzb2x2ZV9wcmVmaXgocHJlZml4KSk7Ci0JCXJldHVybiB0cnVlOwotCi0JfQotCi0JLyoqCi0JICogRXhwYW5kcyB0aGUgcW5hbWUncyBwcmVmaXggaW50byBhIG5hbWVzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgcW5hbWUgdG8gZXhwYW5kLgotCSAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4cGFuZF9xbmFtZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBleHBhbmRfcW5hbWUobmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRXhwYW5kcyBhIHFuYW1lIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG5hbWVzcGFjZSBpZiB1bnByZWZpeGVkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBxbmFtZSB0byBleHBhbmQuCi0JICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXhwYW5kX2Z1bmN0aW9uX3FuYW1lKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIGV4cGFuZF9xbmFtZShuYW1lLCBkZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBFeHBhbmRzIGEgcW5hbWUgYW5kIHVzZXMgdGhlIGRlZmF1bHQgdHlwZS9lbGVtZW50IG5hbWVzcGFjZSBpZgotCSAqIHVucHJlZml4ZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHFuYW1lIHRvIGV4cGFuZC4KLQkgKiBAcmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBleHBhbmRfZWxlbV90eXBlX3FuYW1lKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIGV4cGFuZF9xbmFtZShuYW1lLCBkZWZhdWx0X25hbWVzcGFjZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBDaGVja3Mgd2hldGhlciB0aGUgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBpbiBzY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuCi0JICogCi0JICogQHBhcmFtIHFuYW1lCi0JICogICAgICAgICAgICB0eXBlIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIHR5cGUgaXMgZGVmaW5lZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0eXBlX2RlZmluZWQoUU5hbWUgcW5hbWUpIHsKLQkJCi0JCWlmIChfbW9kZWwgPT0gbnVsbCkgewotCQkJcmV0dXJuIGJ1aWx0aW5UeXBlcy5hdG9taWNfdHlwZShxbmFtZSkgIT0gbnVsbDsKLQkJfQotCi0JCVR5cGVEZWZpbml0aW9uIHRkID0gX21vZGVsLmxvb2t1cFR5cGUocW5hbWUubmFtZXNwYWNlKCksIHFuYW1lLmxvY2FsKCkpOwotCQlpZiAodGQgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3Mgd2hldGhlciB0aGUgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBpbiBzY29wZSBzY2hlbWEgZGVmaW5pdGlvbnMuCi0JICogCi0JICogQHBhcmFtIG5zCi0JICogICAgICAgICAgICBuYW1lc3BhY2Ugb2YgdHlwZS4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgbmFtZSBvZiB0eXBlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0eXBlIGlzIGRlZmluZWQuCi0JICogCi0JICovCi0JcHVibGljIGJvb2xlYW4gdHlwZV9kZWZpbmVkKFN0cmluZyBucywgU3RyaW5nIHR5cGUpIHsKLQkJcmV0dXJuIHR5cGVfZGVmaW5lZChuZXcgUU5hbWUobnMsIHR5cGUpKTsKLQl9Ci0KLQkvKioKLQkgKiBpcyBlbGVtZW50IGRlY2xhcmVkPwotCSAqIAotCSAqIEBwYXJhbSBlbGVtCi0JICogICAgICAgICAgICBuYW1lIG9mIGVsZW1lbnQuCi0JICogQHJldHVybiB0cnVlIGlmIGVsZW1lbnQgZGVjbGFyZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZWxlbWVudF9kZWNsYXJlZChRTmFtZSBlbGVtKSB7Ci0JCWlmIChfbW9kZWwgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlUeXBlRGVmaW5pdGlvbiB0ZCA9IF9tb2RlbC5sb29rdXBFbGVtZW50RGVjbGFyYXRpb24oZWxlbS5sb2NhbCgpLAotCQkJCWVsZW0ubmFtZXNwYWNlKCkpOwotCi0JCWlmICh0ZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIE9idGFpbnMgc2NoZW1hIGRlZmluaXRpb24gb2YgdGhlIHR5cGUgb2YgYW4gZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbQotCSAqICAgICAgICAgICAgbmFtZSBvZiBlbGVtZW50IHdobydzIHR5cGUgaXMgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIHNjaGVtYSBkZWZpbml0aW9uIG9mIHR5cGUKLQkgKi8KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZWxlbWVudF90eXBlX2RlZmluaXRpb24oUU5hbWUgZWxlbSkgewotCQlyZXR1cm4gX21vZGVsLmxvb2t1cEVsZW1lbnREZWNsYXJhdGlvbihlbGVtLmxvY2FsKCksCi0JCQkJZWxlbS5uYW1lc3BhY2UoKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBpcyBpbiB0aGUgaW4tc2NvcGUgc2NoZW1hIGRlZmluaXRpb25zLgotCSAqIAotCSAqIEBwYXJhbSBhdHRyCi0JICogICAgICAgICAgICBuYW1lIG9mIGF0dHJpYnV0ZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgYXR0cmlidXRlIGlzIGRlY2xhcmVkLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGF0dHJpYnV0ZV9kZWNsYXJlZChRTmFtZSBhdHRyKSB7Ci0JCWlmIChfbW9kZWwgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlUeXBlRGVmaW5pdGlvbiB0ZCA9IF9tb2RlbC5sb29rdXBBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyCi0JCQkJLmxvY2FsKCksIGF0dHIubmFtZXNwYWNlKCkpOwotCi0JCWlmICh0ZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBpbiBhbiBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtCi0JICogICAgICAgICAgICBlbGVtZW50IG5hbWUKLQkgKiBAcmV0dXJuIHNjaGVtYSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBhdHRyaWJ1dGUKLQkgKi8KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gYXR0cmlidXRlX3R5cGVfZGVmaW5pdGlvbihRTmFtZSBlbGVtKSB7Ci0JCXJldHVybiBfbW9kZWwubG9va3VwQXR0cmlidXRlRGVjbGFyYXRpb24oZWxlbQotCQkJCS5sb2NhbCgpLCBlbGVtLm5hbWVzcGFjZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBkb2VzIHByZWZpeCBleGlzdD8KLQkgKiAKLQkgKiBAcGFyYW0gcHJlZgotCSAqICAgICAgICAgICAgcHJlZml4IG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIGl0IGRvZXMuCi0JICovCi0JcHVibGljIGJvb2xlYW4gcHJlZml4X2V4aXN0cyhTdHJpbmcgcHJlZikgewotCQlyZXR1cm4gX25hbWVzcGFjZXMuY29udGFpbnNLZXkocHJlZik7Ci0JfQotCi0JLyoqCi0JICogUmVzb2x2ZXMgYSBwcmVmaXggaW50byBhIG5hbWVzcGFjZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHByZWYKLQkgKiAgICAgICAgICAgIHByZWZpeCBuYW1lCi0JICogQHJldHVybiB1cmkgcHJlZml4IGlzIHJlc29sdmVkIHRvIG9yIG51bGwuCi0JICovCi0JcHVibGljIFN0cmluZyByZXNvbHZlX3ByZWZpeChTdHJpbmcgcHJlZikgewotCQlyZXR1cm4gKFN0cmluZykgX25hbWVzcGFjZXMuZ2V0KHByZWYpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyBpZiBhbiBYTUwgbm9kZSBkZXJpdmVzIGZyb20gYSBzcGVjaWZpZWQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIG5vZGUgYWN0dWFsIHR5cGUKLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIG5hbWUgb2YgZXhwZWN0ZWQgdHlwZQotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzCi0JICovCi0JLy8gWFhYIGZpeCB0aGlzCi0JcHVibGljIGJvb2xlYW4gZGVyaXZlc19mcm9tKE5vZGVUeXBlIGF0LCBRTmFtZSBldCkgewotCQkKLQkJVHlwZURlZmluaXRpb24gdGQgPSBfbW9kZWwuZ2V0VHlwZShhdC5ub2RlX3ZhbHVlKCkpOwotCi0JCXNob3J0IG1ldGhvZCA9IFR5cGVEZWZpbml0aW9uLkRFUklWQVRJT05fRVhURU5TSU9OIHwgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9SRVNUUklDVElPTjsKLQotCQkvLyBYWFgKLQkJaWYgKCFldC5leHBhbmRlZCgpKSB7Ci0JCQlTdHJpbmcgcHJlID0gZXQucHJlZml4KCk7Ci0KLQkJCWlmIChwcmUgIT0gbnVsbCkgewotCQkJCWlmIChwcmVmaXhfZXhpc3RzKHByZSkpIHsKLQkJCQkJZXQuc2V0X25hbWVzcGFjZShyZXNvbHZlX3ByZWZpeChwcmUpKTsKLQkJCQl9IGVsc2UKLQkJCQkJYXNzZXJ0IGZhbHNlOwotCQkJfSBlbHNlCi0JCQkJZXQuc2V0X25hbWVzcGFjZShkZWZhdWx0X25hbWVzcGFjZSgpKTsKLQkJfQotCi0JCXJldHVybiB0ZCAhPSBudWxsICYmIHRkLmRlcml2ZWRGcm9tKGV0Lm5hbWVzcGFjZSgpLCBldC5sb2NhbCgpLCBtZXRob2QpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyBpZiBhbiBYTUwgbm9kZSBkZXJpdmVzIGZyb20gYSBzcGVjaWZpZWQgdHlwZSBkZWZpbml0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhdAotCSAqICAgICAgICAgICAgbm9kZSBhY3R1YWwgdHlwZS4KLQkgKiBAcGFyYW0gZXQKLQkgKiAgICAgICAgICAgIHR5cGUgZGVmaW5pdGlvbiBvZiBleHBlY3RlZCB0eXBlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhIGRlcml2YXRpb24gZXhpc3RzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGRlcml2ZXNfZnJvbShOb2RlVHlwZSBhdCwgVHlwZURlZmluaXRpb24gZXQpIHsKLQkJVHlwZURlZmluaXRpb24gdGQgPSBfbW9kZWwuZ2V0VHlwZShhdC5ub2RlX3ZhbHVlKCkpOwotCQlzaG9ydCBtZXRob2QgPSAwOwotCQlyZXR1cm4gdGQuZGVyaXZlZEZyb21UeXBlKGV0LCBtZXRob2QpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgc2NvcGUgbGV2ZWwuCi0JICovCi0JLy8gdmFyaWFibGUgc3R1ZmYKLQlwdWJsaWMgdm9pZCBuZXdfc2NvcGUoKSB7Ci0JCU1hcCB2YXJzID0gbmV3IEhhc2hNYXAoKTsKLQotCQlfc2NvcGVzLnB1c2godmFycyk7Ci0JfQotCi0JLyoqCi0JICogRGVzdHJveXMgYSBzY29wZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZXN0cm95X3Njb3BlKCkgewotCQlfc2NvcGVzLnBvcCgpOwotCX0KLQotCXByaXZhdGUgTWFwIGN1cnJlbnRfc2NvcGUoKSB7Ci0JCXJldHVybiAoTWFwKSBfc2NvcGVzLnBlZWsoKTsKLQl9Ci0KLQkvKioKLQkgKiBkb2VzIHZhcmlhYmxlIGV4aXN0IGluIGN1cnJlbnQgc2NvcGUgPwotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIGl0IGRvZXMuCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFyaWFibGVfZXhpc3RzKFFOYW1lIHZhcikgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJcmV0dXJuIHNjb3BlLmNvbnRhaW5zS2V5KHZhcik7Ci0JfQotCi0JLyoqCi0JICogY2hlY2tzIHRvIHNlZSBpZiB2YXJpYWJsZSBpcyBpbiBzY29wZQotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUuCi0JICogQHJldHVybiB0cnVlIGlmIHZhcmlhYmxlIGlzIGluIGN1cnJlbnQgb3IgYWJvdmUgc2NvcGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFyaWFibGVfaW5fc2NvcGUoUU5hbWUgdmFyKSB7Ci0JCS8vIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLi4KLQkJZm9yIChJdGVyYXRvciBpID0gX3Njb3Blcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU1hcCBzY29wZSA9IChNYXApIGkubmV4dCgpOwotCi0JCQlpZiAoc2NvcGUuY29udGFpbnNLZXkodmFyKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQWRkcyBhIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUuCi0JICogCi0JICogdXNlZCBmb3Igc3RhdGljIGNoZWNraW5nLi4uLiBpLmUuIHByZXNlbmNlIG9mIHZhcmlhYmxlcwotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZF92YXJpYWJsZShRTmFtZSB2YXIpIHsKLQkJc2V0X3ZhcmlhYmxlKHZhciwgKEFueVR5cGUpIG51bGwpOwotCX0KLQotCS8vIG92ZXJ3cml0ZXMsIG9yIGNyZWF0ZXMKLQlwcm90ZWN0ZWQgdm9pZCBzZXRfdmFyaWFibGUoUU5hbWUgdmFyLCBBbnlUeXBlIHZhbCkgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJc2NvcGUucHV0KHZhciwgdmFsKTsKLQl9Ci0JCi0JLyoKLQkgKiBTZXQgYSBYUGF0aDIgc2VxdWVuY2UgaW50byBhIHZhcmlhYmxlLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldF92YXJpYWJsZShRTmFtZSB2YXIsIFJlc3VsdFNlcXVlbmNlIHZhbCkgewotCQlNYXAgc2NvcGUgPSBjdXJyZW50X3Njb3BlKCk7Ci0KLQkJc2NvcGUucHV0KHZhciwgdmFsKTsKLQl9Ci0JCi0KLQkvKioKLQkgKiBEZWxldGVzIGEgdmFyaWFibGUgZnJvbSBjdXJyZW50IHNjb3BlLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHZhcmlhYmxlIG5hbWUgdG8gZGVsZXRlLgotCSAqIEByZXR1cm4gZmFsc2UgaWYgdmFyaWFibGUgZG9lc24ndCBleGlzdC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBkZWxfdmFyaWFibGUoUU5hbWUgdmFyKSB7Ci0JCWlmICghdmFyaWFibGVfZXhpc3RzKHZhcikpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJTWFwIHNjb3BlID0gY3VycmVudF9zY29wZSgpOwotCQlpZiAoc2NvcGUucmVtb3ZlKHZhcikgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0KLQl9Ci0KLQkvLyByZXR1cm4gbnVsbCBpZiAibm90IGZvdW5kIgotCXByb3RlY3RlZCBPYmplY3QgZ2V0X3ZhcihRTmFtZSB2YXIpIHsKLQkJLy8gZ28gdGhyb3VnaCB0aGUgc3RhY2sgaW4gcmV2ZXJzZSBvcmRlci4uLiByZXZlcnNlIGl0ZXJhdG9ycwotCQkvLyB3b3VsZCBiZSBuaWNlIGhlcmUuLi4KLQotCQlpbnQgcG9zID0gX3Njb3Blcy5zaXplKCk7Ci0JCXdoaWxlICgtLXBvcyA+PSAwKSB7Ci0JCQlNYXAgc2NvcGUgPSAoTWFwKSBfc2NvcGVzLmdldChwb3MpOwotCi0JCQkvLyBnb3RjaGEKLQkJCWlmIChzY29wZS5jb250YWluc0tleSh2YXIpKSB7Ci0JCQkJcmV0dXJuIHNjb3BlLmdldCh2YXIpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogRGVidWcgZnVuY3Rpb24gd2hpY2ggd2lsbCBwcmludCBjdXJyZW50IHZhcmlhYmxlIHNjb3BlcyBhbmQgaW5mby4KLQkgKi8KLQkvLyBkZWJ1ZyBmdW5jdGlvbnMKLQlwdWJsaWMgdm9pZCBkZWJ1Z19wcmludF92YXJzKCkgewotCQlpbnQgbGV2ZWwgPSAwOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IF9zY29wZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlNYXAgc2NvcGUgPSAoTWFwKSBpLm5leHQoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY29wZSBsZXZlbCAiICsgbGV2ZWwpOwotLy8JCQlzY29wZS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0JCQlmb3IgKEl0ZXJhdG9yIGogPSBzY29wZS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykgewotCQkJCVFOYW1lIHZhcm5hbWUgPSAoUU5hbWUpIGoubmV4dCgpOwotCi0JCQkJQW55VHlwZSB2YWwgPSAoQW55VHlwZSkgc2NvcGUuZ2V0KHZhcm5hbWUpOwotCi0JCQkJU3RyaW5nIHN0cmluZ192YWwgPSAibnVsbCI7Ci0KLQkJCQlpZiAodmFsICE9IG51bGwpCi0JCQkJCXN0cmluZ192YWwgPSB2YWwuZ2V0U3RyaW5nVmFsdWUoKTsKLQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVmFybmFtZTogIiArIHZhcm5hbWUuc3RyaW5nKCkKLQkJCQkJCSsgIiBleHBhbmRlZD0iICsgdmFybmFtZS5leHBhbmRlZCgpICsgIiBWYWx1ZTogIgotCQkJCQkJKyBzdHJpbmdfdmFsKTsKLQotCQkJfQotCi0JCQlsZXZlbCsrOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBCYXNlIFVSSSBmb3IgdGhlIHN0YXRpYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9iYXNlX3VyaShTdHJpbmcgYmFzZXVyaSkgewotCQlfYmFzZV91cmkgPSBuZXcgWFNBbnlVUkkoYmFzZXVyaSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0X2RvY3VtZW50cyhNYXAgX2RvY3VtZW50cykgewotCQl0aGlzLl9kb2N1bWVudHMgPSBfZG9jdW1lbnRzOwotCX0KLQotCXB1YmxpYyBNYXAgZ2V0X2RvY3VtZW50cygpIHsKLQkJcmV0dXJuIF9kb2N1bWVudHM7Ci0JfQotCi0JcHVibGljIFR5cGVNb2RlbCBnZXRUeXBlTW9kZWwoTm9kZSBub2RlKSB7Ci0JCXJldHVybiBfbW9kZWw7Ci0JfQotCi0JcHVibGljIE1hcCBnZXRfZnVuY3Rpb25fbGlicmFyaWVzKCkgewotCQlyZXR1cm4gX2Z1bmN0aW9uczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0Rlc2NlbmRhbnRBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0Rlc2NlbmRhbnRBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOWFlNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50QXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhlIGRlc2NlbmRhbnQgYXhpcyBjb250YWlucyB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbnRleHQgbm9kZQotICovCi1wdWJsaWMgY2xhc3MgRGVzY2VuZGFudEF4aXMgZXh0ZW5kcyBDaGlsZEF4aXMgewotCi0JLyoqCi0JICogVXNpbmcgdGhlIGNvbnRleHQgbm9kZSByZXRyaWV2ZSB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICovCi0JcHVibGljIHZvaWQgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBSZXN1bHRCdWZmZXIgY29weUludG8sIE5vZGUgbGltaXROb2RlKSB7Ci0JCWFkZENoaWxkcmVuKG5vZGUsIGNvcHlJbnRvLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAiZGVzY2VuZGFudCI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50T3JTZWxmQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EZXNjZW5kYW50T3JTZWxmQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDkwMjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRGVzY2VuZGFudE9yU2VsZkF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhlIGRlc2NlbmRhbnQtb3Itc2VsZiBheGlzIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBkZXNjZW5kYW50cyBvZgotICogdGhlIGNvbnRleHQgbm9kZS4KLSAqLwotLy8gbXVsdGlwbGUgaW5oZXJldGFuY2UgbWlnaHQgYmUgY29vbCBoZXJlID1ECi1wdWJsaWMgY2xhc3MgRGVzY2VuZGFudE9yU2VsZkF4aXMgZXh0ZW5kcyBGb3J3YXJkQXhpcyB7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb250ZXh0IG5vZGUgYW5kIHRoZSBjb250ZXh0IG5vZGUKLQkgKiBpdHNlbGYuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSB0eXBlIG9mIG5vZGUuCi0JICovCi0JcHVibGljIHZvaWQgaXRlcmF0ZShOb2RlVHlwZSBub2RlLCBSZXN1bHRCdWZmZXIgcnMsIE5vZGUgbGltaXROb2RlKSB7Ci0KLQkJLy8gYWRkIHNlbGYKLQkJcnMuYWRkKG5vZGUpOwotCi0JCS8vIGFkZCBkZXNjZW5kYW50cwotCQluZXcgRGVzY2VuZGFudEF4aXMoKS5pdGVyYXRlKG5vZGUsIHJzLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAiZGVzY2VuZGFudC1vci1zZWxmIjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0R5bmFtaWNDb250ZXh0QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9EeW5hbWljQ29udGV4dEFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlYzYzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0R5bmFtaWNDb250ZXh0QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkNvbGxhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5GbkNvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkRvY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBEeW5hbWljQ29udGV4dEFkYXB0ZXIgaW1wbGVtZW50cwotCQlvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQgewotCXByaXZhdGUgZmluYWwgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0IGRjOwotCXByaXZhdGUgU3RhdGljQ29udGV4dEFkYXB0ZXIgc2NhOwotCi0JcHVibGljIER5bmFtaWNDb250ZXh0QWRhcHRlcigKLQkJCW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljQ29udGV4dCBkYykgewotCQl0aGlzLmRjID0gZGM7Ci0JCXRoaXMuc2NhID0gbmV3IFN0YXRpY0NvbnRleHRBZGFwdGVyKGRjKTsKLQl9Ci0KLQlwdWJsaWMgTm9kZSBnZXRMaW1pdE5vZGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBnZXRWYXJpYWJsZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIG5hbWUpIHsKLQkJT2JqZWN0IHZhciA9IGRjLmdldF92YXJpYWJsZShuZXcgUU5hbWUobmFtZSkpOwotCQlpZiAodmFyID09IG51bGwpIHJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCWlmICh2YXIgaW5zdGFuY2VvZiBSZXN1bHRTZXF1ZW5jZSkgcmV0dXJuIChSZXN1bHRTZXF1ZW5jZSl2YXI7Ci0JCXJldHVybiBSZXN1bHRCdWZmZXIud3JhcCgoSXRlbSl2YXIpOwotCX0KLQotCXB1YmxpYyBVUkkgcmVzb2x2ZVVyaShTdHJpbmcgdXJpKSB7Ci0JCXJldHVybiBkYy5yZXNvbHZlX3VyaSh1cmkpOwotCX0KLQotCXB1YmxpYyBHcmVnb3JpYW5DYWxlbmRhciBnZXRDdXJyZW50RGF0ZVRpbWUoKSB7Ci0JCXJldHVybiBkYy5jdXJyZW50X2RhdGVfdGltZSgpOwotCX0KLQotCXB1YmxpYyBEdXJhdGlvbiBnZXRUaW1lem9uZU9mZnNldCgpIHsKLQkJWFNEdXJhdGlvbiB0eiA9IGRjLnR6KCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RHVyYXRpb24oISB0ei5uZWdhdGl2ZSgpLCAwLCAwLCAwLCB0ei5ob3VycygpLCB0ei5taW51dGVzKCksIDApOwotCQl9IGNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoVVJJIHVyaSkgewotCQlvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMgPSBkYy5nZXRfZG9jKHVyaSk7Ci0JCWlmIChycyA9PSBudWxsIHx8IHJzLmVtcHR5KCkpIHJldHVybiBudWxsOwotCQlyZXR1cm4gKChEb2NUeXBlKShycy5nZXQoMCkpKS52YWx1ZSgpOwotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gZ2V0Q29sbGVjdGlvbnMoKSB7Ci0JCXJldHVybiBkYy5nZXRfY29sbGVjdGlvbnMoKTsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxEb2N1bWVudD4gZ2V0RGVmYXVsdENvbGxlY3Rpb24oKSB7Ci0JCXJldHVybiBnZXRDb2xsZWN0aW9ucygpLmdldChGbkNvbGxlY3Rpb24uREVGQVVMVF9DT0xMRUNUSU9OX1VSSSk7Ci0JfQotCi0JcHVibGljIENvbGxhdGlvblByb3ZpZGVyIGdldENvbGxhdGlvblByb3ZpZGVyKCkgewotCQlyZXR1cm4gc2NhLmdldENvbGxhdGlvblByb3ZpZGVyKCk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2N1cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2N1cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmYwNTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9jdXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI4MTkzOCAtIGhhbmRsZSBtaXNzaW5nIGZvY3VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci0KLS8qKgotICogc2V0IHRoZSBmb2N1cyBmcm9tIGEgcmVzdWx0IHNlcXVlbmNlCi0gKi8KLXB1YmxpYyBjbGFzcyBGb2N1cyB7Ci0JcHJpdmF0ZSBpbnQgX2NwOyAvLyBjb250ZXh0IHBvc2l0aW9uCi0JcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgX3JzOyAvLyBhbGwgaXRlbXMgaW4gY29udGV4dAotCi0JLyoqCi0JICogU2V0cyB0aGUgX3JzIHRvIHJzIGFuZCBjb250ZXh0IHBvc2l0aW9uIHRvIDEuCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBpcyBhIFJlc3VsdFNlcXVlbmNlIGFuZCBpcyBzZXQgdG8gX3JzLgotCSAqLwotCXB1YmxpYyBGb2N1cyhSZXN1bHRTZXF1ZW5jZSBycykgewotCQlfcnMgPSByczsKLQkJX2NwID0gMTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgcHJldmlvdXMgaXRlbSBmcm9tIGN1cnJlbnQgY29udGV4dCBwb3NpdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBpdGVtIGZyb20gX3JzLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIGNvbnRleHQgaXRlbS4KLQkgKi8KLQlwdWJsaWMgQW55VHlwZSBjb250ZXh0X2l0ZW0oKSB7Ci0JCS8vIGlkZXhlcyBzdGFydCBhdCAwCi0JCWlmIChfY3AgPiBfcnMuc2l6ZSgpKSByZXR1cm4gbnVsbDsKLQkJcmV0dXJuIChBbnlUeXBlKV9ycy5pdGVtKF9jcCAtIDEpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyB0byBzZWUgaWYgcG9zc2libGUgdG8gYWR2YW5jZSBycy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBib29sZWFuLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGFkdmFuY2VfY3AoKSB7Ci0JCWludCBzaXplOwotCi0JCS8vIGNoZWNrIGlmIHdlIGNhbiBhZHZhbmNlCi0JCXNpemUgPSBfcnMuc2l6ZSgpOwotCQlpZiAoX2NwID09IHNpemUpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2NwKys7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIHJldHVybnMgYW4gaW50ZWdlciBvZiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHJzLgotCSAqLwotCXB1YmxpYyBpbnQgcG9zaXRpb24oKSB7Ci0JCXJldHVybiBfY3A7Ci0JfQotCi0JLyoqCi0JICogcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgaXRlbSBpbiBycy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzaXplIG9mIHJzLgotCSAqLwotCXB1YmxpYyBpbnQgbGFzdCgpIHsKLQkJcmV0dXJuIF9ycy5zaXplKCk7Ci0JfQotCi0JLyoqCi0JICogc2V0cyB0aGUgcG9zaXRpb24uCi0JICogCi0JICogQHBhcmFtIHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwb3NpdGlvbiB0aGF0IGlzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfcG9zaXRpb24oaW50IHApIHsKLQkJX2NwID0gcDsgLy8gWFhYIG5vIGNoZWNrcwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmM2FiNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdBeGlzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIHRoZSBmb2xsb3dpbmcgYXhpcyBjb250YWlucyB0aGUgY29udGV4dCBub2RlJ3MgZm9sbG93aW5nIHNpYmxpbmdzLCB0aG9zZQotICogY2hpbGRyZW4gb2YgdGhlIGNvbnRleHQgbm9kZSdzIHBhcmVudCB0aGF0IG9jY3VyIGFmdGVyIHRoZSBjb250ZXh0IG5vZGUgaW4KLSAqIGRvY3VtZW50IG9yZGVyLgotICovCi1wdWJsaWMgY2xhc3MgRm9sbG93aW5nQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgcmVzdWx0IG9mIEZvbGxvd2luZ0F4aXMgZXhwcmVzc2lvbgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgdHlwZSBvZiBub2RlLgotCSAqLwotCXB1YmxpYyB2b2lkIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgUmVzdWx0QnVmZmVyIHJlc3VsdCwgTm9kZSBsaW1pdE5vZGUpIHsKLQotCQkvLyBYWFggc2hvdWxkIGJlIHJvb3QuLi4gbm90IHBhcmVudCEhISByZWFkIHRoZSBzcGVjLi4uLiBCVUcgQlVHCi0JCS8vIEJVRyBMQU1FIExBTUUuLi4uCi0KLQkJaWYgKGxpbWl0Tm9kZSAhPSBudWxsICYmIGxpbWl0Tm9kZS5pc1NhbWVOb2RlKG5vZGUubm9kZV92YWx1ZSgpKSkgewotCQkJLy8gbm8gZnVydGhlciwgd2UgaGF2ZSByZWFjaGVkIHRoZSBsaW1pdCBub2RlCi0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCS8vIGdldCB0aGUgcGFyZW50Ci0JCU5vZGVUeXBlIHBhcmVudCA9IG51bGw7Ci0JCVJlc3VsdEJ1ZmZlciBwYXJlbnRCdWZmZXIgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCW5ldyBQYXJlbnRBeGlzKCkuaXRlcmF0ZShub2RlLCBwYXJlbnRCdWZmZXIsIGxpbWl0Tm9kZSk7Ci0JCWlmIChwYXJlbnRCdWZmZXIuc2l6ZSgpID09IDEpCi0JCQlwYXJlbnQgPSAoTm9kZVR5cGUpIHBhcmVudEJ1ZmZlci5pdGVtKDApOwotCi0JCS8vIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mIHRoaXMgbm9kZSwgYW5kIGFkZCB0aGVtCi0JCUZvbGxvd2luZ1NpYmxpbmdBeGlzIGZzYSA9IG5ldyBGb2xsb3dpbmdTaWJsaW5nQXhpcygpOwotCQlSZXN1bHRCdWZmZXIgc2libGluZ0J1ZmZlciA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJZnNhLml0ZXJhdGUobm9kZSwgc2libGluZ0J1ZmZlciwgbGltaXROb2RlKTsKLQotCQkvLyBmb3IgZWFjaCBzaWJsaW5nLCBnZXQgYWxsIGl0cyBkZXNjZW5kYW50cwotCQlEZXNjZW5kYW50QXhpcyBkYSA9IG5ldyBEZXNjZW5kYW50QXhpcygpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBzaWJsaW5nQnVmZmVyLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJcmVzdWx0LmFkZCgoTm9kZVR5cGUpaSk7Ci0JCQlkYS5pdGVyYXRlKChOb2RlVHlwZSkgaS5uZXh0KCksIHJlc3VsdCwgbnVsbCk7Ci0JCX0KLQotCQkvLyBpZiB3ZSBnb3QgYSBwYXJlbnQsIHdlIGdvdHRhIHJlcGVhdCB0aGUgc3RvcnkgZm9yIHRoZSBwYXJlbnQKLQkJLy8gYW5kIGFkZCB0aGUgcmVzdWx0cwotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCWl0ZXJhdGUocGFyZW50LCByZXN1bHQsIGxpbWl0Tm9kZSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIFN0cmluZyBuYW1lKCkgewotCQlyZXR1cm4gImZvbGxvd2luZyI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdTaWJsaW5nQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb2xsb3dpbmdTaWJsaW5nQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGIzNmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvRm9sbG93aW5nU2libGluZ0F4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhlIGZvbGxvd2luZy1zaWJsaW5nIGF4aXMgY29udGFpbnMgdGhlIGNvbnRleHQgbm9kZSdzIGZvbGxvd2luZyBzaWJsaW5ncywKLSAqIHRob3NlIGNoaWxkcmVuIG9mIHRoZSBjb250ZXh0IG5vZGUncyBwYXJlbnQgdGhhdCBvY2N1ciBhZnRlciB0aGUgY29udGV4dCBub2RlCi0gKiBpbiBkb2N1bWVudCBvcmRlcjsgaWYgdGhlIGNvbnRleHQgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgbm9kZW9yIG5hbWVzcGFjZSBub2RlLAotICogdGhlIGZvbGxvd2luZy1zaWJsaW5nIGF4aXMgaXMgZW1wdHkuCi0gKi8KLXB1YmxpYyBjbGFzcyBGb2xsb3dpbmdTaWJsaW5nQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgcmVzdWx0IG9mIEZvbGxvd2luZ1NpYmxpbmdBeGlzIGV4cHJlc3Npb24KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIHR5cGUgb2Ygbm9kZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciBjb3B5SW50bywgTm9kZSBsaW1pdE5vZGUpIHsKLQkJLy8gWFhYIGNoZWNrIGZvciBhdHRyaWJ1dGUgLyBuYW1lc3BhY2Ugbm9kZS4uLiBpZiBzbyByZXR1cm4KLQkJLy8gZW1wdHkgc2VxdWVuY2UKLQotCQlOb2RlIGl0ZXJOb2RlID0gbm9kZS5ub2RlX3ZhbHVlKCk7Ci0JCS8vIGdldCB0aGUgY2hpbGRyZW4gb2YgdGhlIHBhcmVudCBbc2libGluZ3NdCi0JCWRvIHsKLQkJCWl0ZXJOb2RlID0gaXRlck5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJCWlmIChpdGVyTm9kZSAhPSBudWxsKSB7Ci0JCQkJY29weUludG8uYWRkKE5vZGVUeXBlLmRvbV90b194cGF0aChpdGVyTm9kZSwgbm9kZS5nZXRUeXBlTW9kZWwoKSkpOwotCQkJfQotCQl9IHdoaWxlIChpdGVyTm9kZSAhPSBudWxsKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBuYW1lKCkgewotCQlyZXR1cm4gImZvbGxvd2luZy1zaWJsaW5nIjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvcndhcmRBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0ZvcndhcmRBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODY4MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Gb3J3YXJkQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLQotLyoqCi0gKiBBbiBheGlzIHRoYXQgb25seSBldmVyIGNvbnRhaW5zIHRoZSBjb250ZXh0IG5vZGUgb3Igbm9kZXMgdGhhdCBhcmUgYWZ0ZXIgdGhlCi0gKiBjb250ZXh0IG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIgaXMgYSBmb3J3YXJkIGF4aXMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb3J3YXJkQXhpcyBpbXBsZW1lbnRzIEF4aXMgewotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBuZXcgRWxlbWVudCBUeXBlCi0JICogCi0JICogQHJldHVybiBUaGUgZWxlbWVudCB0eXBlLgotCSAqLwotCS8vICJkZWZhdWx0IiB0eXBlIGlzIGVsZW1lbnQuLi4uCi0JLy8gcmVtZW1iZXIgdG8gb3ZlcnJpZGUgZm9yIGF0dHJpYnV0ZSBhbmQgbmFtZXNwY2UgYXhpcyB0aG8hCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKSB7Ci0JCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL0pGbGV4RXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvSkZsZXhFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzAxZjMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvSkZsZXhFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBKRmxleAotICovCi1wdWJsaWMgY2xhc3MgSkZsZXhFcnJvciBleHRlbmRzIFhQYXRoRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTcxNTQ3ODQ0ODI0MTc4MzMyOTdMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEpGbGV4IGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgSkZsZXhFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9Ob3JtYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL05vcm1hbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMxZTFmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL05vcm1hbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mdW5jdGlvbi5GbkZ1bmN0aW9uTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkFkZEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BbmRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQW55S2luZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5BdHRyaWJ1dGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQXhpc1N0ZXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5CaW5FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ2FzdEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DYXN0YWJsZUV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5DbXBFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ250eEl0ZW1FeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuQ29tbWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5EZWNpbWFsTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkRpdkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb2N1bWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Eb3VibGVMaXRlcmFsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRWxlbWVudFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5FeGNlcHRFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkZpbHRlckV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Gb3JFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuRm9yd2FyZFN0ZXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5GdW5jdGlvbkNhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JRGl2RXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LklmRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lkluc3RPZkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JbnRlZ2VyTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LkludGVyc2VjdEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5JdGVtVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1pbnVzRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk1vZEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5NdWxFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuTmFtZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5Ob2RlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0Lk9yRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBJVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBhckV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5QaXBlRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlBsdXNFeHByOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuUHJpbWFyeUV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5RdWFudGlmaWVkRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJhbmdlRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlJldmVyc2VTdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU2NoZW1hQXR0clRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TY2hlbWFFbGVtVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNpbmdsZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdGVwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3RlcEV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5TdHJpbmdMaXRlcmFsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuU3ViRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlRleHRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuVHJlYXRBc0V4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5VbmlvbkV4cHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5WYXJFeHByUGFpcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlZhclJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoRXhwcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlhQYXRoVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uT3BGdW5jdGlvbkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIE5vcm1hbGl6ZXIgdGhhdCB1c2VzIFhQYXRoVmlzaXRvci4KLSAqLwotLy8gWFhYIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGFueW1vcmUhCi1wdWJsaWMgY2xhc3MgTm9ybWFsaXplciBpbXBsZW1lbnRzIFhQYXRoVmlzaXRvciB7Ci0KLQlwcml2YXRlIFN0YXRpY0NvbnRleHQgX3NjOwotCi0JLyoqCi0JICogU3RhdGljIENvbnRleHQgaXMgc2V0IHRvIHNjCi0JICogCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBpcyB0aGUgU3RhdGljQ29udGV4dC4KLQkgKi8KLQlwdWJsaWMgTm9ybWFsaXplcihTdGF0aWNDb250ZXh0IHNjKSB7Ci0JCV9zYyA9IHNjOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdHJlZQotCSAqIAotCSAqIEBwYXJhbSB4cAotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoIGV4cHJlc3Npb24uCi0JICogQHJldHVybiB0aGUgeHBhdGggZXhwcmVzc2lvbnMuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aCB4cCkgewotCQlDb2xsZWN0aW9uIGV4cHJzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IHhwLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJRXhwciBlID0gKEV4cHIpIGkubmV4dCgpOwotCi0JCQlFeHByIG4gPSAoRXhwcikgZS5hY2NlcHQodGhpcyk7Ci0KLQkJCWV4cHJzLmFkZChuKTsKLQkJfQotCi0JCXJldHVybiBuZXcgWFBhdGgoZXhwcnMpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludFZhckV4cHJQYWlycyhJdGVyYXRvciBpKSB7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJVmFyRXhwclBhaXIgcGFpciA9IChWYXJFeHByUGFpcikgaS5uZXh0KCk7Ci0KLQkJCVFOYW1lIHZhciA9IHBhaXIudmFybmFtZSgpOwotCQkJRXhwciBlID0gcGFpci5leHByKCk7Ci0KLQkJCWUuYWNjZXB0KHRoaXMpOwotCQl9Ci0JfQotCi0JLy8gZG9lcyBhIGZvciBhbmQgYSBxdWFudGlmaWVkIGV4cHJlc3Npb24KLQkvLyB0YWtlcyB0aGUgaXRlcmF0b3IgZm9yIHZhciBleHByIHBhcmlzCi0JcHJpdmF0ZSB2b2lkIGRvRm9yRXhwcihJdGVyYXRvciBpdGVyLCBFeHByIGV4cHIpIHsKLQkJQ29sbGVjdGlvbiB2YXJzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCS8vIGdvIHRocm91Z2ggZXhwcmVzc2lvbiBhbmQgY2FjaGUgdmFyaWFibGVzCi0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJVmFyRXhwclBhaXIgcGFpciA9IChWYXJFeHByUGFpcikgaXRlci5uZXh0KCk7Ci0KLQkJCVFOYW1lIHZhciA9IHBhaXIudmFybmFtZSgpOwotCQkJRXhwciBlID0gcGFpci5leHByKCk7Ci0KLQkJCS8vIFhYWCB0aGlzIGlzIHdyb25nIQotCQkJLy8gbmVlZCB0byBkZWZpbmUgbmV3IHNjb3BlLCBhbmQgcmVmZXJlbmNlICJpbm5lciBzY29wZSIKLQkJCS8vIFtzaGFkb3cgb3V0ZXIgdmFyc10KLQkJCS8qCi0JCQkgKiBpZihfc2MudmFyaWFibGVfZXhpc3RzKHZhcikpIHJlcG9ydF9lcnJvcihuZXcKLQkJCSAqIFN0YXRpY05hbWVFcnJvcigiVmFyaWFibGUgIiArIHZhci5zdHJpbmcoKSArCi0JCQkgKiAiIGFscmVhZHkgZGVmaW5lZCIpKTsKLQkJCSAqLwotCQkJLy8gb2sgd2UgY2FuIGNoZWF0IGhlcmUgY3V6IHdlIG9ubHkgY2FyZSBhYm91dCB2YXJpYWJsZQotCQkJLy8gInByZXNlbmNlIiBub3QgaXRzIHNwZWNpZmljIGluc3RhbmNlIC8gdmFsdWUgc28gd2UKLQkJCS8vIGNhbiBmYWtlbHkgc2hhZG93IHdpdGhvdXQgY3JlYXRpbmcgZXhwbGljaXQgc2NvcGVzCi0JCQkvLyBpZiB2YXJpYWJsZSBhbHJlYWR5IGV4aXN0cy4uLi4gdGhlbiBsZWF2ZSBpdCB0aGVyZS4uLgotCQkJLy8gW3dlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBhbmQgZGVsZXRlCi0JCQkvLyBpdCBhdCB0aGUgZW5kXQotCQkJLy8gd2Ugb25seSBuZWVkIHRvIGlmIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0Ci0JCQkvLyBYWFg6IGkgZmluayB0aGlzIGlzIGFsbCB3cm9uZwotCQkJdmFycy5hZGQodmFyKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0JCX0KLQotCQkvLyBhZGQgdmFyaWFibGVzIHRvIHNjb3BlCi0JCWZvciAoSXRlcmF0b3IgaSA9IHZhcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlRTmFtZSB2YXIgPSAoUU5hbWUpIGkubmV4dCgpOwotCQl9Ci0KLQkJLy8gZG8gdGhlIGJvdW5kZWQgZXhwcmVzc2lvbgotCQlleHByLmFjY2VwdCh0aGlzKTsKLQotCQkvLyByZW1vdmUgdmFyaWFibGVzCi0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGZleAotCSAqICAgICAgICAgICAgaXMgdGhlIEZvciBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gZmV4IGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3JFeHByIGZleCkgewotCQlGb3JFeHByIGxhc3QgPSBmZXg7Ci0JCUV4cHIgcmV0ID0gZmV4LmV4cHIoKTsKLQkJaW50IGRlcHRoID0gMDsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBmZXguaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlWYXJFeHByUGFpciB2ZSA9IChWYXJFeHByUGFpcikgaS5uZXh0KCk7Ci0KLQkJCS8vIG9rIHdlIGdvdCBuZXN0ZWQgZm9ycy4uLgotCQkJaWYgKGRlcHRoID4gMCkgewotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJcGFpcnMuYWRkKHZlKTsKLQotCQkJCUZvckV4cHIgZmUgPSBuZXcgRm9yRXhwcihwYWlycywgcmV0KTsKLQkJCQlsYXN0LnNldF9leHByKGZlKTsKLQotCQkJCWxhc3QgPSBmZTsKLQkJCX0KLQotCQkJZGVwdGgrKzsKLQkJfQotCi0JCS8vIG5vcm1hbGl6ZSByZXR1cm4gdmFsdWUsIGFuZCBzZXQgaXQgdG8gdGhlIGxhc3QgZm9yIGV4cHIKLQkJcmV0LmFjY2VwdCh0aGlzKTsKLQotCQkvLyBnZXQgcmlkIG9mIHRoZSBwYWlycyBpbiB0aGUgcGFyZW50IChvcmlnaW5hbCkgZm9yCi0JCWlmIChkZXB0aCA+IDEpCi0JCQlmZXgudHJ1bmNhdGVfcGFpcnMoKTsKLQotCQlyZXR1cm4gZmV4OwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBxZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBRdWFudGlmaWVkIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBxZXggZXhwcmVzc2lvbi4KLQkgKi8KLQkvLyBYWFg6IGNvZGUgZHVwbGljYXRpb24KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFF1YW50aWZpZWRFeHByIHFleCkgewotCQlRdWFudGlmaWVkRXhwciBsYXN0ID0gcWV4OwotCQlFeHByIHJldCA9IHFleC5leHByKCk7Ci0JCWludCBkZXB0aCA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gcWV4Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJVmFyRXhwclBhaXIgdmUgPSAoVmFyRXhwclBhaXIpIGkubmV4dCgpOwotCi0JCQkvLyBvayB3ZSBnb3QgbmVzdGVkIGZvcnMuLi4KLQkJCWlmIChkZXB0aCA+IDApIHsKLQkJCQlDb2xsZWN0aW9uIHBhaXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCXBhaXJzLmFkZCh2ZSk7Ci0KLQkJCQlRdWFudGlmaWVkRXhwciBxZSA9IG5ldyBRdWFudGlmaWVkRXhwcihxZXgudHlwZSgpLCBwYWlycywgcmV0KTsKLQkJCQlsYXN0LnNldF9leHByKHFlKTsKLQotCQkJCWxhc3QgPSBxZTsKLQkJCX0KLQotCQkJZGVwdGgrKzsKLQkJfQotCi0JCS8vIG5vcm1hbGl6ZSByZXR1cm4gdmFsdWUsIGFuZCBzZXQgaXQgdG8gdGhlIGxhc3QgZm9yIGV4cHIKLQkJcmV0LmFjY2VwdCh0aGlzKTsKLQotCQkvLyBnZXQgcmlkIG9mIHRoZSBwYWlycyBpbiB0aGUgcGFyZW50IChvcmlnaW5hbCkgZm9yCi0JCWlmIChkZXB0aCA+IDEpCi0JCQlxZXgudHJ1bmNhdGVfcGFpcnMoKTsKLQotCQlyZXR1cm4gcWV4OwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RXhwcnMoSXRlcmF0b3IgaSkgewotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUV4cHIgZSA9IChFeHByKSBpLm5leHQoKTsKLQotCQkJZS5hY2NlcHQodGhpcyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gaWZleAotCSAqICAgICAgICAgICAgaXMgdGhlICdpZicgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGlmZXggZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElmRXhwciBpZmV4KSB7Ci0KLQkJcHJpbnRFeHBycyhpZmV4Lml0ZXJhdG9yKCkpOwotCi0JCWlmZXgudGhlbl9jbGF1c2UoKS5hY2NlcHQodGhpcyk7Ci0KLQkJaWZleC5lbHNlX2NsYXVzZSgpLmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gaWZleDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgb2YgYmluYXJ5IGV4cHJlc3Npb24uCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBiaW5hcnkgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBwcmludEJpbkV4cHIoU3RyaW5nIG5hbWUsIEJpbkV4cHIgZSkgewotCQllLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0JCWUucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0JfQotCi0JcHJpdmF0ZSBCaW5FeHByIG1ha2VfbG9naWNfZXhwcihCaW5FeHByIGUpIHsKLQkJQ29sbGVjdGlvbiBub3JtYWxpemVkID0gbm9ybWFsaXplX2Jpbl9hcmdzKGUpOwotCi0JCVhQYXRoTm9kZSBub3JfYXJyW10gPSBuZXcgWFBhdGhOb2RlWzJdOwotCQlpbnQgaiA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gbm9ybWFsaXplZC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCW5vcl9hcnJbal0gPSAoWFBhdGhOb2RlKSBpLm5leHQoKTsKLQkJCWorKzsKLQkJfQotCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQobm9yX2FyclswXSk7Ci0JCWUuc2V0X2xlZnQobWFrZV9mdW5jdGlvbihuZXcgUU5hbWUoImZuIiwgImJvb2xlYW4iLAotCQkJCUZuRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX0ZVTkNUSU9OU19OUyksIGFyZ3MpKTsKLQotCQlhcmdzLmNsZWFyKCk7Ci0JCWFyZ3MuYWRkKG5vcl9hcnJbMV0pOwotCQllLnNldF9yaWdodChtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgiZm4iLCAiYm9vbGVhbiIsCi0JCQkJRm5GdW5jdGlvbkxpYnJhcnkuWFBBVEhfRlVOQ1RJT05TX05TKSwgYXJncykpOwotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvcmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgJ29yJyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbWFrZSBsb2dpYyBleHByKG9yZXgpLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoT3JFeHByIG9yZXgpIHsKLQkJcmV0dXJuIG1ha2VfbG9naWNfZXhwcihvcmV4KTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYW5kZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSAnYW5kJyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbWFrZSBsb2dpYyBleHByKGFuZGV4KS4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFuZEV4cHIgYW5kZXgpIHsKLQkJcmV0dXJuIG1ha2VfbG9naWNfZXhwcihhbmRleCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNtcGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgY29tcGFyZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gY21wZXguCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbXBFeHByIGNtcGV4KSB7Ci0JCXN3aXRjaCAoY21wZXgudHlwZSgpKSB7Ci0JCWNhc2UgQ21wRXhwci5FUToKLQkJCXJldHVybiBtYWtlX0NtcE9wKGNtcGV4LCBuZXcgUU5hbWUoImZzIiwgImVxIiwKLQkJCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQotCQljYXNlIENtcEV4cHIuTkU6Ci0JCQlyZXR1cm4gbWFrZV9DbXBPcChjbXBleCwgbmV3IFFOYW1lKCJmcyIsICJuZSIsCi0JCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0KLQkJY2FzZSBDbXBFeHByLkxUOgotCQkJcmV0dXJuIG1ha2VfQ21wT3AoY21wZXgsIG5ldyBRTmFtZSgiZnMiLCAibHQiLAotCQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCi0JCWNhc2UgQ21wRXhwci5HVDoKLQkJCXJldHVybiBtYWtlX0NtcE9wKGNtcGV4LCBuZXcgUU5hbWUoImZzIiwgImd0IiwKLQkJCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQotCQljYXNlIENtcEV4cHIuTEU6Ci0JCQlyZXR1cm4gbWFrZV9DbXBPcChjbXBleCwgbmV3IFFOYW1lKCJmcyIsICJsZSIsCi0JCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0KLQkJY2FzZSBDbXBFeHByLkdFOgotCQkJcmV0dXJuIG1ha2VfQ21wT3AoY21wZXgsIG5ldyBRTmFtZSgiZnMiLCAiZ2UiLAotCQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCi0JCQkvLyBYWFggZG9uJ3QgaGF2ZSBmdW5jdHMhCi0JCWNhc2UgQ21wRXhwci5JUzoKLQkJCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAibm9kZS1lcXVhbCIpLAotCQkJCQlub3JtYWxpemVfYmluX2FyZ3MoY21wZXgpKTsKLQotCQljYXNlIENtcEV4cHIuTEVTU19MRVNTOgotCQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJub2RlLWJlZm9yZSIpLAotCQkJCQlub3JtYWxpemVfYmluX2FyZ3MoY21wZXgpKTsKLQotCQljYXNlIENtcEV4cHIuR1JFQVRFUl9HUkVBVEVSOgotCQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJub2RlLWFmdGVyIiksCi0JCQkJCW5vcm1hbGl6ZV9iaW5fYXJncyhjbXBleCkpOwotCQl9Ci0KLQkJcHJpbnRCaW5FeHByKCJDTVAiICsgY21wZXgudHlwZSgpLCBjbXBleCk7Ci0JCXJldHVybiBjbXBleDsKLQl9Ci0KLQlwcml2YXRlIENvbGxlY3Rpb24gbm9ybWFsaXplX2Jpbl9hcmdzKEJpbkV4cHIgZSkgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJWFBhdGhOb2RlIGxlZnQgPSAoWFBhdGhOb2RlKSBlLmxlZnQoKS5hY2NlcHQodGhpcyk7Ci0JCVhQYXRoTm9kZSByaWdodCA9IChYUGF0aE5vZGUpIGUucmlnaHQoKS5hY2NlcHQodGhpcyk7Ci0KLQkJYXJncy5hZGQobGVmdCk7Ci0JCWFyZ3MuYWRkKHJpZ2h0KTsKLQotCQlyZXR1cm4gYXJnczsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcmV4Ci0JICogICAgICAgICAgICBpcyB0aGUgcmFuZ2UgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUmFuZ2VFeHByIHJleCkgewotCQlDb2xsZWN0aW9uIGFyZ3MgPSBub3JtYWxpemVfYmluX2FyZ3MocmV4KTsKLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJ0byIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpLCBhcmdzKTsKLQl9Ci0KLQlwcml2YXRlIFhQYXRoRXhwciBtYWtlX3hwYXRoZXhwcihQcmltYXJ5RXhwciBwZXgpIHsKLQkJRmlsdGVyRXhwciBmZSA9IG5ldyBGaWx0ZXJFeHByKHBleCwgbmV3IEFycmF5TGlzdCgpKTsKLQkJcmV0dXJuIG5ldyBYUGF0aEV4cHIoMCwgZmUpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfaW50X2xpdChpbnQgaSkgewotCQlJbnRlZ2VyTGl0ZXJhbCBpbCA9IG5ldyBJbnRlZ2VyTGl0ZXJhbChCaWdJbnRlZ2VyLnZhbHVlT2YoaSkpOwotCQlyZXR1cm4gbWFrZV94cGF0aGV4cHIoaWwpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2Vfc3RyaW5nX2xpdChTdHJpbmcgcykgewotCQlTdHJpbmdMaXRlcmFsIHNsID0gbmV3IFN0cmluZ0xpdGVyYWwocyk7Ci0JCXJldHVybiBtYWtlX3hwYXRoZXhwcihzbCk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9jb252ZXJ0X29wZXJhbmQoWFBhdGhFeHByIGFyZzEsIFhQYXRoRXhwciBhcmcyKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQoYXJnMSk7Ci0JCWFyZ3MuYWRkKGFyZzIpOwotCi0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgiZnMiLCAiY29udmVydC1vcGVyYW5kIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUyksIGFyZ3MpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfZG91YmxlX2xpdChkb3VibGUgZCkgewotCQlEb3VibGVMaXRlcmFsIGRsID0gbmV3IERvdWJsZUxpdGVyYWwoZCk7Ci0JCXJldHVybiBtYWtlX3hwYXRoZXhwcihkbCk7Ci0JfQotCi0JLy8gZnM6Zm5hbWUoIGZzOmNvbnZlcnQtb3BlcmFuZCggZm46ZGF0YShBUkcxKSwgMS4wRTAgKSwKLQkvLyBmczpjb252ZXJ0LW9wZXJhbmQoIGZuOmRhdGEoQVJHMiksIDEuMEUwICkKLQkvLyApCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9jb252ZXJ0X2Jpbm9wKEJpbkV4cHIgZSwgWFBhdGhFeHByIGNvbnZhcmcsCi0JCQlRTmFtZSBuYW1lKSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5vcm1hbGl6ZV9iaW5fYXJncyhlKTsKLQkJWFBhdGhFeHByIGFyZ3NfYXJyW10gPSBuZXcgWFBhdGhFeHByWzJdOwotCQlpbnQgaiA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWFyZ3NfYXJyW2pdID0gKFhQYXRoRXhwcikgaS5uZXh0KCk7Ci0JCQlqKys7Ci0JCX0KLQotCQlDb2xsZWN0aW9uIGFyZ3NmbmFtZSA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewotCQkJWFBhdGhFeHByIGFyZyA9IG1ha2VfY29udmVydF9vcGVyYW5kKGFyZ3NfYXJyW2pdLCBjb252YXJnKTsKLQkJCWFyZ3NmbmFtZS5hZGQoYXJnKTsKLQkJfQotCQlyZXR1cm4gbWFrZV9mdW5jdGlvbihuYW1lLCBhcmdzZm5hbWUpOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfQXJpdGhPcChCaW5FeHByIGUsIFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIG1ha2VfY29udmVydF9iaW5vcChlLCBtYWtlX2RvdWJsZV9saXQoMS4wKSwgbmFtZSk7Ci0JfQotCi0JLy8gZnM6Zm5hbWUoIGZzOmNvbnZlcnRfb3BlcmFuZCggZm46ZGF0YShBUkcxKSwgInN0cmluZyIpLAotCS8vIGZzOmNvbnZlcnRfb3BlcmFuZCggZm46ZGF0YShBUkcyKSwgInN0cmluZyIpCi0JLy8gKQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfQ21wT3AoQmluRXhwciBlLCBRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBtYWtlX2NvbnZlcnRfYmlub3AoZSwgbWFrZV9zdHJpbmdfbGl0KCJzdHJpbmciKSwgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGFkZGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgYWRkIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFkZEV4cHIgYWRkZXgpIHsKLQkJcmV0dXJuIG1ha2VfQXJpdGhPcChhZGRleCwgbmV3IFFOYW1lKCJmcyIsICJwbHVzIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdWJleAotCSAqICAgICAgICAgICAgaXMgdGhlIHN1YiBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gYSBuZXcgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdWJFeHByIHN1YmV4KSB7Ci0JCXJldHVybiBtYWtlX0FyaXRoT3Aoc3ViZXgsIG5ldyBRTmFtZSgiZnMiLCAibWludXMiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgbXVsdGlwbHkgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTXVsRXhwciBtdWxleCkgewotCQlyZXR1cm4gbWFrZV9Bcml0aE9wKG11bGV4LCBuZXcgUU5hbWUoImZzIiwgInRpbWVzIiwKLQkJCQlPcEZ1bmN0aW9uTGlicmFyeS5YUEFUSF9PUF9OUykpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBtdWxleAotCSAqICAgICAgICAgICAgaXMgdGhlIGRpdmlzaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERpdkV4cHIgbXVsZXgpIHsKLQkJcmV0dXJuIG1ha2VfQXJpdGhPcChtdWxleCwgbmV3IFFOYW1lKCJmcyIsICJkaXYiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG11bGV4Ci0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBkaXZpc2lvbiBleHByZXNzaW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYW4KLQkgKiAgICAgICAgICAgIGludGVnZXIuCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQkvLyBYWFg6IGludGVnZXIgY2FzdCEKLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElEaXZFeHByIG11bGV4KSB7Ci0JCXJldHVybiBtYWtlX0FyaXRoT3AobXVsZXgsIG5ldyBRTmFtZSgiZnMiLCAiaWRpdiIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbXVsZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBtb2QgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgbmV3IGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTW9kRXhwciBtdWxleCkgewotCQlyZXR1cm4gbWFrZV9Bcml0aE9wKG11bGV4LCBuZXcgUU5hbWUoImZzIiwgIm1vZCIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdW5leAotCSAqICAgICAgICAgICAgaXMgdGhlIHVuaW9uIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFVuaW9uRXhwciB1bmV4KSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5vcm1hbGl6ZV9iaW5fYXJncyh1bmV4KTsKLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJ1bmlvbiIsCi0JCQkJT3BGdW5jdGlvbkxpYnJhcnkuWFBBVEhfT1BfTlMpLCBhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcGlwZXgKLQkgKiAgICAgICAgICAgIGlzIHRoZSBwaXBlIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBpcGVFeHByIHBpcGV4KSB7Ci0JCUNvbGxlY3Rpb24gYXJncyA9IG5vcm1hbGl6ZV9iaW5fYXJncyhwaXBleCk7Ci0JCXJldHVybiBtYWtlX2Z1bmN0aW9uKG5ldyBRTmFtZSgib3AiLCAidW5pb24iLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSwgYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGlleHByCi0JICogICAgICAgICAgICBpcyB0aGUgaW50ZXJzZWN0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEludGVyc2VjdEV4cHIgaWV4cHIpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbm9ybWFsaXplX2Jpbl9hcmdzKGlleHByKTsKLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJpbnRlcnNlY3QiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSwgYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGVleHByCi0JICogICAgICAgICAgICBpcyB0aGUgZXhjZXB0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEV4Y2VwdEV4cHIgZWV4cHIpIHsKLQkJQ29sbGVjdGlvbiBhcmdzID0gbm9ybWFsaXplX2Jpbl9hcmdzKGVleHByKTsKLQkJcmV0dXJuIG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJvcCIsICJleGNlcHQiLAotCQkJCU9wRnVuY3Rpb25MaWJyYXJ5LlhQQVRIX09QX05TKSwgYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGlvZXhwCi0JICogICAgICAgICAgICBpcyB0aGUgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbi4KLQkgKiBAcmV0dXJuIGEgaW9leHAuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnN0T2ZFeHByIGlvZXhwKSB7Ci0JCXByaW50QmluRXhwcigiSU5TVEFOQ0VPRiIsIGlvZXhwKTsKLQkJcmV0dXJuIGlvZXhwOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0YWV4cAotCSAqICAgICAgICAgICAgaXMgdGhlIHRyZWF0IGFzIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBhIHRhZXhwLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVHJlYXRBc0V4cHIgdGFleHApIHsKLQkJcHJpbnRCaW5FeHByKCJUUkVBVEFTIiwgdGFleHApOwotCQlyZXR1cm4gdGFleHA7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjYXN0YWJsZSBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gY2V4cC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENhc3RhYmxlRXhwciBjZXhwKSB7Ci0JCXByaW50QmluRXhwcigiQ0FTVEFCTEUiLCBjZXhwKTsKLQkJcmV0dXJuIGNleHA7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNleHAKLQkgKiAgICAgICAgICAgIGlzIHRoZSBjYXN0IGV4cHJlc3Npb24uCi0JICogQHJldHVybiBjZXhwLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdEV4cHIgY2V4cCkgewotCQlwcmludEJpbkV4cHIoIkNBU1QiLCBjZXhwKTsKLQkJcmV0dXJuIGNleHA7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBuYW1lLgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgVW4gRXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBwcmludFVuRXhwcihTdHJpbmcgbmFtZSwgVW5FeHByIGUpIHsKLQkJZS5hcmcoKS5hY2NlcHQodGhpcyk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIG1pbnVzIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBuZXcgc3ViIGV4cHJlc3Npb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1pbnVzRXhwciBlKSB7Ci0JCVN1YkV4cHIgc2UgPSBuZXcgU3ViRXhwcihtYWtlX2ludF9saXQoMCksIGUuYXJnKCkpOwotCQlyZXR1cm4gc2UuYWNjZXB0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgcGx1cyBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gbmV3IGFkZCBleHByZXNzaW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQbHVzRXhwciBlKSB7Ci0JCUFkZEV4cHIgYWUgPSBuZXcgQWRkRXhwcihtYWtlX2ludF9saXQoMCksIGUuYXJnKCkpOwotCi0JCXJldHVybiBhZS5hY2NlcHQodGhpcyk7Ci0JfQotCi0JcHJpdmF0ZSBYUGF0aEV4cHIgbWFrZV9mdW5jdGlvbihRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpIHsKLQotCQlGdW5jdGlvbkNhbGwgZmMgPSBuZXcgRnVuY3Rpb25DYWxsKG5hbWUsIGFyZ3MpOwotCQlGaWx0ZXJFeHByIGZlID0gbmV3IEZpbHRlckV4cHIoZmMsIG5ldyBBcnJheUxpc3QoKSk7Ci0JCXJldHVybiBuZXcgWFBhdGhFeHByKDAsIGZlKTsKLQotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2Vfcm9vdF9zZWxmX25vZGUoKSB7Ci0KLQkJLy8gc2VsZjo6bm9kZSgpCi0JCVN0ZXAgc2VsZl9ub2RlID0gbmV3IEZvcndhcmRTdGVwKEZvcndhcmRTdGVwLlNFTEYsIG5ldyBBbnlLaW5kVGVzdCgpKTsKLQkJU3RlcEV4cHIgc2VsZl9ub2RlX2V4cHIgPSBuZXcgQXhpc1N0ZXAoc2VsZl9ub2RlLCBuZXcgQXJyYXlMaXN0KCkpOwotCQlYUGF0aEV4cHIgc2VsZl9ub2RlX3hwYXRoID0gbmV3IFhQYXRoRXhwcigwLCBzZWxmX25vZGVfZXhwcik7Ci0KLQkJLy8gZm46cm9vdChzZWxmOjpub2RlKCkpCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQoc2VsZl9ub2RlX3hwYXRoKTsKLQkJWFBhdGhFeHByIHhwZSA9IG1ha2VfZnVuY3Rpb24obmV3IFFOYW1lKCJmbiIsICJyb290IiwKLQkJCQlGbkZ1bmN0aW9uTGlicmFyeS5YUEFUSF9GVU5DVElPTlNfTlMpLCBhcmdzKTsKLQotCQlyZXR1cm4geHBlOwotCX0KLQotCXByaXZhdGUgWFBhdGhFeHByIG1ha2VfZGVzY2VuZGFudF9vcl9zZWxmKCkgewotCQlTdGVwIGRlc2Nfc2VsZl9ub2RlID0gbmV3IEZvcndhcmRTdGVwKEZvcndhcmRTdGVwLkRFU0NFTkRBTlRfT1JfU0VMRiwKLQkJCQluZXcgQW55S2luZFRlc3QoKSk7Ci0JCVN0ZXBFeHByIHNlID0gbmV3IEF4aXNTdGVwKGRlc2Nfc2VsZl9ub2RlLCBuZXcgQXJyYXlMaXN0KCkpOwotCi0JCXJldHVybiBuZXcgWFBhdGhFeHByKDAsIHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHhwYXRoIGV4cHJlc3Npb24uCi0JICogQHJldHVybiByZXN1bHQuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSkgewotCQlYUGF0aEV4cHIgeHAgPSBlOwotCQlpbnQgZGVwdGggPSAwOyAvLyBpbmRpY2F0ZXMgaG93IG1hbnkgLyB3ZSB0cmF2ZXJzZWQKLQkJWFBhdGhFeHByIHJlc3VsdCA9IGU7Ci0KLQkJd2hpbGUgKHhwICE9IG51bGwpIHsKLQkJCWludCBzbGFzaGVzID0geHAuc2xhc2hlcygpOwotCQkJU3RlcEV4cHIgc2UgPSB4cC5leHByKCk7Ci0KLQkJCWlmIChzbGFzaGVzID09IDEpIHsKLQkJCQkvLyB0aGlzIGlzIGEgc2luZ2xlIHNsYXNoIGFuZCBub3RoaW5nIGVsc2UuLi4KLQkJCQlpZiAoc2UgPT0gbnVsbCkKLQkJCQkJcmV0dXJuIG1ha2Vfcm9vdF9zZWxmX25vZGUoKTsKLQotCQkJCS8vIC9SZWxhdGl2ZVBhdGhFeHByCi0JCQkJaWYgKGRlcHRoID09IDApIHsKLQkJCQkJWFBhdGhFeHByIHhwZSA9IG1ha2Vfcm9vdF9zZWxmX25vZGUoKTsKLQkJCQkJeHBlLnNldF9uZXh0KGUpOwotCi0JCQkJCXJlc3VsdCA9IHhwZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChzbGFzaGVzID09IDIpIHsKLQkJCQkvLyAvL1JlbGF0aXZlUGF0aEV4cHIKLQkJCQlpZiAoZGVwdGggPT0gMCkgewotCQkJCQlYUGF0aEV4cHIgZGVzYyA9IG1ha2VfZGVzY2VuZGFudF9vcl9zZWxmKCk7Ci0JCQkJCWRlc2Muc2V0X3NsYXNoZXMoMSk7Ci0JCQkJCWUuc2V0X3NsYXNoZXMoMSk7Ci0JCQkJCWRlc2Muc2V0X25leHQoZSk7Ci0KLQkJCQkJWFBhdGhFeHByIHJvb3Rfc2VsZiA9IG1ha2Vfcm9vdF9zZWxmX25vZGUoKTsKLQkJCQkJcm9vdF9zZWxmLnNldF9uZXh0KGRlc2MpOwotCQkJCQlyZXR1cm4gcm9vdF9zZWxmOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKHNlICE9IG51bGwpCi0JCQkJc2UuYWNjZXB0KHRoaXMpOwotCi0JCQlYUGF0aEV4cHIgbmV4dCA9IHhwLm5leHQoKTsKLQotCQkJLy8gcGVlayBpZiB0aGUgbmV4dCBndXkgd2lsbCBoYXZlIDIgc2xhc2hlcy4uLgotCQkJaWYgKG5leHQgIT0gbnVsbCkgewotCQkJCS8vIFN0ZXBFeHByLy9TdGVwRXhwcgotCQkJCWlmIChuZXh0LnNsYXNoZXMoKSA9PSAyKSB7Ci0JCQkJCS8vIGNyZWF0ZSB0aGUgbm9kZSB0byBzdGljayBiZXR3ZWVuIHRoZQotCQkJCQkvLyBzbGFzaGVzCi0JCQkJCVhQYXRoRXhwciBkZXNjID0gbWFrZV9kZXNjZW5kYW50X29yX3NlbGYoKTsKLQkJCQkJZGVzYy5zZXRfc2xhc2hlcygxKTsKLQotCQkJCQkvLyBjdXJyZW50IG5vZGUgLyBkZXNjIC8gbmV4dAotCQkJCQl4cC5zZXRfbmV4dChkZXNjKTsKLQkJCQkJZGVzYy5zZXRfbmV4dChuZXh0KTsKLQkJCQkJbmV4dC5zZXRfc2xhc2hlcygxKTsKLQkJCQl9Ci0JCQl9Ci0JCQl4cCA9IG5leHQ7Ci0JCQlkZXB0aCsrOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBmb3J3YXJkIHN0ZXAuCi0JICogQHJldHVybiBlCi0JICovCi0JLy8gWFhYOiBub3JtYWx6aWUhCi0JcHVibGljIE9iamVjdCB2aXNpdChGb3J3YXJkU3RlcCBlKSB7Ci0JCWludCBheGlzID0gZS5heGlzKCk7Ci0KLQkJc3dpdGNoIChheGlzKSB7Ci0JCWNhc2UgRm9yd2FyZFN0ZXAuQVRfU1lNOgotCQkJZS5zZXRfYXhpcyhGb3J3YXJkU3RlcC5BVFRSSUJVVEUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGb3J3YXJkU3RlcC5OT05FOgotCQkJZS5zZXRfYXhpcyhGb3J3YXJkU3RlcC5DSElMRCk7Ci0JCQlicmVhazsKLQotCQl9Ci0KLQkJZS5ub2RlX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSByZXZlcnNlIHN0ZXAuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSZXZlcnNlU3RlcCBlKSB7Ci0KLQkJaWYgKGUuYXhpcygpID09IFJldmVyc2VTdGVwLkRPVERPVCkgewotCQkJTm9kZVRlc3QgbnQgPSBuZXcgQW55S2luZFRlc3QoKTsKLQkJCVN0ZXAgcyA9IG5ldyBSZXZlcnNlU3RlcChSZXZlcnNlU3RlcC5QQVJFTlQsIG50KTsKLQotCQkJcmV0dXJuIHM7Ci0JCX0KLQotCQlOb2RlVGVzdCBudCA9IGUubm9kZV90ZXN0KCk7Ci0JCWlmIChudCAhPSBudWxsKQotCQkJbnQuYWNjZXB0KHRoaXMpOwotCi0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgTmFtZSB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTmFtZVRlc3QgZSkgewotCi0JCVN0cmluZyBwcmVmaXggPSBlLm5hbWUoKS5wcmVmaXgoKTsKLQotCQkvLyBYWFg6IGlzIHRoaXMgY29ycmVjdCA/Ci0JCS8vIGkuZS4gaWYgdGhlcmUgaXMgbm8gcHJlZml4Li4uIGl0cyBvay4uIGVsc2UgaXQgbXVzdCBleGlzdAotCQlpZiAocHJlZml4ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHZlcmlhYmxlIHJlZmVyZW5jZS4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFZhclJlZiBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc3RyaW5nIGxpdGVyYWwuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTdHJpbmdMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIGxpdGVyYWwuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlZ2VyTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZG91YmxlIGxpdGVyYWwuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb3VibGVMaXRlcmFsIGUpIHsKLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBkZWNpbWFsIGxpdGVyYWwuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEZWNpbWFsTGl0ZXJhbCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgcGFyIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQYXJFeHByIGUpIHsKLQkJcHJpbnRFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIENudHggSXRlbSBFeHByZXNzaW9uLgotCSAqIEByZXR1cm4gbmV3IGZ1bmN0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbnR4SXRlbUV4cHIgZSkgewotCQlyZXR1cm4gbmV3IFZhclJlZihuZXcgUU5hbWUoImZzIiwgImRvdCIpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGZ1Y250aW9uIGNhbGwuCi0JICogQHJldHVybiBlCi0JICovCi0JLy8gWFhYOiBob3cgZG8gd2Ugbm9ybWFsaXplID8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZ1bmN0aW9uQ2FsbCBlKSB7Ci0KLQkJcHJpbnRFeHBycyhlLml0ZXJhdG9yKCkpOwotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIHNpbmdsZSB0eXBlLgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2luZ2xlVHlwZSBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgc2VxdWVuY2UgdHlwZS4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFNlcXVlbmNlVHlwZSBlKSB7Ci0JCUl0ZW1UeXBlIGl0ID0gZS5pdGVtX3R5cGUoKTsKLQotCQlpZiAoaXQgIT0gbnVsbCkKLQkJCWl0LmFjY2VwdCh0aGlzKTsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGl0ZW0gdHlwZS4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEl0ZW1UeXBlIGUpIHsKLQotCQlzd2l0Y2ggKGUudHlwZSgpKSB7Ci0JCWNhc2UgSXRlbVR5cGUuSVRFTToKLQkJCWJyZWFrOwotCQljYXNlIEl0ZW1UeXBlLlFOQU1FOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJdGVtVHlwZS5LSU5EVEVTVDoKLQkJCWUua2luZF90ZXN0KCkuYWNjZXB0KHRoaXMpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGFueSBraW5kIHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbnlLaW5kVGVzdCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZG9jdW1lbnQgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERvY3VtZW50VGVzdCBlKSB7Ci0KLQkJc3dpdGNoIChlLnR5cGUoKSkgewotCQljYXNlIERvY3VtZW50VGVzdC5FTEVNRU5UOgotCQkJZS5lbGVtX3Rlc3QoKS5hY2NlcHQodGhpcyk7Ci0JCQlicmVhazsKLQotCQljYXNlIERvY3VtZW50VGVzdC5TQ0hFTUFfRUxFTUVOVDoKLQkJCWUuc2NoZW1hX2VsZW1fdGVzdCgpLmFjY2VwdCh0aGlzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgdGV4dCB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVGV4dFRlc3QgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvbW1vbiB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ29tbWVudFRlc3QgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIFBJIHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChQSVRlc3QgZSkgewotCQlTdHJpbmcgYXJnID0gZS5hcmcoKTsKLQkJaWYgKGFyZyA9PSBudWxsKQotCQkJYXJnID0gIiI7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBhdHRyaWJ1dGUgdGVzdC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQkvLyBYWFggTk8gQ0hFQ0sgPwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQXR0cmlidXRlVGVzdCBlKSB7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzY2hlbWEgYXR0cmlidXRlIHRlc3QuCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFBdHRyVGVzdCBlKSB7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZWxlbWVudCB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCS8vIFhYWCBOTyBTRU1BTlRJQyBDSEVDSz8hCi0JcHVibGljIE9iamVjdCB2aXNpdChFbGVtZW50VGVzdCBlKSB7Ci0KLQkJcmV0dXJuIGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzY2hlbWEgZWxlbWVudCB0ZXN0LgotCSAqIEByZXR1cm4gZQotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hRWxlbVRlc3QgZSkgewotCQlyZXR1cm4gZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRDb2xsRXhwcnMoSXRlcmF0b3IgaSkgewotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUNvbGxlY3Rpb24gZXhwcnMgPSAoQ29sbGVjdGlvbikgaS5uZXh0KCk7Ci0KLQkJCXByaW50RXhwcnMoZXhwcnMuaXRlcmF0b3IoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgaXMgdGhlIGF4aXMgc3RlcC4KLQkgKiBAcmV0dXJuIGUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF4aXNTdGVwIGUpIHsKLQotCQlTdGVwIHMgPSAoU3RlcCkgZS5zdGVwKCkuYWNjZXB0KHRoaXMpOwotCQllLnNldF9zdGVwKHMpOwotCi0JCXByaW50Q29sbEV4cHJzKGUuaXRlcmF0b3IoKSk7Ci0JCXJldHVybiBlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBpcyB0aGUgZmlsdGVyIGV4cHJlc3Npb24uCi0JICogQHJldHVybiBlCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChGaWx0ZXJFeHByIGUpIHsKLQkJUHJpbWFyeUV4cHIgcGUgPSAoUHJpbWFyeUV4cHIpIGUucHJpbWFyeSgpLmFjY2VwdCh0aGlzKTsKLQkJZS5zZXRfcHJpbWFyeShwZSk7Ci0KLQkJcHJpbnRDb2xsRXhwcnMoZS5pdGVyYXRvcigpKTsKLQkJcmV0dXJuIGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QYXJlbnRBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1BhcmVudEF4aXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE2ODJmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1BhcmVudEF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIHRoZSBwYXJlbnQgYXhpcyBjb250YWlucyB0aGUgc2VxdWVuY2UgcmV0dXJuZWQgYnkgdGhlIGRtOnBhcmVudCBhY2Nlc3NvciBpbiwKLSAqIHdoaWNoIHJldHVybnMgdGhlIHBhcmVudCBvZiB0aGUgY29udGV4dCBub2RlLCBvciBhbiBlbXB0eSBzZXF1ZW5jZSBpZiB0aGUKLSAqIGNvbnRleHQgbm9kZSBoYXMgbm8gcGFyZW50Ci0gKi8KLXB1YmxpYyBjbGFzcyBQYXJlbnRBeGlzIGV4dGVuZHMgUmV2ZXJzZUF4aXMgewotCi0JLyoqCi0JICogcmV0dXJucyBwYXJlbnQgYWNjZXNzb3JzIG9mIHRoZSBjb250ZXh0IG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5vZGUgdHlwZS4KLQkgKiBAdGhyb3dzIGRjCi0JICogICAgICAgICAgICAgaXMgdGhlIER5bmFtaWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciBjb3B5SW50bywgTm9kZSBsaW1pdE5vZGUpIHsKLQkJTm9kZSBuID0gbm9kZS5ub2RlX3ZhbHVlKCk7Ci0JCQotCQlpZiAobGltaXROb2RlICE9IG51bGwgJiYgbGltaXROb2RlLmlzU2FtZU5vZGUobikpIHsKLQkJCS8vIG5vIGZ1cnRoZXIsIHdlIGhhdmUgcmVhY2hlZCB0aGUgbGltaXQgbm9kZQotCQkJcmV0dXJuOwotCQl9Ci0KLQkJTm9kZSBwYXJlbnQgPSBmaW5kUGFyZW50KG4pOwotCi0JCS8vIGlmIGEgcGFyZW50IGV4aXN0cy4uLiBhZGQgaXQKLQkJaWYgKHBhcmVudCAhPSBudWxsKQotCQkJY29weUludG8uYWRkKE5vZGVUeXBlLmRvbV90b194cGF0aChwYXJlbnQsIG5vZGUuZ2V0VHlwZU1vZGVsKCkpKTsKLQl9Ci0KLQlwdWJsaWMgTm9kZSBmaW5kUGFyZW50KE5vZGUgbikgewotCQlOb2RlIHBhcmVudCA9IG4uZ2V0UGFyZW50Tm9kZSgpOwotCi0JCS8vIHNwZWNpYWwgY2FzZSBhdHRyaWJ1dGUgZWxlbWVudHMuLi4KLQkJLy8gaW4gdGhpcyBjYXNlLi4uIHRoZSBwYXJlbnQgaXMgdGhlIGVsZW1lbnQgd2hpY2ggb3ducyB0aGUgYXR0cgotCQlpZiAobi5nZXROb2RlVHlwZSgpID09IE5vZGUuQVRUUklCVVRFX05PREUpIHsKLQkJCUF0dHIgYXR0ID0gKEF0dHIpIG47Ci0KLQkJCXBhcmVudCA9IGF0dC5nZXRPd25lckVsZW1lbnQoKTsKLQkJfQotCQlyZXR1cm4gcGFyZW50OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAicGFyZW50IjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ0F4aXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDJlOWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUHJlY2VkaW5nQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiB0aGUgcHJlY2VkaW5nIGF4aXMgY29udGFpbnMgYWxsIG5vZGVzIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IG9mIHRoZQotICogdHJlZSBpbiB3aGljaCB0aGUgY29udGV4dCBub2RlIGlzIGZvdW5kCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmVjZWRpbmdBeGlzIGV4dGVuZHMgUmV2ZXJzZUF4aXMgewotCS8vIFhYWCBET0NVTUVOVCBPUkRFUi4uLi4gZHVubm8KLQotCS8qKgotCSAqIHJldHVybnMgcHJlY2VkaW5nIG5vZGVzIG9mIHRoZSBjb250ZXh0IG5vZGUKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgaXMgdGhlIG5vZGUgdHlwZS4KLQkgKiBAdGhyb3dzIGRjCi0JICogICAgICAgICAgICAgaXMgdGhlIER5bmFtaWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciByZXN1bHQsIE5vZGUgbGltaXROb2RlKSB7Ci0KLQkJaWYgKGxpbWl0Tm9kZSAhPSBudWxsICYmIGxpbWl0Tm9kZS5pc1NhbWVOb2RlKG5vZGUubm9kZV92YWx1ZSgpKSkgewotCQkJLy8gbm8gZnVydGhlciwgd2UgaGF2ZSByZWFjaGVkIHRoZSBsaW1pdCBub2RlCi0JCQlyZXR1cm47Ci0JCX0KLQotCQkvLyBnZXQgdGhlIHBhcmVudAotCQlOb2RlVHlwZSBwYXJlbnQgPSBudWxsOwotCQlSZXN1bHRCdWZmZXIgcGFyZW50QnVmZmVyID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQluZXcgUGFyZW50QXhpcygpLml0ZXJhdGUobm9kZSwgcGFyZW50QnVmZmVyLCBsaW1pdE5vZGUpOwotCQlpZiAocGFyZW50QnVmZmVyLnNpemUoKSA9PSAxKSB7Ci0JCQlwYXJlbnQgPSAoTm9kZVR5cGUpIHBhcmVudEJ1ZmZlci5pdGVtKDApOwotCQkJLy8gaWYgd2UgZ290IGEgcGFyZW50LCB3ZSBnb3R0YSByZXBlYXQgdGhlIHN0b3J5IGZvciB0aGUgcGFyZW50Ci0JCQkvLyBhbmQgYWRkIHRoZSByZXN1bHRzCi0JCQlpdGVyYXRlKHBhcmVudCwgcmVzdWx0LCBsaW1pdE5vZGUpOwotCQl9Ci0KLQkJLy8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2YgdGhpcyBub2RlLCBhbmQgYWRkIHRoZW0KLQkJUHJlY2VkaW5nU2libGluZ0F4aXMgcHNhID0gbmV3IFByZWNlZGluZ1NpYmxpbmdBeGlzKCk7Ci0JCVJlc3VsdEJ1ZmZlciBzaWJsaW5nQnVmZmVyID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQlwc2EuaXRlcmF0ZShub2RlLCBzaWJsaW5nQnVmZmVyLCBsaW1pdE5vZGUpOwotCi0JCS8vIGZvciBlYWNoIHNpYmxpbmcsIGdldCBhbGwgaXRzIGRlc2NlbmRhbnRzCi0JCURlc2NlbmRhbnRBeGlzIGRhID0gbmV3IERlc2NlbmRhbnRBeGlzKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHNpYmxpbmdCdWZmZXIuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlyZXN1bHQuYWRkKChOb2RlVHlwZSlpKTsKLQkJCWRhLml0ZXJhdGUoKE5vZGVUeXBlKSBpLm5leHQoKSwgcmVzdWx0LCBudWxsKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAicHJlY2VkaW5nIjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ1NpYmxpbmdBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1ByZWNlZGluZ1NpYmxpbmdBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZjQ2NjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9QcmVjZWRpbmdTaWJsaW5nQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiB0aGUgcHJlY2VkaW5nIGF4aXMgY29udGFpbnMgYWxsIG5vZGVzIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IG9mIHRoZQotICogdHJlZSBpbiB3aGljaCB0aGUgY29udGV4dCBub2RlIGlzIGZvdW5kIGluY2x1ZGluZyB0aGUgY29udGV4dCBub2RlIGl0c2VsZgotICovCi1wdWJsaWMgY2xhc3MgUHJlY2VkaW5nU2libGluZ0F4aXMgZXh0ZW5kcyBSZXZlcnNlQXhpcyB7Ci0JLy8gWFhYIGFnYWluLCB1bmlmeSB3aXRoIGZvbGxvd2luZwotCi0JLyoqCi0JICogcmV0dXJucyBwcmVjZWRpbmcgbm9kZXMgb2YgdGhlIGNvbnRleHQgbm9kZQotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBpcyB0aGUgbm9kZSB0eXBlLgotCSAqIEB0aHJvd3MgZGMKLQkgKiAgICAgICAgICAgICBpcyB0aGUgRHluYW1pYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyB2b2lkIGl0ZXJhdGUoTm9kZVR5cGUgbm9kZSwgUmVzdWx0QnVmZmVyIGNvcHlJbnRvLCBOb2RlIGxpbWl0Tm9kZSkgewotCQkvLyBYWFggY2hlY2sgZm9yIGF0dHJpYnV0ZSAvIG5hbWVzcGFjZSBub2RlLi4uIGlmIHNvIHJldHVybgotCQkvLyBlbXB0eSBzZXF1ZW5jZQotCi0JCWludCBwb3MgPSBjb3B5SW50by5zaXplKCk7Ci0JCU5vZGUgaXRlck5vZGUgPSBub2RlLm5vZGVfdmFsdWUoKTsKLQkJLy8gZ2V0IHRoZSBjaGlsZHJlbiBvZiB0aGUgcGFyZW50IFtzaWJsaW5nc10KLQkJZG8gewotCQkJaXRlck5vZGUgPSBpdGVyTm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKTsKLQkJCWlmIChpdGVyTm9kZSAhPSBudWxsKSB7Ci0JCQkJY29weUludG8uYWRkQXQocG9zLCBOb2RlVHlwZS5kb21fdG9feHBhdGgoaXRlck5vZGUsIG5vZGUuZ2V0VHlwZU1vZGVsKCkpKTsKLQkJCX0KLQkJfSB3aGlsZSAoaXRlck5vZGUgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBuYW1lKCkgewotCQlyZXR1cm4gInByZWNlZGluZy1zaWJsaW5nIjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUmFuZ2VSZXN1bHRTZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SYW5nZVJlc3VsdFNlcXVlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZDIxZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SYW5nZVJlc3VsdFNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5JdGVtVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByYW5nZSBleHByZXNzaW9uIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlCi0gKiBpbnRlZ2Vycy4KLSAqLwotcHVibGljIGNsYXNzIFJhbmdlUmVzdWx0U2VxdWVuY2UgZXh0ZW5kcyBSZXN1bHRTZXF1ZW5jZSB7Ci0KLQlwcml2YXRlIGludCBfc3RhcnQ7Ci0JcHJpdmF0ZSBpbnQgX2VuZDsKLQlwcml2YXRlIGludCBfc2l6ZTsKLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIF90YWlsOwotCi0JLyoqCi0JICogc2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZSByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gc3RhcnQKLQkgKiAgICAgICAgICAgIGlzIHRoZSBpbnRlZ2VyIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiByYW5nZS4KLQkgKiBAcGFyYW0gZW5kCi0JICogICAgICAgICAgICBpcyB0aGUgaW50ZWdlciBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHJhbmdlLgotCSAqLwotCXB1YmxpYyBSYW5nZVJlc3VsdFNlcXVlbmNlKGludCBzdGFydCwgaW50IGVuZCkgewotCQlfc2l6ZSA9IChlbmQgLSBzdGFydCkgKyAxOwotCi0JCWFzc2VydCBfc2l6ZSA+PSAwOwotCi0JCV9zdGFydCA9IHN0YXJ0OwotCQlfZW5kID0gZW5kOwotCi0JCV90YWlsID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQl9Ci0KLQkvKioKLQkgKiBpdGVtIGlzIGFuIGludGVnZXIgdG8gYWRkIHRvIHRoZSByYW5nZS4KLQkgKiAKLQkgKiBAcGFyYW0gaXRlbQotCSAqICAgICAgICAgICAgaXMgYW4gaW50ZWdlci4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGQoQW55VHlwZSBpdGVtKSB7Ci0JCV90YWlsLmFkZChpdGVtKTsKLQl9Ci0KLQkvKioKLQkgKiByZW1vdmUgdGhlIHRhaWwgZnJvbSB0aGUgcmFuZ2UgZ2l2ZW4uCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBpcyB0aGUgcmFuZ2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25jYXQoUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJX3RhaWwuY29uY2F0KHJzKTsKLQl9Ci0KLQkvKioKLQkgKiBpbnRlcmF0ZSB0aHJvdWdoIHJhbmdlLgotCSAqIAotCSAqIEByZXR1cm4gdGFpbAotCSAqLwotCXB1YmxpYyBMaXN0SXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCS8vIFhYWCBsaWZlIGlzIGdldHRpbmcgaGFyZC4uLgotCQlpZiAoX3NpemUgIT0gMCkgewotCQkJUmVzdWx0U2VxdWVuY2UgbmV3dGFpbCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJCWZvciAoOyBfc3RhcnQgPD0gX2VuZDsgX3N0YXJ0KyspCi0JCQkJbmV3dGFpbC5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoX3N0YXJ0KSkpOwotCi0JCQluZXd0YWlsLmNvbmNhdChfdGFpbCk7Ci0JCQlfdGFpbC5yZWxlYXNlKCk7Ci0JCQlfdGFpbCA9IG5ld3RhaWw7Ci0KLQkJCV9zaXplID0gMDsKLQkJCV9zdGFydCA9IDA7Ci0JCQlfZW5kID0gMDsKLQotCQl9Ci0KLQkJcmV0dXJuIF90YWlsLml0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBpdGVtIGZyb20gcmFuZ2UKLQkgKi8KLQlwdWJsaWMgQW55VHlwZSBnZXQoaW50IGkpIHsKLQkJaWYgKGkgPCBfc2l6ZSkKLQkJCXJldHVybiBuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihfc3RhcnQgKyBpKSk7Ci0JCWVsc2UKLQkJCXJldHVybiBfdGFpbC5nZXQoaSAtIF9zaXplKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHNpemUKLQkgKi8KLQlwdWJsaWMgaW50IHNpemUoKSB7Ci0JCXJldHVybiBfc2l6ZSArIF90YWlsLnNpemUoKTsKLQl9Ci0KLQkvKioKLQkgKiBjbGVhciByYW5nZQotCSAqLwotCXB1YmxpYyB2b2lkIGNsZWFyKCkgewotCQlfc2l6ZSA9IDA7Ci0JCV90YWlsLmNsZWFyKCk7Ci0JfQotCi0JLyoqCi0JICogY3JlYXRlIG5ldyByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcmV0dXJuIG51bGwKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY3JlYXRlX25ldygpIHsKLQkJYXNzZXJ0IGZhbHNlOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGZpcnN0IGl0ZW0gaW4gcmFuZ2UKLQkgKi8KLQlwdWJsaWMgQW55VHlwZSBmaXJzdCgpIHsKLQkJcmV0dXJuIGdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGZpcnN0IGl0ZW0gaW4gcmFuZ2UKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGZpcnN0VmFsdWUoKSB7Ci0JCXJldHVybiBnZXQoMCkuZ2V0TmF0aXZlVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBhc2tzIGlmIHRoZSByYW5nZSBpcyBlbXB0eT8KLQkgKiAKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlbXB0eSgpIHsKLQkJcmV0dXJuIHNpemUoKSA9PSAwOwotCX0KLQotCXB1YmxpYyBJdGVtVHlwZSBzZXF1ZW5jZVR5cGUoKSB7Ci0JCXJldHVybiBuZXcgU2ltcGxlQXRvbWljSXRlbVR5cGVJbXBsKEJ1aWx0aW5UeXBlTGlicmFyeS5YU19JTlRFR0VSLCBJdGVtVHlwZS5PQ0NVUlJFTkNFX05PTkVfT1JfTUFOWSk7Ci0JfQotCi0JLyoqCi0JICogcmVsZWFzZQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SZXZlcnNlQXhpcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9SZXZlcnNlQXhpcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDE0NzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvUmV2ZXJzZUF4aXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci0KLS8qKgotICogQW4gYXhpcyB0aGF0IG9ubHkgZXZlciBjb250YWlucyB0aGUgY29udGV4dCBub2RlIG9yIG5vZGVzIHRoYXQgYXJlIGJlZm9yZSB0aGUKLSAqIGNvbnRleHQgbm9kZSBpbiBkb2N1bWVudCBvcmRlciBpcyBhIHJldmVyc2UgYXhpcy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJldmVyc2VBeGlzIGltcGxlbWVudHMgQXhpcyB7Ci0KLQkvKioKLQkgKiBAcmV0dXJuIG5ldyBlbGVtZW50IHR5cGUKLQkgKi8KLQkvLyBzaG91bGQgYWx3YXlzIGJlIGVsZW1lbnQgaSBmaW5rCi0JcHVibGljIE5vZGVUeXBlIHByaW5jaXBhbF9ub2RlX2tpbmQoKSB7Ci0JCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlbGZBeGlzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlbGZBeGlzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NjkwZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TZWxmQXhpcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBDcmVhdGUgYSByZXN1bHQgc2VxdWVuY2UgdGhhdCBjb250YWlucyB0aGUgY29udGV4dCBub2RlCi0gKi8KLXB1YmxpYyBjbGFzcyBTZWxmQXhpcyBleHRlbmRzIEZvcndhcmRBeGlzIHsKLQotCS8qKgotCSAqIGNyZWF0ZSBuZXcgcnMgYW5kIGFkZCB0aGUgY29udGV4dCBub2RlIHRvIGl0Ci0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIGlzIHRoZSBub2RlIHR5cGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBpdGVyYXRlKE5vZGVUeXBlIG5vZGUsIFJlc3VsdEJ1ZmZlciBjb3B5SW50bywgTm9kZSBsaW1pdE5vZGUpIHsKLQkJY29weUludG8uYWRkKG5vZGUpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCXJldHVybiAic2VsZiI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1NlcVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU2VxVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGEyMmQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU2VxVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBkb24ndCBzaWxlbnRseSBhbGxvdyBlbXB0eSBzZXF1ZW5jZXMgYWx3YXlzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjk3NzA3IC0gTWlzc2luZyB0aGUgZW1wdHktc2VxdWVuY2UoKSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODI2NyAtIENvcnJlY3RseSBoYW5kbGUgaW5zdG9mIHdpdGggZWxlbWVudHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuSXRlbVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdC5LaW5kVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0LlNlcXVlbmNlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ29uc3RydWN0b3JGTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRnVuY3Rpb25MaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiByZXByZXNlbnRzIGEgU2VxdWVuY2UgdHlwZXMgdXNlZCBmb3IgbWF0Y2hpbmcgZXhwZWN0ZWQgYXJndW1lbnRzIG9mIGZ1bmN0aW9ucwotICovCi1wdWJsaWMgY2xhc3MgU2VxVHlwZSB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPQ0NfTk9ORSA9IDA7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0NDX1NUQVIgPSAxOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9DQ19QTFVTID0gMjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPQ0NfUU1BUksgPSAzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9DQ19FTVBUWSA9IDQ7Ci0KLQkvKioKLQkgKiBQYXRoIHRvIHczLm9yZyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1NDSEVNQV9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBBTllfQVRPTUlDX1RZUEUgPSBuZXcgUU5hbWUoInhzIiwKLQkJCSJhbnlBdG9taWNUeXBlIiwgWE1MX1NDSEVNQV9OUyk7Ci0KLQlwcml2YXRlIHRyYW5zaWVudCBBbnlUeXBlIGFueXR5cGUgPSBudWxsOwotCXByaXZhdGUgdHJhbnNpZW50IGludCBvY2M7Ci0JcHJpdmF0ZSB0cmFuc2llbnQgQ2xhc3MgdHlwZUNsYXNzID0gbnVsbDsKLQlwcml2YXRlIHRyYW5zaWVudCBRTmFtZSBub2RlTmFtZSA9IG51bGw7Ci0JcHJpdmF0ZSB0cmFuc2llbnQgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBzZXF1ZW5jZSB0eXBlCi0JICogCi0JICogQHBhcmFtIHQKLQkgKiAgICAgICAgICAgIGlzIGFueSB0eXBlCi0JICogQHBhcmFtIG9jYwotCSAqICAgICAgICAgICAgaXMgYW4gaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuCi0JICovCi0JcHVibGljIFNlcVR5cGUoQW55VHlwZSB0LCBpbnQgb2NjKSB7Ci0JCWFueXR5cGUgPSB0OwotCQl0aGlzLm9jYyA9IG9jYzsKLQotCQlpZiAodCAhPSBudWxsKQotCQkJdHlwZUNsYXNzID0gdC5nZXRDbGFzcygpOwotCQllbHNlCi0JCQl0eXBlQ2xhc3MgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvY2MKLQkgKiAgICAgICAgICAgIGlzIGFuIGludGVnZXIgaW4gdGhlIHNlcXVlbmNlLgotCSAqLwotCS8vIFhYWCBoYWNrIHRvIHJlcHJlc2VudCBBbnlOb2RlLi4uCi0JcHVibGljIFNlcVR5cGUoaW50IG9jYykgewotCQl0aGlzKChBbnlUeXBlKSBudWxsLCBvY2MpOwotCi0JCXR5cGVDbGFzcyA9IE5vZGVUeXBlLmNsYXNzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0eXBlX2NsYXNzCi0JICogICAgICAgICAgICBpcyBhIGNsYXNzIHdoaWNoIHJlcHJlc2VudHMgdGhlIGV4cGVjdGVkIHR5cGUKLQkgKiBAcGFyYW0gb2NjCi0JICogICAgICAgICAgICBpcyBhbiBpbnRlZ2VyIGluIHRoZSBzZXF1ZW5jZS4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShDbGFzcyB0eXBlX2NsYXNzLCBpbnQgb2NjKSB7Ci0JCXRoaXMoKEFueVR5cGUpIG51bGwsIG9jYyk7Ci0KLQkJdGhpcy50eXBlQ2xhc3MgPSB0eXBlX2NsYXNzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdAotCSAqICAgICAgICAgICAgaXMgYSBzZXF1ZW5jZSB0eXBlLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgaXMgYSBzdGF0aWMgY29udGV4dC4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShTZXF1ZW5jZVR5cGUgc3QsIFN0YXRpY0NvbnRleHQgc2MsIFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0KLQkJb2NjID0gbWFwU2VxdWVuY2VUeXBlT2NjdXJyZW5jZShzdC5vY2N1cnJlbmNlKCkpOwotCQkvLyBmaWd1cmUgb3V0IHRoZSBpdGVtIGlzCi0JCWZpbmFsIEl0ZW1UeXBlIGl0ZW0gPSBzdC5pdGVtX3R5cGUoKTsKLQkJS2luZFRlc3Qga3Rlc3QgPSBudWxsOwotCQlzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0JCWNhc2UgSXRlbVR5cGUuSVRFTToKLQkJCXR5cGVDbGFzcyA9IEFueVR5cGUuY2xhc3M7Ci0JCQlyZXR1cm47Ci0KLQkJCS8vIFhYWCBJTVBMRU1FTlQgVEhJUwotCQljYXNlIEl0ZW1UeXBlLlFOQU1FOgotCQkJZmluYWwgQW55QXRvbWljVHlwZSBhYXQgPSBtYWtlX2F0b21pYyhzYywgaXRlbS5xbmFtZSgpKTsKLQotCQkJYXNzZXJ0IGFhdCAhPSBudWxsOwotCQkJYW55dHlwZSA9IGFhdDsKLQkJCWlmIChpdGVtLnFuYW1lKCkuZXF1YWxzKEFOWV9BVE9NSUNfVFlQRSkpIHsKLQkJCQl0eXBlQ2xhc3MgPSBBbnlBdG9taWNUeXBlLmNsYXNzOwotCQkJfSBlbHNlIHsKLQkJCQl0eXBlQ2xhc3MgPSBhbnl0eXBlLmdldENsYXNzKCk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0KLQkJY2FzZSBJdGVtVHlwZS5LSU5EVEVTVDoKLQkJCWt0ZXN0ID0gaXRlbS5raW5kX3Rlc3QoKTsKLQkJCWJyZWFrOwotCi0JCX0KLQotCQlpZiAoa3Rlc3QgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJdHlwZUNsYXNzID0ga3Rlc3QuZ2V0WERNQ2xhc3NUeXBlKCk7Ci0JCWFueXR5cGUgPSBrdGVzdC5jcmVhdGVUZXN0VHlwZShycywgc2MpOwotCQlub2RlTmFtZSA9IGt0ZXN0Lm5hbWUoKTsKLQkJd2lsZCA9IGt0ZXN0LmlzV2lsZCgpOwotCX0KLQotCXByaXZhdGUgQW55QXRvbWljVHlwZSBtYWtlX2F0b21pYyhTdGF0aWNDb250ZXh0IHNjLCBRTmFtZSBxbmFtZSkgewotCQlTdHJpbmcgbnMgPSBxbmFtZS5uYW1lc3BhY2UoKTsKLQotCQlNYXAgZnVuY3Rpb25MaWJyYXJpZXMgPSBzYy5nZXRGdW5jdGlvbkxpYnJhcmllcygpOwotCQlpZiAoIWZ1bmN0aW9uTGlicmFyaWVzLmNvbnRhaW5zS2V5KG5zKSkKLQkJCXJldHVybiBudWxsOwotCi0JCUZ1bmN0aW9uTGlicmFyeSBmbCA9IChGdW5jdGlvbkxpYnJhcnkpIGZ1bmN0aW9uTGlicmFyaWVzLmdldChucyk7Ci0KLQkJaWYgKCEoZmwgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvckZMKSkKLQkJCXJldHVybiBudWxsOwotCi0JCUNvbnN0cnVjdG9yRkwgY2ZsID0gKENvbnN0cnVjdG9yRkwpIGZsOwotCi0JCXJldHVybiBjZmwuYXRvbWljX3R5cGUocW5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgaW50IG1hcFNlcXVlbmNlVHlwZU9jY3VycmVuY2UoaW50IG9jY3VycmVuY2UpIHsKLQkJLy8gY29udmVydCBvY2N1cnJlbmNlCi0JCXN3aXRjaCAob2NjdXJyZW5jZSkgewotCQljYXNlIFNlcXVlbmNlVHlwZS5FTVBUWToKLQkJCXJldHVybiBPQ0NfRU1QVFk7Ci0KLQkJY2FzZSBTZXF1ZW5jZVR5cGUuTk9ORToKLQkJCXJldHVybiBPQ0NfTk9ORTsKLQotCQljYXNlIFNlcXVlbmNlVHlwZS5RVUVTVElPTjoKLQkJCXJldHVybiBPQ0NfUU1BUks7Ci0KLQkJY2FzZSBTZXF1ZW5jZVR5cGUuU1RBUjoKLQkJCXJldHVybiBPQ0NfU1RBUjsKLQotCQljYXNlIFNlcXVlbmNlVHlwZS5QTFVTOgotCQkJcmV0dXJuIE9DQ19QTFVTOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0Ci0JICogICAgICAgICAgICBpcyBhbiBhbnkgdHlwZS4KLQkgKi8KLQlwdWJsaWMgU2VxVHlwZShBbnlUeXBlIHQpIHsKLQkJdGhpcyh0LCBPQ0NfTk9ORSk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBhbiBpbnRlZ2VyLgotCSAqLwotCXB1YmxpYyBpbnQgb2NjdXJlbmNlKCkgewotCQlyZXR1cm4gb2NjOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gYSB0eXBlLgotCSAqLwotCXB1YmxpYyBBbnlUeXBlIHR5cGUoKSB7Ci0JCXJldHVybiBhbnl0eXBlOwotCX0KLQotCS8qKgotCSAqIG1hdGNoZXMgYXJncwotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBhIHJlc3VsdCBzZXF1ZW5jZQotCSAqIEB0aHJvd3MgYQotCSAqICAgICAgICAgICAgIGR5bmFtaWMgZXJyb3IKLQkgKiBAcmV0dXJuIGEgcmVzdWx0IHNlcXVlbmNlCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1hdGNoKFJlc3VsdFNlcXVlbmNlIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWludCBvY2N1cnJlbmNlID0gb2NjdXJlbmNlKCk7Ci0KLQkJLy8gQ2hlY2sgZm9yIGVtcHR5IHNlcXVlbmNlIGZpcnN0Ci0JCWlmIChvY2N1cnJlbmNlID09IE9DQ19FTVBUWSAmJiAhYXJncy5lbXB0eSgpKSB7Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQl9Ci0KLQkJaW50IGFyZ19jb3VudCA9IDA7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXJnID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQkvLyBtYWtlIHN1cmUgYWxsIGFyZ3MgYXJlIHRoZSBzYW1lIHR5cGUgYXMgZXhwZWN0ZWQgdHlwZQotCQkJaWYgKCEodHlwZUNsYXNzLmlzSW5zdGFuY2UoYXJnKSkpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCi0JCQlpZiAoYW55dHlwZSAhPSBudWxsKSB7Ci0JCQkJaWYgKChub2RlTmFtZSAhPSBudWxsIHx8IHdpbGQpICYmIGFyZyBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkJCU5vZGVUeXBlIG5vZGVUeXBlID0gKE5vZGVUeXBlKSBhcmc7Ci0JCQkJCU5vZGUgbm9kZSA9IG5vZGVUeXBlLm5vZGVfdmFsdWUoKTsKLQkJCQkJTm9kZSBsbm9kZSA9ICgoTm9kZVR5cGUpIGFueXR5cGUpLm5vZGVfdmFsdWUoKTsKLQkJCQkJaWYgKGxub2RlID09IG51bGwpIHsKLQkJCQkJCS8vdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWlmICghbG5vZGUuaXNFcXVhbE5vZGUobm9kZSkpIHsKLQkJCQkJCS8vdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlhcmdfY291bnQrKzsKLQotCQl9Ci0KLQkJc3dpdGNoIChvY2N1cnJlbmNlKSB7Ci0JCWNhc2UgT0NDX05PTkU6Ci0JCQlpZiAoYXJnX2NvdW50ICE9IDEpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPQ0NfUExVUzoKLQkJCWlmIChhcmdfY291bnQgPT0gMCkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9DQ19TVEFSOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPQ0NfUU1BUks6Ci0JCQlpZiAoYXJnX2NvdW50ID4gMSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCi0JCX0KLQotCQlyZXR1cm4gYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0F0dHJOYW1lRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQXR0ck5hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGZjOTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQXR0ck5hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBzdGF0aWMgYXR0cmlidXRlIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNBdHRyTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC01MDM3Nzg4NjU0MjkzMDUwMjYyTDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBzdGF0aWMgYXR0cmlidXRlIG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFN0YXRpY0F0dHJOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQ29udGV4dEFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljQ29udGV4dEFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgyOTM5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0NvbnRleHRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5OYW1lc3BhY2VDb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkNvbGxhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRnVuY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkZ1bmN0aW9uTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY1ZhcmlhYmxlUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EZWZhdWx0RHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlSXRlbVR5cGVJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuU2ltcGxlQXRvbWljSXRlbVR5cGVJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgU3RhdGljQ29udGV4dEFkYXB0ZXIgaW1wbGVtZW50cwotCQlvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dCB7Ci0JcHJpdmF0ZSBmaW5hbCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuU3RhdGljQ29udGV4dCBzYzsKLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QWRhcHRlcigKLQkJCW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5TdGF0aWNDb250ZXh0IHNjKSB7Ci0JCXRoaXMuc2MgPSBzYzsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1hQYXRoMUNvbXBhdGlibGUoKSB7Ci0JCXJldHVybiBzYy54cGF0aDFfY29tcGF0aWJsZSgpOwotCX0KLQotCXB1YmxpYyBTdGF0aWNWYXJpYWJsZVJlc29sdmVyIGdldEluU2NvcGVWYXJpYWJsZXMoKSB7Ci0JCXJldHVybiBuZXcgU3RhdGljVmFyaWFibGVSZXNvbHZlcigpIHsKLQkJCQotCQkJcHVibGljIGJvb2xlYW4gaXNWYXJpYWJsZVByZXNlbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBuYW1lKSB7Ci0JCQkJcmV0dXJuIHNjLnZhcmlhYmxlX2V4aXN0cyhxbihuYW1lKSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5JdGVtVHlwZSBnZXRWYXJpYWJsZVR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBuYW1lKSB7Ci0JCQkJcmV0dXJuIG5ldyBTaW1wbGVBdG9taWNJdGVtVHlwZUltcGwoQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0FOWVRZUEUpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgUU5hbWUgcW4oamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBuYW1lKSB7Ci0JCXJldHVybiBuZXcgUU5hbWUobmFtZSk7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldEluaXRpYWxDb250ZXh0VHlwZSgpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19VTlRZUEVEOwotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBGdW5jdGlvbkxpYnJhcnk+IGdldEZ1bmN0aW9uTGlicmFyaWVzKCkgewotCQlpZiAoc2MgaW5zdGFuY2VvZiBEZWZhdWx0U3RhdGljQ29udGV4dCkgewotCQkJRGVmYXVsdFN0YXRpY0NvbnRleHQgZHNjID0gKERlZmF1bHRTdGF0aWNDb250ZXh0KXNjOwotCQkJcmV0dXJuIGRzYy5nZXRfZnVuY3Rpb25fbGlicmFyaWVzKCk7Ci0JCX0KLQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0JfQotCi0JcHVibGljIENvbGxhdGlvblByb3ZpZGVyIGdldENvbGxhdGlvblByb3ZpZGVyKCkgewotCQlpZiAoc2MgaW5zdGFuY2VvZiBEeW5hbWljQ29udGV4dCkgewotCQkJZmluYWwgRHluYW1pY0NvbnRleHQgZGMgPSAoRHluYW1pY0NvbnRleHQpc2M7Ci0JCQlyZXR1cm4gbmV3IENvbGxhdGlvblByb3ZpZGVyKCkgewotCQkJCQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdENvbGxhdGlvbigpIHsKLQkJCQkJcmV0dXJuIGRjLmRlZmF1bHRfY29sbGF0aW9uX25hbWUoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcHVibGljIENvbXBhcmF0b3IgZ2V0Q29sbGF0aW9uKFN0cmluZyBuYW1lKSB7Ci0JCQkJCXJldHVybiBkYy5nZXRfY29sbGF0aW9uKG5hbWUpOwotCQkJCX0KLQkJCX07Ci0JCX0KLQkJCi0JCXJldHVybiBuZXcgQ29sbGF0aW9uUHJvdmlkZXIoKSB7Ci0JCQkKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdENvbGxhdGlvbigpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCQotCQkJcHVibGljIENvbXBhcmF0b3IgZ2V0Q29sbGF0aW9uKFN0cmluZyBuYW1lKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHVibGljIFVSSSBnZXRCYXNlVXJpKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXRyeSB7Ci0JCQlyZXR1cm4gbmV3IFVSSShzYy5iYXNlX3VyaSgpLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgTmFtZXNwYWNlQ29udGV4dCBnZXROYW1lc3BhY2VDb250ZXh0KCkgewotCQlyZXR1cm4gbmV3IE5hbWVzcGFjZUNvbnRleHQoKSB7Ci0JCQkKLQkJCXB1YmxpYyBJdGVyYXRvciBnZXRQcmVmaXhlcyhTdHJpbmcgYXJnMCkgewotCQkJCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKS5pdGVyYXRvcigpOwotCQkJfQotCQkJCi0JCQlwdWJsaWMgU3RyaW5nIGdldFByZWZpeChTdHJpbmcgYXJnMCkgewotCQkJCXJldHVybiAieCI7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKFN0cmluZyBwcmVmaXgpIHsKLQkJCQlTdHJpbmcgbnMgPSBzYy5yZXNvbHZlX3ByZWZpeChwcmVmaXgpOwotCQkJCXJldHVybiBucyAhPSBudWxsID8gbnMgOiBYTUxDb25zdGFudHMuTlVMTF9OU19VUkk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gc2MuZGVmYXVsdF9uYW1lc3BhY2UoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIHNjLmRlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlKCk7Ci0JfQotCi0JcHVibGljIFR5cGVNb2RlbCBnZXRUeXBlTW9kZWwoKSB7Ci0JCXJldHVybiBzYy5nZXRUeXBlTW9kZWwobnVsbCk7Ci0JfQotCi0JcHVibGljIEZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlpZiAoc2MuZnVuY3Rpb25fZXhpc3RzKG5ldyBRTmFtZShuYW1lKSwgYXJpdHkpKSB7Ci0JCQlpZiAoc2MgaW5zdGFuY2VvZiBEZWZhdWx0RHluYW1pY0NvbnRleHQpIHsKLQkJCQlEZWZhdWx0RHluYW1pY0NvbnRleHQgZGMgPSAoRGVmYXVsdER5bmFtaWNDb250ZXh0KXNjOwotCQkJCXJldHVybiBkYy5mdW5jdGlvbihuZXcgUU5hbWUobmFtZSksIGFyaXR5KTsKLQkJCX0KLQkJCXJldHVybiBuZXcgRnVuY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQkJcHVibGljIGludCBnZXRNaW5Bcml0eSgpIHsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJCXB1YmxpYyBpbnQgZ2V0TWF4QXJpdHkoKSB7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCQlwdWJsaWMgYm9vbGVhbiBpc1ZhcmlhYmxlQXJndW1lbnQoKSB7Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQkJcHVibGljIGJvb2xlYW4gY2FuTWF0Y2hBcml0eShpbnQgYWN0dWFsQXJpdHkpIHsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0UmVzdWx0VHlwZSgpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQkJCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRBcmd1bWVudFR5cGUoaW50IGluZGV4KSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldEFyZ3VtZW50TmFtZUhpbnQoaW50IGluZGV4KSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQkJCQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBldmFsdWF0aW9uQ29udGV4dCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGNvbXB1dGVSZXR1cm5UeXBlKENvbGxlY3Rpb24gYXJncywgU3RhdGljQ29udGV4dCBzYykgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9IAotCQkJfTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldENvbGxlY3Rpb25UeXBlKFN0cmluZyBjb2xsZWN0aW9uTmFtZSkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1VOVFlQRUQ7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldERlZmF1bHRDb2xsZWN0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19VTlRZUEVEOwotCi0JfQotCi0JcHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlIGdldERvY3VtZW50VHlwZSgKLQkJCVVSSSBkb2N1bWVudFVyaSkgewotCQlyZXR1cm4gbmV3IE5vZGVJdGVtVHlwZUltcGwob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uSXRlbVR5cGUuT0NDVVJSRU5DRV9PUFRJT05BTCwgTm9kZS5ET0NVTUVOVF9OT0RFKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNFbGVtTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0VsZW1OYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkNzZiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY0VsZW1OYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgc3RhdGljIGVsZW1lbnQgbmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY0VsZW1OYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTg3MTU3NTY3MTg3MTc1NTY3M0w7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIGVsZW1lbnQgbmFtZSBlcnJvcgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljRWxlbU5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKHJlYXNvbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNGdW5jdE5hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNGdW5jdE5hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2MzODlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljRnVuY3ROYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBFcnJvciBjYXVzZWQgYnkgc3RhdGljIGZ1bmN0aW9uIG5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNGdW5jdE5hbWVFcnJvciBleHRlbmRzIFN0YXRpY05hbWVFcnJvciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODA0NTY1ODc2NzcwMzc2NDQ0TDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGVU5DVElPTl9OT1RfRk9VTkQgPSAiWFBTVDAwMTciOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHN0YXRpYyBmdW5jdGlvbiBuYW1lIGVycm9yCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNGdW5jdE5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKEZVTkNUSU9OX05PVF9GT1VORCwgcmVhc29uKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05hbWVFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllNTJjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBzdGF0aWMgbmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY05hbWVFcnJvciBleHRlbmRzIFN0YXRpY0Vycm9yIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MzYzMzcwMDgyNTYzMTA2MDc0TDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX05PVF9GT1VORCA9ICJYUFNUMDAwOCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYX05PVF9GT1VORCA9ICJYUFNUMDA4MSI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gY29kZQotCSAqICAgICAgICAgICAgaXMgdGhlIGNvZGUuCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNOYW1lRXJyb3IoU3RyaW5nIGNvZGUsIFN0cmluZyByZWFzb24pIHsKLQkJc3VwZXIoY29kZSwgcmVhc29uKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3Igc3RhdGljIG5hbWUgZXJyb3IKLQkgKiAKLQkgKiBAcGFyYW0gcmVhc29uCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFN0YXRpY05hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXRoaXMoTkFNRV9OT1RfRk9VTkQsIHJlYXNvbik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05zTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY05zTmFtZUVycm9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTQzNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNOc05hbWVFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKioKLSAqIFN0YXRpYyBuYW1lc3BhY2UgbmFtZSBlcnJvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY05zTmFtZUVycm9yIGV4dGVuZHMgU3RhdGljTmFtZUVycm9yIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC02ODczOTgwMzc3OTY2MjkwMDYyTDsKLQotCXB1YmxpYyBTdGF0aWNOc05hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKFBSRUZJWF9OT1RfRk9VTkQsIHJlYXNvbik7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHByZWYKLQkgKiAgICAgICAgICAgIGlzIHRoZSB1bmtub3duIHByZWZpeC4KLQkgKiBAcmV0dXJuIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0YXRpY05zTmFtZUVycm9yIHVua25vd25fcHJlZml4KFN0cmluZyBwcmVmKSB7Ci0JCVN0cmluZyBlcnJvciA9ICJVbmtub3duIHByZWZpeCI7Ci0KLQkJaWYgKHByZWYgIT0gbnVsbCkKLQkJCWVycm9yICs9ICI6ICIgKyBwcmVmOwotCQllcnJvciArPSAiLiI7Ci0KLQkJcmV0dXJuIG5ldyBTdGF0aWNOc05hbWVFcnJvcihlcnJvcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9TdGF0aWNUeXBlTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1R5cGVOYW1lRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MDE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1R5cGVOYW1lRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjczNzYzIC0gY29ycmVjdCBlcnJvciBjb2RlcyAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogU3RhdGljIHR5cGUgbmFtZSBlcnJvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFN0YXRpY1R5cGVOYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDczMjg2NzE1NzEwODg1NzQ5NDdMOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTk9UX0ZPVU5EID0gIlhQU1QwMDUxIjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSByZWFzb24KLQkgKiAgICAgICAgICAgIGlzIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4KLQkgKi8KLQlwdWJsaWMgU3RhdGljVHlwZU5hbWVFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCXN1cGVyKFRZUEVfTk9UX0ZPVU5ELCByZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljVmFyTmFtZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1N0YXRpY1Zhck5hbWVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDc1Y2I4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvU3RhdGljVmFyTmFtZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLS8qKgotICogU3RhdGljIHZhcmlhYmxlIG5hbWUgZXJyb3IgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGF0aWNWYXJOYW1lRXJyb3IgZXh0ZW5kcyBTdGF0aWNOYW1lRXJyb3IgewotCi0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTIzMDg0MDI5NTQ4OTI4MjE0NzZMOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBTdGF0aWNWYXJOYW1lRXJyb3IoU3RyaW5nIHJlYXNvbikgewotCQlzdXBlcihyZWFzb24pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvVHlwZUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1R5cGVFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTliMjEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvVHlwZUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNzM3NjMgLSBjb3JyZWN0IGVycm9yIGNvZGVzIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhQYXRoRXhjZXB0aW9uOwotCi0vKioKLSAqIEVycm9yIGNhdXNlZCBieSBiYWQgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBUeXBlRXJyb3IgZXh0ZW5kcyBYUGF0aEV4Y2VwdGlvbiB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gOTMyMjc1MDM1NzA2OTM2ODgzTDsKLQkvLyBlcnJvcmNvZGUgc3BlY2lmaWVkIGluIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAveHF0LWVycm9ycyBpIGZpbmsKLQlwcml2YXRlIFN0cmluZyBfY29kZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciB0eXBlIGVycm9yLgotCSAqIAotCSAqIEBwYXJhbSBjb2RlCi0JICogICAgICAgICAgICBpcyB0aGUgZXJyb3IgY29kZS4KLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIFR5cGVFcnJvcihTdHJpbmcgY29kZSwgU3RyaW5nIGVycikgewotCQlzdXBlcihlcnIpOwotCQlfY29kZSA9IGNvZGU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBlcnJvciBjb2RlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGVycm9yIGNvZGUuCi0JICovCi0JcHVibGljIFN0cmluZyBjb2RlKCkgewotCQlyZXR1cm4gX2NvZGU7Ci0JfQotCi0JLyoqCi0JICogIkZhY3RvcnkiIGZvciBidWlsZGluZyBlcnJvcnMKLQkgKiAKLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICogQHJldHVybiB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBUeXBlRXJyb3IgY2lfbm90X25vZGUoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiQ29udGV4dCBpdGVtIGlzIG5vdCBhIG5vZGUuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBUeXBlRXJyb3IoIlhQVFkwMDIwIiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqIEByZXR1cm4gdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVHlwZUVycm9yIG1peGVkX3ZhbHMoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBzdGVwIGluIGEgcGF0aCBleHByZXNzaW9uIGNvbnRhaW5zIGJvdGggbm9kZXMgYW5kIGF0b21pYyB2YWx1ZXMuIjsKLQotCQlpZiAoZXJyICE9IG51bGwpCi0JCQllcnJvciArPSAiICIgKyBlcnI7Ci0KLQkJcmV0dXJuIG5ldyBUeXBlRXJyb3IoIlhQVFkwMDE4IiwgZXJyb3IpOwotCX0KLQotCS8qKgotCSAqICJGYWN0b3J5IiBmb3IgYnVpbGRpbmcgZXJyb3JzCi0JICogCi0JICogQHBhcmFtIGVycgotCSAqICAgICAgICAgICAgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgotCSAqIEByZXR1cm4gdGhlIGVycm9yLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVHlwZUVycm9yIHN0ZXBfY29uYXRpbnNfYXRvbXMoU3RyaW5nIGVycikgewotCQlTdHJpbmcgZXJyb3IgPSAiVGhlIHJlc3VsdCBvZiBhbiBzdGVwIChvdGhlciB0aGFuIHRoZSBsYXN0IHN0ZXApIGluIGEgcGF0aCBleHByZXNzaW9uIGNvbnRhaW5zIGFuIGF0b21pYyB2YWx1ZS4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IFR5cGVFcnJvcigiWFBUWTAwMTkiLCBlcnJvcik7Ci0JfQotCi0JLyoqCi0JICogIkZhY3RvcnkiIGZvciBidWlsZGluZyBlcnJvcnMKLQkgKiAKLQkgKiBAcGFyYW0gZXJyCi0JICogICAgICAgICAgICBpcyB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IuCi0JICogQHJldHVybiB0aGUgZXJyb3IuCi0JICovCi0JcHVibGljIHN0YXRpYyBUeXBlRXJyb3IgaW52YWxpZF90eXBlKFN0cmluZyBlcnIpIHsKLQkJU3RyaW5nIGVycm9yID0gIlZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVxdWlyZWQgdHlwZS4iOwotCi0JCWlmIChlcnIgIT0gbnVsbCkKLQkJCWVycm9yICs9ICIgIiArIGVycjsKLQotCQlyZXR1cm4gbmV3IFR5cGVFcnJvcigiWFBUWTAwMDQiLCBlcnJvcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEN1cC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEN1cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjE5M2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MDEgKzAsMCBAQAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IENVUCB2MC4xMGsKLS8vIEZyaSBKdW4gMjUgMDE6MTE6MDYgQ0VTVCAyMDEwCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuYXN0LlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3QuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqIENVUCB2MC4xMGsgZ2VuZXJhdGVkIHBhcnNlci4KLSAgKiBAdmVyc2lvbiBGcmkgSnVuIDI1IDAxOjExOjA2IENFU1QgMjAxMAotICAqLwotcHVibGljIGNsYXNzIFhQYXRoQ3VwIGV4dGVuZHMgamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIgewotCi0gIC8qKiBEZWZhdWx0IGNvbnN0cnVjdG9yLiAqLwotICBwdWJsaWMgWFBhdGhDdXAoKSB7c3VwZXIoKTt9Ci0KLSAgLyoqIENvbnN0cnVjdG9yIHdoaWNoIHNldHMgdGhlIGRlZmF1bHQgc2Nhbm5lci4gKi8KLSAgcHVibGljIFhQYXRoQ3VwKGphdmFfY3VwLnJ1bnRpbWUuU2Nhbm5lciBzKSB7c3VwZXIocyk7fQotCi0gIC8qKiBQcm9kdWN0aW9uIHRhYmxlLiAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0IF9wcm9kdWN0aW9uX3RhYmxlW11bXSA9IAotICAgIHVucGFja0Zyb21TdHJpbmdzKG5ldyBTdHJpbmdbXSB7Ci0gICAgIlwwMDBcdTAxMWRcMDAwXDAwMlwxMTRcMDAzXDAwMFwwMDJcMDAyXDAwNFwwMDBcMDAyXDAzMyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDMzXDAwNVwwMDBcMDAyXDA2MVwwMDNcMDAwXDAwMlwwNjFcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA2MVwwMDNcMDAwXDAwMlwwNjFcMDAzXDAwMFwwMDJcMTE1XDAwNVwwMDAiICsKLSAgICAiXDAwMlwwMzZcMDA3XDAwMFwwMDJcMDM2XDAxMFwwMDBcMDAyXDExNlwwMDdcMDAwXDAwMiIgKwotICAgICJcMTE2XDAwN1wwMDBcMDAyXDAzNVwwMDVcMDAwXDAwMlwwMzVcMDEwXDAwMFwwMDJcMTE3IiArCi0gICAgIlwwMTJcMDAwXDAwMlwwNjZcMDAzXDAwMFwwMDJcMDY2XDAwNVwwMDBcMDAyXDA2NVwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDY1XDAwNVwwMDBcMDAyXDA3MFwwMDNcMDAwXDAwMlwwNzBcMDA1XDAwMCIgKwotICAgICJcMDAyXDA3MFwwMDVcMDAwXDAwMlwwNzBcMDA1XDAwMFwwMDJcMDY3XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNjdcMDA1XDAwMFwwMDJcMDYyXDAwM1wwMDBcMDAyXDA2MlwwMDVcMDAwXDAwMlwwNjIiICsKLSAgICAiXDAwNVwwMDBcMDAyXDA1N1wwMDNcMDAwXDAwMlwwNTdcMDA1XDAwMFwwMDJcMDU3XDAwNSIgKwotICAgICJcMDAwXDAwMlwwNTdcMDA1XDAwMFwwMDJcMDU3XDAwNVwwMDBcMDAyXDA1NlwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDU2XDAwNVwwMDBcMDAyXDA1NlwwMDVcMDAwXDAwMlwwNjBcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA2MFwwMDVcMDAwXDAwMlwwNjBcMDA1XDAwMFwwMDJcMDU0XDAwM1wwMDBcMDAyXDA1NCIgKwotICAgICJcMDA2XDAwMFwwMDJcMDUyXDAwM1wwMDBcMDAyXDA1MlwwMDZcMDAwXDAwMlwwNTNcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA1M1wwMDZcMDAwXDAwMlwwNTVcMDAzXDAwMFwwMDJcMDU1XDAwNlwwMDAiICsKLSAgICAiXDAwMlwwNDdcMDAzXDAwMFwwMDJcMDQ3XDAwNFwwMDBcMDAyXDA0N1wwMDRcMDAwXDAwMiIgKwotICAgICJcMTIxXDAwM1wwMDBcMDAyXDA2M1wwMDNcMDAwXDAwMlwwNjNcMDAzXDAwMFwwMDJcMDYzIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwNjNcMDAzXDAwMFwwMDJcMDYzXDAwM1wwMDBcMDAyXDA2M1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDY0XDAwM1wwMDBcMDAyXDA2NFwwMDNcMDAwXDAwMlwwNjRcMDAzXDAwMCIgKwotICAgICJcMDAyXDA2NFwwMDNcMDAwXDAwMlwwNjRcMDAzXDAwMFwwMDJcMDY0XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMjdcMDAzXDAwMFwwMDJcMDI3XDAwM1wwMDBcMDAyXDAyN1wwMDNcMDAwXDAwMlwxMjAiICsKLSAgICAiXDAwM1wwMDBcMDAyXDEyMFwwMDRcMDAwXDAwMlwxMjBcMDA0XDAwMFwwMDJcMTIwXDAwMyIgKwotICAgICJcMDAwXDAwMlwwNDZcMDAzXDAwMFwwMDJcMDQ2XDAwNVwwMDBcMDAyXDA0NlwwMDVcMDAwIiArCi0gICAgIlwwMDJcMDQ1XDAwM1wwMDBcMDAyXDA0NVwwMDNcMDAwXDAwMlwxMjJcMDA0XDAwMFwwMDIiICsKLSAgICAiXDEyMlwwMDRcMDAwXDAwMlwwNDNcMDA0XDAwMFwwMDJcMDQzXDAwM1wwMDBcMDAyXDAyNiIgKwotICAgICJcMDA0XDAwMFwwMDJcMDI2XDAwNFwwMDBcMDAyXDAyNlwwMDRcMDAwXDAwMlwwMjZcMDA0IiArCi0gICAgIlwwMDBcMDAyXDAyNlwwMDRcMDAwXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDI2XDAwNFwwMDAiICsKLSAgICAiXDAwMlwwMjZcMDA0XDAwMFwwMDJcMDQ0XDAwNFwwMDBcMDAyXDA0NFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDQxXDAwNFwwMDBcMDAyXDA0MVwwMDNcMDAwXDAwMlwwMjVcMDA0XDAwMFwwMDJcMDI1IiArCi0gICAgIlwwMDRcMDAwXDAwMlwwMjVcMDA0XDAwMFwwMDJcMDI1XDAwNFwwMDBcMDAyXDAyNVwwMDQiICsKLSAgICAiXDAwMFwwMDJcMDQyXDAwM1wwMDBcMDAyXDA0MFwwMDNcMDAwXDAwMlwwNDBcMDAzXDAwMCIgKwotICAgICJcMDAyXDA3MVwwMDNcMDAwXDAwMlwwNzFcMDAzXDAwMFwwMDJcMDIzXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMjNcMDA1XDAwMFwwMDJcMDIzXDAwNVwwMDBcMDAyXDEyM1wwMDRcMDAwXDAwMlwwMzQiICsKLSAgICAiXDAwNFwwMDBcMDAyXDAzNFwwMDJcMDAwXDAwMlwxMjRcMDA1XDAwMFwwMDJcMDM3XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMzdcMDAzXDAwMFwwMDJcMDM3XDAwM1wwMDBcMDAyXDAzN1wwMDNcMDAwIiArCi0gICAgIlwwMDJcMDM3XDAwM1wwMDBcMDAyXDA3M1wwMDNcMDAwXDAwMlwwNzNcMDAzXDAwMFwwMDIiICsKLSAgICAiXDA3N1wwMDNcMDAwXDAwMlwwNzdcMDAzXDAwMFwwMDJcMDc3XDAwM1wwMDBcMDAyXDA3NCIgKwotICAgICJcMDA0XDAwMFwwMDJcMDMyXDAwNFwwMDBcMDAyXDAzMlwwMDVcMDAwXDAwMlwwNzVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDA3NlwwMDVcMDAwXDAwMlwwNzZcMDA2XDAwMFwwMDJcMDMxXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMzFcMDA1XDAwMFwwMDJcMDUwXDAwM1wwMDBcMDAyXDA1MFwwMDRcMDAwXDAwMiIgKwotICAgICJcMDUxXDAwM1wwMDBcMDAyXDA1MVwwMDRcMDAwXDAwMlwwNTFcMDA1XDAwMFwwMDJcMDI0IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMjRcMDAzXDAwMFwwMDJcMDI0XDAwM1wwMDBcMDAyXDAzMFwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDMwXDAwM1wwMDBcMDAyXDAzMFwwMDVcMDAwXDAwMlwwMTdcMDAzXDAwMCIgKwotICAgICJcMDAyXDA3MlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwNzJcMDAzXDAwMFwwMDJcMDcyXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMlwwNzIiICsKLSAgICAiXDAwM1wwMDBcMDAyXDA3MlwwMDNcMDAwXDAwMlwwNzJcMDAzXDAwMFwwMDJcMTEwXDAwNSIgKwotICAgICJcMDAwXDAwMlwxMDNcMDA1XDAwMFwwMDJcMTAzXDAwNlwwMDBcMDAyXDEwM1wwMDZcMDAwIiArCi0gICAgIlwwMDJcMTA0XDAwNVwwMDBcMDAyXDEwNVwwMDVcMDAwXDAwMlwxMDZcMDA1XDAwMFwwMDIiICsKLSAgICAiXDEwNlwwMDZcMDAwXDAwMlwxMDZcMDA2XDAwMFwwMDJcMTA3XDAwNVwwMDBcMDAyXDEwNyIgKwotICAgICJcMDA2XDAwMFwwMDJcMTA3XDAxMFwwMDBcMDAyXDAxNVwwMDNcMDAwXDAwMlwwMTVcMDAzIiArCi0gICAgIlwwMDBcMDAyXDExMlwwMDZcMDAwXDAwMlwwMTRcMDAzXDAwMFwwMDJcMTExXDAwNVwwMDAiICsKLSAgICAiXDAwMlwxMTFcMDA2XDAwMFwwMDJcMTExXDAxMFwwMDBcMDAyXDExMVwwMTFcMDAwXDAwMiIgKwotICAgICJcMDExXDAwM1wwMDBcMDAyXDAxMVwwMDNcMDAwXDAwMlwxMTNcMDA2XDAwMFwwMDJcMDEwIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMTZcMDAzXDAwMFwwMDJcMDEzXDAwM1wwMDBcMDAyXDAxMlwwMDMiICsKLSAgICAiXDAwMFwwMDJcMTAxXDAwM1wwMDBcMDAyXDEwMFwwMDNcMDAwXDAwMlwxMDJcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwN1wwMDNcMDAwXDAwMlwwMjJcMDAzXDAwMFwwMDJcMDIwXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMjBcMDA1XDAwMFwwMDJcMDA1XDAwM1wwMDBcMDAyXDAwNlwwMDNcMDAwXDAwMlwwMjEiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAyMVwwMDVcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwIiArCi0gICAgIlwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwMyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMiIgKwotICAgICJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzIiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDMiICsKLSAgICAiXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDMiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwIiArCi0gICAgIlwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwMyIgKwotICAgICJcMDAzXDAwMFwwMDJcMDAzXDAwM1wwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwM1wwMDNcMDAwXDAwMlwwMDNcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMiIgKwotICAgICJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0IiArCi0gICAgIlwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDMiICsKLSAgICAiXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMCIgKwotICAgICJcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyIiArCi0gICAgIlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDQiICsKLSAgICAiXDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwMyIgKwotICAgICJcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwIiArCi0gICAgIlwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDIiICsKLSAgICAiXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNCIgKwotICAgICJcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzIiArCi0gICAgIlwwMDBcMDAyXDAwNFwwMDNcMDAwXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDAiICsKLSAgICAiXDAwMlwwMDRcMDAzXDAwMFwwMDJcMDA0XDAwM1wwMDBcMDAyXDAwNFwwMDMiIH0pOwotCi0gIC8qKiBBY2Nlc3MgdG8gcHJvZHVjdGlvbiB0YWJsZS4gKi8KLSAgcHVibGljIHNob3J0W11bXSBwcm9kdWN0aW9uX3RhYmxlKCkge3JldHVybiBfcHJvZHVjdGlvbl90YWJsZTt9Ci0KLSAgLyoqIFBhcnNlLWFjdGlvbiB0YWJsZS4gKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBzaG9ydFtdW10gX2FjdGlvbl90YWJsZSA9IAotICAgIHVucGFja0Zyb21TdHJpbmdzKG5ldyBTdHJpbmdbXSB7Ci0gICAgIlwwMDBcdTAxOTRcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNCIgKwotICAgICJcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1IiArCi0gICAgIlwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDUiICsKLSAgICAiXDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MSIgKwotICAgICJcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyIiArCi0gICAgIlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjIiICsKLSAgICAiXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3NyIgKwotICAgICJcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1IiArCi0gICAgIlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTQiICsKLSAgICAiXDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1NyIgKwotICAgICJcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxIiArCi0gICAgIlwxMzJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0MVwwMDRcdWZmNDFcMDA1XHVmZjQxXDAwNlx1ZmYwYSIgKwotICAgICJcMDA3XHVmZjQxXDAxMFx1ZmY0MVwwMTFcdWZmNDFcMDEyXHVmZjQxXDAxM1x1ZmY0MVwwMTRcdWZmNDFcMDE1IiArCi0gICAgIlx1ZmY0MVwwMTZcdWZmNDFcMDE3XHVmZjQxXDAyMFx1ZmY0MVwwMjFcdWZmNDFcMDIyXHVmZjQxXDAyM1x1ZmY0MSIgKwotICAgICJcMDI0XHVmZjQxXDAyNVx1ZmY0MVwwMjZcdTAxOTZcMDMxXHVmZjQxXDAzMlx1ZmY0MVwwNTNcdWZmNDFcMDU0IiArCi0gICAgIlx1ZmY0MVwwNTVcdWZmNDFcMDU2XHVmZjQxXDA1N1x1ZmY0MVwwNjBcdWZmNDFcMDYxXHVmZjQxXDA2Mlx1ZmY0MSIgKwotICAgICJcMDYzXHVmZjQxXDA2NFx1ZmY0MVwwNjVcdWZmNDFcMDY2XHVmZjQxXDA2N1x1ZmY0MVwwNzFcdWZmNDFcMDczIiArCi0gICAgIlx1ZmY0MVwwNzRcdWZmNDFcMDc1XHVmZjQxXDEwMFx1ZmY0MVwxMDFcdWZmNDFcMTAyXHVmZjQxXDEwN1x1ZmY0MSIgKwotICAgICJcMTEwXHVmZjQxXDExMVx1ZmY0MVwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjMzXDAwNFx1ZmYzM1wwMDUiICsKLSAgICAiXHVmZjMzXDAwNlx1ZmVmY1wwMDdcdWZmMzNcMDEwXHVmZjMzXDAxMVx1ZmYzM1wwMTJcdWZmMzNcMDEzXHVmZjMzIiArCi0gICAgIlwwMTRcdWZmMzNcMDE1XHVmZjMzXDAxNlx1ZmYzM1wwMTdcdWZmMzNcMDIwXHVmZjMzXDAyMVx1ZmYzM1wwMjIiICsKLSAgICAiXHVmZjMzXDAyM1x1ZmYzM1wwMjRcdWZmMzNcMDI1XHVmZjMzXDAzMVx1ZmYzM1wwMzJcdWZmMzNcMDUzXHVmZjMzIiArCi0gICAgIlwwNTRcdWZmMzNcMDU1XHVmZjMzXDA1Nlx1ZmYzM1wwNTdcdWZmMzNcMDYwXHVmZjMzXDA2MVx1ZmYzM1wwNjIiICsKLSAgICAiXHVmZjMzXDA2M1x1ZmYzM1wwNjRcdWZmMzNcMDY1XHVmZjMzXDA2Nlx1ZmYzM1wwNjdcdWZmMzNcMDcxXHVmZjMzIiArCi0gICAgIlwwNzNcdWZmMzNcMDc0XHVmZjMzXDA3NVx1ZmYzM1wxMDBcdWZmMzNcMTAxXHVmZjMzXDEwMlx1ZmYzM1wxMDciICsKLSAgICAiXHVmZjMzXDExMFx1ZmYzM1wxMTFcdWZmMzNcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYxMVwwMDRcdWZmMTEiICsKLSAgICAiXDAwNVx1ZmYxMVwwMDZcdWZlZTZcMDA3XHVmZjExXDAxMFx1ZmYxMVwwMTFcdWZmMTFcMDEyXHVmZjExXDAxMyIgKwotICAgICJcdWZmMTFcMDE0XHVmZjExXDAxNVx1ZmYxMVwwMTZcdWZmMTFcMDE3XHVmZjExXDAyMFx1ZmYxMVwwMjFcdWZmMTEiICsKLSAgICAiXDAyMlx1ZmYxMVwwMjNcdWZmMTFcMDI0XHVmZjExXDAyNVx1ZmYxMVwwMzFcdWZmMTFcMDMyXHVmZjExXDA1MyIgKwotICAgICJcdWZmMTFcMDU0XHVmZjExXDA1NVx1ZmYxMVwwNTZcdWZmMTFcMDU3XHVmZjExXDA2MFx1ZmYxMVwwNjFcdWZmMTEiICsKLSAgICAiXDA2Mlx1ZmYxMVwwNjNcdWZmMTFcMDY0XHVmZjExXDA2NVx1ZmYxMVwwNjZcdWZmMTFcMDY3XHVmZjExXDA3MSIgKwotICAgICJcdWZmMTFcMDczXHVmZjExXDA3NFx1ZmYxMVwwNzVcdWZmMTFcMTAwXHVmZjExXDEwMVx1ZmYxMVwxMDJcdWZmMTEiICsKLSAgICAiXDEwN1x1ZmYxMVwxMTBcdWZmMTFcMTExXHVmZjExXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOGNcMDA0IiArCi0gICAgIlx1ZmY4Y1wwMDVcdWZmOGNcMDA3XHVmZjhjXDAxMFx1ZmY4Y1wwMTFcdWZmOGNcMDEyXHVmZjhjXDAxM1x1ZmY4YyIgKwotICAgICJcMDE0XHVmZjhjXDAxNVx1ZmY4Y1wwMTZcdWZmOGNcMDE3XHVmZjhjXDAyMFx1ZmY4Y1wwMjFcdWZmOGNcMDIyIiArCi0gICAgIlx1ZmY4Y1wwMjNcdWZmOGNcMDI0XHVmZjhjXDAyNVx1ZmY4Y1wwMzJcdWZmOGNcMDUzXHVmZjhjXDA1NFx1ZmY4YyIgKwotICAgICJcMDU1XHVmZjhjXDA1Nlx1ZmY4Y1wwNTdcdWZmOGNcMDYwXHVmZjhjXDA2MVx1ZmY4Y1wwNjJcdWZmOGNcMDYzIiArCi0gICAgIlx1ZmY4Y1wwNjRcdWZmOGNcMDY1XHVmZjhjXDA2Nlx1ZmY4Y1wwNjdcdWZmOGNcMDcxXHVmZjhjXDA3M1x1ZmY4YyIgKwotICAgICJcMDc0XHVmZjhjXDA3NVx1ZmY4Y1wxMDBcdWZmOGNcMTAxXHVmZjhjXDEwMlx1ZmY4Y1wxMDdcdWZmOGNcMTEwIiArCi0gICAgIlx1ZmY4Y1wxMTFcdWZmOGNcMDAxXDAwMlwwMDBcMjA2XDAwNlwxMTBcMDEyXDExNlwwMjdcMDc3IiArCi0gICAgIlwwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDEiICsKLSAgICAiXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNCIgKwotICAgICJcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2IiArCi0gICAgIlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTEiICsKLSAgICAiXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3MyIgKwotICAgICJcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2IiArCi0gICAgIlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTAiICsKLSAgICAiXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NiIgKwotICAgICJcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1IiArCi0gICAgIlwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMjIiICsKLSAgICAiXDAwMlx1ZmZmYVwwMDVcdWZmZmFcMDA3XHVmZmZhXDAzMlx1ZmZmYVwxMDBcdWZmZmFcMTAxXHVmZmZhXDEwNyIgKwotICAgICJcdWZmZmFcMTExXHUwMTkzXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2ZcMDA0XHVmZjNmXDAwNVx1ZmYzZiIgKwotICAgICJcMDA2XHVmZjA4XDAwN1x1ZmYzZlwwMTBcdWZmM2ZcMDExXHVmZjNmXDAxMlx1ZmYzZlwwMTNcdWZmM2ZcMDE0IiArCi0gICAgIlx1ZmYzZlwwMTVcdWZmM2ZcMDE2XHVmZjNmXDAxN1x1ZmYzZlwwMjBcdWZmM2ZcMDIxXHVmZjNmXDAyMlx1ZmYzZiIgKwotICAgICJcMDIzXHVmZjNmXDAyNFx1ZmYzZlwwMjVcdWZmM2ZcMDI2XHUwMTkyXDAzMVx1ZmYzZlwwMzJcdWZmM2ZcMDUzIiArCi0gICAgIlx1ZmYzZlwwNTRcdWZmM2ZcMDU1XHVmZjNmXDA1Nlx1ZmYzZlwwNTdcdWZmM2ZcMDYwXHVmZjNmXDA2MVx1ZmYzZiIgKwotICAgICJcMDYyXHVmZjNmXDA2M1x1ZmYzZlwwNjRcdWZmM2ZcMDY1XHVmZjNmXDA2Nlx1ZmYzZlwwNjdcdWZmM2ZcMDcxIiArCi0gICAgIlx1ZmYzZlwwNzNcdWZmM2ZcMDc0XHVmZjNmXDA3NVx1ZmYzZlwxMDBcdWZmM2ZcMTAxXHVmZjNmXDEwMlx1ZmYzZiIgKwotICAgICJcMTA3XHVmZjNmXDExMFx1ZmYzZlwxMTFcdWZmM2ZcMDAxXDAwMlwwMDBcMTY0XDAxMlwxMTZcMDM2IiArCi0gICAgIlwyNDZcMDM3XDI2M1wwNDBcdTAxMjRcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMSIgKwotICAgICJcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzIiArCi0gICAgIlwyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjAiICsKLSAgICAiXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MCIgKwotICAgICJcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1IiArCi0gICAgIlwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDUiICsKLSAgICAiXDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNCIgKwotICAgICJcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyIiArCi0gICAgIlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzZCIgKwotICAgICJcMDA0XHVmZjNkXDAwNVx1ZmYzZFwwMDZcdWZmMDZcMDA3XHVmZjNkXDAxMFx1ZmYzZFwwMTFcdWZmM2RcMDEyIiArCi0gICAgIlx1ZmYzZFwwMTNcdWZmM2RcMDE0XHVmZjNkXDAxNVx1ZmYzZFwwMTZcdWZmM2RcMDE3XHVmZjNkXDAyMFx1ZmYzZCIgKwotICAgICJcMDIxXHVmZjNkXDAyMlx1ZmYzZFwwMjNcdWZmM2RcMDI0XHVmZjNkXDAyNVx1ZmYzZFwwMjZcdTAxOTBcMDMxIiArCi0gICAgIlx1ZmYzZFwwMzJcdWZmM2RcMDUzXHVmZjNkXDA1NFx1ZmYzZFwwNTVcdWZmM2RcMDU2XHVmZjNkXDA1N1x1ZmYzZCIgKwotICAgICJcMDYwXHVmZjNkXDA2MVx1ZmYzZFwwNjJcdWZmM2RcMDYzXHVmZjNkXDA2NFx1ZmYzZFwwNjVcdWZmM2RcMDY2IiArCi0gICAgIlx1ZmYzZFwwNjdcdWZmM2RcMDcxXHVmZjNkXDA3M1x1ZmYzZFwwNzRcdWZmM2RcMDc1XHVmZjNkXDEwMFx1ZmYzZCIgKwotICAgICJcMTAxXHVmZjNkXDEwMlx1ZmYzZFwxMDdcdWZmM2RcMTEwXHVmZjNkXDExMVx1ZmYzZFwwMDFcMDAyXDAwMCIgKwotICAgICJcMDA0XDAwMlx1MDE4ZlwwMDFcMDAyXDAwMFwxMjBcMDAyXHVmZmQzXDAwNVx1ZmZkM1wwMDdcdWZmZDMiICsKLSAgICAiXDAxMFx1ZmZkM1wwMTFcdWZmZDNcMDEyXHVmZmQzXDAxM1x1ZmZkM1wwMTRcdWZmZDNcMDE1XHVmZmQzXDAxNiIgKwotICAgICJcdWZmZDNcMDE3XHVmZmQzXDAyMFx1ZmZkM1wwMjFcdWZmZDNcMDIyXHVmZmQzXDAyM1x1ZmZkM1wwMzJcdWZmZDMiICsKLSAgICAiXDA1M1x1ZmZkM1wwNTRcdWZmZDNcMDU1XHVmZmQzXDA1Nlx1ZmZkM1wwNTdcdWZmZDNcMDYwXHVmZmQzXDA2MSIgKwotICAgICJcdWZmZDNcMDYyXHVmZmQzXDA2M1x1ZmZkM1wwNjRcdWZmZDNcMDY1XHVmZmQzXDA2Nlx1ZmZkM1wwNjdcdWZmZDMiICsKLSAgICAiXDA3MVx1ZmZkM1wwNzNcdWZmZDNcMDc0XHUwMThjXDA3NVx1ZmZkM1wxMDBcdWZmZDNcMTAxXHVmZmQzXDEwMiIgKwotICAgICJcdWZmZDNcMTA3XHVmZmQzXDExMFx1ZmZkM1wxMTFcdWZmZDNcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYxMCIgKwotICAgICJcMDA0XHVmZjEwXDAwNVx1ZmYxMFwwMDZcdWZlZTVcMDA3XHVmZjEwXDAxMFx1ZmYxMFwwMTFcdWZmMTBcMDEyIiArCi0gICAgIlx1ZmYxMFwwMTNcdWZmMTBcMDE0XHVmZjEwXDAxNVx1ZmYxMFwwMTZcdWZmMTBcMDE3XHVmZjEwXDAyMFx1ZmYxMCIgKwotICAgICJcMDIxXHVmZjEwXDAyMlx1ZmYxMFwwMjNcdWZmMTBcMDI0XHVmZjEwXDAyNVx1ZmYxMFwwMzFcdWZmMTBcMDMyIiArCi0gICAgIlx1ZmYxMFwwNTNcdWZmMTBcMDU0XHVmZjEwXDA1NVx1ZmYxMFwwNTZcdWZmMTBcMDU3XHVmZjEwXDA2MFx1ZmYxMCIgKwotICAgICJcMDYxXHVmZjEwXDA2Mlx1ZmYxMFwwNjNcdWZmMTBcMDY0XHVmZjEwXDA2NVx1ZmYxMFwwNjZcdWZmMTBcMDY3IiArCi0gICAgIlx1ZmYxMFwwNzFcdWZmMTBcMDczXHVmZjEwXDA3NFx1ZmYxMFwwNzVcdWZmMTBcMTAwXHVmZjEwXDEwMVx1ZmYxMCIgKwotICAgICJcMTAyXHVmZjEwXDEwN1x1ZmYxMFwxMTBcdWZmMTBcMTExXHVmZjEwXDAwMVwwMDJcMDAwXDExMlwwMDIiICsKLSAgICAiXHVmZmQ5XDAwNVx1ZmZkOVwwMDdcdWZmZDlcMDEwXHVmZmQ5XDAxMVx1ZmZkOVwwMTJcdWZmZDlcMDEzXHVmZmQ5IiArCi0gICAgIlwwMTRcdWZmZDlcMDE1XHVmZmQ5XDAxNlx1ZmZkOVwwMTdcdWZmZDlcMDIwXHVmZmQ5XDAyMVx1ZmZkOVwwMjIiICsKLSAgICAiXHVmZmQ5XDAyM1x1ZmZkOVwwMzJcdWZmZDlcMDUzXHVmZmQ5XDA1NFx1ZmZkOVwwNTVcdWZmZDlcMDU2XHVmZmQ5IiArCi0gICAgIlwwNTdcdWZmZDlcMDYwXHVmZmQ5XDA2MVx1ZmZkOVwwNjJcdWZmZDlcMDYzXHVmZmQ5XDA2NFx1ZmZkOVwwNjUiICsKLSAgICAiXHVmZmQ5XDA2Nlx1ZmZkOVwwNjdcdTAxODlcMDc1XHVmZmQ5XDEwMFx1ZmZkOVwxMDFcdWZmZDlcMTAyXHVmZmQ5IiArCi0gICAgIlwxMDdcdWZmZDlcMTEwXHVmZmQ5XDExMVx1ZmZkOVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjIwXDAwNCIgKwotICAgICJcdWZmMjBcMDA1XHVmZjIwXDAwNlx1MDE4MVwwMDdcdWZmMjBcMDEwXHVmZjIwXDAxMVx1ZmYyMFwwMTJcdWZmMjAiICsKLSAgICAiXDAxM1x1ZmYyMFwwMTRcdWZmMjBcMDE1XHVmZjIwXDAxNlx1ZmYyMFwwMTdcdWZmMjBcMDIwXHVmZjIwXDAyMSIgKwotICAgICJcdWZmMjBcMDIyXHVmZjIwXDAyM1x1ZmYyMFwwMjRcdWZmMjBcMDI1XHVmZjIwXDAzMVx1ZmYyMFwwMzJcdWZmMjAiICsKLSAgICAiXDAzNVx1ZmYyMFwwNTNcdWZmMjBcMDU0XHVmZjIwXDA1NVx1ZmYyMFwwNTZcdWZmMjBcMDU3XHVmZjIwXDA2MCIgKwotICAgICJcdWZmMjBcMDYxXHVmZjIwXDA2Mlx1ZmYyMFwwNjNcdWZmMjBcMDY0XHVmZjIwXDA2NVx1ZmYyMFwwNjZcdWZmMjAiICsKLSAgICAiXDA2N1x1ZmYyMFwwNzFcdWZmMjBcMDczXHVmZjIwXDA3NFx1ZmYyMFwwNzVcdWZmMjBcMTAwXHVmZjIwXDEwMSIgKwotICAgICJcdWZmMjBcMTAyXHVmZjIwXDEwN1x1ZmYyMFwxMTBcdWZmMjBcMTExXHVmZjIwXDAwMVwwMDJcMDAwXDEyNiIgKwotICAgICJcMDAyXHVmZjhiXDAwNFx1ZmY4YlwwMDVcdWZmOGJcMDA3XHVmZjhiXDAxMFx1ZmY4YlwwMTFcdWZmOGJcMDEyIiArCi0gICAgIlx1ZmY4YlwwMTNcdWZmOGJcMDE0XHVmZjhiXDAxNVx1ZmY4YlwwMTZcdWZmOGJcMDE3XHVmZjhiXDAyMFx1ZmY4YiIgKwotICAgICJcMDIxXHVmZjhiXDAyMlx1ZmY4YlwwMjNcdWZmOGJcMDI0XHVmZjhiXDAyNVx1ZmY4YlwwMzJcdWZmOGJcMDUzIiArCi0gICAgIlx1ZmY4YlwwNTRcdWZmOGJcMDU1XHVmZjhiXDA1Nlx1ZmY4YlwwNTdcdWZmOGJcMDYwXHVmZjhiXDA2MVx1ZmY4YiIgKwotICAgICJcMDYyXHVmZjhiXDA2M1x1ZmY4YlwwNjRcdWZmOGJcMDY1XHVmZjhiXDA2Nlx1ZmY4YlwwNjdcdWZmOGJcMDcxIiArCi0gICAgIlx1ZmY4YlwwNzNcdWZmOGJcMDc0XHVmZjhiXDA3NVx1ZmY4YlwxMDBcdWZmOGJcMTAxXHVmZjhiXDEwMlx1ZmY4YiIgKwotICAgICJcMTA3XHVmZjhiXDExMFx1ZmY4YlwxMTFcdWZmOGJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzZVwwMDQiICsKLSAgICAiXHVmZjNlXDAwNVx1ZmYzZVwwMDZcdWZmMDdcMDA3XHVmZjNlXDAxMFx1ZmYzZVwwMTFcdWZmM2VcMDEyXHVmZjNlIiArCi0gICAgIlwwMTNcdWZmM2VcMDE0XHVmZjNlXDAxNVx1ZmYzZVwwMTZcdWZmM2VcMDE3XHVmZjNlXDAyMFx1ZmYzZVwwMjEiICsKLSAgICAiXHVmZjNlXDAyMlx1ZmYzZVwwMjNcdWZmM2VcMDI0XHVmZjNlXDAyNVx1ZmYzZVwwMjZcdTAxODBcMDMxXHVmZjNlIiArCi0gICAgIlwwMzJcdWZmM2VcMDUzXHVmZjNlXDA1NFx1ZmYzZVwwNTVcdWZmM2VcMDU2XHVmZjNlXDA1N1x1ZmYzZVwwNjAiICsKLSAgICAiXHVmZjNlXDA2MVx1ZmYzZVwwNjJcdWZmM2VcMDYzXHVmZjNlXDA2NFx1ZmYzZVwwNjVcdWZmM2VcMDY2XHVmZjNlIiArCi0gICAgIlwwNjdcdWZmM2VcMDcxXHVmZjNlXDA3M1x1ZmYzZVwwNzRcdWZmM2VcMDc1XHVmZjNlXDEwMFx1ZmYzZVwxMDEiICsKLSAgICAiXHVmZjNlXDEwMlx1ZmYzZVwxMDdcdWZmM2VcMTEwXHVmZjNlXDExMVx1ZmYzZVwwMDFcMDAyXDAwMFwyNDQiICsKLSAgICAiXDAwMlx1ZmZiZVwwMDVcdWZmYmVcMDA2XDExMFwwMDdcdWZmYmVcMDEwXHVmZmJlXDAxMVx1ZmZiZVwwMTIiICsKLSAgICAiXDExNlwwMTNcdWZmYmVcMDE0XHVmZmJlXDAxNVx1ZmZiZVwwMTZcdWZmYmVcMDE3XHVmZmJlXDAyMFx1ZmZiZSIgKwotICAgICJcMDIxXHVmZmJlXDAyMlx1ZmZiZVwwMjNcdWZmYmVcMDI3XDA3N1wwMzBcMTI1XDAzMlx1ZmZiZVwwMzMiICsKLSAgICAiXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNCIgKwotICAgICJcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxIiArCi0gICAgIlwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDYiICsKLSAgICAiXDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NiIgKwotICAgICJcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxIiArCi0gICAgIlwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDMiICsKLSAgICAiXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MiIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwIiArCi0gICAgIlwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDIiICsKLSAgICAiXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMzJcMDA0IiArCi0gICAgIlx1ZmYzMlwwMDVcdWZmMzJcMDA2XHVmZWZiXDAwN1x1ZmYzMlwwMTBcdWZmMzJcMDExXHVmZjMyXDAxMlx1ZmYzMiIgKwotICAgICJcMDEzXHVmZjMyXDAxNFx1ZmYzMlwwMTVcdWZmMzJcMDE2XHVmZjMyXDAxN1x1ZmYzMlwwMjBcdWZmMzJcMDIxIiArCi0gICAgIlx1ZmYzMlwwMjJcdWZmMzJcMDIzXHVmZjMyXDAyNFx1ZmYzMlwwMjVcdWZmMzJcMDMxXHVmZjMyXDAzMlx1ZmYzMiIgKwotICAgICJcMDUzXHVmZjMyXDA1NFx1ZmYzMlwwNTVcdWZmMzJcMDU2XHVmZjMyXDA1N1x1ZmYzMlwwNjBcdWZmMzJcMDYxIiArCi0gICAgIlx1ZmYzMlwwNjJcdWZmMzJcMDYzXHVmZjMyXDA2NFx1ZmYzMlwwNjVcdWZmMzJcMDY2XHVmZjMyXDA2N1x1ZmYzMiIgKwotICAgICJcMDcxXHVmZjMyXDA3M1x1ZmYzMlwwNzRcdWZmMzJcMDc1XHVmZjMyXDEwMFx1ZmYzMlwxMDFcdWZmMzJcMTAyIiArCi0gICAgIlx1ZmYzMlwxMDdcdWZmMzJcMTEwXHVmZjMyXDExMVx1ZmYzMlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjkwIiArCi0gICAgIlwwMDRcdWZmOTBcMDA1XHVmZjkwXDAwN1x1ZmY5MFwwMTBcdWZmOTBcMDExXHVmZjkwXDAxMlx1ZmY5MFwwMTMiICsKLSAgICAiXHVmZjkwXDAxNFx1ZmY5MFwwMTVcdWZmOTBcMDE2XHVmZjkwXDAxN1x1ZmY5MFwwMjBcdWZmOTBcMDIxXHVmZjkwIiArCi0gICAgIlwwMjJcdWZmOTBcMDIzXHVmZjkwXDAyNFx1ZmY5MFwwMjVcdWZmOTBcMDMyXHVmZjkwXDA1M1x1ZmY5MFwwNTQiICsKLSAgICAiXHVmZjkwXDA1NVx1ZmY5MFwwNTZcdWZmOTBcMDU3XHVmZjkwXDA2MFx1ZmY5MFwwNjFcdWZmOTBcMDYyXHVmZjkwIiArCi0gICAgIlwwNjNcdWZmOTBcMDY0XHVmZjkwXDA2NVx1ZmY5MFwwNjZcdWZmOTBcMDY3XHVmZjkwXDA3MVx1ZmY5MFwwNzMiICsKLSAgICAiXHVmZjkwXDA3NFx1ZmY5MFwwNzVcdWZmOTBcMTAwXHVmZjkwXDEwMVx1ZmY5MFwxMDJcdWZmOTBcMTA3XHVmZjkwIiArCi0gICAgIlwxMTBcdWZmOTBcMTExXHVmZjkwXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMWNcMDA0XHVmZjFjXDAwNSIgKwotICAgICJcdWZmMWNcMDA2XHUwMTdkXDAwN1x1ZmYxY1wwMTBcdWZmMWNcMDExXHVmZjFjXDAxMlx1ZmYxY1wwMTNcdWZmMWMiICsKLSAgICAiXDAxNFx1ZmYxY1wwMTVcdWZmMWNcMDE2XHVmZjFjXDAxN1x1ZmYxY1wwMjBcdWZmMWNcMDIxXHVmZjFjXDAyMiIgKwotICAgICJcdWZmMWNcMDIzXHVmZjFjXDAyNFx1ZmYxY1wwMjVcdWZmMWNcMDMxXHVmZjFjXDAzMlx1ZmYxY1wwMzVcdWZmMWMiICsKLSAgICAiXDA1M1x1ZmYxY1wwNTRcdWZmMWNcMDU1XHVmZjFjXDA1Nlx1ZmYxY1wwNTdcdWZmMWNcMDYwXHVmZjFjXDA2MSIgKwotICAgICJcdWZmMWNcMDYyXHVmZjFjXDA2M1x1ZmYxY1wwNjRcdWZmMWNcMDY1XHVmZjFjXDA2Nlx1ZmYxY1wwNjdcdWZmMWMiICsKLSAgICAiXDA3MVx1ZmYxY1wwNzNcdWZmMWNcMDc0XHVmZjFjXDA3NVx1ZmYxY1wxMDBcdWZmMWNcMTAxXHVmZjFjXDEwMiIgKwotICAgICJcdWZmMWNcMTA3XHVmZjFjXDExMFx1ZmYxY1wxMTFcdWZmMWNcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3NiIgKwotICAgICJcMDA0XHVmZjc2XDAwNVx1ZmY3NlwwMDdcdWZmNzZcMDEwXHVmZjc2XDAxMVx1ZmY3NlwwMTJcdWZmNzZcMDEzIiArCi0gICAgIlx1ZmY3NlwwMTRcdWZmNzZcMDE1XHVmZjc2XDAxNlx1ZmY3NlwwMTdcdWZmNzZcMDIwXHVmZjc2XDAyMVx1ZmY3NiIgKwotICAgICJcMDIyXHVmZjc2XDAyM1x1ZmY3NlwwMjRcdWZmNzZcMDI1XHVmZjc2XDAzMlx1ZmY3NlwwMzVcdWZmNzZcMDUzIiArCi0gICAgIlx1ZmY3NlwwNTRcdWZmNzZcMDU1XHVmZjc2XDA1Nlx1ZmY3NlwwNTdcdWZmNzZcMDYwXHVmZjc2XDA2MVx1ZmY3NiIgKwotICAgICJcMDYyXHVmZjc2XDA2M1x1ZmY3NlwwNjRcdWZmNzZcMDY1XHVmZjc2XDA2Nlx1ZmY3NlwwNjdcdWZmNzZcMDcxIiArCi0gICAgIlx1ZmY3NlwwNzNcdWZmNzZcMDc0XHVmZjc2XDA3NVx1ZmY3NlwxMDBcdWZmNzZcMTAxXHVmZjc2XDEwMlx1ZmY3NiIgKwotICAgICJcMTA3XHVmZjc2XDExMFx1ZmY3NlwxMTFcdWZmNzZcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3MFwwMDQiICsKLSAgICAiXHVmZjcwXDAwNVx1ZmY3MFwwMDdcdWZmNzBcMDEwXHVmZjcwXDAxMVx1ZmY3MFwwMTJcdWZmNzBcMDEzXHVmZjcwIiArCi0gICAgIlwwMTRcdWZmNzBcMDE1XHVmZjcwXDAxNlx1ZmY3MFwwMTdcdWZmNzBcMDIwXHVmZjcwXDAyMVx1ZmY3MFwwMjIiICsKLSAgICAiXHVmZjcwXDAyM1x1ZmY3MFwwMjRcdWZmNzBcMDI1XHVmZjcwXDAzMlx1ZmY3MFwwMzVcdWZmNzBcMDUzXHVmZjcwIiArCi0gICAgIlwwNTRcdWZmNzBcMDU1XHVmZjcwXDA1Nlx1ZmY3MFwwNTdcdWZmNzBcMDYwXHVmZjcwXDA2MVx1ZmY3MFwwNjIiICsKLSAgICAiXHVmZjcwXDA2M1x1ZmY3MFwwNjRcdWZmNzBcMDY1XHVmZjcwXDA2Nlx1ZmY3MFwwNjdcdWZmNzBcMDcxXHVmZjcwIiArCi0gICAgIlwwNzNcdWZmNzBcMDc0XHVmZjcwXDA3NVx1ZmY3MFwxMDBcdWZmNzBcMTAxXHVmZjcwXDEwMlx1ZmY3MFwxMDciICsKLSAgICAiXHVmZjcwXDExMFx1ZmY3MFwxMTFcdWZmNzBcMDAxXDAwMlwwMDBcMDcwXDAwMlx1ZmZlOVwwMDVcdWZmZTkiICsKLSAgICAiXDAwN1x1ZmZlOVwwMTBcdTAxNzhcMDExXHUwMTc5XDAxNFx1ZmZlOVwwMTVcdWZmZTlcMDE2XHVmZmU5XDAxNyIgKwotICAgICJcdWZmZTlcMDIwXHVmZmU5XDAyMVx1ZmZlOVwwMjJcdWZmZTlcMDIzXHVmZmU5XDAzMlx1ZmZlOVwwNTNcdWZmZTkiICsKLSAgICAiXDA1NFx1ZmZlOVwwNTVcdWZmZTlcMDU2XHVmZmU5XDA1N1x1ZmZlOVwwNjBcdWZmZTlcMDc1XHVmZmU5XDEwMCIgKwotICAgICJcdWZmZTlcMTAxXHVmZmU5XDEwMlx1MDE3N1wxMDdcdWZmZTlcMTEwXHVmZmU5XDExMVx1ZmZlOVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTI0XDAwMlx1ZmZiN1wwMDVcdWZmYjdcMDA3XHVmZmI3XDAxMFx1ZmZiN1wwMTFcdWZmYjdcMDEyIiArCi0gICAgIlx1ZmZiN1wwMTNcdWZmYjdcMDE0XHVmZmI3XDAxNVx1ZmZiN1wwMTZcdWZmYjdcMDE3XHVmZmI3XDAyMFx1ZmZiNyIgKwotICAgICJcMDIxXHVmZmI3XDAyMlx1ZmZiN1wwMjNcdWZmYjdcMDI0XHVmZmI3XDAyNVx1ZmZiN1wwMzJcdWZmYjdcMDUzIiArCi0gICAgIlx1ZmZiN1wwNTRcdWZmYjdcMDU1XHVmZmI3XDA1Nlx1ZmZiN1wwNTdcdWZmYjdcMDYwXHVmZmI3XDA2MVx1ZmZiNyIgKwotICAgICJcMDYyXHVmZmI3XDA2M1x1ZmZiN1wwNjRcdWZmYjdcMDY1XHVmZmI3XDA2Nlx1ZmZiN1wwNjdcdWZmYjdcMDcxIiArCi0gICAgIlx1ZmZiN1wwNzNcdWZmYjdcMDc0XHVmZmI3XDA3NVx1ZmZiN1wxMDBcdWZmYjdcMTAxXHVmZmI3XDEwMlx1ZmZiNyIgKwotICAgICJcMTA3XHVmZmI3XDExMFx1ZmZiN1wxMTFcdWZmYjdcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzY1wwMDQiICsKLSAgICAiXHVmZjNjXDAwNVx1ZmYzY1wwMDZcdWZmMDVcMDA3XHVmZjNjXDAxMFx1ZmYzY1wwMTFcdWZmM2NcMDEyXHVmZjNjIiArCi0gICAgIlwwMTNcdWZmM2NcMDE0XHVmZjNjXDAxNVx1ZmYzY1wwMTZcdWZmM2NcMDE3XHVmZjNjXDAyMFx1ZmYzY1wwMjEiICsKLSAgICAiXHVmZjNjXDAyMlx1ZmYzY1wwMjNcdWZmM2NcMDI0XHVmZjNjXDAyNVx1ZmYzY1wwMjZcdTAxNzZcMDMxXHVmZjNjIiArCi0gICAgIlwwMzJcdWZmM2NcMDUzXHVmZjNjXDA1NFx1ZmYzY1wwNTVcdWZmM2NcMDU2XHVmZjNjXDA1N1x1ZmYzY1wwNjAiICsKLSAgICAiXHVmZjNjXDA2MVx1ZmYzY1wwNjJcdWZmM2NcMDYzXHVmZjNjXDA2NFx1ZmYzY1wwNjVcdWZmM2NcMDY2XHVmZjNjIiArCi0gICAgIlwwNjdcdWZmM2NcMDcxXHVmZjNjXDA3M1x1ZmYzY1wwNzRcdWZmM2NcMDc1XHVmZjNjXDEwMFx1ZmYzY1wxMDEiICsKLSAgICAiXHVmZjNjXDEwMlx1ZmYzY1wxMDdcdWZmM2NcMTEwXHVmZjNjXDExMVx1ZmYzY1wwMDFcMDAyXDAwMFwwMDQiICsKLSAgICAiXDAwNlx1ZmY0OVwwMDFcMDAyXDAwMFwxNjRcMDEyXDExNlwwMzZcMjQ2XDAzN1wyNjNcMDQwIiArCi0gICAgIlx1MDEyNFwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMCIgKwotICAgICJcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1IiArCi0gICAgIlwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzEiICsKLSAgICAiXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MiIgKwotICAgICJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2IiArCi0gICAgIlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDciICsKLSAgICAiXDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMSIgKwotICAgICJcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0IiArCi0gICAgIlwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjEzXDAwNFx1ZmYxM1wwMDVcdWZmMTMiICsKLSAgICAiXDAwNlx1ZmVlOFwwMDdcdWZmMTNcMDEwXHVmZjEzXDAxMVx1ZmYxM1wwMTJcdWZmMTNcMDEzXHVmZjEzXDAxNCIgKwotICAgICJcdWZmMTNcMDE1XHVmZjEzXDAxNlx1ZmYxM1wwMTdcdWZmMTNcMDIwXHVmZjEzXDAyMVx1ZmYxM1wwMjJcdWZmMTMiICsKLSAgICAiXDAyM1x1ZmYxM1wwMjRcdWZmMTNcMDI1XHVmZjEzXDAzMVx1ZmYxM1wwMzJcdWZmMTNcMDUzXHVmZjEzXDA1NCIgKwotICAgICJcdWZmMTNcMDU1XHVmZjEzXDA1Nlx1ZmYxM1wwNTdcdWZmMTNcMDYwXHVmZjEzXDA2MVx1ZmYxM1wwNjJcdWZmMTMiICsKLSAgICAiXDA2M1x1ZmYxM1wwNjRcdWZmMTNcMDY1XHVmZjEzXDA2Nlx1ZmYxM1wwNjdcdWZmMTNcMDcxXHVmZjEzXDA3MyIgKwotICAgICJcdWZmMTNcMDc0XHVmZjEzXDA3NVx1ZmYxM1wxMDBcdWZmMTNcMTAxXHVmZjEzXDEwMlx1ZmYxM1wxMDdcdWZmMTMiICsKLSAgICAiXDExMFx1ZmYxM1wxMTFcdWZmMTNcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1MlwwMDRcdWZmNTJcMDA1IiArCi0gICAgIlx1ZmY1MlwwMDdcdWZmNTJcMDEwXHVmZjUyXDAxMVx1ZmY1MlwwMTJcdWZmNTJcMDEzXHVmZjUyXDAxNFx1ZmY1MiIgKwotICAgICJcMDE1XHVmZjUyXDAxNlx1ZmY1MlwwMTdcdWZmNTJcMDIwXHVmZjUyXDAyMVx1ZmY1MlwwMjJcdWZmNTJcMDIzIiArCi0gICAgIlx1ZmY1MlwwMjRcdWZmNTJcMDI1XHVmZjUyXDAzMlx1ZmY1MlwwNTNcdWZmNTJcMDU0XHVmZjUyXDA1NVx1ZmY1MiIgKwotICAgICJcMDU2XHVmZjUyXDA1N1x1ZmY1MlwwNjBcdWZmNTJcMDYxXHVmZjUyXDA2Mlx1ZmY1MlwwNjNcdWZmNTJcMDY0IiArCi0gICAgIlx1ZmY1MlwwNjVcdWZmNTJcMDY2XHVmZjUyXDA2N1x1ZmY1MlwwNzFcdWZmNTJcMDczXHVmZjUyXDA3NFx1ZmY1MiIgKwotICAgICJcMDc1XHVmZjUyXDEwMFx1ZmY1MlwxMDFcdWZmNTJcMTAyXHVmZjUyXDEwN1x1ZmY1MlwxMTBcdWZmNTJcMTExIiArCi0gICAgIlx1ZmY1MlwwMDFcMDAyXDAwMFwxMTZcMDAyXHVmZmQ1XDAwNVx1ZmZkNVwwMDdcdWZmZDVcMDEwXHVmZmQ1IiArCi0gICAgIlwwMTFcdWZmZDVcMDEyXHVmZmQ1XDAxM1x1ZmZkNVwwMTRcdWZmZDVcMDE1XHVmZmQ1XDAxNlx1ZmZkNVwwMTciICsKLSAgICAiXHVmZmQ1XDAyMFx1ZmZkNVwwMjFcdWZmZDVcMDIyXHVmZmQ1XDAyM1x1ZmZkNVwwMzJcdWZmZDVcMDUzXHVmZmQ1IiArCi0gICAgIlwwNTRcdWZmZDVcMDU1XHVmZmQ1XDA1Nlx1ZmZkNVwwNTdcdWZmZDVcMDYwXHVmZmQ1XDA2MVx1ZmZkNVwwNjIiICsKLSAgICAiXHVmZmQ1XDA2M1x1ZmZkNVwwNjRcdWZmZDVcMDY1XHVmZmQ1XDA2Nlx1ZmZkNVwwNjdcdWZmZDVcMDcxXHVmZmQ1IiArCi0gICAgIlwwNzNcdTAxNzBcMDc1XHVmZmQ1XDEwMFx1ZmZkNVwxMDFcdWZmZDVcMTAyXHVmZmQ1XDEwN1x1ZmZkNVwxMTAiICsKLSAgICAiXHVmZmQ1XDExMVx1ZmZkNVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjUwXDAwNFx1ZmY1MFwwMDVcdWZmNTAiICsKLSAgICAiXDAwN1x1ZmY1MFwwMTBcdWZmNTBcMDExXHVmZjUwXDAxMlx1ZmY1MFwwMTNcdWZmNTBcMDE0XHVmZjUwXDAxNSIgKwotICAgICJcdWZmNTBcMDE2XHVmZjUwXDAxN1x1ZmY1MFwwMjBcdWZmNTBcMDIxXHVmZjUwXDAyMlx1ZmY1MFwwMjNcdWZmNTAiICsKLSAgICAiXDAyNFx1ZmY1MFwwMjVcdWZmNTBcMDMyXHVmZjUwXDA1M1x1ZmY1MFwwNTRcdWZmNTBcMDU1XHVmZjUwXDA1NiIgKwotICAgICJcdWZmNTBcMDU3XHVmZjUwXDA2MFx1ZmY1MFwwNjFcdWZmNTBcMDYyXHVmZjUwXDA2M1x1ZmY1MFwwNjRcdWZmNTAiICsKLSAgICAiXDA2NVx1ZmY1MFwwNjZcdWZmNTBcMDY3XHVmZjUwXDA3MVx1ZmY1MFwwNzNcdWZmNTBcMDc0XHVmZjUwXDA3NSIgKwotICAgICJcdWZmNTBcMTAwXHVmZjUwXDEwMVx1ZmY1MFwxMDJcdWZmNTBcMTA3XHVmZjUwXDExMFx1ZmY1MFwxMTFcdWZmNTAiICsKLSAgICAiXDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZmNcMDA1XHVmZmZjXDAwN1x1ZmZmY1wwMzJcdWZmZmNcMTAwIiArCi0gICAgIlx1ZmZmY1wxMDFcdWZmZmNcMTA3XHVmZmZjXDAwMVwwMDJcMDAwXDAwNlwwMDJcMDAxXDAzMlwyMjQiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDVcMDA0XHVmZjQ1XDAwNVx1ZmY0NVwwMDZcdWZmMGRcMDA3IiArCi0gICAgIlx1ZmY0NVwwMTBcdWZmNDVcMDExXHVmZjQ1XDAxMlx1ZmY0NVwwMTNcdWZmNDVcMDE0XHVmZjQ1XDAxNVx1ZmY0NSIgKwotICAgICJcMDE2XHVmZjQ1XDAxN1x1ZmY0NVwwMjBcdWZmNDVcMDIxXHVmZjQ1XDAyMlx1ZmY0NVwwMjNcdWZmNDVcMDI0IiArCi0gICAgIlx1ZmY0NVwwMjVcdWZmNDVcMDI2XHUwMTZmXDAzMVx1ZmY0NVwwMzJcdWZmNDVcMDUzXHVmZjQ1XDA1NFx1ZmY0NSIgKwotICAgICJcMDU1XHVmZjQ1XDA1Nlx1ZmY0NVwwNTdcdWZmNDVcMDYwXHVmZjQ1XDA2MVx1ZmY0NVwwNjJcdWZmNDVcMDYzIiArCi0gICAgIlx1ZmY0NVwwNjRcdWZmNDVcMDY1XHVmZjQ1XDA2Nlx1ZmY0NVwwNjdcdWZmNDVcMDcxXHVmZjQ1XDA3M1x1ZmY0NSIgKwotICAgICJcMDc0XHVmZjQ1XDA3NVx1ZmY0NVwxMDBcdWZmNDVcMTAxXHVmZjQ1XDEwMlx1ZmY0NVwxMDdcdWZmNDVcMTEwIiArCi0gICAgIlx1ZmY0NVwxMTFcdWZmNDVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmY0MFwwMDRcdWZmNDBcMDA1XHVmZjQwIiArCi0gICAgIlwwMDZcdWZmMDlcMDA3XHVmZjQwXDAxMFx1ZmY0MFwwMTFcdWZmNDBcMDEyXHVmZjQwXDAxM1x1ZmY0MFwwMTQiICsKLSAgICAiXHVmZjQwXDAxNVx1ZmY0MFwwMTZcdWZmNDBcMDE3XHVmZjQwXDAyMFx1ZmY0MFwwMjFcdWZmNDBcMDIyXHVmZjQwIiArCi0gICAgIlwwMjNcdWZmNDBcMDI0XHVmZjQwXDAyNVx1ZmY0MFwwMjZcdTAxNmVcMDMxXHVmZjQwXDAzMlx1ZmY0MFwwNTMiICsKLSAgICAiXHVmZjQwXDA1NFx1ZmY0MFwwNTVcdWZmNDBcMDU2XHVmZjQwXDA1N1x1ZmY0MFwwNjBcdWZmNDBcMDYxXHVmZjQwIiArCi0gICAgIlwwNjJcdWZmNDBcMDYzXHVmZjQwXDA2NFx1ZmY0MFwwNjVcdWZmNDBcMDY2XHVmZjQwXDA2N1x1ZmY0MFwwNzEiICsKLSAgICAiXHVmZjQwXDA3M1x1ZmY0MFwwNzRcdWZmNDBcMDc1XHVmZjQwXDEwMFx1ZmY0MFwxMDFcdWZmNDBcMTAyXHVmZjQwIiArCi0gICAgIlwxMDdcdWZmNDBcMTEwXHVmZjQwXDExMVx1ZmY0MFwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjRkXDAwNCIgKwotICAgICJcdWZmNGRcMDA1XHVmZjRkXDAwN1x1ZmY0ZFwwMTBcdWZmNGRcMDExXHVmZjRkXDAxMlx1ZmY0ZFwwMTNcdWZmNGQiICsKLSAgICAiXDAxNFx1ZmY0ZFwwMTVcdWZmNGRcMDE2XHVmZjRkXDAxN1x1ZmY0ZFwwMjBcdWZmNGRcMDIxXHVmZjRkXDAyMiIgKwotICAgICJcdWZmNGRcMDIzXHVmZjRkXDAyNFx1ZmY0ZFwwMjVcdWZmNGRcMDMxXHUwMTZjXDAzMlx1ZmY0ZFwwNTNcdWZmNGQiICsKLSAgICAiXDA1NFx1ZmY0ZFwwNTVcdWZmNGRcMDU2XHVmZjRkXDA1N1x1ZmY0ZFwwNjBcdWZmNGRcMDYxXHVmZjRkXDA2MiIgKwotICAgICJcdWZmNGRcMDYzXHVmZjRkXDA2NFx1ZmY0ZFwwNjVcdWZmNGRcMDY2XHVmZjRkXDA2N1x1ZmY0ZFwwNzFcdWZmNGQiICsKLSAgICAiXDA3M1x1ZmY0ZFwwNzRcdWZmNGRcMDc1XHVmZjRkXDEwMFx1ZmY0ZFwxMDFcdWZmNGRcMTAyXHVmZjRkXDEwNyIgKwotICAgICJcdWZmNGRcMTEwXHVmZjRkXDExMVx1ZmY0ZFwwMDFcMDAyXDAwMFwxMTBcMDAyXHVmZmRjXDAwNVx1ZmZkYyIgKwotICAgICJcMDA3XHVmZmRjXDAxMFx1ZmZkY1wwMTFcdWZmZGNcMDEyXHVmZmRjXDAxM1x1ZmZkY1wwMTRcdWZmZGNcMDE1IiArCi0gICAgIlx1ZmZkY1wwMTZcdWZmZGNcMDE3XHVmZmRjXDAyMFx1ZmZkY1wwMjFcdWZmZGNcMDIyXHVmZmRjXDAyM1x1ZmZkYyIgKwotICAgICJcMDMyXHVmZmRjXDA1M1x1ZmZkY1wwNTRcdWZmZGNcMDU1XHVmZmRjXDA1Nlx1ZmZkY1wwNTdcdWZmZGNcMDYwIiArCi0gICAgIlx1ZmZkY1wwNjFcdWZmZGNcMDYyXHVmZmRjXDA2M1x1ZmZkY1wwNjRcdWZmZGNcMDY1XHVmZmRjXDA2Nlx1ZmZkYyIgKwotICAgICJcMDc1XHVmZmRjXDEwMFx1ZmZkY1wxMDFcdWZmZGNcMTAyXHVmZmRjXDEwN1x1ZmZkY1wxMTBcdWZmZGNcMTExIiArCi0gICAgIlx1ZmZkY1wwMDFcMDAyXDAwMFwxMDRcMDAyXHVmZmU0XDAwNVx1ZmZlNFwwMDdcdWZmZTRcMDEwXHVmZmU0IiArCi0gICAgIlwwMTFcdWZmZTRcMDEyXHVmZmU0XDAxM1x1MDEwZVwwMTRcdWZmZTRcMDE1XHVmZmU0XDAxNlx1ZmZlNFwwMTciICsKLSAgICAiXHVmZmU0XDAyMFx1ZmZlNFwwMjFcdWZmZTRcMDIyXHVmZmU0XDAyM1x1ZmZlNFwwMzJcdWZmZTRcMDUzXHVmZmU0IiArCi0gICAgIlwwNTRcdWZmZTRcMDU1XHVmZmU0XDA1Nlx1ZmZlNFwwNTdcdWZmZTRcMDYwXHVmZmU0XDA2MVx1ZmZlNFwwNjIiICsKLSAgICAiXHVmZmU0XDA2M1x1ZmZlNFwwNjRcdTAxMGRcMDc1XHVmZmU0XDEwMFx1ZmZlNFwxMDFcdWZmZTRcMTAyXHVmZmU0IiArCi0gICAgIlwxMDdcdWZmZTRcMTEwXHVmZmU0XDExMVx1ZmZlNFwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjEyXDAwNCIgKwotICAgICJcdWZmMTJcMDA1XHVmZjEyXDAwNlx1ZmVlN1wwMDdcdWZmMTJcMDEwXHVmZjEyXDAxMVx1ZmYxMlwwMTJcdWZmMTIiICsKLSAgICAiXDAxM1x1ZmYxMlwwMTRcdWZmMTJcMDE1XHVmZjEyXDAxNlx1ZmYxMlwwMTdcdWZmMTJcMDIwXHVmZjEyXDAyMSIgKwotICAgICJcdWZmMTJcMDIyXHVmZjEyXDAyM1x1ZmYxMlwwMjRcdWZmMTJcMDI1XHVmZjEyXDAzMVx1ZmYxMlwwMzJcdWZmMTIiICsKLSAgICAiXDA1M1x1ZmYxMlwwNTRcdWZmMTJcMDU1XHVmZjEyXDA1Nlx1ZmYxMlwwNTdcdWZmMTJcMDYwXHVmZjEyXDA2MSIgKwotICAgICJcdWZmMTJcMDYyXHVmZjEyXDA2M1x1ZmYxMlwwNjRcdWZmMTJcMDY1XHVmZjEyXDA2Nlx1ZmYxMlwwNjdcdWZmMTIiICsKLSAgICAiXDA3MVx1ZmYxMlwwNzNcdWZmMTJcMDc0XHVmZjEyXDA3NVx1ZmYxMlwxMDBcdWZmMTJcMTAxXHVmZjEyXDEwMiIgKwotICAgICJcdWZmMTJcMTA3XHVmZjEyXDExMFx1ZmYxMlwxMTFcdWZmMTJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYyOSIgKwotICAgICJcMDA0XHVmZjI5XDAwNVx1ZmYyOVwwMDZcdWZlZjJcMDA3XHVmZjI5XDAxMFx1ZmYyOVwwMTFcdWZmMjlcMDEyIiArCi0gICAgIlx1ZmYyOVwwMTNcdWZmMjlcMDE0XHVmZjI5XDAxNVx1ZmYyOVwwMTZcdWZmMjlcMDE3XHVmZjI5XDAyMFx1ZmYyOSIgKwotICAgICJcMDIxXHVmZjI5XDAyMlx1ZmYyOVwwMjNcdWZmMjlcMDI0XHVmZjI5XDAyNVx1ZmYyOVwwMzFcdWZmMjlcMDMyIiArCi0gICAgIlx1ZmYyOVwwMzNcdTAxNjhcMDUzXHVmZjI5XDA1NFx1ZmYyOVwwNTVcdWZmMjlcMDU2XHVmZjI5XDA1N1x1ZmYyOSIgKwotICAgICJcMDYwXHVmZjI5XDA2MVx1ZmYyOVwwNjJcdWZmMjlcMDYzXHVmZjI5XDA2NFx1ZmYyOVwwNjVcdWZmMjlcMDY2IiArCi0gICAgIlx1ZmYyOVwwNjdcdWZmMjlcMDcxXHVmZjI5XDA3M1x1ZmYyOVwwNzRcdWZmMjlcMDc1XHVmZjI5XDEwMFx1ZmYyOSIgKwotICAgICJcMTAxXHVmZjI5XDEwMlx1ZmYyOVwxMDdcdWZmMjlcMTEwXHVmZjI5XDExMVx1ZmYyOVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM0XDAwMlx1ZmY0MlwwMDRcdWZmNDJcMDA1XHVmZjQyXDAwNlx1ZmYwYlwwMDdcdWZmNDJcMDEwXHVmZjQyIiArCi0gICAgIlwwMTFcdWZmNDJcMDEyXHVmZjQyXDAxM1x1ZmY0MlwwMTRcdWZmNDJcMDE1XHVmZjQyXDAxNlx1ZmY0MlwwMTciICsKLSAgICAiXHVmZjQyXDAyMFx1ZmY0MlwwMjFcdWZmNDJcMDIyXHVmZjQyXDAyM1x1ZmY0MlwwMjRcdWZmNDJcMDI1XHVmZjQyIiArCi0gICAgIlwwMjZcdTAxNjdcMDMxXHVmZjQyXDAzMlx1ZmY0MlwwNTNcdWZmNDJcMDU0XHVmZjQyXDA1NVx1ZmY0MlwwNTYiICsKLSAgICAiXHVmZjQyXDA1N1x1ZmY0MlwwNjBcdWZmNDJcMDYxXHVmZjQyXDA2Mlx1ZmY0MlwwNjNcdWZmNDJcMDY0XHVmZjQyIiArCi0gICAgIlwwNjVcdWZmNDJcMDY2XHVmZjQyXDA2N1x1ZmY0MlwwNzFcdWZmNDJcMDczXHVmZjQyXDA3NFx1ZmY0MlwwNzUiICsKLSAgICAiXHVmZjQyXDEwMFx1ZmY0MlwxMDFcdWZmNDJcMTAyXHVmZjQyXDEwN1x1ZmY0MlwxMTBcdWZmNDJcMTExXHVmZjQyIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjM1XDAwNFx1ZmYzNVwwMDVcdWZmMzVcMDA2XHVmZWZlXDAwNyIgKwotICAgICJcdWZmMzVcMDEwXHVmZjM1XDAxMVx1ZmYzNVwwMTJcdWZmMzVcMDEzXHVmZjM1XDAxNFx1ZmYzNVwwMTVcdWZmMzUiICsKLSAgICAiXDAxNlx1ZmYzNVwwMTdcdWZmMzVcMDIwXHVmZjM1XDAyMVx1ZmYzNVwwMjJcdWZmMzVcMDIzXHVmZjM1XDAyNCIgKwotICAgICJcdWZmMzVcMDI1XHVmZjM1XDAzMVx1ZmYzNVwwMzJcdWZmMzVcMDUzXHVmZjM1XDA1NFx1ZmYzNVwwNTVcdWZmMzUiICsKLSAgICAiXDA1Nlx1ZmYzNVwwNTdcdWZmMzVcMDYwXHVmZjM1XDA2MVx1ZmYzNVwwNjJcdWZmMzVcMDYzXHVmZjM1XDA2NCIgKwotICAgICJcdWZmMzVcMDY1XHVmZjM1XDA2Nlx1ZmYzNVwwNjdcdWZmMzVcMDcxXHVmZjM1XDA3M1x1ZmYzNVwwNzRcdWZmMzUiICsKLSAgICAiXDA3NVx1ZmYzNVwxMDBcdWZmMzVcMTAxXHVmZjM1XDEwMlx1ZmYzNVwxMDdcdWZmMzVcMTEwXHVmZjM1XDExMSIgKwotICAgICJcdWZmMzVcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxOFwwMDRcdWZmMThcMDA1XHVmZjE4XDAwNlx1MDE2NSIgKwotICAgICJcMDA3XHVmZjE4XDAxMFx1ZmYxOFwwMTFcdWZmMThcMDEyXHVmZjE4XDAxM1x1ZmYxOFwwMTRcdWZmMThcMDE1IiArCi0gICAgIlx1ZmYxOFwwMTZcdWZmMThcMDE3XHVmZjE4XDAyMFx1ZmYxOFwwMjFcdWZmMThcMDIyXHVmZjE4XDAyM1x1ZmYxOCIgKwotICAgICJcMDI0XHVmZjE4XDAyNVx1ZmYxOFwwMzFcdWZmMThcMDMyXHVmZjE4XDAzNVx1ZmYxOFwwNTNcdWZmMThcMDU0IiArCi0gICAgIlx1ZmYxOFwwNTVcdWZmMThcMDU2XHVmZjE4XDA1N1x1ZmYxOFwwNjBcdWZmMThcMDYxXHVmZjE4XDA2Mlx1ZmYxOCIgKwotICAgICJcMDYzXHVmZjE4XDA2NFx1ZmYxOFwwNjVcdWZmMThcMDY2XHVmZjE4XDA2N1x1ZmYxOFwwNzFcdWZmMThcMDczIiArCi0gICAgIlx1ZmYxOFwwNzRcdWZmMThcMDc1XHVmZjE4XDEwMFx1ZmYxOFwxMDFcdWZmMThcMTAyXHVmZjE4XDEwN1x1ZmYxOCIgKwotICAgICJcMTEwXHVmZjE4XDExMVx1ZmYxOFwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjFmXDAwNFx1ZmYxZlwwMDUiICsKLSAgICAiXHVmZjFmXDAwNlx1MDE1YVwwMDdcdWZmMWZcMDEwXHVmZjFmXDAxMVx1ZmYxZlwwMTJcdWZmMWZcMDEzXHVmZjFmIiArCi0gICAgIlwwMTRcdWZmMWZcMDE1XHVmZjFmXDAxNlx1ZmYxZlwwMTdcdWZmMWZcMDIwXHVmZjFmXDAyMVx1ZmYxZlwwMjIiICsKLSAgICAiXHVmZjFmXDAyM1x1ZmYxZlwwMjRcdWZmMWZcMDI1XHVmZjFmXDAzMVx1ZmYxZlwwMzJcdWZmMWZcMDM1XHVmZjFmIiArCi0gICAgIlwwNTNcdWZmMWZcMDU0XHVmZjFmXDA1NVx1ZmYxZlwwNTZcdWZmMWZcMDU3XHVmZjFmXDA2MFx1ZmYxZlwwNjEiICsKLSAgICAiXHVmZjFmXDA2Mlx1ZmYxZlwwNjNcdWZmMWZcMDY0XHVmZjFmXDA2NVx1ZmYxZlwwNjZcdWZmMWZcMDY3XHVmZjFmIiArCi0gICAgIlwwNzFcdWZmMWZcMDczXHVmZjFmXDA3NFx1ZmYxZlwwNzVcdWZmMWZcMTAwXHVmZjFmXDEwMVx1ZmYxZlwxMDIiICsKLSAgICAiXHVmZjFmXDEwN1x1ZmYxZlwxMTBcdWZmMWZcMTExXHVmZjFmXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMjciICsKLSAgICAiXDAwNFx1ZmYyN1wwMDVcdWZmMjdcMDA2XHVmZWYxXDAwN1x1ZmYyN1wwMTBcdWZmMjdcMDExXHVmZjI3XDAxMiIgKwotICAgICJcdWZmMjdcMDEzXHVmZjI3XDAxNFx1ZmYyN1wwMTVcdWZmMjdcMDE2XHVmZjI3XDAxN1x1ZmYyN1wwMjBcdWZmMjciICsKLSAgICAiXDAyMVx1ZmYyN1wwMjJcdWZmMjdcMDIzXHVmZjI3XDAyNFx1ZmYyN1wwMjVcdWZmMjdcMDMxXHVmZjI3XDAzMiIgKwotICAgICJcdWZmMjdcMDUzXHVmZjI3XDA1NFx1ZmYyN1wwNTVcdWZmMjdcMDU2XHVmZjI3XDA1N1x1ZmYyN1wwNjBcdWZmMjciICsKLSAgICAiXDA2MVx1ZmYyN1wwNjJcdWZmMjdcMDYzXHVmZjI3XDA2NFx1ZmYyN1wwNjVcdWZmMjdcMDY2XHVmZjI3XDA2NyIgKwotICAgICJcdWZmMjdcMDcxXHVmZjI3XDA3M1x1ZmYyN1wwNzRcdWZmMjdcMDc1XHVmZjI3XDEwMFx1ZmYyN1wxMDFcdWZmMjciICsKLSAgICAiXDEwMlx1ZmYyN1wxMDdcdWZmMjdcMTEwXHVmZjI3XDExMVx1ZmYyN1wwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY5MVwwMDRcdWZmOTFcMDA1XHVmZjkxXDAwN1x1ZmY5MVwwMTBcdWZmOTFcMDExXHVmZjkxXDAxMlx1ZmY5MSIgKwotICAgICJcMDEzXHVmZjkxXDAxNFx1ZmY5MVwwMTVcdWZmOTFcMDE2XHVmZjkxXDAxN1x1ZmY5MVwwMjBcdWZmOTFcMDIxIiArCi0gICAgIlx1ZmY5MVwwMjJcdWZmOTFcMDIzXHVmZjkxXDAyNFx1ZmY5MVwwMjVcdWZmOTFcMDMyXHVmZjkxXDA1M1x1ZmY5MSIgKwotICAgICJcMDU0XHVmZjkxXDA1NVx1ZmY5MVwwNTZcdWZmOTFcMDU3XHVmZjkxXDA2MFx1ZmY5MVwwNjFcdWZmOTFcMDYyIiArCi0gICAgIlx1ZmY5MVwwNjNcdWZmOTFcMDY0XHVmZjkxXDA2NVx1ZmY5MVwwNjZcdWZmOTFcMDY3XHVmZjkxXDA3MVx1ZmY5MSIgKwotICAgICJcMDczXHVmZjkxXDA3NFx1ZmY5MVwwNzVcdWZmOTFcMTAwXHVmZjkxXDEwMVx1ZmY5MVwxMDJcdWZmOTFcMTA3IiArCi0gICAgIlx1ZmY5MVwxMTBcdWZmOTFcMTExXHVmZjkxXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTZcMDA0XHVmZjk2IiArCi0gICAgIlwwMDVcdWZmOTZcMDA3XHVmZjk2XDAxMFx1ZmY5NlwwMTFcdWZmOTZcMDEyXHVmZjk2XDAxM1x1ZmY5NlwwMTQiICsKLSAgICAiXHVmZjk2XDAxNVx1ZmY5NlwwMTZcdWZmOTZcMDE3XHVmZjk2XDAyMFx1ZmY5NlwwMjFcdWZmOTZcMDIyXHVmZjk2IiArCi0gICAgIlwwMjNcdWZmOTZcMDI0XHVmZjk2XDAyNVx1ZmY5NlwwMzJcdWZmOTZcMDUzXHVmZjk2XDA1NFx1ZmY5NlwwNTUiICsKLSAgICAiXHVmZjk2XDA1Nlx1ZmY5NlwwNTdcdWZmOTZcMDYwXHVmZjk2XDA2MVx1ZmY5NlwwNjJcdWZmOTZcMDYzXHVmZjk2IiArCi0gICAgIlwwNjRcdWZmOTZcMDY1XHVmZjk2XDA2Nlx1ZmY5NlwwNjdcdWZmOTZcMDcxXHVmZjk2XDA3M1x1ZmY5NlwwNzQiICsKLSAgICAiXHVmZjk2XDA3NVx1ZmY5NlwxMDBcdWZmOTZcMTAxXHVmZjk2XDEwMlx1ZmY5NlwxMDdcdWZmOTZcMTEwXHVmZjk2IiArCi0gICAgIlwxMTFcdWZmOTZcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxOVwwMDRcdWZmMTlcMDA1XHVmZjE5XDAwNiIgKwotICAgICJcdTAxNTRcMDA3XHVmZjE5XDAxMFx1ZmYxOVwwMTFcdWZmMTlcMDEyXHVmZjE5XDAxM1x1ZmYxOVwwMTRcdWZmMTkiICsKLSAgICAiXDAxNVx1ZmYxOVwwMTZcdWZmMTlcMDE3XHVmZjE5XDAyMFx1ZmYxOVwwMjFcdWZmMTlcMDIyXHVmZjE5XDAyMyIgKwotICAgICJcdWZmMTlcMDI0XHVmZjE5XDAyNVx1ZmYxOVwwMzFcdWZmMTlcMDMyXHVmZjE5XDAzNVx1ZmYxOVwwNTNcdWZmMTkiICsKLSAgICAiXDA1NFx1ZmYxOVwwNTVcdWZmMTlcMDU2XHVmZjE5XDA1N1x1ZmYxOVwwNjBcdWZmMTlcMDYxXHVmZjE5XDA2MiIgKwotICAgICJcdWZmMTlcMDYzXHVmZjE5XDA2NFx1ZmYxOVwwNjVcdWZmMTlcMDY2XHVmZjE5XDA2N1x1ZmYxOVwwNzFcdWZmMTkiICsKLSAgICAiXDA3M1x1ZmYxOVwwNzRcdWZmMTlcMDc1XHVmZjE5XDEwMFx1ZmYxOVwxMDFcdWZmMTlcMTAyXHVmZjE5XDEwNyIgKwotICAgICJcdWZmMTlcMTEwXHVmZjE5XDExMVx1ZmYxOVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjFhXDAwNFx1ZmYxYSIgKwotICAgICJcMDA1XHVmZjFhXDAwNlx1MDE1MFwwMDdcdWZmMWFcMDEwXHVmZjFhXDAxMVx1ZmYxYVwwMTJcdWZmMWFcMDEzIiArCi0gICAgIlx1ZmYxYVwwMTRcdWZmMWFcMDE1XHVmZjFhXDAxNlx1ZmYxYVwwMTdcdWZmMWFcMDIwXHVmZjFhXDAyMVx1ZmYxYSIgKwotICAgICJcMDIyXHVmZjFhXDAyM1x1ZmYxYVwwMjRcdWZmMWFcMDI1XHVmZjFhXDAzMVx1ZmYxYVwwMzJcdWZmMWFcMDM1IiArCi0gICAgIlx1ZmYxYVwwNTNcdWZmMWFcMDU0XHVmZjFhXDA1NVx1ZmYxYVwwNTZcdWZmMWFcMDU3XHVmZjFhXDA2MFx1ZmYxYSIgKwotICAgICJcMDYxXHVmZjFhXDA2Mlx1ZmYxYVwwNjNcdWZmMWFcMDY0XHVmZjFhXDA2NVx1ZmYxYVwwNjZcdWZmMWFcMDY3IiArCi0gICAgIlx1ZmYxYVwwNzFcdWZmMWFcMDczXHVmZjFhXDA3NFx1ZmYxYVwwNzVcdWZmMWFcMTAwXHVmZjFhXDEwMVx1ZmYxYSIgKwotICAgICJcMTAyXHVmZjFhXDEwN1x1ZmYxYVwxMTBcdWZmMWFcMTExXHVmZjFhXDAwMVwwMDJcMDAwXDExNFwwMDIiICsKLSAgICAiXHVmZmQ3XDAwNVx1ZmZkN1wwMDdcdWZmZDdcMDEwXHVmZmQ3XDAxMVx1ZmZkN1wwMTJcdWZmZDdcMDEzXHVmZmQ3IiArCi0gICAgIlwwMTRcdWZmZDdcMDE1XHVmZmQ3XDAxNlx1ZmZkN1wwMTdcdWZmZDdcMDIwXHVmZmQ3XDAyMVx1ZmZkN1wwMjIiICsKLSAgICAiXHVmZmQ3XDAyM1x1ZmZkN1wwMzJcdWZmZDdcMDUzXHVmZmQ3XDA1NFx1ZmZkN1wwNTVcdWZmZDdcMDU2XHVmZmQ3IiArCi0gICAgIlwwNTdcdWZmZDdcMDYwXHVmZmQ3XDA2MVx1ZmZkN1wwNjJcdWZmZDdcMDYzXHVmZmQ3XDA2NFx1ZmZkN1wwNjUiICsKLSAgICAiXHVmZmQ3XDA2Nlx1ZmZkN1wwNjdcdWZmZDdcMDcxXHUwMTNmXDA3NVx1ZmZkN1wxMDBcdWZmZDdcMTAxXHVmZmQ3IiArCi0gICAgIlwxMDJcdWZmZDdcMTA3XHVmZmQ3XDExMFx1ZmZkN1wxMTFcdWZmZDdcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmOWZcMDA0XHVmZjlmXDAwNVx1ZmY5ZlwwMDdcdWZmOWZcMDEwXHVmZjlmXDAxMVx1ZmY5ZlwwMTJcdWZmOWYiICsKLSAgICAiXDAxM1x1ZmY5ZlwwMTRcdWZmOWZcMDE1XHVmZjlmXDAxNlx1ZmY5ZlwwMTdcdWZmOWZcMDIwXHVmZjlmXDAyMSIgKwotICAgICJcdWZmOWZcMDIyXHVmZjlmXDAyM1x1ZmY5ZlwwMjRcdWZmOWZcMDI1XHVmZjlmXDAzMlx1ZmY5ZlwwNTNcdWZmOWYiICsKLSAgICAiXDA1NFx1ZmY5ZlwwNTVcdWZmOWZcMDU2XHVmZjlmXDA1N1x1ZmY5ZlwwNjBcdWZmOWZcMDYxXHVmZjlmXDA2MiIgKwotICAgICJcdWZmOWZcMDYzXHVmZjlmXDA2NFx1ZmY5ZlwwNjVcdWZmOWZcMDY2XHVmZjlmXDA2N1x1ZmY5ZlwwNzFcdWZmOWYiICsKLSAgICAiXDA3M1x1ZmY5ZlwwNzRcdWZmOWZcMDc1XHVmZjlmXDEwMFx1ZmY5ZlwxMDFcdWZmOWZcMTAyXHVmZjlmXDEwNyIgKwotICAgICJcdWZmOWZcMTEwXHVmZjlmXDExMVx1ZmY5ZlwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjM5XDAwNFx1ZmYzOSIgKwotICAgICJcMDA1XHVmZjM5XDAwNlx1ZmYwMlwwMDdcdWZmMzlcMDEwXHVmZjM5XDAxMVx1ZmYzOVwwMTJcdWZmMzlcMDEzIiArCi0gICAgIlx1ZmYzOVwwMTRcdWZmMzlcMDE1XHVmZjM5XDAxNlx1ZmYzOVwwMTdcdWZmMzlcMDIwXHVmZjM5XDAyMVx1ZmYzOSIgKwotICAgICJcMDIyXHVmZjM5XDAyM1x1ZmYzOVwwMjRcdWZmMzlcMDI1XHVmZjM5XDAyNlx1MDEzZVwwMzFcdWZmMzlcMDMyIiArCi0gICAgIlx1ZmYzOVwwNTNcdWZmMzlcMDU0XHVmZjM5XDA1NVx1ZmYzOVwwNTZcdWZmMzlcMDU3XHVmZjM5XDA2MFx1ZmYzOSIgKwotICAgICJcMDYxXHVmZjM5XDA2Mlx1ZmYzOVwwNjNcdWZmMzlcMDY0XHVmZjM5XDA2NVx1ZmYzOVwwNjZcdWZmMzlcMDY3IiArCi0gICAgIlx1ZmYzOVwwNzFcdWZmMzlcMDczXHVmZjM5XDA3NFx1ZmYzOVwwNzVcdWZmMzlcMTAwXHVmZjM5XDEwMVx1ZmYzOSIgKwotICAgICJcMTAyXHVmZjM5XDEwN1x1ZmYzOVwxMTBcdWZmMzlcMTExXHVmZjM5XDAwMVwwMDJcMDAwXDAyNFwwMDIiICsKLSAgICAiXHVmZmVmXDAwNVx1ZmZlZlwwMDdcdWZmZWZcMDMyXHVmZmVmXDEwMFx1ZmZlZlwxMDFcdWZmZWZcMTA3XHVmZmVmIiArCi0gICAgIlwxMTBcdWZmZWZcMTExXHVmZmVmXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMTVcMDA0XHVmZjE1XDAwNSIgKwotICAgICJcdWZmMTVcMDA2XHVmZWVhXDAwN1x1ZmYxNVwwMTBcdWZmMTVcMDExXHVmZjE1XDAxMlx1ZmYxNVwwMTNcdWZmMTUiICsKLSAgICAiXDAxNFx1ZmYxNVwwMTVcdWZmMTVcMDE2XHVmZjE1XDAxN1x1ZmYxNVwwMjBcdWZmMTVcMDIxXHVmZjE1XDAyMiIgKwotICAgICJcdWZmMTVcMDIzXHVmZjE1XDAyNFx1ZmYxNVwwMjVcdWZmMTVcMDMxXHVmZjE1XDAzMlx1ZmYxNVwwNTNcdWZmMTUiICsKLSAgICAiXDA1NFx1ZmYxNVwwNTVcdWZmMTVcMDU2XHVmZjE1XDA1N1x1ZmYxNVwwNjBcdWZmMTVcMDYxXHVmZjE1XDA2MiIgKwotICAgICJcdWZmMTVcMDYzXHVmZjE1XDA2NFx1ZmYxNVwwNjVcdWZmMTVcMDY2XHVmZjE1XDA2N1x1ZmYxNVwwNzFcdWZmMTUiICsKLSAgICAiXDA3M1x1ZmYxNVwwNzRcdWZmMTVcMDc1XHVmZjE1XDEwMFx1ZmYxNVwxMDFcdWZmMTVcMTAyXHVmZjE1XDEwNyIgKwotICAgICJcdWZmMTVcMTEwXHVmZjE1XDExMVx1ZmYxNVwwMDFcMDAyXDAwMFwwNjJcMDAyXHVmZmVkXDAwNVx1ZmZlZCIgKwotICAgICJcMDA3XHVmZmVkXDAxNFx1MDEzMVwwMTVcdTAxMzJcMDE2XHUwMTMzXDAxN1x1MDEyZlwwMjBcdTAxMmRcMDIxIiArCi0gICAgIlx1MDEzYVwwMjJcdTAxMzdcMDIzXHUwMTJjXDAzMlx1ZmZlZFwwNTNcdTAxMzZcMDU0XHUwMTJiXDA1NVx1MDEyYSIgKwotICAgICJcMDU2XHUwMTMwXDA1N1x1MDEyZVwwNjBcdTAxMzVcMDc1XHUwMTI5XDEwMFx1ZmZlZFwxMDFcdWZmZWRcMTA3IiArCi0gICAgIlx1ZmZlZFwxMTBcdWZmZWRcMTExXHVmZmVkXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOWNcMDA0XHVmZjljIiArCi0gICAgIlwwMDVcdWZmOWNcMDA3XHVmZjljXDAxMFx1ZmY5Y1wwMTFcdWZmOWNcMDEyXHVmZjljXDAxM1x1ZmY5Y1wwMTQiICsKLSAgICAiXHVmZjljXDAxNVx1ZmY5Y1wwMTZcdWZmOWNcMDE3XHVmZjljXDAyMFx1ZmY5Y1wwMjFcdWZmOWNcMDIyXHVmZjljIiArCi0gICAgIlwwMjNcdWZmOWNcMDI0XHVmZjljXDAyNVx1ZmY5Y1wwMzJcdWZmOWNcMDUzXHVmZjljXDA1NFx1ZmY5Y1wwNTUiICsKLSAgICAiXHVmZjljXDA1Nlx1ZmY5Y1wwNTdcdWZmOWNcMDYwXHVmZjljXDA2MVx1ZmY5Y1wwNjJcdWZmOWNcMDYzXHVmZjljIiArCi0gICAgIlwwNjRcdWZmOWNcMDY1XHVmZjljXDA2Nlx1ZmY5Y1wwNjdcdWZmOWNcMDcxXHVmZjljXDA3M1x1ZmY5Y1wwNzQiICsKLSAgICAiXHVmZjljXDA3NVx1ZmY5Y1wxMDBcdWZmOWNcMTAxXHVmZjljXDEwMlx1ZmY5Y1wxMDdcdWZmOWNcMTEwXHVmZjljIiArCi0gICAgIlwxMTFcdWZmOWNcMDAxXDAwMlwwMDBcMDIwXDAwMlx1ZmZmYlwwMDVcdWZmZmJcMDA3XHVmZmZiXDAzMiIgKwotICAgICJcdWZmZmJcMTAwXHVmZmZiXDEwMVx1ZmZmYlwxMDdcdWZmZmJcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYzYSIgKwotICAgICJcMDA0XHVmZjNhXDAwNVx1ZmYzYVwwMDZcdWZmMDNcMDA3XHVmZjNhXDAxMFx1ZmYzYVwwMTFcdWZmM2FcMDEyIiArCi0gICAgIlx1ZmYzYVwwMTNcdWZmM2FcMDE0XHVmZjNhXDAxNVx1ZmYzYVwwMTZcdWZmM2FcMDE3XHVmZjNhXDAyMFx1ZmYzYSIgKwotICAgICJcMDIxXHVmZjNhXDAyMlx1ZmYzYVwwMjNcdWZmM2FcMDI0XHVmZjNhXDAyNVx1ZmYzYVwwMjZcdTAxMjhcMDMxIiArCi0gICAgIlx1ZmYzYVwwMzJcdWZmM2FcMDUzXHVmZjNhXDA1NFx1ZmYzYVwwNTVcdWZmM2FcMDU2XHVmZjNhXDA1N1x1ZmYzYSIgKwotICAgICJcMDYwXHVmZjNhXDA2MVx1ZmYzYVwwNjJcdWZmM2FcMDYzXHVmZjNhXDA2NFx1ZmYzYVwwNjVcdWZmM2FcMDY2IiArCi0gICAgIlx1ZmYzYVwwNjdcdWZmM2FcMDcxXHVmZjNhXDA3M1x1ZmYzYVwwNzRcdWZmM2FcMDc1XHVmZjNhXDEwMFx1ZmYzYSIgKwotICAgICJcMTAxXHVmZjNhXDEwMlx1ZmYzYVwxMDdcdWZmM2FcMTEwXHVmZjNhXDExMVx1ZmYzYVwwMDFcMDAyXDAwMCIgKwotICAgICJcMTMyXDAwMlx1ZmYxNlwwMDRcdWZmMTZcMDA1XHVmZjE2XDAwNlx1ZmVlYlwwMDdcdWZmMTZcMDEwXHVmZjE2IiArCi0gICAgIlwwMTFcdWZmMTZcMDEyXHVmZjE2XDAxM1x1ZmYxNlwwMTRcdWZmMTZcMDE1XHVmZjE2XDAxNlx1ZmYxNlwwMTciICsKLSAgICAiXHVmZjE2XDAyMFx1ZmYxNlwwMjFcdWZmMTZcMDIyXHVmZjE2XDAyM1x1ZmYxNlwwMjRcdWZmMTZcMDI1XHVmZjE2IiArCi0gICAgIlwwMzFcdWZmMTZcMDMyXHVmZjE2XDA1M1x1ZmYxNlwwNTRcdWZmMTZcMDU1XHVmZjE2XDA1Nlx1ZmYxNlwwNTciICsKLSAgICAiXHVmZjE2XDA2MFx1ZmYxNlwwNjFcdWZmMTZcMDYyXHVmZjE2XDA2M1x1ZmYxNlwwNjRcdWZmMTZcMDY1XHVmZjE2IiArCi0gICAgIlwwNjZcdWZmMTZcMDY3XHVmZjE2XDA3MVx1ZmYxNlwwNzNcdWZmMTZcMDc0XHVmZjE2XDA3NVx1ZmYxNlwxMDAiICsKLSAgICAiXHVmZjE2XDEwMVx1ZmYxNlwxMDJcdWZmMTZcMTA3XHVmZjE2XDExMFx1ZmYxNlwxMTFcdWZmMTZcMDAxXDAwMiIgKwotICAgICJcMDAwXDE2NFwwMTJcMTE2XDAzNlwyNDZcMDM3XDI2M1wwNDBcdTAxMjRcMDQxXDI2N1wwNDIiICsKLSAgICAiXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNSIgKwotICAgICJcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3IiArCi0gICAgIlwzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTQiICsKLSAgICAiXDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NCIgKwotICAgICJcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyIiArCi0gICAgIlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTEiICsKLSAgICAiXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzMyIgKwotICAgICJcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEzMVwyNzBcMDAxIiArCi0gICAgIlwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjEiICsKLSAgICAiXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MSIgKwotICAgICJcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3IiArCi0gICAgIlwwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjYiICsKLSAgICAiXDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzMyIgKwotICAgICJcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzIiArCi0gICAgIlwyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTUiICsKLSAgICAiXDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMCIgKwotICAgICJcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTMyXDAwMlx1ZmYzNlwwMDRcdWZmMzZcMDA1XHVmZjM2XDAwNlx1ZmVmZlwwMDdcdWZmMzZcMDEwIiArCi0gICAgIlx1ZmYzNlwwMTFcdWZmMzZcMDEyXHVmZjM2XDAxM1x1ZmYzNlwwMTRcdWZmMzZcMDE1XHVmZjM2XDAxNlx1ZmYzNiIgKwotICAgICJcMDE3XHVmZjM2XDAyMFx1ZmYzNlwwMjFcdWZmMzZcMDIyXHVmZjM2XDAyM1x1ZmYzNlwwMjRcdWZmMzZcMDI1IiArCi0gICAgIlx1ZmYzNlwwMzFcdWZmMzZcMDMyXHVmZjM2XDA1M1x1ZmYzNlwwNTRcdWZmMzZcMDU1XHVmZjM2XDA1Nlx1ZmYzNiIgKwotICAgICJcMDU3XHVmZjM2XDA2MFx1ZmYzNlwwNjFcdWZmMzZcMDYyXHVmZjM2XDA2M1x1ZmYzNlwwNjRcdWZmMzZcMDY1IiArCi0gICAgIlx1ZmYzNlwwNjZcdWZmMzZcMDY3XHVmZjM2XDA3MVx1ZmYzNlwwNzNcdWZmMzZcMDc0XHVmZjM2XDA3NVx1ZmYzNiIgKwotICAgICJcMTAwXHVmZjM2XDEwMVx1ZmYzNlwxMDJcdWZmMzZcMTA3XHVmZjM2XDExMFx1ZmYzNlwxMTFcdWZmMzZcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEyNFwwMDJcdWZmYjZcMDA1XHVmZmI2XDAwN1x1ZmZiNlwwMTBcdWZmYjZcMDExXHVmZmI2IiArCi0gICAgIlwwMTJcdWZmYjZcMDEzXHVmZmI2XDAxNFx1ZmZiNlwwMTVcdWZmYjZcMDE2XHVmZmI2XDAxN1x1ZmZiNlwwMjAiICsKLSAgICAiXHVmZmI2XDAyMVx1ZmZiNlwwMjJcdWZmYjZcMDIzXHVmZmI2XDAyNFx1ZmZiNlwwMjVcdWZmYjZcMDMyXHVmZmI2IiArCi0gICAgIlwwNTNcdWZmYjZcMDU0XHVmZmI2XDA1NVx1ZmZiNlwwNTZcdWZmYjZcMDU3XHVmZmI2XDA2MFx1ZmZiNlwwNjEiICsKLSAgICAiXHVmZmI2XDA2Mlx1ZmZiNlwwNjNcdWZmYjZcMDY0XHVmZmI2XDA2NVx1ZmZiNlwwNjZcdWZmYjZcMDY3XHVmZmI2IiArCi0gICAgIlwwNzFcdWZmYjZcMDczXHVmZmI2XDA3NFx1ZmZiNlwwNzVcdWZmYjZcMTAwXHVmZmI2XDEwMVx1ZmZiNlwxMDIiICsKLSAgICAiXHVmZmI2XDEwN1x1ZmZiNlwxMTBcdWZmYjZcMTExXHVmZmI2XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzEiICsKLSAgICAiXDAwNFx1ZmY3MVwwMDVcdWZmNzFcMDA3XHVmZjcxXDAxMFx1ZmY3MVwwMTFcdWZmNzFcMDEyXHVmZjcxXDAxMyIgKwotICAgICJcdWZmNzFcMDE0XHVmZjcxXDAxNVx1ZmY3MVwwMTZcdWZmNzFcMDE3XHVmZjcxXDAyMFx1ZmY3MVwwMjFcdWZmNzEiICsKLSAgICAiXDAyMlx1ZmY3MVwwMjNcdWZmNzFcMDI0XHVmZjcxXDAyNVx1ZmY3MVwwMzJcdWZmNzFcMDM1XHVmZjcxXDA1MyIgKwotICAgICJcdWZmNzFcMDU0XHVmZjcxXDA1NVx1ZmY3MVwwNTZcdWZmNzFcMDU3XHVmZjcxXDA2MFx1ZmY3MVwwNjFcdWZmNzEiICsKLSAgICAiXDA2Mlx1ZmY3MVwwNjNcdWZmNzFcMDY0XHVmZjcxXDA2NVx1ZmY3MVwwNjZcdWZmNzFcMDY3XHVmZjcxXDA3MSIgKwotICAgICJcdWZmNzFcMDczXHVmZjcxXDA3NFx1ZmY3MVwwNzVcdWZmNzFcMTAwXHVmZjcxXDEwMVx1ZmY3MVwxMDJcdWZmNzEiICsKLSAgICAiXDEwN1x1ZmY3MVwxMTBcdWZmNzFcMTExXHVmZjcxXDAwMVwwMDJcMDAwXDAxMlwwMDJcdWZmZmZcMDA1IiArCi0gICAgIlx1ZmZmZlwwMDdcdWZmZmZcMDMyXHVmZmZmXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDUiICsKLSAgICAiXDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzMyIgKwotICAgICJcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0IiArCi0gICAgIlwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTEiICsKLSAgICAiXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNiIgKwotICAgICJcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2IiArCi0gICAgIlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjEiICsKLSAgICAiXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwMyIgKwotICAgICJcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyIiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjAiICsKLSAgICAiXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MiIgKwotICAgICJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyMlwwMDQiICsKLSAgICAiXHVmZjIyXDAwNVx1ZmYyMlwwMDZcdWZlZWNcMDA3XHVmZjIyXDAxMFx1ZmYyMlwwMTFcdWZmMjJcMDEyXHVmZjIyIiArCi0gICAgIlwwMTNcdWZmMjJcMDE0XHVmZjIyXDAxNVx1ZmYyMlwwMTZcdWZmMjJcMDE3XHVmZjIyXDAyMFx1ZmYyMlwwMjEiICsKLSAgICAiXHVmZjIyXDAyMlx1ZmYyMlwwMjNcdWZmMjJcMDI0XHVmZjIyXDAyNVx1ZmYyMlwwMzFcdWZmMjJcMDMyXHVmZjIyIiArCi0gICAgIlwwNTNcdWZmMjJcMDU0XHVmZjIyXDA1NVx1ZmYyMlwwNTZcdWZmMjJcMDU3XHVmZjIyXDA2MFx1ZmYyMlwwNjEiICsKLSAgICAiXHVmZjIyXDA2Mlx1ZmYyMlwwNjNcdWZmMjJcMDY0XHVmZjIyXDA2NVx1ZmYyMlwwNjZcdWZmMjJcMDY3XHVmZjIyIiArCi0gICAgIlwwNzFcdWZmMjJcMDczXHVmZjIyXDA3NFx1ZmYyMlwwNzVcdWZmMjJcMTAwXHVmZjIyXDEwMVx1ZmYyMlwxMDIiICsKLSAgICAiXHVmZjIyXDEwN1x1ZmYyMlwxMTBcdWZmMjJcMTExXHVmZjIyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTYiICsKLSAgICAiXDAwNFx1ZmY5NlwwMDVcdWZmOTZcMDA3XHVmZjk2XDAxMFx1ZmY5NlwwMTFcdWZmOTZcMDEyXHVmZjk2XDAxMyIgKwotICAgICJcdWZmOTZcMDE0XHVmZjk2XDAxNVx1ZmY5NlwwMTZcdWZmOTZcMDE3XHVmZjk2XDAyMFx1ZmY5NlwwMjFcdWZmOTYiICsKLSAgICAiXDAyMlx1ZmY5NlwwMjNcdWZmOTZcMDI0XHVmZjk2XDAyNVx1ZmY5NlwwMzJcdWZmOTZcMDUzXHVmZjk2XDA1NCIgKwotICAgICJcdWZmOTZcMDU1XHVmZjk2XDA1Nlx1ZmY5NlwwNTdcdWZmOTZcMDYwXHVmZjk2XDA2MVx1ZmY5NlwwNjJcdWZmOTYiICsKLSAgICAiXDA2M1x1ZmY5NlwwNjRcdWZmOTZcMDY1XHVmZjk2XDA2Nlx1ZmY5NlwwNjdcdWZmOTZcMDcxXHVmZjk2XDA3MyIgKwotICAgICJcdWZmOTZcMDc0XHVmZjk2XDA3NVx1ZmY5NlwxMDBcdWZmOTZcMTAxXHVmZjk2XDEwMlx1ZmY5NlwxMDdcdWZmOTYiICsKLSAgICAiXDExMFx1ZmY5NlwxMTFcdWZmOTZcMDAxXDAwMlwwMDBcMjIwXDAwNlwxMTBcMDA3XHUwMTFlXDAxMCIgKwotICAgICJcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1IiArCi0gICAgIlwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDIiICsKLSAgICAiXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExNyIgKwotICAgICJcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3IiArCi0gICAgIlwwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzEiICsKLSAgICAiXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NCIgKwotICAgICJcMTYxXDA3NVwxNDNcMDc2XDExNVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyIiArCi0gICAgIlwxMDNcMTY0XDEwNFwwNTNcMTA1XDE1NVwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTEiICsKLSAgICAiXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzMyIgKwotICAgICJcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2IiArCi0gICAgIlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYzOCIgKwotICAgICJcMDA0XHVmZjM4XDAwNVx1ZmYzOFwwMDZcdWZmMDFcMDA3XHVmZjM4XDAxMFx1ZmYzOFwwMTFcdWZmMzhcMDEyIiArCi0gICAgIlx1ZmYzOFwwMTNcdWZmMzhcMDE0XHVmZjM4XDAxNVx1ZmYzOFwwMTZcdWZmMzhcMDE3XHVmZjM4XDAyMFx1ZmYzOCIgKwotICAgICJcMDIxXHVmZjM4XDAyMlx1ZmYzOFwwMjNcdWZmMzhcMDI0XHVmZjM4XDAyNVx1ZmYzOFwwMzFcdWZmMzhcMDMyIiArCi0gICAgIlx1ZmYzOFwwNTNcdWZmMzhcMDU0XHVmZjM4XDA1NVx1ZmYzOFwwNTZcdWZmMzhcMDU3XHVmZjM4XDA2MFx1ZmYzOCIgKwotICAgICJcMDYxXHVmZjM4XDA2Mlx1ZmYzOFwwNjNcdWZmMzhcMDY0XHVmZjM4XDA2NVx1ZmYzOFwwNjZcdWZmMzhcMDY3IiArCi0gICAgIlx1ZmYzOFwwNzFcdWZmMzhcMDczXHVmZjM4XDA3NFx1ZmYzOFwwNzVcdWZmMzhcMTAwXHVmZjM4XDEwMVx1ZmYzOCIgKwotICAgICJcMTAyXHVmZjM4XDEwN1x1ZmYzOFwxMTBcdWZmMzhcMTExXHVmZjM4XDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjlkXDAwNFx1ZmY5ZFwwMDVcdWZmOWRcMDA3XHVmZjlkXDAxMFx1ZmY5ZFwwMTFcdWZmOWRcMDEyXHVmZjlkIiArCi0gICAgIlwwMTNcdWZmOWRcMDE0XHVmZjlkXDAxNVx1ZmY5ZFwwMTZcdWZmOWRcMDE3XHVmZjlkXDAyMFx1ZmY5ZFwwMjEiICsKLSAgICAiXHVmZjlkXDAyMlx1ZmY5ZFwwMjNcdWZmOWRcMDI0XHVmZjlkXDAyNVx1ZmY5ZFwwMzJcdWZmOWRcMDUzXHVmZjlkIiArCi0gICAgIlwwNTRcdWZmOWRcMDU1XHVmZjlkXDA1Nlx1ZmY5ZFwwNTdcdWZmOWRcMDYwXHVmZjlkXDA2MVx1ZmY5ZFwwNjIiICsKLSAgICAiXHVmZjlkXDA2M1x1ZmY5ZFwwNjRcdWZmOWRcMDY1XHVmZjlkXDA2Nlx1ZmY5ZFwwNjdcdWZmOWRcMDcxXHVmZjlkIiArCi0gICAgIlwwNzNcdWZmOWRcMDc0XHVmZjlkXDA3NVx1ZmY5ZFwxMDBcdWZmOWRcMTAxXHVmZjlkXDEwMlx1ZmY5ZFwxMDciICsKLSAgICAiXHVmZjlkXDExMFx1ZmY5ZFwxMTFcdWZmOWRcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY1MVwwMDRcdWZmNTEiICsKLSAgICAiXDAwNVx1ZmY1MVwwMDdcdWZmNTFcMDEwXHVmZjUxXDAxMVx1ZmY1MVwwMTJcdWZmNTFcMDEzXHVmZjUxXDAxNCIgKwotICAgICJcdWZmNTFcMDE1XHVmZjUxXDAxNlx1ZmY1MVwwMTdcdWZmNTFcMDIwXHVmZjUxXDAyMVx1ZmY1MVwwMjJcdWZmNTEiICsKLSAgICAiXDAyM1x1ZmY1MVwwMjRcdWZmNTFcMDI1XHVmZjUxXDAzMlx1ZmY1MVwwNTNcdWZmNTFcMDU0XHVmZjUxXDA1NSIgKwotICAgICJcdWZmNTFcMDU2XHVmZjUxXDA1N1x1ZmY1MVwwNjBcdWZmNTFcMDYxXHVmZjUxXDA2Mlx1ZmY1MVwwNjNcdWZmNTEiICsKLSAgICAiXDA2NFx1ZmY1MVwwNjVcdWZmNTFcMDY2XHVmZjUxXDA2N1x1ZmY1MVwwNzFcdWZmNTFcMDczXHVmZjUxXDA3NCIgKwotICAgICJcdWZmNTFcMDc1XHVmZjUxXDEwMFx1ZmY1MVwxMDFcdWZmNTFcMTAyXHVmZjUxXDEwN1x1ZmY1MVwxMTBcdWZmNTEiICsKLSAgICAiXDExMVx1ZmY1MVwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjc1XDAwNFx1ZmY3NVwwMDVcdWZmNzVcMDA3IiArCi0gICAgIlx1ZmY3NVwwMTBcdWZmNzVcMDExXHVmZjc1XDAxMlx1ZmY3NVwwMTNcdWZmNzVcMDE0XHVmZjc1XDAxNVx1ZmY3NSIgKwotICAgICJcMDE2XHVmZjc1XDAxN1x1ZmY3NVwwMjBcdWZmNzVcMDIxXHVmZjc1XDAyMlx1ZmY3NVwwMjNcdWZmNzVcMDI0IiArCi0gICAgIlx1ZmY3NVwwMjVcdWZmNzVcMDMyXHVmZjc1XDAzNVx1ZmY3NVwwNTNcdWZmNzVcMDU0XHVmZjc1XDA1NVx1ZmY3NSIgKwotICAgICJcMDU2XHVmZjc1XDA1N1x1ZmY3NVwwNjBcdWZmNzVcMDYxXHVmZjc1XDA2Mlx1ZmY3NVwwNjNcdWZmNzVcMDY0IiArCi0gICAgIlx1ZmY3NVwwNjVcdWZmNzVcMDY2XHVmZjc1XDA2N1x1ZmY3NVwwNzFcdWZmNzVcMDczXHVmZjc1XDA3NFx1ZmY3NSIgKwotICAgICJcMDc1XHVmZjc1XDEwMFx1ZmY3NVwxMDFcdWZmNzVcMTAyXHVmZjc1XDEwN1x1ZmY3NVwxMTBcdWZmNzVcMTExIiArCi0gICAgIlx1ZmY3NVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjJlXDAwNFx1ZmYyZVwwMDVcdWZmMmVcMDA2XHVmZWY3IiArCi0gICAgIlwwMDdcdWZmMmVcMDEwXHVmZjJlXDAxMVx1ZmYyZVwwMTJcdWZmMmVcMDEzXHVmZjJlXDAxNFx1ZmYyZVwwMTUiICsKLSAgICAiXHVmZjJlXDAxNlx1ZmYyZVwwMTdcdWZmMmVcMDIwXHVmZjJlXDAyMVx1ZmYyZVwwMjJcdWZmMmVcMDIzXHVmZjJlIiArCi0gICAgIlwwMjRcdWZmMmVcMDI1XHVmZjJlXDAzMVx1ZmYyZVwwMzJcdWZmMmVcMDMzXHUwMTE5XDA1M1x1ZmYyZVwwNTQiICsKLSAgICAiXHVmZjJlXDA1NVx1ZmYyZVwwNTZcdWZmMmVcMDU3XHVmZjJlXDA2MFx1ZmYyZVwwNjFcdWZmMmVcMDYyXHVmZjJlIiArCi0gICAgIlwwNjNcdWZmMmVcMDY0XHVmZjJlXDA2NVx1ZmYyZVwwNjZcdWZmMmVcMDY3XHVmZjJlXDA3MVx1ZmYyZVwwNzMiICsKLSAgICAiXHVmZjJlXDA3NFx1ZmYyZVwwNzVcdWZmMmVcMTAwXHVmZjJlXDEwMVx1ZmYyZVwxMDJcdWZmMmVcMTA3XHVmZjJlIiArCi0gICAgIlwxMTBcdWZmMmVcMTExXHVmZjJlXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmOWJcMDA0XHVmZjliXDAwNSIgKwotICAgICJcdWZmOWJcMDA3XHVmZjliXDAxMFx1ZmY5YlwwMTFcdWZmOWJcMDEyXHVmZjliXDAxM1x1ZmY5YlwwMTRcdWZmOWIiICsKLSAgICAiXDAxNVx1ZmY5YlwwMTZcdWZmOWJcMDE3XHVmZjliXDAyMFx1ZmY5YlwwMjFcdWZmOWJcMDIyXHVmZjliXDAyMyIgKwotICAgICJcdWZmOWJcMDI0XHVmZjliXDAyNVx1ZmY5YlwwMzFcdTAxMTdcMDMyXHVmZjliXDA1M1x1ZmY5YlwwNTRcdWZmOWIiICsKLSAgICAiXDA1NVx1ZmY5YlwwNTZcdWZmOWJcMDU3XHVmZjliXDA2MFx1ZmY5YlwwNjFcdWZmOWJcMDYyXHVmZjliXDA2MyIgKwotICAgICJcdWZmOWJcMDY0XHVmZjliXDA2NVx1ZmY5YlwwNjZcdWZmOWJcMDY3XHVmZjliXDA3MVx1ZmY5YlwwNzNcdWZmOWIiICsKLSAgICAiXDA3NFx1ZmY5YlwwNzVcdWZmOWJcMTAwXHVmZjliXDEwMVx1ZmY5YlwxMDJcdWZmOWJcMTA3XHVmZjliXDExMCIgKwotICAgICJcdWZmOWJcMTExXHVmZjliXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmM2JcMDA0XHVmZjNiXDAwNVx1ZmYzYiIgKwotICAgICJcMDA2XHVmZjA0XDAwN1x1ZmYzYlwwMTBcdWZmM2JcMDExXHVmZjNiXDAxMlx1ZmYzYlwwMTNcdWZmM2JcMDE0IiArCi0gICAgIlx1ZmYzYlwwMTVcdWZmM2JcMDE2XHVmZjNiXDAxN1x1ZmYzYlwwMjBcdWZmM2JcMDIxXHVmZjNiXDAyMlx1ZmYzYiIgKwotICAgICJcMDIzXHVmZjNiXDAyNFx1ZmYzYlwwMjVcdWZmM2JcMDI2XHUwMTE2XDAzMVx1ZmYzYlwwMzJcdWZmM2JcMDUzIiArCi0gICAgIlx1ZmYzYlwwNTRcdWZmM2JcMDU1XHVmZjNiXDA1Nlx1ZmYzYlwwNTdcdWZmM2JcMDYwXHVmZjNiXDA2MVx1ZmYzYiIgKwotICAgICJcMDYyXHVmZjNiXDA2M1x1ZmYzYlwwNjRcdWZmM2JcMDY1XHVmZjNiXDA2Nlx1ZmYzYlwwNjdcdWZmM2JcMDcxIiArCi0gICAgIlx1ZmYzYlwwNzNcdWZmM2JcMDc0XHVmZjNiXDA3NVx1ZmYzYlwxMDBcdWZmM2JcMTAxXHVmZjNiXDEwMlx1ZmYzYiIgKwotICAgICJcMTA3XHVmZjNiXDExMFx1ZmYzYlwxMTFcdWZmM2JcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyM1wwMDQiICsKLSAgICAiXHVmZjIzXDAwNVx1ZmYyM1wwMDZcdWZlZWRcMDA3XHVmZjIzXDAxMFx1ZmYyM1wwMTFcdWZmMjNcMDEyXHVmZjIzIiArCi0gICAgIlwwMTNcdWZmMjNcMDE0XHVmZjIzXDAxNVx1ZmYyM1wwMTZcdWZmMjNcMDE3XHVmZjIzXDAyMFx1ZmYyM1wwMjEiICsKLSAgICAiXHVmZjIzXDAyMlx1ZmYyM1wwMjNcdWZmMjNcMDI0XHVmZjIzXDAyNVx1ZmYyM1wwMzFcdWZmMjNcMDMyXHVmZjIzIiArCi0gICAgIlwwNTNcdWZmMjNcMDU0XHVmZjIzXDA1NVx1ZmYyM1wwNTZcdWZmMjNcMDU3XHVmZjIzXDA2MFx1ZmYyM1wwNjEiICsKLSAgICAiXHVmZjIzXDA2Mlx1ZmYyM1wwNjNcdWZmMjNcMDY0XHVmZjIzXDA2NVx1ZmYyM1wwNjZcdWZmMjNcMDY3XHVmZjIzIiArCi0gICAgIlwwNzFcdWZmMjNcMDczXHVmZjIzXDA3NFx1ZmYyM1wwNzVcdWZmMjNcMTAwXHVmZjIzXDEwMVx1ZmYyM1wxMDIiICsKLSAgICAiXHVmZjIzXDEwN1x1ZmYyM1wxMTBcdWZmMjNcMTExXHVmZjIzXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMmMiICsKLSAgICAiXDAwNFx1ZmYyY1wwMDVcdWZmMmNcMDA2XHVmZWY1XDAwN1x1ZmYyY1wwMTBcdWZmMmNcMDExXHVmZjJjXDAxMiIgKwotICAgICJcdWZmMmNcMDEzXHVmZjJjXDAxNFx1ZmYyY1wwMTVcdWZmMmNcMDE2XHVmZjJjXDAxN1x1ZmYyY1wwMjBcdWZmMmMiICsKLSAgICAiXDAyMVx1ZmYyY1wwMjJcdWZmMmNcMDIzXHVmZjJjXDAyNFx1ZmYyY1wwMjVcdWZmMmNcMDMxXHVmZjJjXDAzMiIgKwotICAgICJcdWZmMmNcMDUzXHVmZjJjXDA1NFx1ZmYyY1wwNTVcdWZmMmNcMDU2XHVmZjJjXDA1N1x1ZmYyY1wwNjBcdWZmMmMiICsKLSAgICAiXDA2MVx1ZmYyY1wwNjJcdWZmMmNcMDYzXHVmZjJjXDA2NFx1ZmYyY1wwNjVcdWZmMmNcMDY2XHVmZjJjXDA2NyIgKwotICAgICJcdWZmMmNcMDcxXHVmZjJjXDA3M1x1ZmYyY1wwNzRcdWZmMmNcMDc1XHVmZjJjXDEwMFx1ZmYyY1wxMDFcdWZmMmMiICsKLSAgICAiXDEwMlx1ZmYyY1wxMDdcdWZmMmNcMTEwXHVmZjJjXDExMVx1ZmYyY1wwMDFcMDAyXDAwMFwxMzJcMDAyIiArCi0gICAgIlx1ZmYyNlwwMDRcdWZmMjZcMDA1XHVmZjI2XDAwNlx1ZmVmMFwwMDdcdWZmMjZcMDEwXHVmZjI2XDAxMVx1ZmYyNiIgKwotICAgICJcMDEyXHVmZjI2XDAxM1x1ZmYyNlwwMTRcdWZmMjZcMDE1XHVmZjI2XDAxNlx1ZmYyNlwwMTdcdWZmMjZcMDIwIiArCi0gICAgIlx1ZmYyNlwwMjFcdWZmMjZcMDIyXHVmZjI2XDAyM1x1ZmYyNlwwMjRcdWZmMjZcMDI1XHVmZjI2XDAzMVx1ZmYyNiIgKwotICAgICJcMDMyXHVmZjI2XDA1M1x1ZmYyNlwwNTRcdWZmMjZcMDU1XHVmZjI2XDA1Nlx1ZmYyNlwwNTdcdWZmMjZcMDYwIiArCi0gICAgIlx1ZmYyNlwwNjFcdWZmMjZcMDYyXHVmZjI2XDA2M1x1ZmYyNlwwNjRcdWZmMjZcMDY1XHVmZjI2XDA2Nlx1ZmYyNiIgKwotICAgICJcMDY3XHVmZjI2XDA3MVx1ZmYyNlwwNzNcdWZmMjZcMDc0XHVmZjI2XDA3NVx1ZmYyNlwxMDBcdWZmMjZcMTAxIiArCi0gICAgIlx1ZmYyNlwxMDJcdWZmMjZcMTA3XHVmZjI2XDExMFx1ZmYyNlwxMTFcdWZmMjZcMDAxXDAwMlwwMDBcMTI2IiArCi0gICAgIlwwMDJcdWZmOTNcMDA0XHVmZjkzXDAwNVx1ZmY5M1wwMDdcdWZmOTNcMDEwXHVmZjkzXDAxMVx1ZmY5M1wwMTIiICsKLSAgICAiXHVmZjkzXDAxM1x1ZmY5M1wwMTRcdWZmOTNcMDE1XHVmZjkzXDAxNlx1ZmY5M1wwMTdcdWZmOTNcMDIwXHVmZjkzIiArCi0gICAgIlwwMjFcdWZmOTNcMDIyXHVmZjkzXDAyM1x1ZmY5M1wwMjRcdWZmOTNcMDI1XHVmZjkzXDAzMlx1ZmY5M1wwNTMiICsKLSAgICAiXHVmZjkzXDA1NFx1ZmY5M1wwNTVcdWZmOTNcMDU2XHVmZjkzXDA1N1x1ZmY5M1wwNjBcdWZmOTNcMDYxXHVmZjkzIiArCi0gICAgIlwwNjJcdWZmOTNcMDYzXHVmZjkzXDA2NFx1ZmY5M1wwNjVcdWZmOTNcMDY2XHVmZjkzXDA2N1x1ZmY5M1wwNzEiICsKLSAgICAiXHVmZjkzXDA3M1x1ZmY5M1wwNzRcdWZmOTNcMDc1XHVmZjkzXDEwMFx1ZmY5M1wxMDFcdWZmOTNcMTAyXHVmZjkzIiArCi0gICAgIlwxMDdcdWZmOTNcMTEwXHVmZjkzXDExMVx1ZmY5M1wwMDFcMDAyXDAwMFwwMjBcMDAyXHVmZmZkXDAwNSIgKwotICAgICJcdWZmZmRcMDA3XHVmZmZkXDAzMlx1ZmZmZFwxMDBcdWZmZmRcMTAxXHVmZmZkXDEwN1x1ZmZmZFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTI2XDAwMlx1ZmZhMFwwMDRcdWZmYTBcMDA1XHVmZmEwXDAwN1x1ZmZhMFwwMTBcdWZmYTBcMDExIiArCi0gICAgIlx1ZmZhMFwwMTJcdWZmYTBcMDEzXHVmZmEwXDAxNFx1ZmZhMFwwMTVcdWZmYTBcMDE2XHVmZmEwXDAxN1x1ZmZhMCIgKwotICAgICJcMDIwXHVmZmEwXDAyMVx1ZmZhMFwwMjJcdWZmYTBcMDIzXHVmZmEwXDAyNFx1ZmZhMFwwMjVcdWZmYTBcMDMyIiArCi0gICAgIlx1ZmZhMFwwNTNcdWZmYTBcMDU0XHVmZmEwXDA1NVx1ZmZhMFwwNTZcdWZmYTBcMDU3XHVmZmEwXDA2MFx1ZmZhMCIgKwotICAgICJcMDYxXHVmZmEwXDA2Mlx1ZmZhMFwwNjNcdWZmYTBcMDY0XHVmZmEwXDA2NVx1ZmZhMFwwNjZcdWZmYTBcMDY3IiArCi0gICAgIlx1ZmZhMFwwNzFcdWZmYTBcMDczXHVmZmEwXDA3NFx1ZmZhMFwwNzVcdWZmYTBcMTAwXHVmZmEwXDEwMVx1ZmZhMCIgKwotICAgICJcMTAyXHVmZmEwXDEwN1x1ZmZhMFwxMTBcdWZmYTBcMTExXHVmZmEwXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZjg3XDAwNFx1ZmY4N1wwMDVcdWZmODdcMDA3XHVmZjg3XDAxMFx1ZmY4N1wwMTFcdWZmODdcMDEyXHVmZjg3IiArCi0gICAgIlwwMTNcdWZmODdcMDE0XHVmZjg3XDAxNVx1ZmY4N1wwMTZcdWZmODdcMDE3XHVmZjg3XDAyMFx1ZmY4N1wwMjEiICsKLSAgICAiXHVmZjg3XDAyMlx1ZmY4N1wwMjNcdWZmODdcMDI0XHVmZjg3XDAyNVx1ZmY4N1wwMzJcdWZmODdcMDUzXHVmZjg3IiArCi0gICAgIlwwNTRcdWZmODdcMDU1XHVmZjg3XDA1Nlx1ZmY4N1wwNTdcdWZmODdcMDYwXHVmZjg3XDA2MVx1ZmY4N1wwNjIiICsKLSAgICAiXHVmZjg3XDA2M1x1ZmY4N1wwNjRcdWZmODdcMDY1XHVmZjg3XDA2Nlx1ZmY4N1wwNjdcdWZmODdcMDcxXHVmZjg3IiArCi0gICAgIlwwNzNcdWZmODdcMDc0XHVmZjg3XDA3NVx1ZmY4N1wxMDBcdWZmODdcMTAxXHVmZjg3XDEwMlx1ZmY4N1wxMDciICsKLSAgICAiXHVmZjg3XDExMFx1ZmY4N1wxMTFcdWZmODdcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3M1wwMDRcdWZmNzMiICsKLSAgICAiXDAwNVx1ZmY3M1wwMDdcdWZmNzNcMDEwXHVmZjczXDAxMVx1ZmY3M1wwMTJcdWZmNzNcMDEzXHVmZjczXDAxNCIgKwotICAgICJcdWZmNzNcMDE1XHVmZjczXDAxNlx1ZmY3M1wwMTdcdWZmNzNcMDIwXHVmZjczXDAyMVx1ZmY3M1wwMjJcdWZmNzMiICsKLSAgICAiXDAyM1x1ZmY3M1wwMjRcdWZmNzNcMDI1XHVmZjczXDAzMlx1ZmY3M1wwMzVcdWZmNzNcMDUzXHVmZjczXDA1NCIgKwotICAgICJcdWZmNzNcMDU1XHVmZjczXDA1Nlx1ZmY3M1wwNTdcdWZmNzNcMDYwXHVmZjczXDA2MVx1ZmY3M1wwNjJcdWZmNzMiICsKLSAgICAiXDA2M1x1ZmY3M1wwNjRcdWZmNzNcMDY1XHVmZjczXDA2Nlx1ZmY3M1wwNjdcdWZmNzNcMDcxXHVmZjczXDA3MyIgKwotICAgICJcdWZmNzNcMDc0XHVmZjczXDA3NVx1ZmY3M1wxMDBcdWZmNzNcMTAxXHVmZjczXDEwMlx1ZmY3M1wxMDdcdWZmNzMiICsKLSAgICAiXDExMFx1ZmY3M1wxMTFcdWZmNzNcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY3NFwwMDRcdWZmNzRcMDA1IiArCi0gICAgIlx1ZmY3NFwwMDdcdWZmNzRcMDEwXHVmZjc0XDAxMVx1ZmY3NFwwMTJcdWZmNzRcMDEzXHVmZjc0XDAxNFx1ZmY3NCIgKwotICAgICJcMDE1XHVmZjc0XDAxNlx1ZmY3NFwwMTdcdWZmNzRcMDIwXHVmZjc0XDAyMVx1ZmY3NFwwMjJcdWZmNzRcMDIzIiArCi0gICAgIlx1ZmY3NFwwMjRcdWZmNzRcMDI1XHVmZjc0XDAzMlx1ZmY3NFwwMzVcdWZmNzRcMDUzXHVmZjc0XDA1NFx1ZmY3NCIgKwotICAgICJcMDU1XHVmZjc0XDA1Nlx1ZmY3NFwwNTdcdWZmNzRcMDYwXHVmZjc0XDA2MVx1ZmY3NFwwNjJcdWZmNzRcMDYzIiArCi0gICAgIlx1ZmY3NFwwNjRcdWZmNzRcMDY1XHVmZjc0XDA2Nlx1ZmY3NFwwNjdcdWZmNzRcMDcxXHVmZjc0XDA3M1x1ZmY3NCIgKwotICAgICJcMDc0XHVmZjc0XDA3NVx1ZmY3NFwxMDBcdWZmNzRcMTAxXHVmZjc0XDEwMlx1ZmY3NFwxMDdcdWZmNzRcMTEwIiArCi0gICAgIlx1ZmY3NFwxMTFcdWZmNzRcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYzN1wwMDRcdWZmMzdcMDA1XHVmZjM3IiArCi0gICAgIlwwMDZcdWZmMDBcMDA3XHVmZjM3XDAxMFx1ZmYzN1wwMTFcdWZmMzdcMDEyXHVmZjM3XDAxM1x1ZmYzN1wwMTQiICsKLSAgICAiXHVmZjM3XDAxNVx1ZmYzN1wwMTZcdWZmMzdcMDE3XHVmZjM3XDAyMFx1ZmYzN1wwMjFcdWZmMzdcMDIyXHVmZjM3IiArCi0gICAgIlwwMjNcdWZmMzdcMDI0XHVmZjM3XDAyNVx1ZmYzN1wwMzFcdWZmMzdcMDMyXHVmZjM3XDA1M1x1ZmYzN1wwNTQiICsKLSAgICAiXHVmZjM3XDA1NVx1ZmYzN1wwNTZcdWZmMzdcMDU3XHVmZjM3XDA2MFx1ZmYzN1wwNjFcdWZmMzdcMDYyXHVmZjM3IiArCi0gICAgIlwwNjNcdWZmMzdcMDY0XHVmZjM3XDA2NVx1ZmYzN1wwNjZcdWZmMzdcMDY3XHVmZjM3XDA3MVx1ZmYzN1wwNzMiICsKLSAgICAiXHVmZjM3XDA3NFx1ZmYzN1wwNzVcdWZmMzdcMTAwXHVmZjM3XDEwMVx1ZmYzN1wxMDJcdWZmMzdcMTA3XHVmZjM3IiArCi0gICAgIlwxMTBcdWZmMzdcMTExXHVmZjM3XDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmNDdcMDA0XHVmZjQ3XDAwNSIgKwotICAgICJcdWZmNDdcMDA2XHVmZjBmXDAwN1x1ZmY0N1wwMTBcdWZmNDdcMDExXHVmZjQ3XDAxMlx1ZmY0N1wwMTNcdWZmNDciICsKLSAgICAiXDAxNFx1ZmY0N1wwMTVcdWZmNDdcMDE2XHVmZjQ3XDAxN1x1ZmY0N1wwMjBcdWZmNDdcMDIxXHVmZjQ3XDAyMiIgKwotICAgICJcdWZmNDdcMDIzXHVmZjQ3XDAyNFx1ZmY0N1wwMjVcdWZmNDdcMDMxXHVmZjQ3XDAzMlx1ZmY0N1wwNTNcdWZmNDciICsKLSAgICAiXDA1NFx1ZmY0N1wwNTVcdWZmNDdcMDU2XHVmZjQ3XDA1N1x1ZmY0N1wwNjBcdWZmNDdcMDYxXHVmZjQ3XDA2MiIgKwotICAgICJcdWZmNDdcMDYzXHVmZjQ3XDA2NFx1ZmY0N1wwNjVcdWZmNDdcMDY2XHVmZjQ3XDA2N1x1ZmY0N1wwNzFcdWZmNDciICsKLSAgICAiXDA3M1x1ZmY0N1wwNzRcdWZmNDdcMDc1XHVmZjQ3XDEwMFx1ZmY0N1wxMDFcdWZmNDdcMTAyXHVmZjQ3XDEwNyIgKwotICAgICJcdWZmNDdcMTEwXHVmZjQ3XDExMVx1ZmY0N1wwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjIxXDAwNFx1ZmYyMSIgKwotICAgICJcMDA1XHVmZjIxXDAwNlx1MDExNFwwMDdcdWZmMjFcMDEwXHVmZjIxXDAxMVx1ZmYyMVwwMTJcdWZmMjFcMDEzIiArCi0gICAgIlx1ZmYyMVwwMTRcdWZmMjFcMDE1XHVmZjIxXDAxNlx1ZmYyMVwwMTdcdWZmMjFcMDIwXHVmZjIxXDAyMVx1ZmYyMSIgKwotICAgICJcMDIyXHVmZjIxXDAyM1x1ZmYyMVwwMjRcdWZmMjFcMDI1XHVmZjIxXDAzMVx1ZmYyMVwwMzJcdWZmMjFcMDM1IiArCi0gICAgIlx1ZmYyMVwwNTNcdWZmMjFcMDU0XHVmZjIxXDA1NVx1ZmYyMVwwNTZcdWZmMjFcMDU3XHVmZjIxXDA2MFx1ZmYyMSIgKwotICAgICJcMDYxXHVmZjIxXDA2Mlx1ZmYyMVwwNjNcdWZmMjFcMDY0XHVmZjIxXDA2NVx1ZmYyMVwwNjZcdWZmMjFcMDY3IiArCi0gICAgIlx1ZmYyMVwwNzFcdWZmMjFcMDczXHVmZjIxXDA3NFx1ZmYyMVwwNzVcdWZmMjFcMTAwXHVmZjIxXDEwMVx1ZmYyMSIgKwotICAgICJcMTAyXHVmZjIxXDEwN1x1ZmYyMVwxMTBcdWZmMjFcMTExXHVmZjIxXDAwMVwwMDJcMDAwXDEzNlwwMDIiICsKLSAgICAiXHVmZjFkXDAwNFx1ZmYxZFwwMDVcdWZmMWRcMDA2XHVmZjFkXDAwN1x1ZmYxZFwwMTBcdWZmMWRcMDExXHVmZjFkIiArCi0gICAgIlwwMTJcdWZmMWRcMDEzXHVmZjFkXDAxNFx1ZmYxZFwwMTVcdWZmMWRcMDE2XHVmZjFkXDAxN1x1ZmYxZFwwMjAiICsKLSAgICAiXHVmZjFkXDAyMVx1ZmYxZFwwMjJcdWZmMWRcMDIzXHVmZjFkXDAyNFx1ZmYxZFwwMjVcdWZmMWRcMDMxXHVmZjFkIiArCi0gICAgIlwwMzJcdWZmMWRcMDM1XHVmZjFkXDA1M1x1ZmYxZFwwNTRcdWZmMWRcMDU1XHVmZjFkXDA1Nlx1ZmYxZFwwNTciICsKLSAgICAiXHVmZjFkXDA2MFx1ZmYxZFwwNjFcdWZmMWRcMDYyXHVmZjFkXDA2M1x1ZmYxZFwwNjRcdWZmMWRcMDY1XHVmZjFkIiArCi0gICAgIlwwNjZcdWZmMWRcMDY3XHVmZjFkXDA3MVx1ZmYxZFwwNzNcdWZmMWRcMDc0XHVmZjFkXDA3NVx1ZmYxZFwwNzciICsKLSAgICAiXHVmZjFkXDEwMFx1ZmYxZFwxMDFcdWZmMWRcMTAyXHVmZjFkXDEwN1x1ZmYxZFwxMTBcdWZmMWRcMTExXHVmZjFkIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMDBcMDAyXHVmZmU3XDAwNVx1ZmZlN1wwMDdcdWZmZTdcMDEwXHVmZmU3XDAxMSIgKwotICAgICJcdWZmZTdcMDEyXHUwMTA4XDAxNFx1ZmZlN1wwMTVcdWZmZTdcMDE2XHVmZmU3XDAxN1x1ZmZlN1wwMjBcdWZmZTciICsKLSAgICAiXDAyMVx1ZmZlN1wwMjJcdWZmZTdcMDIzXHVmZmU3XDAzMlx1ZmZlN1wwNTNcdWZmZTdcMDU0XHVmZmU3XDA1NSIgKwotICAgICJcdWZmZTdcMDU2XHVmZmU3XDA1N1x1ZmZlN1wwNjBcdWZmZTdcMDYxXHUwMTBhXDA2Mlx1MDEwYlwwNjNcdTAxMDkiICsKLSAgICAiXDA3NVx1ZmZlN1wxMDBcdWZmZTdcMTAxXHVmZmU3XDEwMlx1ZmZlN1wxMDdcdWZmZTdcMTEwXHVmZmU3XDExMSIgKwotICAgICJcdWZmZTdcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiYlwwMDVcdWZmYmJcMDA3XHVmZmJiXDAxMFx1ZmZiYiIgKwotICAgICJcMDExXHVmZmJiXDAxMlx1ZmZiYlwwMTNcdWZmYmJcMDE0XHVmZmJiXDAxNVx1ZmZiYlwwMTZcdWZmYmJcMDE3IiArCi0gICAgIlx1ZmZiYlwwMjBcdWZmYmJcMDIxXHVmZmJiXDAyMlx1ZmZiYlwwMjNcdWZmYmJcMDI0XHUwMTA0XDAyNVx1MDEwNSIgKwotICAgICJcMDMyXHVmZmJiXDA1M1x1ZmZiYlwwNTRcdWZmYmJcMDU1XHVmZmJiXDA1Nlx1ZmZiYlwwNTdcdWZmYmJcMDYwIiArCi0gICAgIlx1ZmZiYlwwNjFcdWZmYmJcMDYyXHVmZmJiXDA2M1x1ZmZiYlwwNjRcdWZmYmJcMDY1XHVmZmJiXDA2Nlx1ZmZiYiIgKwotICAgICJcMDY3XHVmZmJiXDA3MVx1ZmZiYlwwNzNcdWZmYmJcMDc0XHVmZmJiXDA3NVx1ZmZiYlwxMDBcdWZmYmJcMTAxIiArCi0gICAgIlx1ZmZiYlwxMDJcdWZmYmJcMTA3XHVmZmJiXDExMFx1ZmZiYlwxMTFcdWZmYmJcMDAxXDAwMlwwMDBcMDA0IiArCi0gICAgIlwwMDZcMzc1XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNzJcMDA0XHVmZjcyXDAwNVx1ZmY3MlwwMDciICsKLSAgICAiXHVmZjcyXDAxMFx1ZmY3MlwwMTFcdWZmNzJcMDEyXHVmZjcyXDAxM1x1ZmY3MlwwMTRcdWZmNzJcMDE1XHVmZjcyIiArCi0gICAgIlwwMTZcdWZmNzJcMDE3XHVmZjcyXDAyMFx1ZmY3MlwwMjFcdWZmNzJcMDIyXHVmZjcyXDAyM1x1ZmY3MlwwMjQiICsKLSAgICAiXHVmZjcyXDAyNVx1ZmY3MlwwMzJcdWZmNzJcMDM1XHVmZjcyXDA1M1x1ZmY3MlwwNTRcdWZmNzJcMDU1XHVmZjcyIiArCi0gICAgIlwwNTZcdWZmNzJcMDU3XHVmZjcyXDA2MFx1ZmY3MlwwNjFcdWZmNzJcMDYyXHVmZjcyXDA2M1x1ZmY3MlwwNjQiICsKLSAgICAiXHVmZjcyXDA2NVx1ZmY3MlwwNjZcdWZmNzJcMDY3XHVmZjcyXDA3MVx1ZmY3MlwwNzNcdWZmNzJcMDc0XHVmZjcyIiArCi0gICAgIlwwNzVcdWZmNzJcMTAwXHVmZjcyXDEwMVx1ZmY3MlwxMDJcdWZmNzJcMTA3XHVmZjcyXDExMFx1ZmY3MlwxMTEiICsKLSAgICAiXHVmZjcyXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMWVcMDA0XHVmZjFlXDAwNVx1ZmYxZVwwMDZcdWZmMWUiICsKLSAgICAiXDAwN1x1ZmYxZVwwMTBcdWZmMWVcMDExXHVmZjFlXDAxMlx1ZmYxZVwwMTNcdWZmMWVcMDE0XHVmZjFlXDAxNSIgKwotICAgICJcdWZmMWVcMDE2XHVmZjFlXDAxN1x1ZmYxZVwwMjBcdWZmMWVcMDIxXHVmZjFlXDAyMlx1ZmYxZVwwMjNcdWZmMWUiICsKLSAgICAiXDAyNFx1ZmYxZVwwMjVcdWZmMWVcMDMxXHVmZjFlXDAzMlx1ZmYxZVwwMzVcdWZmMWVcMDUzXHVmZjFlXDA1NCIgKwotICAgICJcdWZmMWVcMDU1XHVmZjFlXDA1Nlx1ZmYxZVwwNTdcdWZmMWVcMDYwXHVmZjFlXDA2MVx1ZmYxZVwwNjJcdWZmMWUiICsKLSAgICAiXDA2M1x1ZmYxZVwwNjRcdWZmMWVcMDY1XHVmZjFlXDA2Nlx1ZmYxZVwwNjdcdWZmMWVcMDcxXHVmZjFlXDA3MyIgKwotICAgICJcdWZmMWVcMDc0XHVmZjFlXDA3NVx1ZmYxZVwwNzdcdWZmMWVcMTAwXHVmZjFlXDEwMVx1ZmYxZVwxMDJcdWZmMWUiICsKLSAgICAiXDEwN1x1ZmYxZVwxMTBcdWZmMWVcMTExXHVmZjFlXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMzFcMDA0IiArCi0gICAgIlx1ZmYzMVwwMDVcdWZmMzFcMDA2XHVmZWZhXDAwN1x1ZmYzMVwwMTBcdWZmMzFcMDExXHVmZjMxXDAxMlx1ZmYzMSIgKwotICAgICJcMDEzXHVmZjMxXDAxNFx1ZmYzMVwwMTVcdWZmMzFcMDE2XHVmZjMxXDAxN1x1ZmYzMVwwMjBcdWZmMzFcMDIxIiArCi0gICAgIlx1ZmYzMVwwMjJcdWZmMzFcMDIzXHVmZjMxXDAyNFx1ZmYzMVwwMjVcdWZmMzFcMDMxXHVmZjMxXDAzMlx1ZmYzMSIgKwotICAgICJcMDUzXHVmZjMxXDA1NFx1ZmYzMVwwNTVcdWZmMzFcMDU2XHVmZjMxXDA1N1x1ZmYzMVwwNjBcdWZmMzFcMDYxIiArCi0gICAgIlx1ZmYzMVwwNjJcdWZmMzFcMDYzXHVmZjMxXDA2NFx1ZmYzMVwwNjVcdWZmMzFcMDY2XHVmZjMxXDA2N1x1ZmYzMSIgKwotICAgICJcMDcxXHVmZjMxXDA3M1x1ZmYzMVwwNzRcdWZmMzFcMDc1XHVmZjMxXDEwMFx1ZmYzMVwxMDFcdWZmMzFcMTAyIiArCi0gICAgIlx1ZmYzMVwxMDdcdWZmMzFcMTEwXHVmZjMxXDExMVx1ZmYzMVwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjJmIiArCi0gICAgIlwwMDRcdWZmMmZcMDA1XHVmZjJmXDAwNlx1ZmVmOFwwMDdcdWZmMmZcMDEwXHVmZjJmXDAxMVx1ZmYyZlwwMTIiICsKLSAgICAiXHVmZjJmXDAxM1x1ZmYyZlwwMTRcdWZmMmZcMDE1XHVmZjJmXDAxNlx1ZmYyZlwwMTdcdWZmMmZcMDIwXHVmZjJmIiArCi0gICAgIlwwMjFcdWZmMmZcMDIyXHVmZjJmXDAyM1x1ZmYyZlwwMjRcdWZmMmZcMDI1XHVmZjJmXDAzMVx1ZmYyZlwwMzIiICsKLSAgICAiXHVmZjJmXDA1M1x1ZmYyZlwwNTRcdWZmMmZcMDU1XHVmZjJmXDA1Nlx1ZmYyZlwwNTdcdWZmMmZcMDYwXHVmZjJmIiArCi0gICAgIlwwNjFcdWZmMmZcMDYyXHVmZjJmXDA2M1x1ZmYyZlwwNjRcdWZmMmZcMDY1XHVmZjJmXDA2Nlx1ZmYyZlwwNjciICsKLSAgICAiXHVmZjJmXDA3MVx1ZmYyZlwwNzNcdWZmMmZcMDc0XHVmZjJmXDA3NVx1ZmYyZlwxMDBcdWZmMmZcMTAxXHVmZjJmIiArCi0gICAgIlwxMDJcdWZmMmZcMTA3XHVmZjJmXDExMFx1ZmYyZlwxMTFcdWZmMmZcMDAxXDAwMlwwMDBcMjE2XDAwNiIgKwotICAgICJcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3IiArCi0gICAgIlwwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDEiICsKLSAgICAiXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNCIgKwotICAgICJcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2IiArCi0gICAgIlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTEiICsKLSAgICAiXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3MyIgKwotICAgICJcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2IiArCi0gICAgIlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTAiICsKLSAgICAiXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NiIgKwotICAgICJcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1IiArCi0gICAgIlwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwxMjYiICsKLSAgICAiXDAwMlx1ZmY5MlwwMDRcdWZmOTJcMDA1XHVmZjkyXDAwN1x1ZmY5MlwwMTBcdWZmOTJcMDExXHVmZjkyXDAxMiIgKwotICAgICJcdWZmOTJcMDEzXHVmZjkyXDAxNFx1ZmY5MlwwMTVcdWZmOTJcMDE2XHVmZjkyXDAxN1x1ZmY5MlwwMjBcdWZmOTIiICsKLSAgICAiXDAyMVx1ZmY5MlwwMjJcdWZmOTJcMDIzXHVmZjkyXDAyNFx1ZmY5MlwwMjVcdWZmOTJcMDMyXHVmZjkyXDA1MyIgKwotICAgICJcdWZmOTJcMDU0XHVmZjkyXDA1NVx1ZmY5MlwwNTZcdWZmOTJcMDU3XHVmZjkyXDA2MFx1ZmY5MlwwNjFcdWZmOTIiICsKLSAgICAiXDA2Mlx1ZmY5MlwwNjNcdWZmOTJcMDY0XHVmZjkyXDA2NVx1ZmY5MlwwNjZcdWZmOTJcMDY3XHVmZjkyXDA3MSIgKwotICAgICJcdWZmOTJcMDczXHVmZjkyXDA3NFx1ZmY5MlwwNzVcdWZmOTJcMTAwXHVmZjkyXDEwMVx1ZmY5MlwxMDJcdWZmOTIiICsKLSAgICAiXDEwN1x1ZmY5MlwxMTBcdWZmOTJcMTExXHVmZjkyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmYTZcMDA0IiArCi0gICAgIlx1ZmZhNlwwMDVcdWZmYTZcMDA3XHVmZmE2XDAxMFx1ZmZhNlwwMTFcdWZmYTZcMDEyXHVmZmE2XDAxM1x1ZmZhNiIgKwotICAgICJcMDE0XHVmZmE2XDAxNVx1ZmZhNlwwMTZcdWZmYTZcMDE3XHVmZmE2XDAyMFx1ZmZhNlwwMjFcdWZmYTZcMDIyIiArCi0gICAgIlx1ZmZhNlwwMjNcdWZmYTZcMDI0XHVmZmE2XDAyNVx1ZmZhNlwwMzJcdWZmYTZcMDUzXHVmZmE2XDA1NFx1ZmZhNiIgKwotICAgICJcMDU1XHVmZmE2XDA1Nlx1ZmZhNlwwNTdcdWZmYTZcMDYwXHVmZmE2XDA2MVx1ZmZhNlwwNjJcdWZmYTZcMDYzIiArCi0gICAgIlx1ZmZhNlwwNjRcdWZmYTZcMDY1XHVmZmE2XDA2Nlx1ZmZhNlwwNjdcdWZmYTZcMDcxXHVmZmE2XDA3M1x1ZmZhNiIgKwotICAgICJcMDc0XHVmZmE2XDA3NVx1ZmZhNlwxMDBcdWZmYTZcMTAxXHVmZmE2XDEwMlx1ZmZhNlwxMDdcdWZmYTZcMTEwIiArCi0gICAgIlx1ZmZhNlwxMTFcdWZmYTZcMDAxXDAwMlwwMDBcMTM0XDAwMlx1ZmYxYlwwMDRcdWZmMWJcMDA1XHVmZjFiIiArCi0gICAgIlwwMDZcMzY2XDAwN1x1ZmYxYlwwMTBcdWZmMWJcMDExXHVmZjFiXDAxMlx1ZmYxYlwwMTNcdWZmMWJcMDE0IiArCi0gICAgIlx1ZmYxYlwwMTVcdWZmMWJcMDE2XHVmZjFiXDAxN1x1ZmYxYlwwMjBcdWZmMWJcMDIxXHVmZjFiXDAyMlx1ZmYxYiIgKwotICAgICJcMDIzXHVmZjFiXDAyNFx1ZmYxYlwwMjVcdWZmMWJcMDMxXHVmZjFiXDAzMlx1ZmYxYlwwMzVcdWZmMWJcMDUzIiArCi0gICAgIlx1ZmYxYlwwNTRcdWZmMWJcMDU1XHVmZjFiXDA1Nlx1ZmYxYlwwNTdcdWZmMWJcMDYwXHVmZjFiXDA2MVx1ZmYxYiIgKwotICAgICJcMDYyXHVmZjFiXDA2M1x1ZmYxYlwwNjRcdWZmMWJcMDY1XHVmZjFiXDA2Nlx1ZmYxYlwwNjdcdWZmMWJcMDcxIiArCi0gICAgIlx1ZmYxYlwwNzNcdWZmMWJcMDc0XHVmZjFiXDA3NVx1ZmYxYlwxMDBcdWZmMWJcMTAxXHVmZjFiXDEwMlx1ZmYxYiIgKwotICAgICJcMTA3XHVmZjFiXDExMFx1ZmYxYlwxMTFcdWZmMWJcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyZFwwMDQiICsKLSAgICAiXHVmZjJkXDAwNVx1ZmYyZFwwMDZcdWZlZjZcMDA3XHVmZjJkXDAxMFx1ZmYyZFwwMTFcdWZmMmRcMDEyXHVmZjJkIiArCi0gICAgIlwwMTNcdWZmMmRcMDE0XHVmZjJkXDAxNVx1ZmYyZFwwMTZcdWZmMmRcMDE3XHVmZjJkXDAyMFx1ZmYyZFwwMjEiICsKLSAgICAiXHVmZjJkXDAyMlx1ZmYyZFwwMjNcdWZmMmRcMDI0XHVmZjJkXDAyNVx1ZmYyZFwwMzFcdWZmMmRcMDMyXHVmZjJkIiArCi0gICAgIlwwNTNcdWZmMmRcMDU0XHVmZjJkXDA1NVx1ZmYyZFwwNTZcdWZmMmRcMDU3XHVmZjJkXDA2MFx1ZmYyZFwwNjEiICsKLSAgICAiXHVmZjJkXDA2Mlx1ZmYyZFwwNjNcdWZmMmRcMDY0XHVmZjJkXDA2NVx1ZmYyZFwwNjZcdWZmMmRcMDY3XHVmZjJkIiArCi0gICAgIlwwNzFcdWZmMmRcMDczXHVmZjJkXDA3NFx1ZmYyZFwwNzVcdWZmMmRcMTAwXHVmZjJkXDEwMVx1ZmYyZFwxMDIiICsKLSAgICAiXHVmZjJkXDEwN1x1ZmYyZFwxMTBcdWZmMmRcMTExXHVmZjJkXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOTQiICsKLSAgICAiXDAwNFx1ZmY5NFwwMDVcdWZmOTRcMDA3XHVmZjk0XDAxMFx1ZmY5NFwwMTFcdWZmOTRcMDEyXHVmZjk0XDAxMyIgKwotICAgICJcdWZmOTRcMDE0XHVmZjk0XDAxNVx1ZmY5NFwwMTZcdWZmOTRcMDE3XHVmZjk0XDAyMFx1ZmY5NFwwMjFcdWZmOTQiICsKLSAgICAiXDAyMlx1ZmY5NFwwMjNcdWZmOTRcMDI0XHVmZjk0XDAyNVx1ZmY5NFwwMzJcdWZmOTRcMDUzXHVmZjk0XDA1NCIgKwotICAgICJcdWZmOTRcMDU1XHVmZjk0XDA1Nlx1ZmY5NFwwNTdcdWZmOTRcMDYwXHVmZjk0XDA2MVx1ZmY5NFwwNjJcdWZmOTQiICsKLSAgICAiXDA2M1x1ZmY5NFwwNjRcdWZmOTRcMDY1XHVmZjk0XDA2Nlx1ZmY5NFwwNjdcdWZmOTRcMDcxXHVmZjk0XDA3MyIgKwotICAgICJcdWZmOTRcMDc0XHVmZjk0XDA3NVx1ZmY5NFwxMDBcdWZmOTRcMTAxXHVmZjk0XDEwMlx1ZmY5NFwxMDdcdWZmOTQiICsKLSAgICAiXDExMFx1ZmY5NFwxMTFcdWZmOTRcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyNFwwMDRcdWZmMjRcMDA1IiArCi0gICAgIlx1ZmYyNFwwMDZcdWZlZWVcMDA3XHVmZjI0XDAxMFx1ZmYyNFwwMTFcdWZmMjRcMDEyXHVmZjI0XDAxM1x1ZmYyNCIgKwotICAgICJcMDE0XHVmZjI0XDAxNVx1ZmYyNFwwMTZcdWZmMjRcMDE3XHVmZjI0XDAyMFx1ZmYyNFwwMjFcdWZmMjRcMDIyIiArCi0gICAgIlx1ZmYyNFwwMjNcdWZmMjRcMDI0XHVmZjI0XDAyNVx1ZmYyNFwwMzFcdWZmMjRcMDMyXHVmZjI0XDA1M1x1ZmYyNCIgKwotICAgICJcMDU0XHVmZjI0XDA1NVx1ZmYyNFwwNTZcdWZmMjRcMDU3XHVmZjI0XDA2MFx1ZmYyNFwwNjFcdWZmMjRcMDYyIiArCi0gICAgIlx1ZmYyNFwwNjNcdWZmMjRcMDY0XHVmZjI0XDA2NVx1ZmYyNFwwNjZcdWZmMjRcMDY3XHVmZjI0XDA3MVx1ZmYyNCIgKwotICAgICJcMDczXHVmZjI0XDA3NFx1ZmYyNFwwNzVcdWZmMjRcMTAwXHVmZjI0XDEwMVx1ZmYyNFwxMDJcdWZmMjRcMTA3IiArCi0gICAgIlx1ZmYyNFwxMTBcdWZmMjRcMTExXHVmZjI0XDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDNcMDA0XHVmZjQzIiArCi0gICAgIlwwMDVcdWZmNDNcMDA2XDM1M1wwMDdcdWZmNDNcMDEwXHVmZjQzXDAxMVx1ZmY0M1wwMTJcdWZmNDNcMDEzIiArCi0gICAgIlx1ZmY0M1wwMTRcdWZmNDNcMDE1XHVmZjQzXDAxNlx1ZmY0M1wwMTdcdWZmNDNcMDIwXHVmZjQzXDAyMVx1ZmY0MyIgKwotICAgICJcMDIyXHVmZjQzXDAyM1x1ZmY0M1wwMjRcdWZmNDNcMDI1XHVmZjQzXDAyNlwzNTJcMDMxXHVmZjQzXDAzMiIgKwotICAgICJcdWZmNDNcMDUzXHVmZjQzXDA1NFx1ZmY0M1wwNTVcdWZmNDNcMDU2XHVmZjQzXDA1N1x1ZmY0M1wwNjBcdWZmNDMiICsKLSAgICAiXDA2MVx1ZmY0M1wwNjJcdWZmNDNcMDYzXHVmZjQzXDA2NFx1ZmY0M1wwNjVcdWZmNDNcMDY2XHVmZjQzXDA2NyIgKwotICAgICJcdWZmNDNcMDcxXHVmZjQzXDA3M1x1ZmY0M1wwNzRcdWZmNDNcMDc1XHVmZjQzXDEwMFx1ZmY0M1wxMDFcdWZmNDMiICsKLSAgICAiXDEwMlx1ZmY0M1wxMDdcdWZmNDNcMTEwXHVmZjQzXDExMVx1ZmY0M1wwMDFcMDAyXDAwMFwxMjBcMDAyIiArCi0gICAgIlx1ZmZkMVwwMDVcdWZmZDFcMDA3XHVmZmQxXDAxMFx1ZmZkMVwwMTFcdWZmZDFcMDEyXHVmZmQxXDAxM1x1ZmZkMSIgKwotICAgICJcMDE0XHVmZmQxXDAxNVx1ZmZkMVwwMTZcdWZmZDFcMDE3XHVmZmQxXDAyMFx1ZmZkMVwwMjFcdWZmZDFcMDIyIiArCi0gICAgIlx1ZmZkMVwwMjNcdWZmZDFcMDMyXHVmZmQxXDA1M1x1ZmZkMVwwNTRcdWZmZDFcMDU1XHVmZmQxXDA1Nlx1ZmZkMSIgKwotICAgICJcMDU3XHVmZmQxXDA2MFx1ZmZkMVwwNjFcdWZmZDFcMDYyXHVmZmQxXDA2M1x1ZmZkMVwwNjRcdWZmZDFcMDY1IiArCi0gICAgIlx1ZmZkMVwwNjZcdWZmZDFcMDY3XHVmZmQxXDA3MVx1ZmZkMVwwNzNcdWZmZDFcMDc0XHVmZmQxXDA3NVx1ZmZkMSIgKwotICAgICJcMTAwXHVmZmQxXDEwMVx1ZmZkMVwxMDJcdWZmZDFcMTA3XHVmZmQxXDExMFx1ZmZkMVwxMTFcdWZmZDFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzMlwwMDJcdWZmMjhcMDA0XHVmZjI4XDAwNVx1ZmYyOFwwMDZcMzQzXDAwN1x1ZmYyOCIgKwotICAgICJcMDEwXHVmZjI4XDAxMVx1ZmYyOFwwMTJcdWZmMjhcMDEzXHVmZjI4XDAxNFx1ZmYyOFwwMTVcdWZmMjhcMDE2IiArCi0gICAgIlx1ZmYyOFwwMTdcdWZmMjhcMDIwXHVmZjI4XDAyMVx1ZmYyOFwwMjJcdWZmMjhcMDIzXHVmZjI4XDAyNFx1ZmYyOCIgKwotICAgICJcMDI1XHVmZjI4XDAzMVx1ZmYyOFwwMzJcdWZmMjhcMDUzXHVmZjI4XDA1NFx1ZmYyOFwwNTVcdWZmMjhcMDU2IiArCi0gICAgIlx1ZmYyOFwwNTdcdWZmMjhcMDYwXHVmZjI4XDA2MVx1ZmYyOFwwNjJcdWZmMjhcMDYzXHVmZjI4XDA2NFx1ZmYyOCIgKwotICAgICJcMDY1XHVmZjI4XDA2Nlx1ZmYyOFwwNjdcdWZmMjhcMDcxXHVmZjI4XDA3M1x1ZmYyOFwwNzRcdWZmMjhcMDc1IiArCi0gICAgIlx1ZmYyOFwxMDBcdWZmMjhcMTAxXHVmZjI4XDEwMlx1ZmYyOFwxMDdcdWZmMjhcMTEwXHVmZjI4XDExMVx1ZmYyOCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2ZlwwMDRcdWZmNmZcMDA1XHVmZjZmXDAwN1x1ZmY2ZlwwMTAiICsKLSAgICAiXHVmZjZmXDAxMVx1ZmY2ZlwwMTJcdWZmNmZcMDEzXHVmZjZmXDAxNFx1ZmY2ZlwwMTVcdWZmNmZcMDE2XHVmZjZmIiArCi0gICAgIlwwMTdcdWZmNmZcMDIwXHVmZjZmXDAyMVx1ZmY2ZlwwMjJcdWZmNmZcMDIzXHVmZjZmXDAyNFx1ZmY2ZlwwMjUiICsKLSAgICAiXHVmZjZmXDAzMlx1ZmY2ZlwwMzVcdWZmNmZcMDUzXHVmZjZmXDA1NFx1ZmY2ZlwwNTVcdWZmNmZcMDU2XHVmZjZmIiArCi0gICAgIlwwNTdcdWZmNmZcMDYwXHVmZjZmXDA2MVx1ZmY2ZlwwNjJcdWZmNmZcMDYzXHVmZjZmXDA2NFx1ZmY2ZlwwNjUiICsKLSAgICAiXHVmZjZmXDA2Nlx1ZmY2ZlwwNjdcdWZmNmZcMDcxXHVmZjZmXDA3M1x1ZmY2ZlwwNzRcdWZmNmZcMDc1XHVmZjZmIiArCi0gICAgIlwxMDBcdWZmNmZcMTAxXHVmZjZmXDEwMlx1ZmY2ZlwxMDdcdWZmNmZcMTEwXHVmZjZmXDExMVx1ZmY2ZlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTIwXDAwMlx1ZmZjZVwwMDVcdWZmY2VcMDA3XHVmZmNlXDAxMFx1ZmZjZVwwMTFcdWZmY2UiICsKLSAgICAiXDAxMlx1ZmZjZVwwMTNcdWZmY2VcMDE0XHVmZmNlXDAxNVx1ZmZjZVwwMTZcdWZmY2VcMDE3XHVmZmNlXDAyMCIgKwotICAgICJcdWZmY2VcMDIxXHVmZmNlXDAyMlx1ZmZjZVwwMjNcdWZmY2VcMDMyXHVmZmNlXDA1M1x1ZmZjZVwwNTRcdWZmY2UiICsKLSAgICAiXDA1NVx1ZmZjZVwwNTZcdWZmY2VcMDU3XHVmZmNlXDA2MFx1ZmZjZVwwNjFcdWZmY2VcMDYyXHVmZmNlXDA2MyIgKwotICAgICJcdWZmY2VcMDY0XHVmZmNlXDA2NVx1ZmZjZVwwNjZcdWZmY2VcMDY3XHVmZmNlXDA3MVx1ZmZjZVwwNzNcdWZmY2UiICsKLSAgICAiXDA3NFx1ZmZjZVwwNzVcdWZmY2VcMTAwXHVmZmNlXDEwMVx1ZmZjZVwxMDJcdWZmY2VcMTA3XHVmZmNlXDExMCIgKwotICAgICJcdWZmY2VcMTExXHVmZmNlXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMTdcMDA0XHVmZjE3XDAwNVx1ZmYxNyIgKwotICAgICJcMDA2XHVmZjE3XDAwN1x1ZmYxN1wwMTBcdWZmMTdcMDExXHVmZjE3XDAxMlx1ZmYxN1wwMTNcdWZmMTdcMDE0IiArCi0gICAgIlx1ZmYxN1wwMTVcdWZmMTdcMDE2XHVmZjE3XDAxN1x1ZmYxN1wwMjBcdWZmMTdcMDIxXHVmZjE3XDAyMlx1ZmYxNyIgKwotICAgICJcMDIzXHVmZjE3XDAyNFx1ZmYxN1wwMjVcdWZmMTdcMDMxXHVmZjE3XDAzMlx1ZmYxN1wwMzVcdWZmMTdcMDUzIiArCi0gICAgIlx1ZmYxN1wwNTRcdWZmMTdcMDU1XHVmZjE3XDA1Nlx1ZmYxN1wwNTdcdWZmMTdcMDYwXHVmZjE3XDA2MVx1ZmYxNyIgKwotICAgICJcMDYyXHVmZjE3XDA2M1x1ZmYxN1wwNjRcdWZmMTdcMDY1XHVmZjE3XDA2Nlx1ZmYxN1wwNjdcdWZmMTdcMDcxIiArCi0gICAgIlx1ZmYxN1wwNzNcdWZmMTdcMDc0XHVmZjE3XDA3NVx1ZmYxN1wwNzdcdWZmMTdcMTAwXHVmZjE3XDEwMVx1ZmYxNyIgKwotICAgICJcMTAyXHVmZjE3XDEwN1x1ZmYxN1wxMTBcdWZmMTdcMTExXHVmZjE3XDAwMVwwMDJcMDAwXDEzMlwwMDIiICsKLSAgICAiXHVmZjMwXDAwNFx1ZmYzMFwwMDVcdWZmMzBcMDA2XHVmZWY5XDAwN1x1ZmYzMFwwMTBcdWZmMzBcMDExXHVmZjMwIiArCi0gICAgIlwwMTJcdWZmMzBcMDEzXHVmZjMwXDAxNFx1ZmYzMFwwMTVcdWZmMzBcMDE2XHVmZjMwXDAxN1x1ZmYzMFwwMjAiICsKLSAgICAiXHVmZjMwXDAyMVx1ZmYzMFwwMjJcdWZmMzBcMDIzXHVmZjMwXDAyNFx1ZmYzMFwwMjVcdWZmMzBcMDMxXHVmZjMwIiArCi0gICAgIlwwMzJcdWZmMzBcMDUzXHVmZjMwXDA1NFx1ZmYzMFwwNTVcdWZmMzBcMDU2XHVmZjMwXDA1N1x1ZmYzMFwwNjAiICsKLSAgICAiXHVmZjMwXDA2MVx1ZmYzMFwwNjJcdWZmMzBcMDYzXHVmZjMwXDA2NFx1ZmYzMFwwNjVcdWZmMzBcMDY2XHVmZjMwIiArCi0gICAgIlwwNjdcdWZmMzBcMDcxXHVmZjMwXDA3M1x1ZmYzMFwwNzRcdWZmMzBcMDc1XHVmZjMwXDEwMFx1ZmYzMFwxMDEiICsKLSAgICAiXHVmZjMwXDEwMlx1ZmYzMFwxMDdcdWZmMzBcMTEwXHVmZjMwXDExMVx1ZmYzMFwwMDFcMDAyXDAwMFwxMzIiICsKLSAgICAiXDAwMlx1ZmYzNFwwMDRcdWZmMzRcMDA1XHVmZjM0XDAwNlx1ZmVmZFwwMDdcdWZmMzRcMDEwXHVmZjM0XDAxMSIgKwotICAgICJcdWZmMzRcMDEyXHVmZjM0XDAxM1x1ZmYzNFwwMTRcdWZmMzRcMDE1XHVmZjM0XDAxNlx1ZmYzNFwwMTdcdWZmMzQiICsKLSAgICAiXDAyMFx1ZmYzNFwwMjFcdWZmMzRcMDIyXHVmZjM0XDAyM1x1ZmYzNFwwMjRcdWZmMzRcMDI1XHVmZjM0XDAzMSIgKwotICAgICJcdWZmMzRcMDMyXHVmZjM0XDA1M1x1ZmYzNFwwNTRcdWZmMzRcMDU1XHVmZjM0XDA1Nlx1ZmYzNFwwNTdcdWZmMzQiICsKLSAgICAiXDA2MFx1ZmYzNFwwNjFcdWZmMzRcMDYyXHVmZjM0XDA2M1x1ZmYzNFwwNjRcdWZmMzRcMDY1XHVmZjM0XDA2NiIgKwotICAgICJcdWZmMzRcMDY3XHVmZjM0XDA3MVx1ZmYzNFwwNzNcdWZmMzRcMDc0XHVmZjM0XDA3NVx1ZmYzNFwxMDBcdWZmMzQiICsKLSAgICAiXDEwMVx1ZmYzNFwxMDJcdWZmMzRcMTA3XHVmZjM0XDExMFx1ZmYzNFwxMTFcdWZmMzRcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNFwwMDJcdWZmNDRcMDA0XHVmZjQ0XDAwNVx1ZmY0NFwwMDZcdWZmMGNcMDA3XHVmZjQ0XDAxMFx1ZmY0NCIgKwotICAgICJcMDExXHVmZjQ0XDAxMlx1ZmY0NFwwMTNcdWZmNDRcMDE0XHVmZjQ0XDAxNVx1ZmY0NFwwMTZcdWZmNDRcMDE3IiArCi0gICAgIlx1ZmY0NFwwMjBcdWZmNDRcMDIxXHVmZjQ0XDAyMlx1ZmY0NFwwMjNcdWZmNDRcMDI0XHVmZjQ0XDAyNVx1ZmY0NCIgKwotICAgICJcMDI2XDM0MlwwMzFcdWZmNDRcMDMyXHVmZjQ0XDA1M1x1ZmY0NFwwNTRcdWZmNDRcMDU1XHVmZjQ0XDA1NiIgKwotICAgICJcdWZmNDRcMDU3XHVmZjQ0XDA2MFx1ZmY0NFwwNjFcdWZmNDRcMDYyXHVmZjQ0XDA2M1x1ZmY0NFwwNjRcdWZmNDQiICsKLSAgICAiXDA2NVx1ZmY0NFwwNjZcdWZmNDRcMDY3XHVmZjQ0XDA3MVx1ZmY0NFwwNzNcdWZmNDRcMDc0XHVmZjQ0XDA3NSIgKwotICAgICJcdWZmNDRcMTAwXHVmZjQ0XDEwMVx1ZmY0NFwxMDJcdWZmNDRcMTA3XHVmZjQ0XDExMFx1ZmY0NFwxMTFcdWZmNDQiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmMmFcMDA0XHVmZjJhXDAwNVx1ZmYyYVwwMDZcdWZlZjNcMDA3IiArCi0gICAgIlx1ZmYyYVwwMTBcdWZmMmFcMDExXHVmZjJhXDAxMlx1ZmYyYVwwMTNcdWZmMmFcMDE0XHVmZjJhXDAxNVx1ZmYyYSIgKwotICAgICJcMDE2XHVmZjJhXDAxN1x1ZmYyYVwwMjBcdWZmMmFcMDIxXHVmZjJhXDAyMlx1ZmYyYVwwMjNcdWZmMmFcMDI0IiArCi0gICAgIlx1ZmYyYVwwMjVcdWZmMmFcMDMxXHVmZjJhXDAzMlx1ZmYyYVwwMzNcMzI2XDA1M1x1ZmYyYVwwNTRcdWZmMmEiICsKLSAgICAiXDA1NVx1ZmYyYVwwNTZcdWZmMmFcMDU3XHVmZjJhXDA2MFx1ZmYyYVwwNjFcdWZmMmFcMDYyXHVmZjJhXDA2MyIgKwotICAgICJcdWZmMmFcMDY0XHVmZjJhXDA2NVx1ZmYyYVwwNjZcdWZmMmFcMDY3XHVmZjJhXDA3MVx1ZmYyYVwwNzNcdWZmMmEiICsKLSAgICAiXDA3NFx1ZmYyYVwwNzVcdWZmMmFcMTAwXHVmZjJhXDEwMVx1ZmYyYVwxMDJcdWZmMmFcMTA3XHVmZjJhXDExMCIgKwotICAgICJcdWZmMmFcMTExXHVmZjJhXDAwMVwwMDJcMDAwXDAwNlwwMzJcMjI3XDEwMFwyMzBcMDAxXDAwMiIgKwotICAgICJcMDAwXDEyNlwwMDJcdWZmOWVcMDA0XHVmZjllXDAwNVx1ZmY5ZVwwMDdcdWZmOWVcMDEwXHVmZjllXDAxMSIgKwotICAgICJcdWZmOWVcMDEyXHVmZjllXDAxM1x1ZmY5ZVwwMTRcdWZmOWVcMDE1XHVmZjllXDAxNlx1ZmY5ZVwwMTdcdWZmOWUiICsKLSAgICAiXDAyMFx1ZmY5ZVwwMjFcdWZmOWVcMDIyXHVmZjllXDAyM1x1ZmY5ZVwwMjRcdWZmOWVcMDI1XHVmZjllXDAzMiIgKwotICAgICJcdWZmOWVcMDUzXHVmZjllXDA1NFx1ZmY5ZVwwNTVcdWZmOWVcMDU2XHVmZjllXDA1N1x1ZmY5ZVwwNjBcdWZmOWUiICsKLSAgICAiXDA2MVx1ZmY5ZVwwNjJcdWZmOWVcMDYzXHVmZjllXDA2NFx1ZmY5ZVwwNjVcdWZmOWVcMDY2XHVmZjllXDA2NyIgKwotICAgICJcdWZmOWVcMDcxXHVmZjllXDA3M1x1ZmY5ZVwwNzRcdWZmOWVcMDc1XHVmZjllXDEwMFx1ZmY5ZVwxMDFcdWZmOWUiICsKLSAgICAiXDEwMlx1ZmY5ZVwxMDdcdWZmOWVcMTEwXHVmZjllXDExMVx1ZmY5ZVwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY5NlwwMDRcdWZmOTZcMDA1XHVmZjk2XDAwN1x1ZmY5NlwwMTBcdWZmOTZcMDExXHVmZjk2XDAxMlx1ZmY5NiIgKwotICAgICJcMDEzXHVmZjk2XDAxNFx1ZmY5NlwwMTVcdWZmOTZcMDE2XHVmZjk2XDAxN1x1ZmY5NlwwMjBcdWZmOTZcMDIxIiArCi0gICAgIlx1ZmY5NlwwMjJcdWZmOTZcMDIzXHVmZjk2XDAyNFx1ZmY5NlwwMjVcdWZmOTZcMDMyXHVmZjk2XDA1M1x1ZmY5NiIgKwotICAgICJcMDU0XHVmZjk2XDA1NVx1ZmY5NlwwNTZcdWZmOTZcMDU3XHVmZjk2XDA2MFx1ZmY5NlwwNjFcdWZmOTZcMDYyIiArCi0gICAgIlx1ZmY5NlwwNjNcdWZmOTZcMDY0XHVmZjk2XDA2NVx1ZmY5NlwwNjZcdWZmOTZcMDY3XHVmZjk2XDA3MVx1ZmY5NiIgKwotICAgICJcMDczXHVmZjk2XDA3NFx1ZmY5NlwwNzVcdWZmOTZcMTAwXHVmZjk2XDEwMVx1ZmY5NlwxMDJcdWZmOTZcMTA3IiArCi0gICAgIlx1ZmY5NlwxMTBcdWZmOTZcMTExXHVmZjk2XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmVcMDA0XHVmZjZlIiArCi0gICAgIlwwMDVcdWZmNmVcMDA3XHVmZjZlXDAxMFx1ZmY2ZVwwMTFcdWZmNmVcMDEyXHVmZjZlXDAxM1x1ZmY2ZVwwMTQiICsKLSAgICAiXHVmZjZlXDAxNVx1ZmY2ZVwwMTZcdWZmNmVcMDE3XHVmZjZlXDAyMFx1ZmY2ZVwwMjFcdWZmNmVcMDIyXHVmZjZlIiArCi0gICAgIlwwMjNcdWZmNmVcMDI0XHVmZjZlXDAyNVx1ZmY2ZVwwMzJcdWZmNmVcMDM1XHVmZjZlXDA1M1x1ZmY2ZVwwNTQiICsKLSAgICAiXHVmZjZlXDA1NVx1ZmY2ZVwwNTZcdWZmNmVcMDU3XHVmZjZlXDA2MFx1ZmY2ZVwwNjFcdWZmNmVcMDYyXHVmZjZlIiArCi0gICAgIlwwNjNcdWZmNmVcMDY0XHVmZjZlXDA2NVx1ZmY2ZVwwNjZcdWZmNmVcMDY3XHVmZjZlXDA3MVx1ZmY2ZVwwNzMiICsKLSAgICAiXHVmZjZlXDA3NFx1ZmY2ZVwwNzVcdWZmNmVcMTAwXHVmZjZlXDEwMVx1ZmY2ZVwxMDJcdWZmNmVcMTA3XHVmZjZlIiArCi0gICAgIlwxMTBcdWZmNmVcMTExXHVmZjZlXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOGRcMDA0XHVmZjhkXDAwNSIgKwotICAgICJcdWZmOGRcMDA3XHVmZjhkXDAxMFx1ZmY4ZFwwMTFcdWZmOGRcMDEyXHVmZjhkXDAxM1x1ZmY4ZFwwMTRcdWZmOGQiICsKLSAgICAiXDAxNVx1ZmY4ZFwwMTZcdWZmOGRcMDE3XHVmZjhkXDAyMFx1ZmY4ZFwwMjFcdWZmOGRcMDIyXHVmZjhkXDAyMyIgKwotICAgICJcdWZmOGRcMDI0XHVmZjhkXDAyNVx1ZmY4ZFwwMzJcdWZmOGRcMDUzXHVmZjhkXDA1NFx1ZmY4ZFwwNTVcdWZmOGQiICsKLSAgICAiXDA1Nlx1ZmY4ZFwwNTdcdWZmOGRcMDYwXHVmZjhkXDA2MVx1ZmY4ZFwwNjJcdWZmOGRcMDYzXHVmZjhkXDA2NCIgKwotICAgICJcdWZmOGRcMDY1XHVmZjhkXDA2Nlx1ZmY4ZFwwNjdcdWZmOGRcMDcxXHVmZjhkXDA3M1x1ZmY4ZFwwNzRcdWZmOGQiICsKLSAgICAiXDA3NVx1ZmY4ZFwxMDBcdWZmOGRcMTAxXHVmZjhkXDEwMlx1ZmY4ZFwxMDdcdWZmOGRcMTEwXHVmZjhkXDExMSIgKwotICAgICJcdWZmOGRcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZiMlwwMDRcdWZmYjJcMDA1XHVmZmIyXDAwN1x1ZmZiMiIgKwotICAgICJcMDEwXHVmZmIyXDAxMVx1ZmZiMlwwMTJcdWZmYjJcMDEzXHVmZmIyXDAxNFx1ZmZiMlwwMTVcdWZmYjJcMDE2IiArCi0gICAgIlx1ZmZiMlwwMTdcdWZmYjJcMDIwXHVmZmIyXDAyMVx1ZmZiMlwwMjJcdWZmYjJcMDIzXHVmZmIyXDAyNFx1ZmZiMiIgKwotICAgICJcMDI1XHVmZmIyXDAzMlx1ZmZiMlwwNTNcdWZmYjJcMDU0XHVmZmIyXDA1NVx1ZmZiMlwwNTZcdWZmYjJcMDU3IiArCi0gICAgIlx1ZmZiMlwwNjBcdWZmYjJcMDYxXHVmZmIyXDA2Mlx1ZmZiMlwwNjNcdWZmYjJcMDY0XHVmZmIyXDA2NVx1ZmZiMiIgKwotICAgICJcMDY2XHVmZmIyXDA2N1x1ZmZiMlwwNzFcdWZmYjJcMDczXHVmZmIyXDA3NFx1ZmZiMlwwNzVcdWZmYjJcMTAwIiArCi0gICAgIlx1ZmZiMlwxMDFcdWZmYjJcMTAyXHVmZmIyXDEwN1x1ZmZiMlwxMTBcdWZmYjJcMTExXHVmZmIyXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjZcMDAyXHVmZjhmXDAwNFx1ZmY4ZlwwMDVcdWZmOGZcMDA3XHVmZjhmXDAxMFx1ZmY4ZlwwMTEiICsKLSAgICAiXHVmZjhmXDAxMlx1ZmY4ZlwwMTNcdWZmOGZcMDE0XHVmZjhmXDAxNVx1ZmY4ZlwwMTZcdWZmOGZcMDE3XHVmZjhmIiArCi0gICAgIlwwMjBcdWZmOGZcMDIxXHVmZjhmXDAyMlx1ZmY4ZlwwMjNcdWZmOGZcMDI0XHVmZjhmXDAyNVx1ZmY4ZlwwMzIiICsKLSAgICAiXHVmZjhmXDA1M1x1ZmY4ZlwwNTRcdWZmOGZcMDU1XHVmZjhmXDA1Nlx1ZmY4ZlwwNTdcdWZmOGZcMDYwXHVmZjhmIiArCi0gICAgIlwwNjFcdWZmOGZcMDYyXHVmZjhmXDA2M1x1ZmY4ZlwwNjRcdWZmOGZcMDY1XHVmZjhmXDA2Nlx1ZmY4ZlwwNjciICsKLSAgICAiXHVmZjhmXDA3MVx1ZmY4ZlwwNzNcdWZmOGZcMDc0XHVmZjhmXDA3NVx1ZmY4ZlwxMDBcdWZmOGZcMTAxXHVmZjhmIiArCi0gICAgIlwxMDJcdWZmOGZcMTA3XHVmZjhmXDExMFx1ZmY4ZlwxMTFcdWZmOGZcMDAxXDAwMlwwMDBcMTI2XDAwMiIgKwotICAgICJcdWZmNGZcMDA0XHVmZjRmXDAwNVx1ZmY0ZlwwMDdcdWZmNGZcMDEwXHVmZjRmXDAxMVx1ZmY0ZlwwMTJcdWZmNGYiICsKLSAgICAiXDAxM1x1ZmY0ZlwwMTRcdWZmNGZcMDE1XHVmZjRmXDAxNlx1ZmY0ZlwwMTdcdWZmNGZcMDIwXHVmZjRmXDAyMSIgKwotICAgICJcdWZmNGZcMDIyXHVmZjRmXDAyM1x1ZmY0ZlwwMjRcdWZmNGZcMDI1XHVmZjRmXDAzMlx1ZmY0ZlwwNTNcdWZmNGYiICsKLSAgICAiXDA1NFx1ZmY0ZlwwNTVcdWZmNGZcMDU2XHVmZjRmXDA1N1x1ZmY0ZlwwNjBcdWZmNGZcMDYxXHVmZjRmXDA2MiIgKwotICAgICJcdWZmNGZcMDYzXHVmZjRmXDA2NFx1ZmY0ZlwwNjVcdWZmNGZcMDY2XHVmZjRmXDA2N1x1ZmY0ZlwwNzFcdWZmNGYiICsKLSAgICAiXDA3M1x1ZmY0ZlwwNzRcdWZmNGZcMDc1XHVmZjRmXDEwMFx1ZmY0ZlwxMDFcdWZmNGZcMTAyXHVmZjRmXDEwNyIgKwotICAgICJcdWZmNGZcMTEwXHVmZjRmXDExMVx1ZmY0ZlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZmE4XDAwNFx1ZmZhOCIgKwotICAgICJcMDA1XHVmZmE4XDAwN1x1ZmZhOFwwMTBcdWZmYThcMDExXHVmZmE4XDAxMlx1ZmZhOFwwMTNcdWZmYThcMDE0IiArCi0gICAgIlx1ZmZhOFwwMTVcdWZmYThcMDE2XHVmZmE4XDAxN1x1ZmZhOFwwMjBcdWZmYThcMDIxXHVmZmE4XDAyMlx1ZmZhOCIgKwotICAgICJcMDIzXHVmZmE4XDAyNFx1ZmZhOFwwMjVcdWZmYThcMDMyXHVmZmE4XDA1M1x1ZmZhOFwwNTRcdWZmYThcMDU1IiArCi0gICAgIlx1ZmZhOFwwNTZcdWZmYThcMDU3XHVmZmE4XDA2MFx1ZmZhOFwwNjFcdWZmYThcMDYyXHVmZmE4XDA2M1x1ZmZhOCIgKwotICAgICJcMDY0XHVmZmE4XDA2NVx1ZmZhOFwwNjZcdWZmYThcMDY3XHVmZmE4XDA3MVx1ZmZhOFwwNzNcdWZmYThcMDc0IiArCi0gICAgIlx1ZmZhOFwwNzVcdWZmYThcMTAwXHVmZmE4XDEwMVx1ZmZhOFwxMDJcdWZmYThcMTA3XHVmZmE4XDExMFx1ZmZhOCIgKwotICAgICJcMTExXHVmZmE4XDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMmJcMDA0XHVmZjJiXDAwNVx1ZmYyYlwwMDYiICsKLSAgICAiXHVmZWY0XDAwN1x1ZmYyYlwwMTBcdWZmMmJcMDExXHVmZjJiXDAxMlx1ZmYyYlwwMTNcdWZmMmJcMDE0XHVmZjJiIiArCi0gICAgIlwwMTVcdWZmMmJcMDE2XHVmZjJiXDAxN1x1ZmYyYlwwMjBcdWZmMmJcMDIxXHVmZjJiXDAyMlx1ZmYyYlwwMjMiICsKLSAgICAiXHVmZjJiXDAyNFx1ZmYyYlwwMjVcdWZmMmJcMDMxXHVmZjJiXDAzMlx1ZmYyYlwwNTNcdWZmMmJcMDU0XHVmZjJiIiArCi0gICAgIlwwNTVcdWZmMmJcMDU2XHVmZjJiXDA1N1x1ZmYyYlwwNjBcdWZmMmJcMDYxXHVmZjJiXDA2Mlx1ZmYyYlwwNjMiICsKLSAgICAiXHVmZjJiXDA2NFx1ZmYyYlwwNjVcdWZmMmJcMDY2XHVmZjJiXDA2N1x1ZmYyYlwwNzFcdWZmMmJcMDczXHVmZjJiIiArCi0gICAgIlwwNzRcdWZmMmJcMDc1XHVmZjJiXDEwMFx1ZmYyYlwxMDFcdWZmMmJcMTAyXHVmZjJiXDEwN1x1ZmYyYlwxMTAiICsKLSAgICAiXHVmZjJiXDExMVx1ZmYyYlwwMDFcMDAyXDAwMFwxMTBcMDAyXHVmZmRmXDAwNVx1ZmZkZlwwMDdcdWZmZGYiICsKLSAgICAiXDAxMFx1ZmZkZlwwMTFcdWZmZGZcMDEyXHVmZmRmXDAxM1x1ZmZkZlwwMTRcdWZmZGZcMDE1XHVmZmRmXDAxNiIgKwotICAgICJcdWZmZGZcMDE3XHVmZmRmXDAyMFx1ZmZkZlwwMjFcdWZmZGZcMDIyXHVmZmRmXDAyM1x1ZmZkZlwwMzJcdWZmZGYiICsKLSAgICAiXDA1M1x1ZmZkZlwwNTRcdWZmZGZcMDU1XHVmZmRmXDA1Nlx1ZmZkZlwwNTdcdWZmZGZcMDYwXHVmZmRmXDA2MSIgKwotICAgICJcdWZmZGZcMDYyXHVmZmRmXDA2M1x1ZmZkZlwwNjRcdWZmZGZcMDY1XDIxNVwwNjZcMjE0XDA3NVx1ZmZkZiIgKwotICAgICJcMTAwXHVmZmRmXDEwMVx1ZmZkZlwxMDJcdWZmZGZcMTA3XHVmZmRmXDExMFx1ZmZkZlwxMTFcdWZmZGZcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzMlwwMDJcdWZmMjVcMDA0XHVmZjI1XDAwNVx1ZmYyNVwwMDZcdWZlZWZcMDA3XHVmZjI1IiArCi0gICAgIlwwMTBcdWZmMjVcMDExXHVmZjI1XDAxMlx1ZmYyNVwwMTNcdWZmMjVcMDE0XHVmZjI1XDAxNVx1ZmYyNVwwMTYiICsKLSAgICAiXHVmZjI1XDAxN1x1ZmYyNVwwMjBcdWZmMjVcMDIxXHVmZjI1XDAyMlx1ZmYyNVwwMjNcdWZmMjVcMDI0XHVmZjI1IiArCi0gICAgIlwwMjVcdWZmMjVcMDMxXHVmZjI1XDAzMlx1ZmYyNVwwNTNcdWZmMjVcMDU0XHVmZjI1XDA1NVx1ZmYyNVwwNTYiICsKLSAgICAiXHVmZjI1XDA1N1x1ZmYyNVwwNjBcdWZmMjVcMDYxXHVmZjI1XDA2Mlx1ZmYyNVwwNjNcdWZmMjVcMDY0XHVmZjI1IiArCi0gICAgIlwwNjVcdWZmMjVcMDY2XHVmZjI1XDA2N1x1ZmYyNVwwNzFcdWZmMjVcMDczXHVmZjI1XDA3NFx1ZmYyNVwwNzUiICsKLSAgICAiXHVmZjI1XDEwMFx1ZmYyNVwxMDFcdWZmMjVcMTAyXHVmZjI1XDEwN1x1ZmYyNVwxMTBcdWZmMjVcMTExXHVmZjI1IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZjhlXDAwNFx1ZmY4ZVwwMDVcdWZmOGVcMDA3XHVmZjhlXDAxMCIgKwotICAgICJcdWZmOGVcMDExXHVmZjhlXDAxMlx1ZmY4ZVwwMTNcdWZmOGVcMDE0XHVmZjhlXDAxNVx1ZmY4ZVwwMTZcdWZmOGUiICsKLSAgICAiXDAxN1x1ZmY4ZVwwMjBcdWZmOGVcMDIxXHVmZjhlXDAyMlx1ZmY4ZVwwMjNcdWZmOGVcMDI0XHVmZjhlXDAyNSIgKwotICAgICJcdWZmOGVcMDMyXHVmZjhlXDA1M1x1ZmY4ZVwwNTRcdWZmOGVcMDU1XHVmZjhlXDA1Nlx1ZmY4ZVwwNTdcdWZmOGUiICsKLSAgICAiXDA2MFx1ZmY4ZVwwNjFcdWZmOGVcMDYyXHVmZjhlXDA2M1x1ZmY4ZVwwNjRcdWZmOGVcMDY1XHVmZjhlXDA2NiIgKwotICAgICJcdWZmOGVcMDY3XHVmZjhlXDA3MVx1ZmY4ZVwwNzNcdWZmOGVcMDc0XHVmZjhlXDA3NVx1ZmY4ZVwxMDBcdWZmOGUiICsKLSAgICAiXDEwMVx1ZmY4ZVwxMDJcdWZmOGVcMTA3XHVmZjhlXDExMFx1ZmY4ZVwxMTFcdWZmOGVcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzMlwwMDJcdWZmNDZcMDA0XHVmZjQ2XDAwNVx1ZmY0NlwwMDZcdWZmMGVcMDA3XHVmZjQ2XDAxMFx1ZmY0NiIgKwotICAgICJcMDExXHVmZjQ2XDAxMlx1ZmY0NlwwMTNcdWZmNDZcMDE0XHVmZjQ2XDAxNVx1ZmY0NlwwMTZcdWZmNDZcMDE3IiArCi0gICAgIlx1ZmY0NlwwMjBcdWZmNDZcMDIxXHVmZjQ2XDAyMlx1ZmY0NlwwMjNcdWZmNDZcMDI0XHVmZjQ2XDAyNVx1ZmY0NiIgKwotICAgICJcMDMxXHVmZjQ2XDAzMlx1ZmY0NlwwNTNcdWZmNDZcMDU0XHVmZjQ2XDA1NVx1ZmY0NlwwNTZcdWZmNDZcMDU3IiArCi0gICAgIlx1ZmY0NlwwNjBcdWZmNDZcMDYxXHVmZjQ2XDA2Mlx1ZmY0NlwwNjNcdWZmNDZcMDY0XHVmZjQ2XDA2NVx1ZmY0NiIgKwotICAgICJcMDY2XHVmZjQ2XDA2N1x1ZmY0NlwwNzFcdWZmNDZcMDczXHVmZjQ2XDA3NFx1ZmY0NlwwNzVcdWZmNDZcMTAwIiArCi0gICAgIlx1ZmY0NlwxMDFcdWZmNDZcMTAyXHVmZjQ2XDEwN1x1ZmY0NlwxMTBcdWZmNDZcMTExXHVmZjQ2XDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMjRcMDAyXHVmZmYxXDAwNVx1ZmZmMVwwMDdcdWZmZjFcMDMyXHVmZmYxXDEwMFx1ZmZmMVwxMDEiICsKLSAgICAiXHVmZmYxXDEwN1x1ZmZmMVwxMTBcMjA2XDExMVx1ZmZmMVwwMDFcMDAyXDAwMFwxMjRcMDAyXHVmZmJhIiArCi0gICAgIlwwMDVcdWZmYmFcMDA3XHVmZmJhXDAxMFx1ZmZiYVwwMTFcdWZmYmFcMDEyXHVmZmJhXDAxM1x1ZmZiYVwwMTQiICsKLSAgICAiXHVmZmJhXDAxNVx1ZmZiYVwwMTZcdWZmYmFcMDE3XHVmZmJhXDAyMFx1ZmZiYVwwMjFcdWZmYmFcMDIyXHVmZmJhIiArCi0gICAgIlwwMjNcdWZmYmFcMDI0XHVmZmJhXDAyNVx1ZmZiYVwwMzJcdWZmYmFcMDUzXHVmZmJhXDA1NFx1ZmZiYVwwNTUiICsKLSAgICAiXHVmZmJhXDA1Nlx1ZmZiYVwwNTdcdWZmYmFcMDYwXHVmZmJhXDA2MVx1ZmZiYVwwNjJcdWZmYmFcMDYzXHVmZmJhIiArCi0gICAgIlwwNjRcdWZmYmFcMDY1XHVmZmJhXDA2Nlx1ZmZiYVwwNjdcdWZmYmFcMDcxXHVmZmJhXDA3M1x1ZmZiYVwwNzQiICsKLSAgICAiXHVmZmJhXDA3NVx1ZmZiYVwxMDBcdWZmYmFcMTAxXHVmZmJhXDEwMlx1ZmZiYVwxMDdcdWZmYmFcMTEwXHVmZmJhIiArCi0gICAgIlwxMTFcdWZmYmFcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYxNFwwMDRcdWZmMTRcMDA1XHVmZjE0XDAwNiIgKwotICAgICJcdWZlZTlcMDA3XHVmZjE0XDAxMFx1ZmYxNFwwMTFcdWZmMTRcMDEyXHVmZjE0XDAxM1x1ZmYxNFwwMTRcdWZmMTQiICsKLSAgICAiXDAxNVx1ZmYxNFwwMTZcdWZmMTRcMDE3XHVmZjE0XDAyMFx1ZmYxNFwwMjFcdWZmMTRcMDIyXHVmZjE0XDAyMyIgKwotICAgICJcdWZmMTRcMDI0XHVmZjE0XDAyNVx1ZmYxNFwwMzFcdWZmMTRcMDMyXHVmZjE0XDA1M1x1ZmYxNFwwNTRcdWZmMTQiICsKLSAgICAiXDA1NVx1ZmYxNFwwNTZcdWZmMTRcMDU3XHVmZjE0XDA2MFx1ZmYxNFwwNjFcdWZmMTRcMDYyXHVmZjE0XDA2MyIgKwotICAgICJcdWZmMTRcMDY0XHVmZjE0XDA2NVx1ZmYxNFwwNjZcdWZmMTRcMDY3XHVmZjE0XDA3MVx1ZmYxNFwwNzNcdWZmMTQiICsKLSAgICAiXDA3NFx1ZmYxNFwwNzVcdWZmMTRcMTAwXHVmZjE0XDEwMVx1ZmYxNFwxMDJcdWZmMTRcMTA3XHVmZjE0XDExMCIgKwotICAgICJcdWZmMTRcMTExXHVmZjE0XDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NCIgKwotICAgICJcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0IiArCi0gICAgIlwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDYiICsKLSAgICAiXDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MiIgKwotICAgICJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3IiArCi0gICAgIlwwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjciICsKLSAgICAiXDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0MyIgKwotICAgICJcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0IiArCi0gICAgIlwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDEiICsKLSAgICAiXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMSIgKwotICAgICJcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzIiArCi0gICAgIlwxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTMyXDAwMlx1ZmYyOVwwMDRcdWZmMjlcMDA1IiArCi0gICAgIlx1ZmYyOVwwMDZcdWZlZjJcMDA3XHVmZjI5XDAxMFx1ZmYyOVwwMTFcdWZmMjlcMDEyXHVmZjI5XDAxM1x1ZmYyOSIgKwotICAgICJcMDE0XHVmZjI5XDAxNVx1ZmYyOVwwMTZcdWZmMjlcMDE3XHVmZjI5XDAyMFx1ZmYyOVwwMjFcdWZmMjlcMDIyIiArCi0gICAgIlx1ZmYyOVwwMjNcdWZmMjlcMDI0XHVmZjI5XDAyNVx1ZmYyOVwwMzFcdWZmMjlcMDMyXHVmZjI5XDA1M1x1ZmYyOSIgKwotICAgICJcMDU0XHVmZjI5XDA1NVx1ZmYyOVwwNTZcdWZmMjlcMDU3XHVmZjI5XDA2MFx1ZmYyOVwwNjFcdWZmMjlcMDYyIiArCi0gICAgIlx1ZmYyOVwwNjNcdWZmMjlcMDY0XHVmZjI5XDA2NVx1ZmYyOVwwNjZcdWZmMjlcMDY3XHVmZjI5XDA3MVx1ZmYyOSIgKwotICAgICJcMDczXHVmZjI5XDA3NFx1ZmYyOVwwNzVcdWZmMjlcMTAwXHVmZjI5XDEwMVx1ZmYyOVwxMDJcdWZmMjlcMTA3IiArCi0gICAgIlx1ZmYyOVwxMTBcdWZmMjlcMTExXHVmZjI5XDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZWVcMDA1XHVmZmVlIiArCi0gICAgIlwwMDdcdWZmZWVcMDMyXHVmZmVlXDEwMFx1ZmZlZVwxMDFcdWZmZWVcMTA3XHVmZmVlXDExMFx1ZmZlZVwxMTEiICsKLSAgICAiXHVmZmVlXDAwMVwwMDJcMDAwXDEzMlwwMDJcdWZmMmVcMDA0XHVmZjJlXDAwNVx1ZmYyZVwwMDZcdWZlZjciICsKLSAgICAiXDAwN1x1ZmYyZVwwMTBcdWZmMmVcMDExXHVmZjJlXDAxMlx1ZmYyZVwwMTNcdWZmMmVcMDE0XHVmZjJlXDAxNSIgKwotICAgICJcdWZmMmVcMDE2XHVmZjJlXDAxN1x1ZmYyZVwwMjBcdWZmMmVcMDIxXHVmZjJlXDAyMlx1ZmYyZVwwMjNcdWZmMmUiICsKLSAgICAiXDAyNFx1ZmYyZVwwMjVcdWZmMmVcMDMxXHVmZjJlXDAzMlx1ZmYyZVwwNTNcdWZmMmVcMDU0XHVmZjJlXDA1NSIgKwotICAgICJcdWZmMmVcMDU2XHVmZjJlXDA1N1x1ZmYyZVwwNjBcdWZmMmVcMDYxXHVmZjJlXDA2Mlx1ZmYyZVwwNjNcdWZmMmUiICsKLSAgICAiXDA2NFx1ZmYyZVwwNjVcdWZmMmVcMDY2XHVmZjJlXDA2N1x1ZmYyZVwwNzFcdWZmMmVcMDczXHVmZjJlXDA3NCIgKwotICAgICJcdWZmMmVcMDc1XHVmZjJlXDEwMFx1ZmYyZVwxMDFcdWZmMmVcMTAyXHVmZjJlXDEwN1x1ZmYyZVwxMTBcdWZmMmUiICsKLSAgICAiXDExMVx1ZmYyZVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjI4XDAwNFx1ZmYyOFwwMDVcdWZmMjhcMDA2IiArCi0gICAgIlx1ZmYyOFwwMDdcdWZmMjhcMDEwXHVmZjI4XDAxMVx1ZmYyOFwwMTJcdWZmMjhcMDEzXHVmZjI4XDAxNFx1ZmYyOCIgKwotICAgICJcMDE1XHVmZjI4XDAxNlx1ZmYyOFwwMTdcdWZmMjhcMDIwXHVmZjI4XDAyMVx1ZmYyOFwwMjJcdWZmMjhcMDIzIiArCi0gICAgIlx1ZmYyOFwwMjRcdWZmMjhcMDI1XHVmZjI4XDAzMVx1ZmYyOFwwMzJcdWZmMjhcMDM1XHVmZjI4XDA1M1x1ZmYyOCIgKwotICAgICJcMDU0XHVmZjI4XDA1NVx1ZmYyOFwwNTZcdWZmMjhcMDU3XHVmZjI4XDA2MFx1ZmYyOFwwNjFcdWZmMjhcMDYyIiArCi0gICAgIlx1ZmYyOFwwNjNcdWZmMjhcMDY0XHVmZjI4XDA2NVx1ZmYyOFwwNjZcdWZmMjhcMDY3XHVmZjI4XDA3MVx1ZmYyOCIgKwotICAgICJcMDczXHVmZjI4XDA3NFx1ZmYyOFwwNzVcdWZmMjhcMDc3XHVmZjI4XDEwMFx1ZmYyOFwxMDFcdWZmMjhcMTAyIiArCi0gICAgIlx1ZmYyOFwxMDdcdWZmMjhcMTEwXHVmZjI4XDExMVx1ZmYyOFwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjJhIiArCi0gICAgIlwwMDRcdWZmMmFcMDA1XHVmZjJhXDAwNlx1ZmVmM1wwMDdcdWZmMmFcMDEwXHVmZjJhXDAxMVx1ZmYyYVwwMTIiICsKLSAgICAiXHVmZjJhXDAxM1x1ZmYyYVwwMTRcdWZmMmFcMDE1XHVmZjJhXDAxNlx1ZmYyYVwwMTdcdWZmMmFcMDIwXHVmZjJhIiArCi0gICAgIlwwMjFcdWZmMmFcMDIyXHVmZjJhXDAyM1x1ZmYyYVwwMjRcdWZmMmFcMDI1XHVmZjJhXDAzMVx1ZmYyYVwwMzIiICsKLSAgICAiXHVmZjJhXDA1M1x1ZmYyYVwwNTRcdWZmMmFcMDU1XHVmZjJhXDA1Nlx1ZmYyYVwwNTdcdWZmMmFcMDYwXHVmZjJhIiArCi0gICAgIlwwNjFcdWZmMmFcMDYyXHVmZjJhXDA2M1x1ZmYyYVwwNjRcdWZmMmFcMDY1XHVmZjJhXDA2Nlx1ZmYyYVwwNjciICsKLSAgICAiXHVmZjJhXDA3MVx1ZmYyYVwwNzNcdWZmMmFcMDc0XHVmZjJhXDA3NVx1ZmYyYVwxMDBcdWZmMmFcMTAxXHVmZjJhIiArCi0gICAgIlwxMDJcdWZmMmFcMTA3XHVmZjJhXDExMFx1ZmYyYVwxMTFcdWZmMmFcMDAxXDAwMlwwMDBcMjE2XDAwNiIgKwotICAgICJcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3IiArCi0gICAgIlwwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDEiICsKLSAgICAiXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNCIgKwotICAgICJcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2IiArCi0gICAgIlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTEiICsKLSAgICAiXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3MyIgKwotICAgICJcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2IiArCi0gICAgIlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTAiICsKLSAgICAiXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NiIgKwotICAgICJcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1IiArCi0gICAgIlwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwyMTYiICsKLSAgICAiXDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyNyIgKwotICAgICJcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzIiArCi0gICAgIlwwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDciICsKLSAgICAiXDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzNyIgKwotICAgICJcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0IiArCi0gICAgIlwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDUiICsKLSAgICAiXDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMSIgKwotICAgICJcMTc2XDEwMlwyMDJcMTAzXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyIiArCi0gICAgIlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTYiICsKLSAgICAiXDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MCIgKwotICAgICJcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTBcMDAyXHVmZmRiXDAwNVx1ZmZkYlwwMDdcdWZmZGJcMDEwXHVmZmRiXDAxMVx1ZmZkYlwwMTJcdWZmZGIiICsKLSAgICAiXDAxM1x1ZmZkYlwwMTRcdWZmZGJcMDE1XHVmZmRiXDAxNlx1ZmZkYlwwMTdcdWZmZGJcMDIwXHVmZmRiXDAyMSIgKwotICAgICJcdWZmZGJcMDIyXHVmZmRiXDAyM1x1ZmZkYlwwMzJcdWZmZGJcMDUzXHVmZmRiXDA1NFx1ZmZkYlwwNTVcdWZmZGIiICsKLSAgICAiXDA1Nlx1ZmZkYlwwNTdcdWZmZGJcMDYwXHVmZmRiXDA2MVx1ZmZkYlwwNjJcdWZmZGJcMDYzXHVmZmRiXDA2NCIgKwotICAgICJcdWZmZGJcMDY1XHVmZmRiXDA2Nlx1ZmZkYlwwNzVcdWZmZGJcMTAwXHVmZmRiXDEwMVx1ZmZkYlwxMDJcdWZmZGIiICsKLSAgICAiXDEwN1x1ZmZkYlwxMTBcdWZmZGJcMTExXHVmZmRiXDAwMVwwMDJcMDAwXDExMFwwMDJcdWZmZGFcMDA1IiArCi0gICAgIlx1ZmZkYVwwMDdcdWZmZGFcMDEwXHVmZmRhXDAxMVx1ZmZkYVwwMTJcdWZmZGFcMDEzXHVmZmRhXDAxNFx1ZmZkYSIgKwotICAgICJcMDE1XHVmZmRhXDAxNlx1ZmZkYVwwMTdcdWZmZGFcMDIwXHVmZmRhXDAyMVx1ZmZkYVwwMjJcdWZmZGFcMDIzIiArCi0gICAgIlx1ZmZkYVwwMzJcdWZmZGFcMDUzXHVmZmRhXDA1NFx1ZmZkYVwwNTVcdWZmZGFcMDU2XHVmZmRhXDA1N1x1ZmZkYSIgKwotICAgICJcMDYwXHVmZmRhXDA2MVx1ZmZkYVwwNjJcdWZmZGFcMDYzXHVmZmRhXDA2NFx1ZmZkYVwwNjVcdWZmZGFcMDY2IiArCi0gICAgIlx1ZmZkYVwwNzVcdWZmZGFcMTAwXHVmZmRhXDEwMVx1ZmZkYVwxMDJcdWZmZGFcMTA3XHVmZmRhXDExMFx1ZmZkYSIgKwotICAgICJcMTExXHVmZmRhXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmOThcMDA0XDIyMlwwMDVcdWZmOThcMDA3IiArCi0gICAgIlx1ZmY5OFwwMTBcdWZmOThcMDExXHVmZjk4XDAxMlx1ZmY5OFwwMTNcdWZmOThcMDE0XHVmZjk4XDAxNVx1ZmY5OCIgKwotICAgICJcMDE2XHVmZjk4XDAxN1x1ZmY5OFwwMjBcdWZmOThcMDIxXHVmZjk4XDAyMlx1ZmY5OFwwMjNcdWZmOThcMDI0IiArCi0gICAgIlx1ZmY5OFwwMjVcdWZmOThcMDMyXHVmZjk4XDA1M1x1ZmY5OFwwNTRcdWZmOThcMDU1XHVmZjk4XDA1Nlx1ZmY5OCIgKwotICAgICJcMDU3XHVmZjk4XDA2MFx1ZmY5OFwwNjFcdWZmOThcMDYyXHVmZjk4XDA2M1x1ZmY5OFwwNjRcdWZmOThcMDY1IiArCi0gICAgIlx1ZmY5OFwwNjZcdWZmOThcMDY3XHVmZjk4XDA3MVx1ZmY5OFwwNzNcdWZmOThcMDc0XHVmZjk4XDA3NVx1ZmY5OCIgKwotICAgICJcMTAwXHVmZjk4XDEwMVx1ZmY5OFwxMDJcdWZmOThcMTA3XHVmZjk4XDExMFx1ZmY5OFwxMTFcdWZmOThcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEyNlwwMDJcdWZmOTdcMDA0XHVmZjk3XDAwNVx1ZmY5N1wwMDdcdWZmOTdcMDEwXHVmZjk3IiArCi0gICAgIlwwMTFcdWZmOTdcMDEyXHVmZjk3XDAxM1x1ZmY5N1wwMTRcdWZmOTdcMDE1XHVmZjk3XDAxNlx1ZmY5N1wwMTciICsKLSAgICAiXHVmZjk3XDAyMFx1ZmY5N1wwMjFcdWZmOTdcMDIyXHVmZjk3XDAyM1x1ZmY5N1wwMjRcdWZmOTdcMDI1XHVmZjk3IiArCi0gICAgIlwwMzJcdWZmOTdcMDUzXHVmZjk3XDA1NFx1ZmY5N1wwNTVcdWZmOTdcMDU2XHVmZjk3XDA1N1x1ZmY5N1wwNjAiICsKLSAgICAiXHVmZjk3XDA2MVx1ZmY5N1wwNjJcdWZmOTdcMDYzXHVmZjk3XDA2NFx1ZmY5N1wwNjVcdWZmOTdcMDY2XHVmZjk3IiArCi0gICAgIlwwNjdcdWZmOTdcMDcxXHVmZjk3XDA3M1x1ZmY5N1wwNzRcdWZmOTdcMDc1XHVmZjk3XDEwMFx1ZmY5N1wxMDEiICsKLSAgICAiXHVmZjk3XDEwMlx1ZmY5N1wxMDdcdWZmOTdcMTEwXHVmZjk3XDExMVx1ZmY5N1wwMDFcMDAyXDAwMFwyMTYiICsKLSAgICAiXDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyNyIgKwotICAgICJcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzIiArCi0gICAgIlwwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDciICsKLSAgICAiXDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzNyIgKwotICAgICJcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0IiArCi0gICAgIlwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDUiICsKLSAgICAiXDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMSIgKwotICAgICJcMTc2XDEwMlwyMDJcMTAzXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyIiArCi0gICAgIlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTYiICsKLSAgICAiXDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MCIgKwotICAgICJcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwIiArCi0gICAgIlwwMDZcMDA1XDIyNVwwMzJcMjI0XDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDUiICsKLSAgICAiXDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzMyIgKwotICAgICJcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0IiArCi0gICAgIlwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTEiICsKLSAgICAiXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNiIgKwotICAgICJcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2IiArCi0gICAgIlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjEiICsKLSAgICAiXDA3NVwxNDNcMDc2XDExNVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwMyIgKwotICAgICJcMTY0XDEwNFwwNTNcMTA1XDE1NVwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyIiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjAiICsKLSAgICAiXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MiIgKwotICAgICJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5NVwwMDQiICsKLSAgICAiXHVmZjk1XDAwNVx1ZmY5NVwwMDdcdWZmOTVcMDEwXHVmZjk1XDAxMVx1ZmY5NVwwMTJcdWZmOTVcMDEzXHVmZjk1IiArCi0gICAgIlwwMTRcdWZmOTVcMDE1XHVmZjk1XDAxNlx1ZmY5NVwwMTdcdWZmOTVcMDIwXHVmZjk1XDAyMVx1ZmY5NVwwMjIiICsKLSAgICAiXHVmZjk1XDAyM1x1ZmY5NVwwMjRcdWZmOTVcMDI1XHVmZjk1XDAzMlx1ZmY5NVwwNTNcdWZmOTVcMDU0XHVmZjk1IiArCi0gICAgIlwwNTVcdWZmOTVcMDU2XHVmZjk1XDA1N1x1ZmY5NVwwNjBcdWZmOTVcMDYxXHVmZjk1XDA2Mlx1ZmY5NVwwNjMiICsKLSAgICAiXHVmZjk1XDA2NFx1ZmY5NVwwNjVcdWZmOTVcMDY2XHVmZjk1XDA2N1x1ZmY5NVwwNzFcdWZmOTVcMDczXHVmZjk1IiArCi0gICAgIlwwNzRcdWZmOTVcMDc1XHVmZjk1XDEwMFx1ZmY5NVwxMDFcdWZmOTVcMTAyXHVmZjk1XDEwN1x1ZmY5NVwxMTAiICsKLSAgICAiXHVmZjk1XDExMVx1ZmY5NVwwMDFcMDAyXDAwMFwwMTJcMDAyXHVmZmZlXDAwNVx1ZmZmZVwwMDdcdWZmZmUiICsKLSAgICAiXDAzMlx1ZmZmZVwwMDFcMDAyXDAwMFwwMDRcMDMzXDIzMlwwMDFcMDAyXDAwMFwyMTZcMDA2IiArCi0gICAgIlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzciICsKLSAgICAiXDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MSIgKwotICAgICJcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0IiArCi0gICAgIlwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTYiICsKLSAgICAiXDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMSIgKwotICAgICJcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczIiArCi0gICAgIlwxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzYiICsKLSAgICAiXDEwMlwyMDJcMTAzXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMCIgKwotICAgICJcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2IiArCi0gICAgIlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjUiICsKLSAgICAiXDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDAyMCIgKwotICAgICJcMDAyXHVmZmY5XDAwNVx1ZmZmOVwwMDdcdWZmZjlcMDMyXHVmZmY5XDEwMFx1ZmZmOVwxMDFcdWZmZjlcMTA3IiArCi0gICAgIlx1ZmZmOVwwMDFcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2NyIgKwotICAgICJcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwIiArCi0gICAgIlwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjIiICsKLSAgICAiXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NSIgKwotICAgICJcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzIiArCi0gICAgIlwwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDIiICsKLSAgICAiXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MCIgKwotICAgICJcMTExXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3IiArCi0gICAgIlwyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzAiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMzBcMDA0XHVmZjMwXDAwNVx1ZmYzMFwwMDZcdWZmMzBcMDA3IiArCi0gICAgIlx1ZmYzMFwwMTBcdWZmMzBcMDExXHVmZjMwXDAxMlx1ZmYzMFwwMTNcdWZmMzBcMDE0XHVmZjMwXDAxNVx1ZmYzMCIgKwotICAgICJcMDE2XHVmZjMwXDAxN1x1ZmYzMFwwMjBcdWZmMzBcMDIxXHVmZjMwXDAyMlx1ZmYzMFwwMjNcdWZmMzBcMDI0IiArCi0gICAgIlx1ZmYzMFwwMjVcdWZmMzBcMDMxXHVmZjMwXDAzMlx1ZmYzMFwwMzVcdWZmMzBcMDUzXHVmZjMwXDA1NFx1ZmYzMCIgKwotICAgICJcMDU1XHVmZjMwXDA1Nlx1ZmYzMFwwNTdcdWZmMzBcMDYwXHVmZjMwXDA2MVx1ZmYzMFwwNjJcdWZmMzBcMDYzIiArCi0gICAgIlx1ZmYzMFwwNjRcdWZmMzBcMDY1XHVmZjMwXDA2Nlx1ZmYzMFwwNjdcdWZmMzBcMDcxXHVmZjMwXDA3M1x1ZmYzMCIgKwotICAgICJcMDc0XHVmZjMwXDA3NVx1ZmYzMFwwNzdcdWZmMzBcMTAwXHVmZjMwXDEwMVx1ZmYzMFwxMDJcdWZmMzBcMTA3IiArCi0gICAgIlx1ZmYzMFwxMTBcdWZmMzBcMTExXHVmZjMwXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMzZcMDA0XHVmZjM2IiArCi0gICAgIlwwMDVcdWZmMzZcMDA2XHVmZjM2XDAwN1x1ZmYzNlwwMTBcdWZmMzZcMDExXHVmZjM2XDAxMlx1ZmYzNlwwMTMiICsKLSAgICAiXHVmZjM2XDAxNFx1ZmYzNlwwMTVcdWZmMzZcMDE2XHVmZjM2XDAxN1x1ZmYzNlwwMjBcdWZmMzZcMDIxXHVmZjM2IiArCi0gICAgIlwwMjJcdWZmMzZcMDIzXHVmZjM2XDAyNFx1ZmYzNlwwMjVcdWZmMzZcMDMxXHVmZjM2XDAzMlx1ZmYzNlwwMzUiICsKLSAgICAiXHVmZjM2XDA1M1x1ZmYzNlwwNTRcdWZmMzZcMDU1XHVmZjM2XDA1Nlx1ZmYzNlwwNTdcdWZmMzZcMDYwXHVmZjM2IiArCi0gICAgIlwwNjFcdWZmMzZcMDYyXHVmZjM2XDA2M1x1ZmYzNlwwNjRcdWZmMzZcMDY1XHVmZjM2XDA2Nlx1ZmYzNlwwNjciICsKLSAgICAiXHVmZjM2XDA3MVx1ZmYzNlwwNzNcdWZmMzZcMDc0XHVmZjM2XDA3NVx1ZmYzNlwwNzdcdWZmMzZcMTAwXHVmZjM2IiArCi0gICAgIlwxMDFcdWZmMzZcMTAyXHVmZjM2XDEwN1x1ZmYzNlwxMTBcdWZmMzZcMTExXHVmZjM2XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzZcMDAyXHVmZjNiXDAwNFx1ZmYzYlwwMDVcdWZmM2JcMDA2XHVmZjNiXDAwN1x1ZmYzYlwwMTBcdWZmM2IiICsKLSAgICAiXDAxMVx1ZmYzYlwwMTJcdWZmM2JcMDEzXHVmZjNiXDAxNFx1ZmYzYlwwMTVcdWZmM2JcMDE2XHVmZjNiXDAxNyIgKwotICAgICJcdWZmM2JcMDIwXHVmZjNiXDAyMVx1ZmYzYlwwMjJcdWZmM2JcMDIzXHVmZjNiXDAyNFx1ZmYzYlwwMjVcdWZmM2IiICsKLSAgICAiXDAzMVx1ZmYzYlwwMzJcdWZmM2JcMDM1XHVmZjNiXDA1M1x1ZmYzYlwwNTRcdWZmM2JcMDU1XHVmZjNiXDA1NiIgKwotICAgICJcdWZmM2JcMDU3XHVmZjNiXDA2MFx1ZmYzYlwwNjFcdWZmM2JcMDYyXHVmZjNiXDA2M1x1ZmYzYlwwNjRcdWZmM2IiICsKLSAgICAiXDA2NVx1ZmYzYlwwNjZcdWZmM2JcMDY3XHVmZjNiXDA3MVx1ZmYzYlwwNzNcdWZmM2JcMDc0XHVmZjNiXDA3NSIgKwotICAgICJcdWZmM2JcMDc3XHVmZjNiXDEwMFx1ZmYzYlwxMDFcdWZmM2JcMTAyXHVmZjNiXDEwN1x1ZmYzYlwxMTBcdWZmM2IiICsKLSAgICAiXDExMVx1ZmYzYlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjJhXDAwNFx1ZmYyYVwwMDVcdWZmMmFcMDA2IiArCi0gICAgIlx1ZmYyYVwwMDdcdWZmMmFcMDEwXHVmZjJhXDAxMVx1ZmYyYVwwMTJcdWZmMmFcMDEzXHVmZjJhXDAxNFx1ZmYyYSIgKwotICAgICJcMDE1XHVmZjJhXDAxNlx1ZmYyYVwwMTdcdWZmMmFcMDIwXHVmZjJhXDAyMVx1ZmYyYVwwMjJcdWZmMmFcMDIzIiArCi0gICAgIlx1ZmYyYVwwMjRcdWZmMmFcMDI1XHVmZjJhXDAzMVx1ZmYyYVwwMzJcdWZmMmFcMDM1XHVmZjJhXDA1M1x1ZmYyYSIgKwotICAgICJcMDU0XHVmZjJhXDA1NVx1ZmYyYVwwNTZcdWZmMmFcMDU3XHVmZjJhXDA2MFx1ZmYyYVwwNjFcdWZmMmFcMDYyIiArCi0gICAgIlx1ZmYyYVwwNjNcdWZmMmFcMDY0XHVmZjJhXDA2NVx1ZmYyYVwwNjZcdWZmMmFcMDY3XHVmZjJhXDA3MVx1ZmYyYSIgKwotICAgICJcMDczXHVmZjJhXDA3NFx1ZmYyYVwwNzVcdWZmMmFcMDc3XHVmZjJhXDEwMFx1ZmYyYVwxMDFcdWZmMmFcMTAyIiArCi0gICAgIlx1ZmYyYVwxMDdcdWZmMmFcMTEwXHVmZjJhXDExMVx1ZmYyYVwwMDFcMDAyXDAwMFwxMzRcMDAyXHVmZjRkIiArCi0gICAgIlwwMDRcdWZmNGRcMDA1XHVmZjRkXDAwN1x1ZmY0ZFwwMTBcdWZmNGRcMDExXHVmZjRkXDAxMlx1ZmY0ZFwwMTMiICsKLSAgICAiXHVmZjRkXDAxNFx1ZmY0ZFwwMTVcdWZmNGRcMDE2XHVmZjRkXDAxN1x1ZmY0ZFwwMjBcdWZmNGRcMDIxXHVmZjRkIiArCi0gICAgIlwwMjJcdWZmNGRcMDIzXHVmZjRkXDAyNFx1ZmY0ZFwwMjVcdWZmNGRcMDMxXDMyNFwwMzJcdWZmNGRcMDM1IiArCi0gICAgIlx1ZmY0ZFwwNTNcdWZmNGRcMDU0XHVmZjRkXDA1NVx1ZmY0ZFwwNTZcdWZmNGRcMDU3XHVmZjRkXDA2MFx1ZmY0ZCIgKwotICAgICJcMDYxXHVmZjRkXDA2Mlx1ZmY0ZFwwNjNcdWZmNGRcMDY0XHVmZjRkXDA2NVx1ZmY0ZFwwNjZcdWZmNGRcMDY3IiArCi0gICAgIlx1ZmY0ZFwwNzFcdWZmNGRcMDczXHVmZjRkXDA3NFx1ZmY0ZFwwNzVcdWZmNGRcMDc3XHVmZjRkXDEwMFx1ZmY0ZCIgKwotICAgICJcMTAxXHVmZjRkXDEwMlx1ZmY0ZFwxMDdcdWZmNGRcMTEwXHVmZjRkXDExMVx1ZmY0ZFwwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYxMFwwMDRcdWZmMTBcMDA1XHVmZjEwXDAwNlx1ZmYxMFwwMDdcdWZmMTBcMDEwXHVmZjEwIiArCi0gICAgIlwwMTFcdWZmMTBcMDEyXHVmZjEwXDAxM1x1ZmYxMFwwMTRcdWZmMTBcMDE1XHVmZjEwXDAxNlx1ZmYxMFwwMTciICsKLSAgICAiXHVmZjEwXDAyMFx1ZmYxMFwwMjFcdWZmMTBcMDIyXHVmZjEwXDAyM1x1ZmYxMFwwMjRcdWZmMTBcMDI1XHVmZjEwIiArCi0gICAgIlwwMzFcdWZmMTBcMDMyXHVmZjEwXDAzNVx1ZmYxMFwwNTNcdWZmMTBcMDU0XHVmZjEwXDA1NVx1ZmYxMFwwNTYiICsKLSAgICAiXHVmZjEwXDA1N1x1ZmYxMFwwNjBcdWZmMTBcMDYxXHVmZjEwXDA2Mlx1ZmYxMFwwNjNcdWZmMTBcMDY0XHVmZjEwIiArCi0gICAgIlwwNjVcdWZmMTBcMDY2XHVmZjEwXDA2N1x1ZmYxMFwwNzFcdWZmMTBcMDczXHVmZjEwXDA3NFx1ZmYxMFwwNzUiICsKLSAgICAiXHVmZjEwXDA3N1x1ZmYxMFwxMDBcdWZmMTBcMTAxXHVmZjEwXDEwMlx1ZmYxMFwxMDdcdWZmMTBcMTEwXHVmZjEwIiArCi0gICAgIlwxMTFcdWZmMTBcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYzZVwwMDRcdWZmM2VcMDA1XHVmZjNlXDAwNiIgKwotICAgICJcdWZmM2VcMDA3XHVmZjNlXDAxMFx1ZmYzZVwwMTFcdWZmM2VcMDEyXHVmZjNlXDAxM1x1ZmYzZVwwMTRcdWZmM2UiICsKLSAgICAiXDAxNVx1ZmYzZVwwMTZcdWZmM2VcMDE3XHVmZjNlXDAyMFx1ZmYzZVwwMjFcdWZmM2VcMDIyXHVmZjNlXDAyMyIgKwotICAgICJcdWZmM2VcMDI0XHVmZjNlXDAyNVx1ZmYzZVwwMzFcdWZmM2VcMDMyXHVmZjNlXDAzNVx1ZmYzZVwwNTNcdWZmM2UiICsKLSAgICAiXDA1NFx1ZmYzZVwwNTVcdWZmM2VcMDU2XHVmZjNlXDA1N1x1ZmYzZVwwNjBcdWZmM2VcMDYxXHVmZjNlXDA2MiIgKwotICAgICJcdWZmM2VcMDYzXHVmZjNlXDA2NFx1ZmYzZVwwNjVcdWZmM2VcMDY2XHVmZjNlXDA2N1x1ZmYzZVwwNzFcdWZmM2UiICsKLSAgICAiXDA3M1x1ZmYzZVwwNzRcdWZmM2VcMDc1XHVmZjNlXDA3N1x1ZmYzZVwxMDBcdWZmM2VcMTAxXHVmZjNlXDEwMiIgKwotICAgICJcdWZmM2VcMTA3XHVmZjNlXDExMFx1ZmYzZVwxMTFcdWZmM2VcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxYSIgKwotICAgICJcMDA0XHVmZjFhXDAwNVx1ZmYxYVwwMDZcdWZmMWFcMDA3XHVmZjFhXDAxMFx1ZmYxYVwwMTFcdWZmMWFcMDEyIiArCi0gICAgIlx1ZmYxYVwwMTNcdWZmMWFcMDE0XHVmZjFhXDAxNVx1ZmYxYVwwMTZcdWZmMWFcMDE3XHVmZjFhXDAyMFx1ZmYxYSIgKwotICAgICJcMDIxXHVmZjFhXDAyMlx1ZmYxYVwwMjNcdWZmMWFcMDI0XHVmZjFhXDAyNVx1ZmYxYVwwMzFcdWZmMWFcMDMyIiArCi0gICAgIlx1ZmYxYVwwMzVcdWZmMWFcMDUzXHVmZjFhXDA1NFx1ZmYxYVwwNTVcdWZmMWFcMDU2XHVmZjFhXDA1N1x1ZmYxYSIgKwotICAgICJcMDYwXHVmZjFhXDA2MVx1ZmYxYVwwNjJcdWZmMWFcMDYzXHVmZjFhXDA2NFx1ZmYxYVwwNjVcdWZmMWFcMDY2IiArCi0gICAgIlx1ZmYxYVwwNjdcdWZmMWFcMDcxXHVmZjFhXDA3M1x1ZmYxYVwwNzRcdWZmMWFcMDc1XHVmZjFhXDA3N1x1ZmYxYSIgKwotICAgICJcMTAwXHVmZjFhXDEwMVx1ZmYxYVwxMDJcdWZmMWFcMTA3XHVmZjFhXDExMFx1ZmYxYVwxMTFcdWZmMWFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNlwwMDJcdWZmMjFcMDA0XHVmZjIxXDAwNVx1ZmYyMVwwMDZcdWZmMjFcMDA3XHVmZjIxIiArCi0gICAgIlwwMTBcdWZmMjFcMDExXHVmZjIxXDAxMlx1ZmYyMVwwMTNcdWZmMjFcMDE0XHVmZjIxXDAxNVx1ZmYyMVwwMTYiICsKLSAgICAiXHVmZjIxXDAxN1x1ZmYyMVwwMjBcdWZmMjFcMDIxXHVmZjIxXDAyMlx1ZmYyMVwwMjNcdWZmMjFcMDI0XHVmZjIxIiArCi0gICAgIlwwMjVcdWZmMjFcMDMxXHVmZjIxXDAzMlx1ZmYyMVwwMzVcdWZmMjFcMDUzXHVmZjIxXDA1NFx1ZmYyMVwwNTUiICsKLSAgICAiXHVmZjIxXDA1Nlx1ZmYyMVwwNTdcdWZmMjFcMDYwXHVmZjIxXDA2MVx1ZmYyMVwwNjJcdWZmMjFcMDYzXHVmZjIxIiArCi0gICAgIlwwNjRcdWZmMjFcMDY1XHVmZjIxXDA2Nlx1ZmYyMVwwNjdcdWZmMjFcMDcxXHVmZjIxXDA3M1x1ZmYyMVwwNzQiICsKLSAgICAiXHVmZjIxXDA3NVx1ZmYyMVwwNzdcdWZmMjFcMTAwXHVmZjIxXDEwMVx1ZmYyMVwxMDJcdWZmMjFcMTA3XHVmZjIxIiArCi0gICAgIlwxMTBcdWZmMjFcMTExXHVmZjIxXDAwMVwwMDJcMDAwXDAwNFwwNzdcMzIyXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzZcMDAyXHVmZjJlXDAwNFx1ZmYyZVwwMDVcdWZmMmVcMDA2XHVmZjJlXDAwN1x1ZmYyZVwwMTBcdWZmMmUiICsKLSAgICAiXDAxMVx1ZmYyZVwwMTJcdWZmMmVcMDEzXHVmZjJlXDAxNFx1ZmYyZVwwMTVcdWZmMmVcMDE2XHVmZjJlXDAxNyIgKwotICAgICJcdWZmMmVcMDIwXHVmZjJlXDAyMVx1ZmYyZVwwMjJcdWZmMmVcMDIzXHVmZjJlXDAyNFx1ZmYyZVwwMjVcdWZmMmUiICsKLSAgICAiXDAzMVx1ZmYyZVwwMzJcdWZmMmVcMDM1XHVmZjJlXDA1M1x1ZmYyZVwwNTRcdWZmMmVcMDU1XHVmZjJlXDA1NiIgKwotICAgICJcdWZmMmVcMDU3XHVmZjJlXDA2MFx1ZmYyZVwwNjFcdWZmMmVcMDYyXHVmZjJlXDA2M1x1ZmYyZVwwNjRcdWZmMmUiICsKLSAgICAiXDA2NVx1ZmYyZVwwNjZcdWZmMmVcMDY3XHVmZjJlXDA3MVx1ZmYyZVwwNzNcdWZmMmVcMDc0XHVmZjJlXDA3NSIgKwotICAgICJcdWZmMmVcMDc3XHVmZjJlXDEwMFx1ZmYyZVwxMDFcdWZmMmVcMTAyXHVmZjJlXDEwN1x1ZmYyZVwxMTBcdWZmMmUiICsKLSAgICAiXDExMVx1ZmYyZVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjQ1XDAwNFx1ZmY0NVwwMDVcdWZmNDVcMDA2IiArCi0gICAgIlx1ZmY0NVwwMDdcdWZmNDVcMDEwXHVmZjQ1XDAxMVx1ZmY0NVwwMTJcdWZmNDVcMDEzXHVmZjQ1XDAxNFx1ZmY0NSIgKwotICAgICJcMDE1XHVmZjQ1XDAxNlx1ZmY0NVwwMTdcdWZmNDVcMDIwXHVmZjQ1XDAyMVx1ZmY0NVwwMjJcdWZmNDVcMDIzIiArCi0gICAgIlx1ZmY0NVwwMjRcdWZmNDVcMDI1XHVmZjQ1XDAzMVx1ZmY0NVwwMzJcdWZmNDVcMDM1XHVmZjQ1XDA1M1x1ZmY0NSIgKwotICAgICJcMDU0XHVmZjQ1XDA1NVx1ZmY0NVwwNTZcdWZmNDVcMDU3XHVmZjQ1XDA2MFx1ZmY0NVwwNjFcdWZmNDVcMDYyIiArCi0gICAgIlx1ZmY0NVwwNjNcdWZmNDVcMDY0XHVmZjQ1XDA2NVx1ZmY0NVwwNjZcdWZmNDVcMDY3XHVmZjQ1XDA3MVx1ZmY0NSIgKwotICAgICJcMDczXHVmZjQ1XDA3NFx1ZmY0NVwwNzVcdWZmNDVcMDc3XHVmZjQ1XDEwMFx1ZmY0NVwxMDFcdWZmNDVcMTAyIiArCi0gICAgIlx1ZmY0NVwxMDdcdWZmNDVcMTEwXHVmZjQ1XDExMVx1ZmY0NVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjFiIiArCi0gICAgIlwwMDRcdWZmMWJcMDA1XHVmZjFiXDAwNlx1ZmYxYlwwMDdcdWZmMWJcMDEwXHVmZjFiXDAxMVx1ZmYxYlwwMTIiICsKLSAgICAiXHVmZjFiXDAxM1x1ZmYxYlwwMTRcdWZmMWJcMDE1XHVmZjFiXDAxNlx1ZmYxYlwwMTdcdWZmMWJcMDIwXHVmZjFiIiArCi0gICAgIlwwMjFcdWZmMWJcMDIyXHVmZjFiXDAyM1x1ZmYxYlwwMjRcdWZmMWJcMDI1XHVmZjFiXDAzMVx1ZmYxYlwwMzIiICsKLSAgICAiXHVmZjFiXDAzNVx1ZmYxYlwwNTNcdWZmMWJcMDU0XHVmZjFiXDA1NVx1ZmYxYlwwNTZcdWZmMWJcMDU3XHVmZjFiIiArCi0gICAgIlwwNjBcdWZmMWJcMDYxXHVmZjFiXDA2Mlx1ZmYxYlwwNjNcdWZmMWJcMDY0XHVmZjFiXDA2NVx1ZmYxYlwwNjYiICsKLSAgICAiXHVmZjFiXDA2N1x1ZmYxYlwwNzFcdWZmMWJcMDczXHVmZjFiXDA3NFx1ZmYxYlwwNzVcdWZmMWJcMDc3XHVmZjFiIiArCi0gICAgIlwxMDBcdWZmMWJcMTAxXHVmZjFiXDEwMlx1ZmYxYlwxMDdcdWZmMWJcMTEwXHVmZjFiXDExMVx1ZmYxYlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM2XDAwMlx1ZmYyNVwwMDRcdWZmMjVcMDA1XHVmZjI1XDAwNlx1ZmYyNVwwMDdcdWZmMjUiICsKLSAgICAiXDAxMFx1ZmYyNVwwMTFcdWZmMjVcMDEyXHVmZjI1XDAxM1x1ZmYyNVwwMTRcdWZmMjVcMDE1XHVmZjI1XDAxNiIgKwotICAgICJcdWZmMjVcMDE3XHVmZjI1XDAyMFx1ZmYyNVwwMjFcdWZmMjVcMDIyXHVmZjI1XDAyM1x1ZmYyNVwwMjRcdWZmMjUiICsKLSAgICAiXDAyNVx1ZmYyNVwwMzFcdWZmMjVcMDMyXHVmZjI1XDAzNVx1ZmYyNVwwNTNcdWZmMjVcMDU0XHVmZjI1XDA1NSIgKwotICAgICJcdWZmMjVcMDU2XHVmZjI1XDA1N1x1ZmYyNVwwNjBcdWZmMjVcMDYxXHVmZjI1XDA2Mlx1ZmYyNVwwNjNcdWZmMjUiICsKLSAgICAiXDA2NFx1ZmYyNVwwNjVcdWZmMjVcMDY2XHVmZjI1XDA2N1x1ZmYyNVwwNzFcdWZmMjVcMDczXHVmZjI1XDA3NCIgKwotICAgICJcdWZmMjVcMDc1XHVmZjI1XDA3N1x1ZmYyNVwxMDBcdWZmMjVcMTAxXHVmZjI1XDEwMlx1ZmYyNVwxMDdcdWZmMjUiICsKLSAgICAiXDExMFx1ZmYyNVwxMTFcdWZmMjVcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyZlwwMDRcdWZmMmZcMDA1IiArCi0gICAgIlx1ZmYyZlwwMDZcdWZmMmZcMDA3XHVmZjJmXDAxMFx1ZmYyZlwwMTFcdWZmMmZcMDEyXHVmZjJmXDAxM1x1ZmYyZiIgKwotICAgICJcMDE0XHVmZjJmXDAxNVx1ZmYyZlwwMTZcdWZmMmZcMDE3XHVmZjJmXDAyMFx1ZmYyZlwwMjFcdWZmMmZcMDIyIiArCi0gICAgIlx1ZmYyZlwwMjNcdWZmMmZcMDI0XHVmZjJmXDAyNVx1ZmYyZlwwMzFcdWZmMmZcMDMyXHVmZjJmXDAzNVx1ZmYyZiIgKwotICAgICJcMDUzXHVmZjJmXDA1NFx1ZmYyZlwwNTVcdWZmMmZcMDU2XHVmZjJmXDA1N1x1ZmYyZlwwNjBcdWZmMmZcMDYxIiArCi0gICAgIlx1ZmYyZlwwNjJcdWZmMmZcMDYzXHVmZjJmXDA2NFx1ZmYyZlwwNjVcdWZmMmZcMDY2XHVmZjJmXDA2N1x1ZmYyZiIgKwotICAgICJcMDcxXHVmZjJmXDA3M1x1ZmYyZlwwNzRcdWZmMmZcMDc1XHVmZjJmXDA3N1x1ZmYyZlwxMDBcdWZmMmZcMTAxIiArCi0gICAgIlx1ZmYyZlwxMDJcdWZmMmZcMTA3XHVmZjJmXDExMFx1ZmYyZlwxMTFcdWZmMmZcMDAxXDAwMlwwMDBcMTM2IiArCi0gICAgIlwwMDJcdWZmMTNcMDA0XHVmZjEzXDAwNVx1ZmYxM1wwMDZcdWZmMTNcMDA3XHVmZjEzXDAxMFx1ZmYxM1wwMTEiICsKLSAgICAiXHVmZjEzXDAxMlx1ZmYxM1wwMTNcdWZmMTNcMDE0XHVmZjEzXDAxNVx1ZmYxM1wwMTZcdWZmMTNcMDE3XHVmZjEzIiArCi0gICAgIlwwMjBcdWZmMTNcMDIxXHVmZjEzXDAyMlx1ZmYxM1wwMjNcdWZmMTNcMDI0XHVmZjEzXDAyNVx1ZmYxM1wwMzEiICsKLSAgICAiXHVmZjEzXDAzMlx1ZmYxM1wwMzVcdWZmMTNcMDUzXHVmZjEzXDA1NFx1ZmYxM1wwNTVcdWZmMTNcMDU2XHVmZjEzIiArCi0gICAgIlwwNTdcdWZmMTNcMDYwXHVmZjEzXDA2MVx1ZmYxM1wwNjJcdWZmMTNcMDYzXHVmZjEzXDA2NFx1ZmYxM1wwNjUiICsKLSAgICAiXHVmZjEzXDA2Nlx1ZmYxM1wwNjdcdWZmMTNcMDcxXHVmZjEzXDA3M1x1ZmYxM1wwNzRcdWZmMTNcMDc1XHVmZjEzIiArCi0gICAgIlwwNzdcdWZmMTNcMTAwXHVmZjEzXDEwMVx1ZmYxM1wxMDJcdWZmMTNcMTA3XHVmZjEzXDExMFx1ZmYxM1wxMTEiICsKLSAgICAiXHVmZjEzXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMTlcMDA0XHVmZjE5XDAwNVx1ZmYxOVwwMDZcdWZmMTkiICsKLSAgICAiXDAwN1x1ZmYxOVwwMTBcdWZmMTlcMDExXHVmZjE5XDAxMlx1ZmYxOVwwMTNcdWZmMTlcMDE0XHVmZjE5XDAxNSIgKwotICAgICJcdWZmMTlcMDE2XHVmZjE5XDAxN1x1ZmYxOVwwMjBcdWZmMTlcMDIxXHVmZjE5XDAyMlx1ZmYxOVwwMjNcdWZmMTkiICsKLSAgICAiXDAyNFx1ZmYxOVwwMjVcdWZmMTlcMDMxXHVmZjE5XDAzMlx1ZmYxOVwwMzVcdWZmMTlcMDUzXHVmZjE5XDA1NCIgKwotICAgICJcdWZmMTlcMDU1XHVmZjE5XDA1Nlx1ZmYxOVwwNTdcdWZmMTlcMDYwXHVmZjE5XDA2MVx1ZmYxOVwwNjJcdWZmMTkiICsKLSAgICAiXDA2M1x1ZmYxOVwwNjRcdWZmMTlcMDY1XHVmZjE5XDA2Nlx1ZmYxOVwwNjdcdWZmMTlcMDcxXHVmZjE5XDA3MyIgKwotICAgICJcdWZmMTlcMDc0XHVmZjE5XDA3NVx1ZmYxOVwwNzdcdWZmMTlcMTAwXHVmZjE5XDEwMVx1ZmYxOVwxMDJcdWZmMTkiICsKLSAgICAiXDEwN1x1ZmYxOVwxMTBcdWZmMTlcMTExXHVmZjE5XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMmRcMDA0IiArCi0gICAgIlx1ZmYyZFwwMDVcdWZmMmRcMDA2XHVmZjJkXDAwN1x1ZmYyZFwwMTBcdWZmMmRcMDExXHVmZjJkXDAxMlx1ZmYyZCIgKwotICAgICJcMDEzXHVmZjJkXDAxNFx1ZmYyZFwwMTVcdWZmMmRcMDE2XHVmZjJkXDAxN1x1ZmYyZFwwMjBcdWZmMmRcMDIxIiArCi0gICAgIlx1ZmYyZFwwMjJcdWZmMmRcMDIzXHVmZjJkXDAyNFx1ZmYyZFwwMjVcdWZmMmRcMDMxXHVmZjJkXDAzMlx1ZmYyZCIgKwotICAgICJcMDM1XHVmZjJkXDA1M1x1ZmYyZFwwNTRcdWZmMmRcMDU1XHVmZjJkXDA1Nlx1ZmYyZFwwNTdcdWZmMmRcMDYwIiArCi0gICAgIlx1ZmYyZFwwNjFcdWZmMmRcMDYyXHVmZjJkXDA2M1x1ZmYyZFwwNjRcdWZmMmRcMDY1XHVmZjJkXDA2Nlx1ZmYyZCIgKwotICAgICJcMDY3XHVmZjJkXDA3MVx1ZmYyZFwwNzNcdWZmMmRcMDc0XHVmZjJkXDA3NVx1ZmYyZFwwNzdcdWZmMmRcMTAwIiArCi0gICAgIlx1ZmYyZFwxMDFcdWZmMmRcMTAyXHVmZjJkXDEwN1x1ZmYyZFwxMTBcdWZmMmRcMTExXHVmZjJkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzZcMDAyXHVmZjI0XDAwNFx1ZmYyNFwwMDVcdWZmMjRcMDA2XHVmZjI0XDAwN1x1ZmYyNFwwMTAiICsKLSAgICAiXHVmZjI0XDAxMVx1ZmYyNFwwMTJcdWZmMjRcMDEzXHVmZjI0XDAxNFx1ZmYyNFwwMTVcdWZmMjRcMDE2XHVmZjI0IiArCi0gICAgIlwwMTdcdWZmMjRcMDIwXHVmZjI0XDAyMVx1ZmYyNFwwMjJcdWZmMjRcMDIzXHVmZjI0XDAyNFx1ZmYyNFwwMjUiICsKLSAgICAiXHVmZjI0XDAzMVx1ZmYyNFwwMzJcdWZmMjRcMDM1XHVmZjI0XDA1M1x1ZmYyNFwwNTRcdWZmMjRcMDU1XHVmZjI0IiArCi0gICAgIlwwNTZcdWZmMjRcMDU3XHVmZjI0XDA2MFx1ZmYyNFwwNjFcdWZmMjRcMDYyXHVmZjI0XDA2M1x1ZmYyNFwwNjQiICsKLSAgICAiXHVmZjI0XDA2NVx1ZmYyNFwwNjZcdWZmMjRcMDY3XHVmZjI0XDA3MVx1ZmYyNFwwNzNcdWZmMjRcMDc0XHVmZjI0IiArCi0gICAgIlwwNzVcdWZmMjRcMDc3XHVmZjI0XDEwMFx1ZmYyNFwxMDFcdWZmMjRcMTAyXHVmZjI0XDEwN1x1ZmYyNFwxMTAiICsKLSAgICAiXHVmZjI0XDExMVx1ZmYyNFwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjIyXDAwNFx1ZmYyMlwwMDVcdWZmMjIiICsKLSAgICAiXDAwNlx1ZmYyMlwwMDdcdWZmMjJcMDEwXHVmZjIyXDAxMVx1ZmYyMlwwMTJcdWZmMjJcMDEzXHVmZjIyXDAxNCIgKwotICAgICJcdWZmMjJcMDE1XHVmZjIyXDAxNlx1ZmYyMlwwMTdcdWZmMjJcMDIwXHVmZjIyXDAyMVx1ZmYyMlwwMjJcdWZmMjIiICsKLSAgICAiXDAyM1x1ZmYyMlwwMjRcdWZmMjJcMDI1XHVmZjIyXDAzMVx1ZmYyMlwwMzJcdWZmMjJcMDM1XHVmZjIyXDA1MyIgKwotICAgICJcdWZmMjJcMDU0XHVmZjIyXDA1NVx1ZmYyMlwwNTZcdWZmMjJcMDU3XHVmZjIyXDA2MFx1ZmYyMlwwNjFcdWZmMjIiICsKLSAgICAiXDA2Mlx1ZmYyMlwwNjNcdWZmMjJcMDY0XHVmZjIyXDA2NVx1ZmYyMlwwNjZcdWZmMjJcMDY3XHVmZjIyXDA3MSIgKwotICAgICJcdWZmMjJcMDczXHVmZjIyXDA3NFx1ZmYyMlwwNzVcdWZmMjJcMDc3XHVmZjIyXDEwMFx1ZmYyMlwxMDFcdWZmMjIiICsKLSAgICAiXDEwMlx1ZmYyMlwxMDdcdWZmMjJcMTEwXHVmZjIyXDExMVx1ZmYyMlwwMDFcMDAyXDAwMFwxMzZcMDAyIiArCi0gICAgIlx1ZmY0MFwwMDRcdWZmNDBcMDA1XHVmZjQwXDAwNlx1ZmY0MFwwMDdcdWZmNDBcMDEwXHVmZjQwXDAxMVx1ZmY0MCIgKwotICAgICJcMDEyXHVmZjQwXDAxM1x1ZmY0MFwwMTRcdWZmNDBcMDE1XHVmZjQwXDAxNlx1ZmY0MFwwMTdcdWZmNDBcMDIwIiArCi0gICAgIlx1ZmY0MFwwMjFcdWZmNDBcMDIyXHVmZjQwXDAyM1x1ZmY0MFwwMjRcdWZmNDBcMDI1XHVmZjQwXDAzMVx1ZmY0MCIgKwotICAgICJcMDMyXHVmZjQwXDAzNVx1ZmY0MFwwNTNcdWZmNDBcMDU0XHVmZjQwXDA1NVx1ZmY0MFwwNTZcdWZmNDBcMDU3IiArCi0gICAgIlx1ZmY0MFwwNjBcdWZmNDBcMDYxXHVmZjQwXDA2Mlx1ZmY0MFwwNjNcdWZmNDBcMDY0XHVmZjQwXDA2NVx1ZmY0MCIgKwotICAgICJcMDY2XHVmZjQwXDA2N1x1ZmY0MFwwNzFcdWZmNDBcMDczXHVmZjQwXDA3NFx1ZmY0MFwwNzVcdWZmNDBcMDc3IiArCi0gICAgIlx1ZmY0MFwxMDBcdWZmNDBcMTAxXHVmZjQwXDEwMlx1ZmY0MFwxMDdcdWZmNDBcMTEwXHVmZjQwXDExMVx1ZmY0MCIgKwotICAgICJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyM1wwMDRcdWZmMjNcMDA1XHVmZjIzXDAwNlx1ZmYyM1wwMDciICsKLSAgICAiXHVmZjIzXDAxMFx1ZmYyM1wwMTFcdWZmMjNcMDEyXHVmZjIzXDAxM1x1ZmYyM1wwMTRcdWZmMjNcMDE1XHVmZjIzIiArCi0gICAgIlwwMTZcdWZmMjNcMDE3XHVmZjIzXDAyMFx1ZmYyM1wwMjFcdWZmMjNcMDIyXHVmZjIzXDAyM1x1ZmYyM1wwMjQiICsKLSAgICAiXHVmZjIzXDAyNVx1ZmYyM1wwMzFcdWZmMjNcMDMyXHVmZjIzXDAzNVx1ZmYyM1wwNTNcdWZmMjNcMDU0XHVmZjIzIiArCi0gICAgIlwwNTVcdWZmMjNcMDU2XHVmZjIzXDA1N1x1ZmYyM1wwNjBcdWZmMjNcMDYxXHVmZjIzXDA2Mlx1ZmYyM1wwNjMiICsKLSAgICAiXHVmZjIzXDA2NFx1ZmYyM1wwNjVcdWZmMjNcMDY2XHVmZjIzXDA2N1x1ZmYyM1wwNzFcdWZmMjNcMDczXHVmZjIzIiArCi0gICAgIlwwNzRcdWZmMjNcMDc1XHVmZjIzXDA3N1x1ZmYyM1wxMDBcdWZmMjNcMTAxXHVmZjIzXDEwMlx1ZmYyM1wxMDciICsKLSAgICAiXHVmZjIzXDExMFx1ZmYyM1wxMTFcdWZmMjNcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmY0MVwwMDRcdWZmNDEiICsKLSAgICAiXDAwNVx1ZmY0MVwwMDZcdWZmNDFcMDA3XHVmZjQxXDAxMFx1ZmY0MVwwMTFcdWZmNDFcMDEyXHVmZjQxXDAxMyIgKwotICAgICJcdWZmNDFcMDE0XHVmZjQxXDAxNVx1ZmY0MVwwMTZcdWZmNDFcMDE3XHVmZjQxXDAyMFx1ZmY0MVwwMjFcdWZmNDEiICsKLSAgICAiXDAyMlx1ZmY0MVwwMjNcdWZmNDFcMDI0XHVmZjQxXDAyNVx1ZmY0MVwwMzFcdWZmNDFcMDMyXHVmZjQxXDAzNSIgKwotICAgICJcdWZmNDFcMDUzXHVmZjQxXDA1NFx1ZmY0MVwwNTVcdWZmNDFcMDU2XHVmZjQxXDA1N1x1ZmY0MVwwNjBcdWZmNDEiICsKLSAgICAiXDA2MVx1ZmY0MVwwNjJcdWZmNDFcMDYzXHVmZjQxXDA2NFx1ZmY0MVwwNjVcdWZmNDFcMDY2XHVmZjQxXDA2NyIgKwotICAgICJcdWZmNDFcMDcxXHVmZjQxXDA3M1x1ZmY0MVwwNzRcdWZmNDFcMDc1XHVmZjQxXDA3N1x1ZmY0MVwxMDBcdWZmNDEiICsKLSAgICAiXDEwMVx1ZmY0MVwxMDJcdWZmNDFcMTA3XHVmZjQxXDExMFx1ZmY0MVwxMTFcdWZmNDFcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzNlwwMDJcdWZmMTJcMDA0XHVmZjEyXDAwNVx1ZmYxMlwwMDZcdWZmMTJcMDA3XHVmZjEyXDAxMFx1ZmYxMiIgKwotICAgICJcMDExXHVmZjEyXDAxMlx1ZmYxMlwwMTNcdWZmMTJcMDE0XHVmZjEyXDAxNVx1ZmYxMlwwMTZcdWZmMTJcMDE3IiArCi0gICAgIlx1ZmYxMlwwMjBcdWZmMTJcMDIxXHVmZjEyXDAyMlx1ZmYxMlwwMjNcdWZmMTJcMDI0XHVmZjEyXDAyNVx1ZmYxMiIgKwotICAgICJcMDMxXHVmZjEyXDAzMlx1ZmYxMlwwMzVcdWZmMTJcMDUzXHVmZjEyXDA1NFx1ZmYxMlwwNTVcdWZmMTJcMDU2IiArCi0gICAgIlx1ZmYxMlwwNTdcdWZmMTJcMDYwXHVmZjEyXDA2MVx1ZmYxMlwwNjJcdWZmMTJcMDYzXHVmZjEyXDA2NFx1ZmYxMiIgKwotICAgICJcMDY1XHVmZjEyXDA2Nlx1ZmYxMlwwNjdcdWZmMTJcMDcxXHVmZjEyXDA3M1x1ZmYxMlwwNzRcdWZmMTJcMDc1IiArCi0gICAgIlx1ZmYxMlwwNzdcdWZmMTJcMTAwXHVmZjEyXDEwMVx1ZmYxMlwxMDJcdWZmMTJcMTA3XHVmZjEyXDExMFx1ZmYxMiIgKwotICAgICJcMTExXHVmZjEyXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmNDRcMDA0XHVmZjQ0XDAwNVx1ZmY0NFwwMDYiICsKLSAgICAiXHVmZjQ0XDAwN1x1ZmY0NFwwMTBcdWZmNDRcMDExXHVmZjQ0XDAxMlx1ZmY0NFwwMTNcdWZmNDRcMDE0XHVmZjQ0IiArCi0gICAgIlwwMTVcdWZmNDRcMDE2XHVmZjQ0XDAxN1x1ZmY0NFwwMjBcdWZmNDRcMDIxXHVmZjQ0XDAyMlx1ZmY0NFwwMjMiICsKLSAgICAiXHVmZjQ0XDAyNFx1ZmY0NFwwMjVcdWZmNDRcMDMxXHVmZjQ0XDAzMlx1ZmY0NFwwMzVcdWZmNDRcMDUzXHVmZjQ0IiArCi0gICAgIlwwNTRcdWZmNDRcMDU1XHVmZjQ0XDA1Nlx1ZmY0NFwwNTdcdWZmNDRcMDYwXHVmZjQ0XDA2MVx1ZmY0NFwwNjIiICsKLSAgICAiXHVmZjQ0XDA2M1x1ZmY0NFwwNjRcdWZmNDRcMDY1XHVmZjQ0XDA2Nlx1ZmY0NFwwNjdcdWZmNDRcMDcxXHVmZjQ0IiArCi0gICAgIlwwNzNcdWZmNDRcMDc0XHVmZjQ0XDA3NVx1ZmY0NFwwNzdcdWZmNDRcMTAwXHVmZjQ0XDEwMVx1ZmY0NFwxMDIiICsKLSAgICAiXHVmZjQ0XDEwN1x1ZmY0NFwxMTBcdWZmNDRcMTExXHVmZjQ0XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMzQiICsKLSAgICAiXDAwNFx1ZmYzNFwwMDVcdWZmMzRcMDA2XHVmZjM0XDAwN1x1ZmYzNFwwMTBcdWZmMzRcMDExXHVmZjM0XDAxMiIgKwotICAgICJcdWZmMzRcMDEzXHVmZjM0XDAxNFx1ZmYzNFwwMTVcdWZmMzRcMDE2XHVmZjM0XDAxN1x1ZmYzNFwwMjBcdWZmMzQiICsKLSAgICAiXDAyMVx1ZmYzNFwwMjJcdWZmMzRcMDIzXHVmZjM0XDAyNFx1ZmYzNFwwMjVcdWZmMzRcMDMxXHVmZjM0XDAzMiIgKwotICAgICJcdWZmMzRcMDM1XHVmZjM0XDA1M1x1ZmYzNFwwNTRcdWZmMzRcMDU1XHVmZjM0XDA1Nlx1ZmYzNFwwNTdcdWZmMzQiICsKLSAgICAiXDA2MFx1ZmYzNFwwNjFcdWZmMzRcMDYyXHVmZjM0XDA2M1x1ZmYzNFwwNjRcdWZmMzRcMDY1XHVmZjM0XDA2NiIgKwotICAgICJcdWZmMzRcMDY3XHVmZjM0XDA3MVx1ZmYzNFwwNzNcdWZmMzRcMDc0XHVmZjM0XDA3NVx1ZmYzNFwwNzdcdWZmMzQiICsKLSAgICAiXDEwMFx1ZmYzNFwxMDFcdWZmMzRcMTAyXHVmZjM0XDEwN1x1ZmYzNFwxMTBcdWZmMzRcMTExXHVmZjM0XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzZcMDAyXHVmZjJiXDAwNFx1ZmYyYlwwMDVcdWZmMmJcMDA2XHVmZjJiXDAwN1x1ZmYyYiIgKwotICAgICJcMDEwXHVmZjJiXDAxMVx1ZmYyYlwwMTJcdWZmMmJcMDEzXHVmZjJiXDAxNFx1ZmYyYlwwMTVcdWZmMmJcMDE2IiArCi0gICAgIlx1ZmYyYlwwMTdcdWZmMmJcMDIwXHVmZjJiXDAyMVx1ZmYyYlwwMjJcdWZmMmJcMDIzXHVmZjJiXDAyNFx1ZmYyYiIgKwotICAgICJcMDI1XHVmZjJiXDAzMVx1ZmYyYlwwMzJcdWZmMmJcMDM1XHVmZjJiXDA1M1x1ZmYyYlwwNTRcdWZmMmJcMDU1IiArCi0gICAgIlx1ZmYyYlwwNTZcdWZmMmJcMDU3XHVmZjJiXDA2MFx1ZmYyYlwwNjFcdWZmMmJcMDYyXHVmZjJiXDA2M1x1ZmYyYiIgKwotICAgICJcMDY0XHVmZjJiXDA2NVx1ZmYyYlwwNjZcdWZmMmJcMDY3XHVmZjJiXDA3MVx1ZmYyYlwwNzNcdWZmMmJcMDc0IiArCi0gICAgIlx1ZmYyYlwwNzVcdWZmMmJcMDc3XHVmZjJiXDEwMFx1ZmYyYlwxMDFcdWZmMmJcMTAyXHVmZjJiXDEwN1x1ZmYyYiIgKwotICAgICJcMTEwXHVmZjJiXDExMVx1ZmYyYlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjJjXDAwNFx1ZmYyY1wwMDUiICsKLSAgICAiXHVmZjJjXDAwNlx1ZmYyY1wwMDdcdWZmMmNcMDEwXHVmZjJjXDAxMVx1ZmYyY1wwMTJcdWZmMmNcMDEzXHVmZjJjIiArCi0gICAgIlwwMTRcdWZmMmNcMDE1XHVmZjJjXDAxNlx1ZmYyY1wwMTdcdWZmMmNcMDIwXHVmZjJjXDAyMVx1ZmYyY1wwMjIiICsKLSAgICAiXHVmZjJjXDAyM1x1ZmYyY1wwMjRcdWZmMmNcMDI1XHVmZjJjXDAzMVx1ZmYyY1wwMzJcdWZmMmNcMDM1XHVmZjJjIiArCi0gICAgIlwwNTNcdWZmMmNcMDU0XHVmZjJjXDA1NVx1ZmYyY1wwNTZcdWZmMmNcMDU3XHVmZjJjXDA2MFx1ZmYyY1wwNjEiICsKLSAgICAiXHVmZjJjXDA2Mlx1ZmYyY1wwNjNcdWZmMmNcMDY0XHVmZjJjXDA2NVx1ZmYyY1wwNjZcdWZmMmNcMDY3XHVmZjJjIiArCi0gICAgIlwwNzFcdWZmMmNcMDczXHVmZjJjXDA3NFx1ZmYyY1wwNzVcdWZmMmNcMDc3XHVmZjJjXDEwMFx1ZmYyY1wxMDEiICsKLSAgICAiXHVmZjJjXDEwMlx1ZmYyY1wxMDdcdWZmMmNcMTEwXHVmZjJjXDExMVx1ZmYyY1wwMDFcMDAyXDAwMFwxMzYiICsKLSAgICAiXDAwMlx1ZmY0MlwwMDRcdWZmNDJcMDA1XHVmZjQyXDAwNlx1ZmY0MlwwMDdcdWZmNDJcMDEwXHVmZjQyXDAxMSIgKwotICAgICJcdWZmNDJcMDEyXHVmZjQyXDAxM1x1ZmY0MlwwMTRcdWZmNDJcMDE1XHVmZjQyXDAxNlx1ZmY0MlwwMTdcdWZmNDIiICsKLSAgICAiXDAyMFx1ZmY0MlwwMjFcdWZmNDJcMDIyXHVmZjQyXDAyM1x1ZmY0MlwwMjRcdWZmNDJcMDI1XHVmZjQyXDAzMSIgKwotICAgICJcdWZmNDJcMDMyXHVmZjQyXDAzNVx1ZmY0MlwwNTNcdWZmNDJcMDU0XHVmZjQyXDA1NVx1ZmY0MlwwNTZcdWZmNDIiICsKLSAgICAiXDA1N1x1ZmY0MlwwNjBcdWZmNDJcMDYxXHVmZjQyXDA2Mlx1ZmY0MlwwNjNcdWZmNDJcMDY0XHVmZjQyXDA2NSIgKwotICAgICJcdWZmNDJcMDY2XHVmZjQyXDA2N1x1ZmY0MlwwNzFcdWZmNDJcMDczXHVmZjQyXDA3NFx1ZmY0MlwwNzVcdWZmNDIiICsKLSAgICAiXDA3N1x1ZmY0MlwxMDBcdWZmNDJcMTAxXHVmZjQyXDEwMlx1ZmY0MlwxMDdcdWZmNDJcMTEwXHVmZjQyXDExMSIgKwotICAgICJcdWZmNDJcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmY0N1wwMDRcdWZmNDdcMDA1XHVmZjQ3XDAwNlx1ZmY0NyIgKwotICAgICJcMDA3XHVmZjQ3XDAxMFx1ZmY0N1wwMTFcdWZmNDdcMDEyXHVmZjQ3XDAxM1x1ZmY0N1wwMTRcdWZmNDdcMDE1IiArCi0gICAgIlx1ZmY0N1wwMTZcdWZmNDdcMDE3XHVmZjQ3XDAyMFx1ZmY0N1wwMjFcdWZmNDdcMDIyXHVmZjQ3XDAyM1x1ZmY0NyIgKwotICAgICJcMDI0XHVmZjQ3XDAyNVx1ZmY0N1wwMzFcdWZmNDdcMDMyXHVmZjQ3XDAzNVx1ZmY0N1wwNTNcdWZmNDdcMDU0IiArCi0gICAgIlx1ZmY0N1wwNTVcdWZmNDdcMDU2XHVmZjQ3XDA1N1x1ZmY0N1wwNjBcdWZmNDdcMDYxXHVmZjQ3XDA2Mlx1ZmY0NyIgKwotICAgICJcMDYzXHVmZjQ3XDA2NFx1ZmY0N1wwNjVcdWZmNDdcMDY2XHVmZjQ3XDA2N1x1ZmY0N1wwNzFcdWZmNDdcMDczIiArCi0gICAgIlx1ZmY0N1wwNzRcdWZmNDdcMDc1XHVmZjQ3XDA3N1x1ZmY0N1wxMDBcdWZmNDdcMTAxXHVmZjQ3XDEwMlx1ZmY0NyIgKwotICAgICJcMTA3XHVmZjQ3XDExMFx1ZmY0N1wxMTFcdWZmNDdcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxNlwwMDQiICsKLSAgICAiXHVmZjE2XDAwNVx1ZmYxNlwwMDZcdWZmMTZcMDA3XHVmZjE2XDAxMFx1ZmYxNlwwMTFcdWZmMTZcMDEyXHVmZjE2IiArCi0gICAgIlwwMTNcdWZmMTZcMDE0XHVmZjE2XDAxNVx1ZmYxNlwwMTZcdWZmMTZcMDE3XHVmZjE2XDAyMFx1ZmYxNlwwMjEiICsKLSAgICAiXHVmZjE2XDAyMlx1ZmYxNlwwMjNcdWZmMTZcMDI0XHVmZjE2XDAyNVx1ZmYxNlwwMzFcdWZmMTZcMDMyXHVmZjE2IiArCi0gICAgIlwwMzVcdWZmMTZcMDUzXHVmZjE2XDA1NFx1ZmYxNlwwNTVcdWZmMTZcMDU2XHVmZjE2XDA1N1x1ZmYxNlwwNjAiICsKLSAgICAiXHVmZjE2XDA2MVx1ZmYxNlwwNjJcdWZmMTZcMDYzXHVmZjE2XDA2NFx1ZmYxNlwwNjVcdWZmMTZcMDY2XHVmZjE2IiArCi0gICAgIlwwNjdcdWZmMTZcMDcxXHVmZjE2XDA3M1x1ZmYxNlwwNzRcdWZmMTZcMDc1XHVmZjE2XDA3N1x1ZmYxNlwxMDAiICsKLSAgICAiXHVmZjE2XDEwMVx1ZmYxNlwxMDJcdWZmMTZcMTA3XHVmZjE2XDExMFx1ZmYxNlwxMTFcdWZmMTZcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzNlwwMDJcdWZmMzJcMDA0XHVmZjMyXDAwNVx1ZmYzMlwwMDZcdWZmMzJcMDA3XHVmZjMyXDAxMCIgKwotICAgICJcdWZmMzJcMDExXHVmZjMyXDAxMlx1ZmYzMlwwMTNcdWZmMzJcMDE0XHVmZjMyXDAxNVx1ZmYzMlwwMTZcdWZmMzIiICsKLSAgICAiXDAxN1x1ZmYzMlwwMjBcdWZmMzJcMDIxXHVmZjMyXDAyMlx1ZmYzMlwwMjNcdWZmMzJcMDI0XHVmZjMyXDAyNSIgKwotICAgICJcdWZmMzJcMDMxXHVmZjMyXDAzMlx1ZmYzMlwwMzVcdWZmMzJcMDUzXHVmZjMyXDA1NFx1ZmYzMlwwNTVcdWZmMzIiICsKLSAgICAiXDA1Nlx1ZmYzMlwwNTdcdWZmMzJcMDYwXHVmZjMyXDA2MVx1ZmYzMlwwNjJcdWZmMzJcMDYzXHVmZjMyXDA2NCIgKwotICAgICJcdWZmMzJcMDY1XHVmZjMyXDA2Nlx1ZmYzMlwwNjdcdWZmMzJcMDcxXHVmZjMyXDA3M1x1ZmYzMlwwNzRcdWZmMzIiICsKLSAgICAiXDA3NVx1ZmYzMlwwNzdcdWZmMzJcMTAwXHVmZjMyXDEwMVx1ZmYzMlwxMDJcdWZmMzJcMTA3XHVmZjMyXDExMCIgKwotICAgICJcdWZmMzJcMTExXHVmZjMyXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmM2FcMDA0XHVmZjNhXDAwNVx1ZmYzYSIgKwotICAgICJcMDA2XHVmZjNhXDAwN1x1ZmYzYVwwMTBcdWZmM2FcMDExXHVmZjNhXDAxMlx1ZmYzYVwwMTNcdWZmM2FcMDE0IiArCi0gICAgIlx1ZmYzYVwwMTVcdWZmM2FcMDE2XHVmZjNhXDAxN1x1ZmYzYVwwMjBcdWZmM2FcMDIxXHVmZjNhXDAyMlx1ZmYzYSIgKwotICAgICJcMDIzXHVmZjNhXDAyNFx1ZmYzYVwwMjVcdWZmM2FcMDMxXHVmZjNhXDAzMlx1ZmYzYVwwMzVcdWZmM2FcMDUzIiArCi0gICAgIlx1ZmYzYVwwNTRcdWZmM2FcMDU1XHVmZjNhXDA1Nlx1ZmYzYVwwNTdcdWZmM2FcMDYwXHVmZjNhXDA2MVx1ZmYzYSIgKwotICAgICJcMDYyXHVmZjNhXDA2M1x1ZmYzYVwwNjRcdWZmM2FcMDY1XHVmZjNhXDA2Nlx1ZmYzYVwwNjdcdWZmM2FcMDcxIiArCi0gICAgIlx1ZmYzYVwwNzNcdWZmM2FcMDc0XHVmZjNhXDA3NVx1ZmYzYVwwNzdcdWZmM2FcMTAwXHVmZjNhXDEwMVx1ZmYzYSIgKwotICAgICJcMTAyXHVmZjNhXDEwN1x1ZmYzYVwxMTBcdWZmM2FcMTExXHVmZjNhXDAwMVwwMDJcMDAwXDEzNlwwMDIiICsKLSAgICAiXHVmZjE1XDAwNFx1ZmYxNVwwMDVcdWZmMTVcMDA2XHVmZjE1XDAwN1x1ZmYxNVwwMTBcdWZmMTVcMDExXHVmZjE1IiArCi0gICAgIlwwMTJcdWZmMTVcMDEzXHVmZjE1XDAxNFx1ZmYxNVwwMTVcdWZmMTVcMDE2XHVmZjE1XDAxN1x1ZmYxNVwwMjAiICsKLSAgICAiXHVmZjE1XDAyMVx1ZmYxNVwwMjJcdWZmMTVcMDIzXHVmZjE1XDAyNFx1ZmYxNVwwMjVcdWZmMTVcMDMxXHVmZjE1IiArCi0gICAgIlwwMzJcdWZmMTVcMDM1XHVmZjE1XDA1M1x1ZmYxNVwwNTRcdWZmMTVcMDU1XHVmZjE1XDA1Nlx1ZmYxNVwwNTciICsKLSAgICAiXHVmZjE1XDA2MFx1ZmYxNVwwNjFcdWZmMTVcMDYyXHVmZjE1XDA2M1x1ZmYxNVwwNjRcdWZmMTVcMDY1XHVmZjE1IiArCi0gICAgIlwwNjZcdWZmMTVcMDY3XHVmZjE1XDA3MVx1ZmYxNVwwNzNcdWZmMTVcMDc0XHVmZjE1XDA3NVx1ZmYxNVwwNzciICsKLSAgICAiXHVmZjE1XDEwMFx1ZmYxNVwxMDFcdWZmMTVcMTAyXHVmZjE1XDEwN1x1ZmYxNVwxMTBcdWZmMTVcMTExXHVmZjE1IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjM5XDAwNFx1ZmYzOVwwMDVcdWZmMzlcMDA2XHVmZjM5XDAwNyIgKwotICAgICJcdWZmMzlcMDEwXHVmZjM5XDAxMVx1ZmYzOVwwMTJcdWZmMzlcMDEzXHVmZjM5XDAxNFx1ZmYzOVwwMTVcdWZmMzkiICsKLSAgICAiXDAxNlx1ZmYzOVwwMTdcdWZmMzlcMDIwXHVmZjM5XDAyMVx1ZmYzOVwwMjJcdWZmMzlcMDIzXHVmZjM5XDAyNCIgKwotICAgICJcdWZmMzlcMDI1XHVmZjM5XDAzMVx1ZmYzOVwwMzJcdWZmMzlcMDM1XHVmZjM5XDA1M1x1ZmYzOVwwNTRcdWZmMzkiICsKLSAgICAiXDA1NVx1ZmYzOVwwNTZcdWZmMzlcMDU3XHVmZjM5XDA2MFx1ZmYzOVwwNjFcdWZmMzlcMDYyXHVmZjM5XDA2MyIgKwotICAgICJcdWZmMzlcMDY0XHVmZjM5XDA2NVx1ZmYzOVwwNjZcdWZmMzlcMDY3XHVmZjM5XDA3MVx1ZmYzOVwwNzNcdWZmMzkiICsKLSAgICAiXDA3NFx1ZmYzOVwwNzVcdWZmMzlcMDc3XHVmZjM5XDEwMFx1ZmYzOVwxMDFcdWZmMzlcMTAyXHVmZjM5XDEwNyIgKwotICAgICJcdWZmMzlcMTEwXHVmZjM5XDExMVx1ZmYzOVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjNjXDAwNFx1ZmYzYyIgKwotICAgICJcMDA1XHVmZjNjXDAwNlx1ZmYzY1wwMDdcdWZmM2NcMDEwXHVmZjNjXDAxMVx1ZmYzY1wwMTJcdWZmM2NcMDEzIiArCi0gICAgIlx1ZmYzY1wwMTRcdWZmM2NcMDE1XHVmZjNjXDAxNlx1ZmYzY1wwMTdcdWZmM2NcMDIwXHVmZjNjXDAyMVx1ZmYzYyIgKwotICAgICJcMDIyXHVmZjNjXDAyM1x1ZmYzY1wwMjRcdWZmM2NcMDI1XHVmZjNjXDAzMVx1ZmYzY1wwMzJcdWZmM2NcMDM1IiArCi0gICAgIlx1ZmYzY1wwNTNcdWZmM2NcMDU0XHVmZjNjXDA1NVx1ZmYzY1wwNTZcdWZmM2NcMDU3XHVmZjNjXDA2MFx1ZmYzYyIgKwotICAgICJcMDYxXHVmZjNjXDA2Mlx1ZmYzY1wwNjNcdWZmM2NcMDY0XHVmZjNjXDA2NVx1ZmYzY1wwNjZcdWZmM2NcMDY3IiArCi0gICAgIlx1ZmYzY1wwNzFcdWZmM2NcMDczXHVmZjNjXDA3NFx1ZmYzY1wwNzVcdWZmM2NcMDc3XHVmZjNjXDEwMFx1ZmYzYyIgKwotICAgICJcMTAxXHVmZjNjXDEwMlx1ZmYzY1wxMDdcdWZmM2NcMTEwXHVmZjNjXDExMVx1ZmYzY1wwMDFcMDAyXDAwMCIgKwotICAgICJcMTM2XDAwMlx1ZmYzOFwwMDRcdWZmMzhcMDA1XHVmZjM4XDAwNlx1ZmYzOFwwMDdcdWZmMzhcMDEwXHVmZjM4IiArCi0gICAgIlwwMTFcdWZmMzhcMDEyXHVmZjM4XDAxM1x1ZmYzOFwwMTRcdWZmMzhcMDE1XHVmZjM4XDAxNlx1ZmYzOFwwMTciICsKLSAgICAiXHVmZjM4XDAyMFx1ZmYzOFwwMjFcdWZmMzhcMDIyXHVmZjM4XDAyM1x1ZmYzOFwwMjRcdWZmMzhcMDI1XHVmZjM4IiArCi0gICAgIlwwMzFcdWZmMzhcMDMyXHVmZjM4XDAzNVx1ZmYzOFwwNTNcdWZmMzhcMDU0XHVmZjM4XDA1NVx1ZmYzOFwwNTYiICsKLSAgICAiXHVmZjM4XDA1N1x1ZmYzOFwwNjBcdWZmMzhcMDYxXHVmZjM4XDA2Mlx1ZmYzOFwwNjNcdWZmMzhcMDY0XHVmZjM4IiArCi0gICAgIlwwNjVcdWZmMzhcMDY2XHVmZjM4XDA2N1x1ZmYzOFwwNzFcdWZmMzhcMDczXHVmZjM4XDA3NFx1ZmYzOFwwNzUiICsKLSAgICAiXHVmZjM4XDA3N1x1ZmYzOFwxMDBcdWZmMzhcMTAxXHVmZjM4XDEwMlx1ZmYzOFwxMDdcdWZmMzhcMTEwXHVmZjM4IiArCi0gICAgIlwxMTFcdWZmMzhcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyNlwwMDRcdWZmMjZcMDA1XHVmZjI2XDAwNiIgKwotICAgICJcdWZmMjZcMDA3XHVmZjI2XDAxMFx1ZmYyNlwwMTFcdWZmMjZcMDEyXHVmZjI2XDAxM1x1ZmYyNlwwMTRcdWZmMjYiICsKLSAgICAiXDAxNVx1ZmYyNlwwMTZcdWZmMjZcMDE3XHVmZjI2XDAyMFx1ZmYyNlwwMjFcdWZmMjZcMDIyXHVmZjI2XDAyMyIgKwotICAgICJcdWZmMjZcMDI0XHVmZjI2XDAyNVx1ZmYyNlwwMzFcdWZmMjZcMDMyXHVmZjI2XDAzNVx1ZmYyNlwwNTNcdWZmMjYiICsKLSAgICAiXDA1NFx1ZmYyNlwwNTVcdWZmMjZcMDU2XHVmZjI2XDA1N1x1ZmYyNlwwNjBcdWZmMjZcMDYxXHVmZjI2XDA2MiIgKwotICAgICJcdWZmMjZcMDYzXHVmZjI2XDA2NFx1ZmYyNlwwNjVcdWZmMjZcMDY2XHVmZjI2XDA2N1x1ZmYyNlwwNzFcdWZmMjYiICsKLSAgICAiXDA3M1x1ZmYyNlwwNzRcdWZmMjZcMDc1XHVmZjI2XDA3N1x1ZmYyNlwxMDBcdWZmMjZcMTAxXHVmZjI2XDEwMiIgKwotICAgICJcdWZmMjZcMTA3XHVmZjI2XDExMFx1ZmYyNlwxMTFcdWZmMjZcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYyOSIgKwotICAgICJcMDA0XHVmZjI5XDAwNVx1ZmYyOVwwMDZcdWZmMjlcMDA3XHVmZjI5XDAxMFx1ZmYyOVwwMTFcdWZmMjlcMDEyIiArCi0gICAgIlx1ZmYyOVwwMTNcdWZmMjlcMDE0XHVmZjI5XDAxNVx1ZmYyOVwwMTZcdWZmMjlcMDE3XHVmZjI5XDAyMFx1ZmYyOSIgKwotICAgICJcMDIxXHVmZjI5XDAyMlx1ZmYyOVwwMjNcdWZmMjlcMDI0XHVmZjI5XDAyNVx1ZmYyOVwwMzFcdWZmMjlcMDMyIiArCi0gICAgIlx1ZmYyOVwwMzVcdWZmMjlcMDUzXHVmZjI5XDA1NFx1ZmYyOVwwNTVcdWZmMjlcMDU2XHVmZjI5XDA1N1x1ZmYyOSIgKwotICAgICJcMDYwXHVmZjI5XDA2MVx1ZmYyOVwwNjJcdWZmMjlcMDYzXHVmZjI5XDA2NFx1ZmYyOVwwNjVcdWZmMjlcMDY2IiArCi0gICAgIlx1ZmYyOVwwNjdcdWZmMjlcMDcxXHVmZjI5XDA3M1x1ZmYyOVwwNzRcdWZmMjlcMDc1XHVmZjI5XDA3N1x1ZmYyOSIgKwotICAgICJcMTAwXHVmZjI5XDEwMVx1ZmYyOVwxMDJcdWZmMjlcMTA3XHVmZjI5XDExMFx1ZmYyOVwxMTFcdWZmMjlcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzNlwwMDJcdWZmNDZcMDA0XHVmZjQ2XDAwNVx1ZmY0NlwwMDZcdWZmNDZcMDA3XHVmZjQ2IiArCi0gICAgIlwwMTBcdWZmNDZcMDExXHVmZjQ2XDAxMlx1ZmY0NlwwMTNcdWZmNDZcMDE0XHVmZjQ2XDAxNVx1ZmY0NlwwMTYiICsKLSAgICAiXHVmZjQ2XDAxN1x1ZmY0NlwwMjBcdWZmNDZcMDIxXHVmZjQ2XDAyMlx1ZmY0NlwwMjNcdWZmNDZcMDI0XHVmZjQ2IiArCi0gICAgIlwwMjVcdWZmNDZcMDMxXHVmZjQ2XDAzMlx1ZmY0NlwwMzVcdWZmNDZcMDUzXHVmZjQ2XDA1NFx1ZmY0NlwwNTUiICsKLSAgICAiXHVmZjQ2XDA1Nlx1ZmY0NlwwNTdcdWZmNDZcMDYwXHVmZjQ2XDA2MVx1ZmY0NlwwNjJcdWZmNDZcMDYzXHVmZjQ2IiArCi0gICAgIlwwNjRcdWZmNDZcMDY1XHVmZjQ2XDA2Nlx1ZmY0NlwwNjdcdWZmNDZcMDcxXHVmZjQ2XDA3M1x1ZmY0NlwwNzQiICsKLSAgICAiXHVmZjQ2XDA3NVx1ZmY0NlwwNzdcdWZmNDZcMTAwXHVmZjQ2XDEwMVx1ZmY0NlwxMDJcdWZmNDZcMTA3XHVmZjQ2IiArCi0gICAgIlwxMTBcdWZmNDZcMTExXHVmZjQ2XDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMzFcMDA0XHVmZjMxXDAwNSIgKwotICAgICJcdWZmMzFcMDA2XHVmZjMxXDAwN1x1ZmYzMVwwMTBcdWZmMzFcMDExXHVmZjMxXDAxMlx1ZmYzMVwwMTNcdWZmMzEiICsKLSAgICAiXDAxNFx1ZmYzMVwwMTVcdWZmMzFcMDE2XHVmZjMxXDAxN1x1ZmYzMVwwMjBcdWZmMzFcMDIxXHVmZjMxXDAyMiIgKwotICAgICJcdWZmMzFcMDIzXHVmZjMxXDAyNFx1ZmYzMVwwMjVcdWZmMzFcMDMxXHVmZjMxXDAzMlx1ZmYzMVwwMzVcdWZmMzEiICsKLSAgICAiXDA1M1x1ZmYzMVwwNTRcdWZmMzFcMDU1XHVmZjMxXDA1Nlx1ZmYzMVwwNTdcdWZmMzFcMDYwXHVmZjMxXDA2MSIgKwotICAgICJcdWZmMzFcMDYyXHVmZjMxXDA2M1x1ZmYzMVwwNjRcdWZmMzFcMDY1XHVmZjMxXDA2Nlx1ZmYzMVwwNjdcdWZmMzEiICsKLSAgICAiXDA3MVx1ZmYzMVwwNzNcdWZmMzFcMDc0XHVmZjMxXDA3NVx1ZmYzMVwwNzdcdWZmMzFcMTAwXHVmZjMxXDEwMSIgKwotICAgICJcdWZmMzFcMTAyXHVmZjMxXDEwN1x1ZmYzMVwxMTBcdWZmMzFcMTExXHVmZjMxXDAwMVwwMDJcMDAwXDEzNiIgKwotICAgICJcMDAyXHVmZjFmXDAwNFx1ZmYxZlwwMDVcdWZmMWZcMDA2XHVmZjFmXDAwN1x1ZmYxZlwwMTBcdWZmMWZcMDExIiArCi0gICAgIlx1ZmYxZlwwMTJcdWZmMWZcMDEzXHVmZjFmXDAxNFx1ZmYxZlwwMTVcdWZmMWZcMDE2XHVmZjFmXDAxN1x1ZmYxZiIgKwotICAgICJcMDIwXHVmZjFmXDAyMVx1ZmYxZlwwMjJcdWZmMWZcMDIzXHVmZjFmXDAyNFx1ZmYxZlwwMjVcdWZmMWZcMDMxIiArCi0gICAgIlx1ZmYxZlwwMzJcdWZmMWZcMDM1XHVmZjFmXDA1M1x1ZmYxZlwwNTRcdWZmMWZcMDU1XHVmZjFmXDA1Nlx1ZmYxZiIgKwotICAgICJcMDU3XHVmZjFmXDA2MFx1ZmYxZlwwNjFcdWZmMWZcMDYyXHVmZjFmXDA2M1x1ZmYxZlwwNjRcdWZmMWZcMDY1IiArCi0gICAgIlx1ZmYxZlwwNjZcdWZmMWZcMDY3XHVmZjFmXDA3MVx1ZmYxZlwwNzNcdWZmMWZcMDc0XHVmZjFmXDA3NVx1ZmYxZiIgKwotICAgICJcMDc3XHVmZjFmXDEwMFx1ZmYxZlwxMDFcdWZmMWZcMTAyXHVmZjFmXDEwN1x1ZmYxZlwxMTBcdWZmMWZcMTExIiArCi0gICAgIlx1ZmYxZlwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjM1XDAwNFx1ZmYzNVwwMDVcdWZmMzVcMDA2XHVmZjM1IiArCi0gICAgIlwwMDdcdWZmMzVcMDEwXHVmZjM1XDAxMVx1ZmYzNVwwMTJcdWZmMzVcMDEzXHVmZjM1XDAxNFx1ZmYzNVwwMTUiICsKLSAgICAiXHVmZjM1XDAxNlx1ZmYzNVwwMTdcdWZmMzVcMDIwXHVmZjM1XDAyMVx1ZmYzNVwwMjJcdWZmMzVcMDIzXHVmZjM1IiArCi0gICAgIlwwMjRcdWZmMzVcMDI1XHVmZjM1XDAzMVx1ZmYzNVwwMzJcdWZmMzVcMDM1XHVmZjM1XDA1M1x1ZmYzNVwwNTQiICsKLSAgICAiXHVmZjM1XDA1NVx1ZmYzNVwwNTZcdWZmMzVcMDU3XHVmZjM1XDA2MFx1ZmYzNVwwNjFcdWZmMzVcMDYyXHVmZjM1IiArCi0gICAgIlwwNjNcdWZmMzVcMDY0XHVmZjM1XDA2NVx1ZmYzNVwwNjZcdWZmMzVcMDY3XHVmZjM1XDA3MVx1ZmYzNVwwNzMiICsKLSAgICAiXHVmZjM1XDA3NFx1ZmYzNVwwNzVcdWZmMzVcMDc3XHVmZjM1XDEwMFx1ZmYzNVwxMDFcdWZmMzVcMTAyXHVmZjM1IiArCi0gICAgIlwxMDdcdWZmMzVcMTEwXHVmZjM1XDExMVx1ZmYzNVwwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjI3XDAwNCIgKwotICAgICJcdWZmMjdcMDA1XHVmZjI3XDAwNlx1ZmYyN1wwMDdcdWZmMjdcMDEwXHVmZjI3XDAxMVx1ZmYyN1wwMTJcdWZmMjciICsKLSAgICAiXDAxM1x1ZmYyN1wwMTRcdWZmMjdcMDE1XHVmZjI3XDAxNlx1ZmYyN1wwMTdcdWZmMjdcMDIwXHVmZjI3XDAyMSIgKwotICAgICJcdWZmMjdcMDIyXHVmZjI3XDAyM1x1ZmYyN1wwMjRcdWZmMjdcMDI1XHVmZjI3XDAzMVx1ZmYyN1wwMzJcdWZmMjciICsKLSAgICAiXDAzNVx1ZmYyN1wwNTNcdWZmMjdcMDU0XHVmZjI3XDA1NVx1ZmYyN1wwNTZcdWZmMjdcMDU3XHVmZjI3XDA2MCIgKwotICAgICJcdWZmMjdcMDYxXHVmZjI3XDA2Mlx1ZmYyN1wwNjNcdWZmMjdcMDY0XHVmZjI3XDA2NVx1ZmYyN1wwNjZcdWZmMjciICsKLSAgICAiXDA2N1x1ZmYyN1wwNzFcdWZmMjdcMDczXHVmZjI3XDA3NFx1ZmYyN1wwNzVcdWZmMjdcMDc3XHVmZjI3XDEwMCIgKwotICAgICJcdWZmMjdcMTAxXHVmZjI3XDEwMlx1ZmYyN1wxMDdcdWZmMjdcMTEwXHVmZjI3XDExMVx1ZmYyN1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMTM2XDAwMlx1ZmYxNFwwMDRcdWZmMTRcMDA1XHVmZjE0XDAwNlx1ZmYxNFwwMDdcdWZmMTRcMDEwIiArCi0gICAgIlx1ZmYxNFwwMTFcdWZmMTRcMDEyXHVmZjE0XDAxM1x1ZmYxNFwwMTRcdWZmMTRcMDE1XHVmZjE0XDAxNlx1ZmYxNCIgKwotICAgICJcMDE3XHVmZjE0XDAyMFx1ZmYxNFwwMjFcdWZmMTRcMDIyXHVmZjE0XDAyM1x1ZmYxNFwwMjRcdWZmMTRcMDI1IiArCi0gICAgIlx1ZmYxNFwwMzFcdWZmMTRcMDMyXHVmZjE0XDAzNVx1ZmYxNFwwNTNcdWZmMTRcMDU0XHVmZjE0XDA1NVx1ZmYxNCIgKwotICAgICJcMDU2XHVmZjE0XDA1N1x1ZmYxNFwwNjBcdWZmMTRcMDYxXHVmZjE0XDA2Mlx1ZmYxNFwwNjNcdWZmMTRcMDY0IiArCi0gICAgIlx1ZmYxNFwwNjVcdWZmMTRcMDY2XHVmZjE0XDA2N1x1ZmYxNFwwNzFcdWZmMTRcMDczXHVmZjE0XDA3NFx1ZmYxNCIgKwotICAgICJcMDc1XHVmZjE0XDA3N1x1ZmYxNFwxMDBcdWZmMTRcMTAxXHVmZjE0XDEwMlx1ZmYxNFwxMDdcdWZmMTRcMTEwIiArCi0gICAgIlx1ZmYxNFwxMTFcdWZmMTRcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYzZFwwMDRcdWZmM2RcMDA1XHVmZjNkIiArCi0gICAgIlwwMDZcdWZmM2RcMDA3XHVmZjNkXDAxMFx1ZmYzZFwwMTFcdWZmM2RcMDEyXHVmZjNkXDAxM1x1ZmYzZFwwMTQiICsKLSAgICAiXHVmZjNkXDAxNVx1ZmYzZFwwMTZcdWZmM2RcMDE3XHVmZjNkXDAyMFx1ZmYzZFwwMjFcdWZmM2RcMDIyXHVmZjNkIiArCi0gICAgIlwwMjNcdWZmM2RcMDI0XHVmZjNkXDAyNVx1ZmYzZFwwMzFcdWZmM2RcMDMyXHVmZjNkXDAzNVx1ZmYzZFwwNTMiICsKLSAgICAiXHVmZjNkXDA1NFx1ZmYzZFwwNTVcdWZmM2RcMDU2XHVmZjNkXDA1N1x1ZmYzZFwwNjBcdWZmM2RcMDYxXHVmZjNkIiArCi0gICAgIlwwNjJcdWZmM2RcMDYzXHVmZjNkXDA2NFx1ZmYzZFwwNjVcdWZmM2RcMDY2XHVmZjNkXDA2N1x1ZmYzZFwwNzEiICsKLSAgICAiXHVmZjNkXDA3M1x1ZmYzZFwwNzRcdWZmM2RcMDc1XHVmZjNkXDA3N1x1ZmYzZFwxMDBcdWZmM2RcMTAxXHVmZjNkIiArCi0gICAgIlwxMDJcdWZmM2RcMTA3XHVmZjNkXDExMFx1ZmYzZFwxMTFcdWZmM2RcMDAxXDAwMlwwMDBcMTM2XDAwMiIgKwotICAgICJcdWZmM2ZcMDA0XHVmZjNmXDAwNVx1ZmYzZlwwMDZcdWZmM2ZcMDA3XHVmZjNmXDAxMFx1ZmYzZlwwMTFcdWZmM2YiICsKLSAgICAiXDAxMlx1ZmYzZlwwMTNcdWZmM2ZcMDE0XHVmZjNmXDAxNVx1ZmYzZlwwMTZcdWZmM2ZcMDE3XHVmZjNmXDAyMCIgKwotICAgICJcdWZmM2ZcMDIxXHVmZjNmXDAyMlx1ZmYzZlwwMjNcdWZmM2ZcMDI0XHVmZjNmXDAyNVx1ZmYzZlwwMzFcdWZmM2YiICsKLSAgICAiXDAzMlx1ZmYzZlwwMzVcdWZmM2ZcMDUzXHVmZjNmXDA1NFx1ZmYzZlwwNTVcdWZmM2ZcMDU2XHVmZjNmXDA1NyIgKwotICAgICJcdWZmM2ZcMDYwXHVmZjNmXDA2MVx1ZmYzZlwwNjJcdWZmM2ZcMDYzXHVmZjNmXDA2NFx1ZmYzZlwwNjVcdWZmM2YiICsKLSAgICAiXDA2Nlx1ZmYzZlwwNjdcdWZmM2ZcMDcxXHVmZjNmXDA3M1x1ZmYzZlwwNzRcdWZmM2ZcMDc1XHVmZjNmXDA3NyIgKwotICAgICJcdWZmM2ZcMTAwXHVmZjNmXDEwMVx1ZmYzZlwxMDJcdWZmM2ZcMTA3XHVmZjNmXDExMFx1ZmYzZlwxMTFcdWZmM2YiICsKLSAgICAiXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMjBcMDA0XHVmZjIwXDAwNVx1ZmYyMFwwMDZcdWZmMjBcMDA3IiArCi0gICAgIlx1ZmYyMFwwMTBcdWZmMjBcMDExXHVmZjIwXDAxMlx1ZmYyMFwwMTNcdWZmMjBcMDE0XHVmZjIwXDAxNVx1ZmYyMCIgKwotICAgICJcMDE2XHVmZjIwXDAxN1x1ZmYyMFwwMjBcdWZmMjBcMDIxXHVmZjIwXDAyMlx1ZmYyMFwwMjNcdWZmMjBcMDI0IiArCi0gICAgIlx1ZmYyMFwwMjVcdWZmMjBcMDMxXHVmZjIwXDAzMlx1ZmYyMFwwMzVcdWZmMjBcMDUzXHVmZjIwXDA1NFx1ZmYyMCIgKwotICAgICJcMDU1XHVmZjIwXDA1Nlx1ZmYyMFwwNTdcdWZmMjBcMDYwXHVmZjIwXDA2MVx1ZmYyMFwwNjJcdWZmMjBcMDYzIiArCi0gICAgIlx1ZmYyMFwwNjRcdWZmMjBcMDY1XHVmZjIwXDA2Nlx1ZmYyMFwwNjdcdWZmMjBcMDcxXHVmZjIwXDA3M1x1ZmYyMCIgKwotICAgICJcMDc0XHVmZjIwXDA3NVx1ZmYyMFwwNzdcdWZmMjBcMTAwXHVmZjIwXDEwMVx1ZmYyMFwxMDJcdWZmMjBcMTA3IiArCi0gICAgIlx1ZmYyMFwxMTBcdWZmMjBcMTExXHVmZjIwXDAwMVwwMDJcMDAwXDEzNlwwMDJcdWZmMThcMDA0XHVmZjE4IiArCi0gICAgIlwwMDVcdWZmMThcMDA2XHVmZjE4XDAwN1x1ZmYxOFwwMTBcdWZmMThcMDExXHVmZjE4XDAxMlx1ZmYxOFwwMTMiICsKLSAgICAiXHVmZjE4XDAxNFx1ZmYxOFwwMTVcdWZmMThcMDE2XHVmZjE4XDAxN1x1ZmYxOFwwMjBcdWZmMThcMDIxXHVmZjE4IiArCi0gICAgIlwwMjJcdWZmMThcMDIzXHVmZjE4XDAyNFx1ZmYxOFwwMjVcdWZmMThcMDMxXHVmZjE4XDAzMlx1ZmYxOFwwMzUiICsKLSAgICAiXHVmZjE4XDA1M1x1ZmYxOFwwNTRcdWZmMThcMDU1XHVmZjE4XDA1Nlx1ZmYxOFwwNTdcdWZmMThcMDYwXHVmZjE4IiArCi0gICAgIlwwNjFcdWZmMThcMDYyXHVmZjE4XDA2M1x1ZmYxOFwwNjRcdWZmMThcMDY1XHVmZjE4XDA2Nlx1ZmYxOFwwNjciICsKLSAgICAiXHVmZjE4XDA3MVx1ZmYxOFwwNzNcdWZmMThcMDc0XHVmZjE4XDA3NVx1ZmYxOFwwNzdcdWZmMThcMTAwXHVmZjE4IiArCi0gICAgIlwxMDFcdWZmMThcMTAyXHVmZjE4XDEwN1x1ZmYxOFwxMTBcdWZmMThcMTExXHVmZjE4XDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMzZcMDAyXHVmZjM3XDAwNFx1ZmYzN1wwMDVcdWZmMzdcMDA2XHVmZjM3XDAwN1x1ZmYzN1wwMTBcdWZmMzciICsKLSAgICAiXDAxMVx1ZmYzN1wwMTJcdWZmMzdcMDEzXHVmZjM3XDAxNFx1ZmYzN1wwMTVcdWZmMzdcMDE2XHVmZjM3XDAxNyIgKwotICAgICJcdWZmMzdcMDIwXHVmZjM3XDAyMVx1ZmYzN1wwMjJcdWZmMzdcMDIzXHVmZjM3XDAyNFx1ZmYzN1wwMjVcdWZmMzciICsKLSAgICAiXDAzMVx1ZmYzN1wwMzJcdWZmMzdcMDM1XHVmZjM3XDA1M1x1ZmYzN1wwNTRcdWZmMzdcMDU1XHVmZjM3XDA1NiIgKwotICAgICJcdWZmMzdcMDU3XHVmZjM3XDA2MFx1ZmYzN1wwNjFcdWZmMzdcMDYyXHVmZjM3XDA2M1x1ZmYzN1wwNjRcdWZmMzciICsKLSAgICAiXDA2NVx1ZmYzN1wwNjZcdWZmMzdcMDY3XHVmZjM3XDA3MVx1ZmYzN1wwNzNcdWZmMzdcMDc0XHVmZjM3XDA3NSIgKwotICAgICJcdWZmMzdcMDc3XHVmZjM3XDEwMFx1ZmYzN1wxMDFcdWZmMzdcMTAyXHVmZjM3XDEwN1x1ZmYzN1wxMTBcdWZmMzciICsKLSAgICAiXDExMVx1ZmYzN1wwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjMzXDAwNFx1ZmYzM1wwMDVcdWZmMzNcMDA2IiArCi0gICAgIlx1ZmYzM1wwMDdcdWZmMzNcMDEwXHVmZjMzXDAxMVx1ZmYzM1wwMTJcdWZmMzNcMDEzXHVmZjMzXDAxNFx1ZmYzMyIgKwotICAgICJcMDE1XHVmZjMzXDAxNlx1ZmYzM1wwMTdcdWZmMzNcMDIwXHVmZjMzXDAyMVx1ZmYzM1wwMjJcdWZmMzNcMDIzIiArCi0gICAgIlx1ZmYzM1wwMjRcdWZmMzNcMDI1XHVmZjMzXDAzMVx1ZmYzM1wwMzJcdWZmMzNcMDM1XHVmZjMzXDA1M1x1ZmYzMyIgKwotICAgICJcMDU0XHVmZjMzXDA1NVx1ZmYzM1wwNTZcdWZmMzNcMDU3XHVmZjMzXDA2MFx1ZmYzM1wwNjFcdWZmMzNcMDYyIiArCi0gICAgIlx1ZmYzM1wwNjNcdWZmMzNcMDY0XHVmZjMzXDA2NVx1ZmYzM1wwNjZcdWZmMzNcMDY3XHVmZjMzXDA3MVx1ZmYzMyIgKwotICAgICJcMDczXHVmZjMzXDA3NFx1ZmYzM1wwNzVcdWZmMzNcMDc3XHVmZjMzXDEwMFx1ZmYzM1wxMDFcdWZmMzNcMTAyIiArCi0gICAgIlx1ZmYzM1wxMDdcdWZmMzNcMTEwXHVmZjMzXDExMVx1ZmYzM1wwMDFcMDAyXDAwMFwxMzZcMDAyXHVmZjQzIiArCi0gICAgIlwwMDRcdWZmNDNcMDA1XHVmZjQzXDAwNlx1ZmY0M1wwMDdcdWZmNDNcMDEwXHVmZjQzXDAxMVx1ZmY0M1wwMTIiICsKLSAgICAiXHVmZjQzXDAxM1x1ZmY0M1wwMTRcdWZmNDNcMDE1XHVmZjQzXDAxNlx1ZmY0M1wwMTdcdWZmNDNcMDIwXHVmZjQzIiArCi0gICAgIlwwMjFcdWZmNDNcMDIyXHVmZjQzXDAyM1x1ZmY0M1wwMjRcdWZmNDNcMDI1XHVmZjQzXDAzMVx1ZmY0M1wwMzIiICsKLSAgICAiXHVmZjQzXDAzNVx1ZmY0M1wwNTNcdWZmNDNcMDU0XHVmZjQzXDA1NVx1ZmY0M1wwNTZcdWZmNDNcMDU3XHVmZjQzIiArCi0gICAgIlwwNjBcdWZmNDNcMDYxXHVmZjQzXDA2Mlx1ZmY0M1wwNjNcdWZmNDNcMDY0XHVmZjQzXDA2NVx1ZmY0M1wwNjYiICsKLSAgICAiXHVmZjQzXDA2N1x1ZmY0M1wwNzFcdWZmNDNcMDczXHVmZjQzXDA3NFx1ZmY0M1wwNzVcdWZmNDNcMDc3XHVmZjQzIiArCi0gICAgIlwxMDBcdWZmNDNcMTAxXHVmZjQzXDEwMlx1ZmY0M1wxMDdcdWZmNDNcMTEwXHVmZjQzXDExMVx1ZmY0M1wwMDEiICsKLSAgICAiXDAwMlwwMDBcMTM2XDAwMlx1ZmYxMVwwMDRcdWZmMTFcMDA1XHVmZjExXDAwNlx1ZmYxMVwwMDdcdWZmMTEiICsKLSAgICAiXDAxMFx1ZmYxMVwwMTFcdWZmMTFcMDEyXHVmZjExXDAxM1x1ZmYxMVwwMTRcdWZmMTFcMDE1XHVmZjExXDAxNiIgKwotICAgICJcdWZmMTFcMDE3XHVmZjExXDAyMFx1ZmYxMVwwMjFcdWZmMTFcMDIyXHVmZjExXDAyM1x1ZmYxMVwwMjRcdWZmMTEiICsKLSAgICAiXDAyNVx1ZmYxMVwwMzFcdWZmMTFcMDMyXHVmZjExXDAzNVx1ZmYxMVwwNTNcdWZmMTFcMDU0XHVmZjExXDA1NSIgKwotICAgICJcdWZmMTFcMDU2XHVmZjExXDA1N1x1ZmYxMVwwNjBcdWZmMTFcMDYxXHVmZjExXDA2Mlx1ZmYxMVwwNjNcdWZmMTEiICsKLSAgICAiXDA2NFx1ZmYxMVwwNjVcdWZmMTFcMDY2XHVmZjExXDA2N1x1ZmYxMVwwNzFcdWZmMTFcMDczXHVmZjExXDA3NCIgKwotICAgICJcdWZmMTFcMDc1XHVmZjExXDA3N1x1ZmYxMVwxMDBcdWZmMTFcMTAxXHVmZjExXDEwMlx1ZmYxMVwxMDdcdWZmMTEiICsKLSAgICAiXDExMFx1ZmYxMVwxMTFcdWZmMTFcMDAxXDAwMlwwMDBcMTM2XDAwMlx1ZmYxY1wwMDRcdWZmMWNcMDA1IiArCi0gICAgIlx1ZmYxY1wwMDZcdWZmMWNcMDA3XHVmZjFjXDAxMFx1ZmYxY1wwMTFcdWZmMWNcMDEyXHVmZjFjXDAxM1x1ZmYxYyIgKwotICAgICJcMDE0XHVmZjFjXDAxNVx1ZmYxY1wwMTZcdWZmMWNcMDE3XHVmZjFjXDAyMFx1ZmYxY1wwMjFcdWZmMWNcMDIyIiArCi0gICAgIlx1ZmYxY1wwMjNcdWZmMWNcMDI0XHVmZjFjXDAyNVx1ZmYxY1wwMzFcdWZmMWNcMDMyXHVmZjFjXDAzNVx1ZmYxYyIgKwotICAgICJcMDUzXHVmZjFjXDA1NFx1ZmYxY1wwNTVcdWZmMWNcMDU2XHVmZjFjXDA1N1x1ZmYxY1wwNjBcdWZmMWNcMDYxIiArCi0gICAgIlx1ZmYxY1wwNjJcdWZmMWNcMDYzXHVmZjFjXDA2NFx1ZmYxY1wwNjVcdWZmMWNcMDY2XHVmZjFjXDA2N1x1ZmYxYyIgKwotICAgICJcMDcxXHVmZjFjXDA3M1x1ZmYxY1wwNzRcdWZmMWNcMDc1XHVmZjFjXDA3N1x1ZmYxY1wxMDBcdWZmMWNcMTAxIiArCi0gICAgIlx1ZmYxY1wxMDJcdWZmMWNcMTA3XHVmZjFjXDExMFx1ZmYxY1wxMTFcdWZmMWNcMDAxXDAwMlwwMDBcMTMwIiArCi0gICAgIlwwMDJcdWZmNGVcMDA0XHVmZjRlXDAwNVx1ZmY0ZVwwMDdcdWZmNGVcMDEwXHVmZjRlXDAxMVx1ZmY0ZVwwMTIiICsKLSAgICAiXHVmZjRlXDAxM1x1ZmY0ZVwwMTRcdWZmNGVcMDE1XHVmZjRlXDAxNlx1ZmY0ZVwwMTdcdWZmNGVcMDIwXHVmZjRlIiArCi0gICAgIlwwMjFcdWZmNGVcMDIyXHVmZjRlXDAyM1x1ZmY0ZVwwMjRcdWZmNGVcMDI1XHVmZjRlXDAzMlx1ZmY0ZVwwNTMiICsKLSAgICAiXHVmZjRlXDA1NFx1ZmY0ZVwwNTVcdWZmNGVcMDU2XHVmZjRlXDA1N1x1ZmY0ZVwwNjBcdWZmNGVcMDYxXHVmZjRlIiArCi0gICAgIlwwNjJcdWZmNGVcMDYzXHVmZjRlXDA2NFx1ZmY0ZVwwNjVcdWZmNGVcMDY2XHVmZjRlXDA2N1x1ZmY0ZVwwNzEiICsKLSAgICAiXHVmZjRlXDA3M1x1ZmY0ZVwwNzRcdWZmNGVcMDc1XHVmZjRlXDA3N1x1ZmY0ZVwxMDBcdWZmNGVcMTAxXHVmZjRlIiArCi0gICAgIlwxMDJcdWZmNGVcMTA3XHVmZjRlXDExMFx1ZmY0ZVwxMTFcdWZmNGVcMDAxXDAwMlwwMDBcMjE2XDAwNiIgKwotICAgICJcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3IiArCi0gICAgIlwwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDEiICsKLSAgICAiXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNCIgKwotICAgICJcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2IiArCi0gICAgIlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTEiICsKLSAgICAiXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3MyIgKwotICAgICJcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2IiArCi0gICAgIlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTAiICsKLSAgICAiXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NiIgKwotICAgICJcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1IiArCi0gICAgIlwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMDYiICsKLSAgICAiXDAzMlx1ZmZmN1wxMDBcdWZmZjdcMDAxXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDAiICsKLSAgICAiXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMCIgKwotICAgICJcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1IiArCi0gICAgIlwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzEiICsKLSAgICAiXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MiIgKwotICAgICJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2IiArCi0gICAgIlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDciICsKLSAgICAiXDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMiIgKwotICAgICJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0IiArCi0gICAgIlwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwxMzJcMDAyXHVmZjRjXDAwNFx1ZmY0Y1wwMDVcdWZmNGMiICsKLSAgICAiXDAwN1x1ZmY0Y1wwMTBcdWZmNGNcMDExXHVmZjRjXDAxMlx1ZmY0Y1wwMTNcdWZmNGNcMDE0XHVmZjRjXDAxNSIgKwotICAgICJcdWZmNGNcMDE2XHVmZjRjXDAxN1x1ZmY0Y1wwMjBcdWZmNGNcMDIxXHVmZjRjXDAyMlx1ZmY0Y1wwMjNcdWZmNGMiICsKLSAgICAiXDAyNFx1ZmY0Y1wwMjVcdWZmNGNcMDMyXHVmZjRjXDAzNVx1ZmY0Y1wwNTNcdWZmNGNcMDU0XHVmZjRjXDA1NSIgKwotICAgICJcdWZmNGNcMDU2XHVmZjRjXDA1N1x1ZmY0Y1wwNjBcdWZmNGNcMDYxXHVmZjRjXDA2Mlx1ZmY0Y1wwNjNcdWZmNGMiICsKLSAgICAiXDA2NFx1ZmY0Y1wwNjVcdWZmNGNcMDY2XHVmZjRjXDA2N1x1ZmY0Y1wwNzFcdWZmNGNcMDczXHVmZjRjXDA3NCIgKwotICAgICJcdWZmNGNcMDc1XHVmZjRjXDA3N1x1ZmY0Y1wxMDBcdWZmNGNcMTAxXHVmZjRjXDEwMlx1ZmY0Y1wxMDdcdWZmNGMiICsKLSAgICAiXDExMFx1ZmY0Y1wxMTFcdWZmNGNcMDAxXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDAiICsKLSAgICAiXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMCIgKwotICAgICJcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1IiArCi0gICAgIlwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzEiICsKLSAgICAiXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MiIgKwotICAgICJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2IiArCi0gICAgIlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDciICsKLSAgICAiXDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMiIgKwotICAgICJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0IiArCi0gICAgIlwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwwMDZcMDMyXDMzM1wxMDFcMzM0XDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDc3XDMzMVwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMSIgKwotICAgICJcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwIiArCi0gICAgIlwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDMiICsKLSAgICAiXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NSIgKwotICAgICJcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwIiArCi0gICAgIlwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDEiICsKLSAgICAiXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NSIgKwotICAgICJcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0IiArCi0gICAgIlwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTIiICsKLSAgICAiXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0NyIgKwotICAgICJcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3IiArCi0gICAgIlwxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDAwNlwwMzJcdWZmZjRcMTAxXHVmZmY0IiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDMzXDMzNlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTAiICsKLSAgICAiXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNSIgKwotICAgICJcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyIiArCi0gICAgIlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTciICsKLSAgICAiXDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1NyIgKwotICAgICJcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxIiArCi0gICAgIlwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzQiICsKLSAgICAiXDE2MVwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMiIgKwotICAgICJcMTAzXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExIiArCi0gICAgIlwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzMiICsKLSAgICAiXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNiIgKwotICAgICJcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDAyMFwwMDJcdWZmZjYiICsKLSAgICAiXDAwNVx1ZmZmNlwwMDdcdWZmZjZcMDMyXHVmZmY2XDEwMFx1ZmZmNlwxMDFcdWZmZjZcMTA3XHVmZmY2XDAwMSIgKwotICAgICJcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxIiArCi0gICAgIlwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTEiICsKLSAgICAiXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxNyIgKwotICAgICJcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2IiArCi0gICAgIlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzMiICsKLSAgICAiXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwMyIgKwotICAgICJcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1IiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjAiICsKLSAgICAiXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNFwwNzdcMzQwXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExIiArCi0gICAgIlwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDAiICsKLSAgICAiXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0MyIgKwotICAgICJcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1IiArCi0gICAgIlwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjAiICsKLSAgICAiXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMSIgKwotICAgICJcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1IiArCi0gICAgIlwxNDNcMDc2XDExNVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjQiICsKLSAgICAiXDEwNFwwNTNcMTA1XDE1NVwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMiIgKwotICAgICJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3IiArCi0gICAgIlwxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjciICsKLSAgICAiXDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMDA2XDAzMlx1ZmZmM1wxMDFcdWZmZjMiICsKLSAgICAiXDAwMVwwMDJcMDAwXDE2NFwwMTJcdWZmYjBcMDM2XHVmZmIwXDAzN1x1ZmZiMFwwNDBcdWZmYjBcMDQxIiArCi0gICAgIlx1ZmZiMFwwNDJcdWZmYjBcMDQzXHVmZmIwXDA0NFx1ZmZiMFwwNDVcdWZmYjBcMDQ2XHVmZmIwXDA0N1x1ZmZiMCIgKwotICAgICJcMDUwXHVmZmIwXDA1MVx1ZmZiMFwwNTJcdWZmYjBcMDUzXHVmZmIwXDA1NFx1ZmZiMFwwNTVcdWZmYjBcMDU2IiArCi0gICAgIlx1ZmZiMFwwNTdcdWZmYjBcMDYwXHVmZmIwXDA2MVx1ZmZiMFwwNjJcdWZmYjBcMDYzXHVmZmIwXDA2NFx1ZmZiMCIgKwotICAgICJcMDY1XHVmZmIwXDA2Nlx1ZmZiMFwwNjdcdWZmYjBcMDcwXHVmZmIwXDA3MVx1ZmZiMFwwNzJcdWZmYjBcMDczIiArCi0gICAgIlx1ZmZiMFwwNzRcdWZmYjBcMDc1XHVmZmIwXDA3Nlx1ZmZiMFwwNzdcdWZmYjBcMTAwXHVmZmIwXDEwMVx1ZmZiMCIgKwotICAgICJcMTAyXHVmZmIwXDEwM1x1ZmZiMFwxMDRcdWZmYjBcMTA1XHVmZmIwXDEwNlx1ZmZiMFwxMDdcdWZmYjBcMTEwIiArCi0gICAgIlx1ZmZiMFwxMTFcdWZmYjBcMTEyXHVmZmIwXDExM1x1ZmZiMFwxMTRcdWZmYjBcMTE1XHVmZmIwXDExNlx1ZmZiMCIgKwotICAgICJcMTE3XHVmZmIwXDEyMFx1ZmZiMFwxMjFcdWZmYjBcMTIyXHVmZmIwXDEyM1x1ZmZiMFwxMjRcdWZmYjBcMTMxIiArCi0gICAgIlx1ZmZiMFwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNiIgKwotICAgICJcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2IiArCi0gICAgIlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTIiICsKLSAgICAiXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1MyIgKwotICAgICJcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwIiArCi0gICAgIlwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzAiICsKLSAgICAiXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDExNSIgKwotICAgICJcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0XDEwNFwwNTNcMTA1IiArCi0gICAgIlwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzQiICsKLSAgICAiXDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMiIgKwotICAgICJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0IiArCi0gICAgIlwxMzFcMTMyXDAwMVwwMDJcMDAwXDAwNlwwMDdcMzQ1XDAzMlwyMjRcMDAxXDAwMlwwMDAiICsKLSAgICAiXDAwNFwxMDZcMzQ2XDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NCIgKwotICAgICJcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0IiArCi0gICAgIlwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDYiICsKLSAgICAiXDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MiIgKwotICAgICJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3IiArCi0gICAgIlwwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjciICsKLSAgICAiXDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0MyIgKwotICAgICJcMDc2XDExNVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0IiArCi0gICAgIlwwNTNcMTA1XDE1NVwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDEiICsKLSAgICAiXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMSIgKwotICAgICJcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzIiArCi0gICAgIlwxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMDA0XDEwN1wzNTBcMDAxXDAwMlwwMDAiICsKLSAgICAiXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMCIgKwotICAgICJcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwIiArCi0gICAgIlwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTQiICsKLSAgICAiXDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NSIgKwotICAgICJcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2IiArCi0gICAgIlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzIiICsKLSAgICAiXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMTE1XDA3N1wxNTBcMTAwXDEyMSIgKwotICAgICJcMTAxXDE3NlwxMDJcMjAyXDEwM1wxNjRcMTA0XDA1M1wxMDVcMTU1XDEwNlwwNjBcMTA3IiArCi0gICAgIlwxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjEiICsKLSAgICAiXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNCIgKwotICAgICJcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDIwXDAwMlx1ZmZmMlwwMDVcdWZmZjJcMDA3XHVmZmYyXDAzMlx1ZmZmMlwxMDBcdWZmZjJcMTAxIiArCi0gICAgIlx1ZmZmMlwxMDdcdWZmZjJcMDAxXDAwMlwwMDBcMTY0XDAxMlx1ZmZhZlwwMzZcdWZmYWZcMDM3XHVmZmFmIiArCi0gICAgIlwwNDBcdWZmYWZcMDQxXHVmZmFmXDA0Mlx1ZmZhZlwwNDNcdWZmYWZcMDQ0XHVmZmFmXDA0NVx1ZmZhZlwwNDYiICsKLSAgICAiXHVmZmFmXDA0N1x1ZmZhZlwwNTBcdWZmYWZcMDUxXHVmZmFmXDA1Mlx1ZmZhZlwwNTNcdWZmYWZcMDU0XHVmZmFmIiArCi0gICAgIlwwNTVcdWZmYWZcMDU2XHVmZmFmXDA1N1x1ZmZhZlwwNjBcdWZmYWZcMDYxXHVmZmFmXDA2Mlx1ZmZhZlwwNjMiICsKLSAgICAiXHVmZmFmXDA2NFx1ZmZhZlwwNjVcdWZmYWZcMDY2XHVmZmFmXDA2N1x1ZmZhZlwwNzBcdWZmYWZcMDcxXHVmZmFmIiArCi0gICAgIlwwNzJcdWZmYWZcMDczXHVmZmFmXDA3NFx1ZmZhZlwwNzVcdWZmYWZcMDc2XHVmZmFmXDA3N1x1ZmZhZlwxMDAiICsKLSAgICAiXHVmZmFmXDEwMVx1ZmZhZlwxMDJcdWZmYWZcMTAzXHVmZmFmXDEwNFx1ZmZhZlwxMDVcdWZmYWZcMTA2XHVmZmFmIiArCi0gICAgIlwxMDdcdWZmYWZcMTEwXHVmZmFmXDExMVx1ZmZhZlwxMTJcdWZmYWZcMTEzXHVmZmFmXDExNFx1ZmZhZlwxMTUiICsKLSAgICAiXHVmZmFmXDExNlx1ZmZhZlwxMTdcdWZmYWZcMTIwXHVmZmFmXDEyMVx1ZmZhZlwxMjJcdWZmYWZcMTIzXHVmZmFmIiArCi0gICAgIlwxMjRcdWZmYWZcMTMxXHVmZmFmXDAwMVwwMDJcMDAwXDE2NlwwMDdcMzU1XDAxMlwzNTRcMDM2IiArCi0gICAgIlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTEiICsKLSAgICAiXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1MyIgKwotICAgICJcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwIiArCi0gICAgIlwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzAiICsKLSAgICAiXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NSIgKwotICAgICJcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1IiArCi0gICAgIlwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzQiICsKLSAgICAiXDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMiIgKwotICAgICJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDAwNlwwMDdcdWZmNjAiICsKLSAgICAiXDAzMlx1ZmY2MFwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjY0XDAwNFx1ZmY2NFwwMDVcdWZmNjRcMDA3IiArCi0gICAgIlx1ZmY2NFwwMTBcdWZmNjRcMDExXHVmZjY0XDAxMlx1ZmY2NFwwMTNcdWZmNjRcMDE0XHVmZjY0XDAxNVx1ZmY2NCIgKwotICAgICJcMDE2XHVmZjY0XDAxN1x1ZmY2NFwwMjBcdWZmNjRcMDIxXHVmZjY0XDAyMlx1ZmY2NFwwMjNcdWZmNjRcMDI0IiArCi0gICAgIlx1ZmY2NFwwMjVcdWZmNjRcMDMyXHVmZjY0XDAzNVx1ZmY2NFwwNTNcdWZmNjRcMDU0XHVmZjY0XDA1NVx1ZmY2NCIgKwotICAgICJcMDU2XHVmZjY0XDA1N1x1ZmY2NFwwNjBcdWZmNjRcMDYxXHVmZjY0XDA2Mlx1ZmY2NFwwNjNcdWZmNjRcMDY0IiArCi0gICAgIlx1ZmY2NFwwNjVcdWZmNjRcMDY2XHVmZjY0XDA2N1x1ZmY2NFwwNzFcdWZmNjRcMDczXHVmZjY0XDA3NFx1ZmY2NCIgKwotICAgICJcMDc1XHVmZjY0XDEwMFx1ZmY2NFwxMDFcdWZmNjRcMTAyXHVmZjY0XDEwN1x1ZmY2NFwxMTBcdWZmNjRcMTExIiArCi0gICAgIlx1ZmY2NFwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjYxXDAzMlx1ZmY2MVwwMDFcMDAyXDAwMFwwMDYiICsKLSAgICAiXDAwN1wzNjJcMDMyXDM2MVwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjU1XDAzMlx1ZmY1NVwwMDEiICsKLSAgICAiXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MSIgKwotICAgICJcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxIiArCi0gICAgIlwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTciICsKLSAgICAiXDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NiIgKwotICAgICJcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzIiArCi0gICAgIlwwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDMiICsKLSAgICAiXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NSIgKwotICAgICJcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwIiArCi0gICAgIlwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMzBcMDAyXHVmZjYzXDAwNFx1ZmY2M1wwMDVcdWZmNjNcMDA3XHVmZjYzXDAxMFx1ZmY2M1wwMTEiICsKLSAgICAiXHVmZjYzXDAxMlx1ZmY2M1wwMTNcdWZmNjNcMDE0XHVmZjYzXDAxNVx1ZmY2M1wwMTZcdWZmNjNcMDE3XHVmZjYzIiArCi0gICAgIlwwMjBcdWZmNjNcMDIxXHVmZjYzXDAyMlx1ZmY2M1wwMjNcdWZmNjNcMDI0XHVmZjYzXDAyNVx1ZmY2M1wwMzIiICsKLSAgICAiXHVmZjYzXDAzNVx1ZmY2M1wwNTNcdWZmNjNcMDU0XHVmZjYzXDA1NVx1ZmY2M1wwNTZcdWZmNjNcMDU3XHVmZjYzIiArCi0gICAgIlwwNjBcdWZmNjNcMDYxXHVmZjYzXDA2Mlx1ZmY2M1wwNjNcdWZmNjNcMDY0XHVmZjYzXDA2NVx1ZmY2M1wwNjYiICsKLSAgICAiXHVmZjYzXDA2N1x1ZmY2M1wwNzFcdWZmNjNcMDczXHVmZjYzXDA3NFx1ZmY2M1wwNzVcdWZmNjNcMTAwXHVmZjYzIiArCi0gICAgIlwxMDFcdWZmNjNcMTAyXHVmZjYzXDEwN1x1ZmY2M1wxMTBcdWZmNjNcMTExXHVmZjYzXDAwMVwwMDJcMDAwIiArCi0gICAgIlwwMDRcMDA3XDM2NVwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjUzXDAzNVx1ZmY1M1wwMDFcMDAyIiArCi0gICAgIlwwMDBcMTMwXDAwMlx1ZmY2MlwwMDRcdWZmNjJcMDA1XHVmZjYyXDAwN1x1ZmY2MlwwMTBcdWZmNjJcMDExIiArCi0gICAgIlx1ZmY2MlwwMTJcdWZmNjJcMDEzXHVmZjYyXDAxNFx1ZmY2MlwwMTVcdWZmNjJcMDE2XHVmZjYyXDAxN1x1ZmY2MiIgKwotICAgICJcMDIwXHVmZjYyXDAyMVx1ZmY2MlwwMjJcdWZmNjJcMDIzXHVmZjYyXDAyNFx1ZmY2MlwwMjVcdWZmNjJcMDMyIiArCi0gICAgIlx1ZmY2MlwwMzVcdWZmNjJcMDUzXHVmZjYyXDA1NFx1ZmY2MlwwNTVcdWZmNjJcMDU2XHVmZjYyXDA1N1x1ZmY2MiIgKwotICAgICJcMDYwXHVmZjYyXDA2MVx1ZmY2MlwwNjJcdWZmNjJcMDYzXHVmZjYyXDA2NFx1ZmY2MlwwNjVcdWZmNjJcMDY2IiArCi0gICAgIlx1ZmY2MlwwNjdcdWZmNjJcMDcxXHVmZjYyXDA3M1x1ZmY2MlwwNzRcdWZmNjJcMDc1XHVmZjYyXDEwMFx1ZmY2MiIgKwotICAgICJcMTAxXHVmZjYyXDEwMlx1ZmY2MlwxMDdcdWZmNjJcMTEwXHVmZjYyXDExMVx1ZmY2MlwwMDFcMDAyXDAwMCIgKwotICAgICJcMTY2XDAwN1wzNzFcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxIiArCi0gICAgIlwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTEiICsKLSAgICAiXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxNyIgKwotICAgICJcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2IiArCi0gICAgIlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzMiICsKLSAgICAiXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwMyIgKwotICAgICJcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1IiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjAiICsKLSAgICAiXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMFwxNzRcMTMxXDI3MCIgKwotICAgICJcMDAxXDAwMlwwMDBcMDA0XDAwN1wzNzNcMDAxXDAwMlwwMDBcMDA0XDAwN1wzNzJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDEzMFwwMDJcdWZmNjdcMDA0XHVmZjY3XDAwNVx1ZmY2N1wwMDdcdWZmNjdcMDEwXHVmZjY3IiArCi0gICAgIlwwMTFcdWZmNjdcMDEyXHVmZjY3XDAxM1x1ZmY2N1wwMTRcdWZmNjdcMDE1XHVmZjY3XDAxNlx1ZmY2N1wwMTciICsKLSAgICAiXHVmZjY3XDAyMFx1ZmY2N1wwMjFcdWZmNjdcMDIyXHVmZjY3XDAyM1x1ZmY2N1wwMjRcdWZmNjdcMDI1XHVmZjY3IiArCi0gICAgIlwwMzJcdWZmNjdcMDM1XHVmZjY3XDA1M1x1ZmY2N1wwNTRcdWZmNjdcMDU1XHVmZjY3XDA1Nlx1ZmY2N1wwNTciICsKLSAgICAiXHVmZjY3XDA2MFx1ZmY2N1wwNjFcdWZmNjdcMDYyXHVmZjY3XDA2M1x1ZmY2N1wwNjRcdWZmNjdcMDY1XHVmZjY3IiArCi0gICAgIlwwNjZcdWZmNjdcMDY3XHVmZjY3XDA3MVx1ZmY2N1wwNzNcdWZmNjdcMDc0XHVmZjY3XDA3NVx1ZmY2N1wxMDAiICsKLSAgICAiXHVmZjY3XDEwMVx1ZmY2N1wxMDJcdWZmNjdcMTA3XHVmZjY3XDExMFx1ZmY2N1wxMTFcdWZmNjdcMDAxXDAwMiIgKwotICAgICJcMDAwXDEzMFwwMDJcdWZmNjVcMDA0XHVmZjY1XDAwNVx1ZmY2NVwwMDdcdWZmNjVcMDEwXHVmZjY1XDAxMSIgKwotICAgICJcdWZmNjVcMDEyXHVmZjY1XDAxM1x1ZmY2NVwwMTRcdWZmNjVcMDE1XHVmZjY1XDAxNlx1ZmY2NVwwMTdcdWZmNjUiICsKLSAgICAiXDAyMFx1ZmY2NVwwMjFcdWZmNjVcMDIyXHVmZjY1XDAyM1x1ZmY2NVwwMjRcdWZmNjVcMDI1XHVmZjY1XDAzMiIgKwotICAgICJcdWZmNjVcMDM1XHVmZjY1XDA1M1x1ZmY2NVwwNTRcdWZmNjVcMDU1XHVmZjY1XDA1Nlx1ZmY2NVwwNTdcdWZmNjUiICsKLSAgICAiXDA2MFx1ZmY2NVwwNjFcdWZmNjVcMDYyXHVmZjY1XDA2M1x1ZmY2NVwwNjRcdWZmNjVcMDY1XHVmZjY1XDA2NiIgKwotICAgICJcdWZmNjVcMDY3XHVmZjY1XDA3MVx1ZmY2NVwwNzNcdWZmNjVcMDc0XHVmZjY1XDA3NVx1ZmY2NVwxMDBcdWZmNjUiICsKLSAgICAiXDEwMVx1ZmY2NVwxMDJcdWZmNjVcMTA3XHVmZjY1XDExMFx1ZmY2NVwxMTFcdWZmNjVcMDAxXDAwMlwwMDAiICsKLSAgICAiXDEzMFwwMDJcdWZmNjZcMDA0XHVmZjY2XDAwNVx1ZmY2NlwwMDdcdWZmNjZcMDEwXHVmZjY2XDAxMVx1ZmY2NiIgKwotICAgICJcMDEyXHVmZjY2XDAxM1x1ZmY2NlwwMTRcdWZmNjZcMDE1XHVmZjY2XDAxNlx1ZmY2NlwwMTdcdWZmNjZcMDIwIiArCi0gICAgIlx1ZmY2NlwwMjFcdWZmNjZcMDIyXHVmZjY2XDAyM1x1ZmY2NlwwMjRcdWZmNjZcMDI1XHVmZjY2XDAzMlx1ZmY2NiIgKwotICAgICJcMDM1XHVmZjY2XDA1M1x1ZmY2NlwwNTRcdWZmNjZcMDU1XHVmZjY2XDA1Nlx1ZmY2NlwwNTdcdWZmNjZcMDYwIiArCi0gICAgIlx1ZmY2NlwwNjFcdWZmNjZcMDYyXHVmZjY2XDA2M1x1ZmY2NlwwNjRcdWZmNjZcMDY1XHVmZjY2XDA2Nlx1ZmY2NiIgKwotICAgICJcMDY3XHVmZjY2XDA3MVx1ZmY2NlwwNzNcdWZmNjZcMDc0XHVmZjY2XDA3NVx1ZmY2NlwxMDBcdWZmNjZcMTAxIiArCi0gICAgIlx1ZmY2NlwxMDJcdWZmNjZcMTA3XHVmZjY2XDExMFx1ZmY2NlwxMTFcdWZmNjZcMDAxXDAwMlwwMDBcMTIwIiArCi0gICAgIlwwMDJcdWZmZDBcMDA1XHVmZmQwXDAwN1x1ZmZkMFwwMTBcdWZmZDBcMDExXHVmZmQwXDAxMlx1ZmZkMFwwMTMiICsKLSAgICAiXHVmZmQwXDAxNFx1ZmZkMFwwMTVcdWZmZDBcMDE2XHVmZmQwXDAxN1x1ZmZkMFwwMjBcdWZmZDBcMDIxXHVmZmQwIiArCi0gICAgIlwwMjJcdWZmZDBcMDIzXHVmZmQwXDAzMlx1ZmZkMFwwNTNcdWZmZDBcMDU0XHVmZmQwXDA1NVx1ZmZkMFwwNTYiICsKLSAgICAiXHVmZmQwXDA1N1x1ZmZkMFwwNjBcdWZmZDBcMDYxXHVmZmQwXDA2Mlx1ZmZkMFwwNjNcdWZmZDBcMDY0XHVmZmQwIiArCi0gICAgIlwwNjVcdWZmZDBcMDY2XHVmZmQwXDA2N1x1ZmZkMFwwNzFcdWZmZDBcMDczXHVmZmQwXDA3NFx1ZmZkMFwwNzUiICsKLSAgICAiXHVmZmQwXDEwMFx1ZmZkMFwxMDFcdWZmZDBcMTAyXHVmZmQwXDEwN1x1ZmZkMFwxMTBcdWZmZDBcMTExXHVmZmQwIiArCi0gICAgIlwwMDFcMDAyXDAwMFwyMjBcMDA2XDExMFwwMDdcdTAxMDBcMDEwXDEwNVwwMTFcMTQ0XDAxMiIgKwotICAgICJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2IiArCi0gICAgIlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDQiICsKLSAgICAiXDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2NyIgKwotICAgICJcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxIiArCi0gICAgIlwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTUiICsKLSAgICAiXDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NiIgKwotICAgICJcMTE1XDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDE2NFwxMDRcMDUzIiArCi0gICAgIlwxMDVcMTU1XDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTMiICsKLSAgICAiXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NCIgKwotICAgICJcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwIiArCi0gICAgIlwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwwMDZcMDA3XHUwMTAyXDAzMlx1MDEwMVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMDA2XDAwN1x1ZmY4NFwwMzJcdWZmODRcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY4NlwwMDQiICsKLSAgICAiXHVmZjg2XDAwNVx1ZmY4NlwwMDdcdWZmODZcMDEwXHVmZjg2XDAxMVx1ZmY4NlwwMTJcdWZmODZcMDEzXHVmZjg2IiArCi0gICAgIlwwMTRcdWZmODZcMDE1XHVmZjg2XDAxNlx1ZmY4NlwwMTdcdWZmODZcMDIwXHVmZjg2XDAyMVx1ZmY4NlwwMjIiICsKLSAgICAiXHVmZjg2XDAyM1x1ZmY4NlwwMjRcdWZmODZcMDI1XHVmZjg2XDAzMlx1ZmY4NlwwNTNcdWZmODZcMDU0XHVmZjg2IiArCi0gICAgIlwwNTVcdWZmODZcMDU2XHVmZjg2XDA1N1x1ZmY4NlwwNjBcdWZmODZcMDYxXHVmZjg2XDA2Mlx1ZmY4NlwwNjMiICsKLSAgICAiXHVmZjg2XDA2NFx1ZmY4NlwwNjVcdWZmODZcMDY2XHVmZjg2XDA2N1x1ZmY4NlwwNzFcdWZmODZcMDczXHVmZjg2IiArCi0gICAgIlwwNzRcdWZmODZcMDc1XHVmZjg2XDEwMFx1ZmY4NlwxMDFcdWZmODZcMTAyXHVmZjg2XDEwN1x1ZmY4NlwxMTAiICsKLSAgICAiXHVmZjg2XDExMVx1ZmY4NlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDQiICsKLSAgICAiXDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNCIgKwotICAgICJcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2IiArCi0gICAgIlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTIiICsKLSAgICAiXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxNyIgKwotICAgICJcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3IiArCi0gICAgIlwwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDMiICsKLSAgICAiXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMTY0XDEwNCIgKwotICAgICJcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxIiArCi0gICAgIlwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjEiICsKLSAgICAiXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExMyIgKwotICAgICJcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmODVcMDA0XHVmZjg1XDAwNSIgKwotICAgICJcdWZmODVcMDA3XHVmZjg1XDAxMFx1ZmY4NVwwMTFcdWZmODVcMDEyXHVmZjg1XDAxM1x1ZmY4NVwwMTRcdWZmODUiICsKLSAgICAiXDAxNVx1ZmY4NVwwMTZcdWZmODVcMDE3XHVmZjg1XDAyMFx1ZmY4NVwwMjFcdWZmODVcMDIyXHVmZjg1XDAyMyIgKwotICAgICJcdWZmODVcMDI0XHVmZjg1XDAyNVx1ZmY4NVwwMzJcdWZmODVcMDUzXHVmZjg1XDA1NFx1ZmY4NVwwNTVcdWZmODUiICsKLSAgICAiXDA1Nlx1ZmY4NVwwNTdcdWZmODVcMDYwXHVmZjg1XDA2MVx1ZmY4NVwwNjJcdWZmODVcMDYzXHVmZjg1XDA2NCIgKwotICAgICJcdWZmODVcMDY1XHVmZjg1XDA2Nlx1ZmY4NVwwNjdcdWZmODVcMDcxXHVmZjg1XDA3M1x1ZmY4NVwwNzRcdWZmODUiICsKLSAgICAiXDA3NVx1ZmY4NVwxMDBcdWZmODVcMTAxXHVmZjg1XDEwMlx1ZmY4NVwxMDdcdWZmODVcMTEwXHVmZjg1XDExMSIgKwotICAgICJcdWZmODVcMDAxXDAwMlwwMDBcMDA2XDAwN1x1ZmY4M1wwMzJcdWZmODNcMDAxXDAwMlwwMDBcMjA2IiArCi0gICAgIlwwMDZcMTEwXDAxMlwxMTZcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzYiICsKLSAgICAiXDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMiIgKwotICAgICJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzIiArCi0gICAgIlwwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjAiICsKLSAgICAiXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MCIgKwotICAgICJcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExIiArCi0gICAgIlwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDUiICsKLSAgICAiXDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNCIgKwotICAgICJcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyIiArCi0gICAgIlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzQiICsKLSAgICAiXDEzMVwxMzJcMDAxXDAwMlwwMDBcMjA2XDAwNlwxMTBcMDEyXDExNlwwMjdcMDc3XDAzMCIgKwotICAgICJcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0IiArCi0gICAgIlwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTAiICsKLSAgICAiXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MiIgKwotICAgICJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1IiArCi0gICAgIlwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDIiICsKLSAgICAiXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMiIgKwotICAgICJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwIiArCi0gICAgIlwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTciICsKLSAgICAiXDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MCIgKwotICAgICJcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwxMjRcMDAyIiArCi0gICAgIlx1ZmZiOFwwMDVcdWZmYjhcMDA3XHVmZmI4XDAxMFx1ZmZiOFwwMTFcdWZmYjhcMDEyXHVmZmI4XDAxM1x1ZmZiOCIgKwotICAgICJcMDE0XHVmZmI4XDAxNVx1ZmZiOFwwMTZcdWZmYjhcMDE3XHVmZmI4XDAyMFx1ZmZiOFwwMjFcdWZmYjhcMDIyIiArCi0gICAgIlx1ZmZiOFwwMjNcdWZmYjhcMDI0XHVmZmI4XDAyNVx1ZmZiOFwwMzJcdWZmYjhcMDUzXHVmZmI4XDA1NFx1ZmZiOCIgKwotICAgICJcMDU1XHVmZmI4XDA1Nlx1ZmZiOFwwNTdcdWZmYjhcMDYwXHVmZmI4XDA2MVx1ZmZiOFwwNjJcdWZmYjhcMDYzIiArCi0gICAgIlx1ZmZiOFwwNjRcdWZmYjhcMDY1XHVmZmI4XDA2Nlx1ZmZiOFwwNjdcdWZmYjhcMDcxXHVmZmI4XDA3M1x1ZmZiOCIgKwotICAgICJcMDc0XHVmZmI4XDA3NVx1ZmZiOFwxMDBcdWZmYjhcMTAxXHVmZmI4XDEwMlx1ZmZiOFwxMDdcdWZmYjhcMTEwIiArCi0gICAgIlx1ZmZiOFwxMTFcdWZmYjhcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiOVwwMDVcdWZmYjlcMDA3XHVmZmI5IiArCi0gICAgIlwwMTBcdWZmYjlcMDExXHVmZmI5XDAxMlx1ZmZiOVwwMTNcdWZmYjlcMDE0XHVmZmI5XDAxNVx1ZmZiOVwwMTYiICsKLSAgICAiXHVmZmI5XDAxN1x1ZmZiOVwwMjBcdWZmYjlcMDIxXHVmZmI5XDAyMlx1ZmZiOVwwMjNcdWZmYjlcMDI0XHVmZmI5IiArCi0gICAgIlwwMjVcdWZmYjlcMDMyXHVmZmI5XDA1M1x1ZmZiOVwwNTRcdWZmYjlcMDU1XHVmZmI5XDA1Nlx1ZmZiOVwwNTciICsKLSAgICAiXHVmZmI5XDA2MFx1ZmZiOVwwNjFcdWZmYjlcMDYyXHVmZmI5XDA2M1x1ZmZiOVwwNjRcdWZmYjlcMDY1XHVmZmI5IiArCi0gICAgIlwwNjZcdWZmYjlcMDY3XHVmZmI5XDA3MVx1ZmZiOVwwNzNcdWZmYjlcMDc0XHVmZmI5XDA3NVx1ZmZiOVwxMDAiICsKLSAgICAiXHVmZmI5XDEwMVx1ZmZiOVwxMDJcdWZmYjlcMTA3XHVmZmI5XDExMFx1ZmZiOVwxMTFcdWZmYjlcMDAxXDAwMiIgKwotICAgICJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1IiArCi0gICAgIlwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjMiICsKLSAgICAiXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NiIgKwotICAgICJcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1IiArCi0gICAgIlwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjMiICsKLSAgICAiXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNSIgKwotICAgICJcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwIiArCi0gICAgIlwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjAiICsKLSAgICAiXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNSIgKwotICAgICJcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzIiArCi0gICAgIlwxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDEiICsKLSAgICAiXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNCIgKwotICAgICJcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3IiArCi0gICAgIlwxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjMiICsKLSAgICAiXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NCIgKwotICAgICJcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2IiArCi0gICAgIlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzEiICsKLSAgICAiXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MCIgKwotICAgICJcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2IiArCi0gICAgIlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjciICsKLSAgICAiXDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyMyIgKwotICAgICJcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyIiArCi0gICAgIlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjQiICsKLSAgICAiXDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NSIgKwotICAgICJcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1IiArCi0gICAgIlwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzEiICsKLSAgICAiXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MiIgKwotICAgICJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyIiArCi0gICAgIlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzciICsKLSAgICAiXDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMiIgKwotICAgICJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0IiArCi0gICAgIlwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTciICsKLSAgICAiXDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMSIgKwotICAgICJcMTMyXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2IiArCi0gICAgIlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzYiICsKLSAgICAiXDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMiIgKwotICAgICJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzIiArCi0gICAgIlwwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjAiICsKLSAgICAiXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MCIgKwotICAgICJcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExIiArCi0gICAgIlwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDUiICsKLSAgICAiXDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNCIgKwotICAgICJcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyIiArCi0gICAgIlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzQiICsKLSAgICAiXDEzMVwxMzJcMDAxXDAwMlwwMDBcMTA0XDAwMlx1ZmZlMVwwMDVcdWZmZTFcMDA3XHVmZmUxXDAxMCIgKwotICAgICJcdWZmZTFcMDExXHVmZmUxXDAxMlx1ZmZlMVwwMTNcdTAxMGVcMDE0XHVmZmUxXDAxNVx1ZmZlMVwwMTZcdWZmZTEiICsKLSAgICAiXDAxN1x1ZmZlMVwwMjBcdWZmZTFcMDIxXHVmZmUxXDAyMlx1ZmZlMVwwMjNcdWZmZTFcMDMyXHVmZmUxXDA1MyIgKwotICAgICJcdWZmZTFcMDU0XHVmZmUxXDA1NVx1ZmZlMVwwNTZcdWZmZTFcMDU3XHVmZmUxXDA2MFx1ZmZlMVwwNjFcdWZmZTEiICsKLSAgICAiXDA2Mlx1ZmZlMVwwNjNcdWZmZTFcMDY0XHUwMTBkXDA3NVx1ZmZlMVwxMDBcdWZmZTFcMTAxXHVmZmUxXDEwMiIgKwotICAgICJcdWZmZTFcMTA3XHVmZmUxXDExMFx1ZmZlMVwxMTFcdWZmZTFcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTAiICsKLSAgICAiXDAxMFwxMDVcMDExXDE0NFwwMTJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMCIgKwotICAgICJcMTI1XDAzM1wxMDBcMDM0XDEyNlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0IiArCi0gICAgIlwwNDJcMDA0XDA0M1wwNDZcMDQ0XDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTAiICsKLSAgICAiXDExN1wwNTFcMDc1XDA1MlwwNjdcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MiIgKwotICAgICJcMDU3XDAwNlwwNjBcMDE3XDA2MVwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1IiArCi0gICAgIlwxMzFcMDY2XDEwMVwwNjdcMDU1XDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDIiICsKLSAgICAiXDA3NFwxNjFcMDc1XDE0M1wwNzZcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMiIgKwotICAgICJcMjAyXDEwM1wyMTNcMTA0XDIwN1wxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwIiArCi0gICAgIlwxMTFcMTUyXDExMlwxNDFcMTEzXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTciICsKLSAgICAiXDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MCIgKwotICAgICJcMTI2XDA0MlwxMjdcMTEzXDEzMFwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwyMTZcMDA2IiArCi0gICAgIlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzciICsKLSAgICAiXDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MSIgKwotICAgICJcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0IiArCi0gICAgIlwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTYiICsKLSAgICAiXDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMSIgKwotICAgICJcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczIiArCi0gICAgIlwxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzYiICsKLSAgICAiXDEwMlwyMDJcMTAzXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMCIgKwotICAgICJcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2IiArCi0gICAgIlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjUiICsKLSAgICAiXDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDExMCIgKwotICAgICJcMDAyXHVmZmRkXDAwNVx1ZmZkZFwwMDdcdWZmZGRcMDEwXHVmZmRkXDAxMVx1ZmZkZFwwMTJcdWZmZGRcMDEzIiArCi0gICAgIlx1ZmZkZFwwMTRcdWZmZGRcMDE1XHVmZmRkXDAxNlx1ZmZkZFwwMTdcdWZmZGRcMDIwXHVmZmRkXDAyMVx1ZmZkZCIgKwotICAgICJcMDIyXHVmZmRkXDAyM1x1ZmZkZFwwMzJcdWZmZGRcMDUzXHVmZmRkXDA1NFx1ZmZkZFwwNTVcdWZmZGRcMDU2IiArCi0gICAgIlx1ZmZkZFwwNTdcdWZmZGRcMDYwXHVmZmRkXDA2MVx1ZmZkZFwwNjJcdWZmZGRcMDYzXHVmZmRkXDA2NFx1ZmZkZCIgKwotICAgICJcMDY1XDIxNVwwNjZcMjE0XDA3NVx1ZmZkZFwxMDBcdWZmZGRcMTAxXHVmZmRkXDEwMlx1ZmZkZFwxMDciICsKLSAgICAiXHVmZmRkXDExMFx1ZmZkZFwxMTFcdWZmZGRcMDAxXDAwMlwwMDBcMTEwXDAwMlx1ZmZkZVwwMDVcdWZmZGUiICsKLSAgICAiXDAwN1x1ZmZkZVwwMTBcdWZmZGVcMDExXHVmZmRlXDAxMlx1ZmZkZVwwMTNcdWZmZGVcMDE0XHVmZmRlXDAxNSIgKwotICAgICJcdWZmZGVcMDE2XHVmZmRlXDAxN1x1ZmZkZVwwMjBcdWZmZGVcMDIxXHVmZmRlXDAyMlx1ZmZkZVwwMjNcdWZmZGUiICsKLSAgICAiXDAzMlx1ZmZkZVwwNTNcdWZmZGVcMDU0XHVmZmRlXDA1NVx1ZmZkZVwwNTZcdWZmZGVcMDU3XHVmZmRlXDA2MCIgKwotICAgICJcdWZmZGVcMDYxXHVmZmRlXDA2Mlx1ZmZkZVwwNjNcdWZmZGVcMDY0XHVmZmRlXDA2NVwyMTVcMDY2XDIxNCIgKwotICAgICJcMDc1XHVmZmRlXDEwMFx1ZmZkZVwxMDFcdWZmZGVcMTAyXHVmZmRlXDEwN1x1ZmZkZVwxMTBcdWZmZGVcMTExIiArCi0gICAgIlx1ZmZkZVwwMDFcMDAyXDAwMFwxMDRcMDAyXHVmZmUyXDAwNVx1ZmZlMlwwMDdcdWZmZTJcMDEwXHVmZmUyIiArCi0gICAgIlwwMTFcdWZmZTJcMDEyXHVmZmUyXDAxM1x1MDEwZVwwMTRcdWZmZTJcMDE1XHVmZmUyXDAxNlx1ZmZlMlwwMTciICsKLSAgICAiXHVmZmUyXDAyMFx1ZmZlMlwwMjFcdWZmZTJcMDIyXHVmZmUyXDAyM1x1ZmZlMlwwMzJcdWZmZTJcMDUzXHVmZmUyIiArCi0gICAgIlwwNTRcdWZmZTJcMDU1XHVmZmUyXDA1Nlx1ZmZlMlwwNTdcdWZmZTJcMDYwXHVmZmUyXDA2MVx1ZmZlMlwwNjIiICsKLSAgICAiXHVmZmUyXDA2M1x1ZmZlMlwwNjRcdTAxMGRcMDc1XHVmZmUyXDEwMFx1ZmZlMlwxMDFcdWZmZTJcMTAyXHVmZmUyIiArCi0gICAgIlwxMDdcdWZmZTJcMTEwXHVmZmUyXDExMVx1ZmZlMlwwMDFcMDAyXDAwMFwxMDRcMDAyXHVmZmUwXDAwNSIgKwotICAgICJcdWZmZTBcMDA3XHVmZmUwXDAxMFx1ZmZlMFwwMTFcdWZmZTBcMDEyXHVmZmUwXDAxM1x1MDEwZVwwMTRcdWZmZTAiICsKLSAgICAiXDAxNVx1ZmZlMFwwMTZcdWZmZTBcMDE3XHVmZmUwXDAyMFx1ZmZlMFwwMjFcdWZmZTBcMDIyXHVmZmUwXDAyMyIgKwotICAgICJcdWZmZTBcMDMyXHVmZmUwXDA1M1x1ZmZlMFwwNTRcdWZmZTBcMDU1XHVmZmUwXDA1Nlx1ZmZlMFwwNTdcdWZmZTAiICsKLSAgICAiXDA2MFx1ZmZlMFwwNjFcdWZmZTBcMDYyXHVmZmUwXDA2M1x1ZmZlMFwwNjRcdTAxMGRcMDc1XHVmZmUwXDEwMCIgKwotICAgICJcdWZmZTBcMTAxXHVmZmUwXDEwMlx1ZmZlMFwxMDdcdWZmZTBcMTEwXHVmZmUwXDExMVx1ZmZlMFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTA0XDAwMlx1ZmZlM1wwMDVcdWZmZTNcMDA3XHVmZmUzXDAxMFx1ZmZlM1wwMTFcdWZmZTNcMDEyIiArCi0gICAgIlx1ZmZlM1wwMTNcdTAxMGVcMDE0XHVmZmUzXDAxNVx1ZmZlM1wwMTZcdWZmZTNcMDE3XHVmZmUzXDAyMFx1ZmZlMyIgKwotICAgICJcMDIxXHVmZmUzXDAyMlx1ZmZlM1wwMjNcdWZmZTNcMDMyXHVmZmUzXDA1M1x1ZmZlM1wwNTRcdWZmZTNcMDU1IiArCi0gICAgIlx1ZmZlM1wwNTZcdWZmZTNcMDU3XHVmZmUzXDA2MFx1ZmZlM1wwNjFcdWZmZTNcMDYyXHVmZmUzXDA2M1x1ZmZlMyIgKwotICAgICJcMDY0XHUwMTBkXDA3NVx1ZmZlM1wxMDBcdWZmZTNcMTAxXHVmZmUzXDEwMlx1ZmZlM1wxMDdcdWZmZTNcMTEwIiArCi0gICAgIlx1ZmZlM1wxMTFcdWZmZTNcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDExNVwwMDFcMDAyXDAwMFwxMzAiICsKLSAgICAiXDAwMlx1ZmY2OFwwMDRcdWZmNjhcMDA1XHVmZjY4XDAwN1x1ZmY2OFwwMTBcdWZmNjhcMDExXHVmZjY4XDAxMiIgKwotICAgICJcdWZmNjhcMDEzXHVmZjY4XDAxNFx1ZmY2OFwwMTVcdWZmNjhcMDE2XHVmZjY4XDAxN1x1ZmY2OFwwMjBcdWZmNjgiICsKLSAgICAiXDAyMVx1ZmY2OFwwMjJcdWZmNjhcMDIzXHVmZjY4XDAyNFx1ZmY2OFwwMjVcdWZmNjhcMDMyXHVmZjY4XDAzNSIgKwotICAgICJcdWZmNjhcMDUzXHVmZjY4XDA1NFx1ZmY2OFwwNTVcdWZmNjhcMDU2XHVmZjY4XDA1N1x1ZmY2OFwwNjBcdWZmNjgiICsKLSAgICAiXDA2MVx1ZmY2OFwwNjJcdWZmNjhcMDYzXHVmZjY4XDA2NFx1ZmY2OFwwNjVcdWZmNjhcMDY2XHVmZjY4XDA2NyIgKwotICAgICJcdWZmNjhcMDcxXHVmZjY4XDA3M1x1ZmY2OFwwNzRcdWZmNjhcMDc1XHVmZjY4XDEwMFx1ZmY2OFwxMDFcdWZmNjgiICsKLSAgICAiXDEwMlx1ZmY2OFwxMDdcdWZmNjhcMTEwXHVmZjY4XDExMVx1ZmY2OFwwMDFcMDAyXDAwMFwxNjRcMDEyIiArCi0gICAgIlx1ZmZhM1wwMzZcdWZmYTNcMDM3XHVmZmEzXDA0MFx1ZmZhM1wwNDFcdWZmYTNcMDQyXHVmZmEzXDA0M1x1ZmZhMyIgKwotICAgICJcMDQ0XHVmZmEzXDA0NVx1ZmZhM1wwNDZcdWZmYTNcMDQ3XHVmZmEzXDA1MFx1ZmZhM1wwNTFcdWZmYTNcMDUyIiArCi0gICAgIlx1ZmZhM1wwNTNcdWZmYTNcMDU0XHVmZmEzXDA1NVx1ZmZhM1wwNTZcdWZmYTNcMDU3XHVmZmEzXDA2MFx1ZmZhMyIgKwotICAgICJcMDYxXHVmZmEzXDA2Mlx1ZmZhM1wwNjNcdWZmYTNcMDY0XHVmZmEzXDA2NVx1ZmZhM1wwNjZcdWZmYTNcMDY3IiArCi0gICAgIlx1ZmZhM1wwNzBcdWZmYTNcMDcxXHVmZmEzXDA3Mlx1ZmZhM1wwNzNcdWZmYTNcMDc0XHVmZmEzXDA3NVx1ZmZhMyIgKwotICAgICJcMDc2XHVmZmEzXDA3N1x1ZmZhM1wxMDBcdWZmYTNcMTAxXHVmZmEzXDEwMlx1ZmZhM1wxMDNcdWZmYTNcMTA0IiArCi0gICAgIlx1ZmZhM1wxMDVcdWZmYTNcMTA2XHVmZmEzXDEwN1x1ZmZhM1wxMTBcdWZmYTNcMTExXHVmZmEzXDExMlx1ZmZhMyIgKwotICAgICJcMTEzXHVmZmEzXDExNFx1ZmZhM1wxMTVcdWZmYTNcMTE2XHVmZmEzXDExN1x1ZmZhM1wxMjBcdWZmYTNcMTIxIiArCi0gICAgIlx1ZmZhM1wxMjJcdWZmYTNcMTIzXHVmZmEzXDEyNFx1ZmZhM1wxMzFcdWZmYTNcMDAxXDAwMlwwMDBcMTYyIiArCi0gICAgIlwwMzZcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDQiICsKLSAgICAiXDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NSIgKwotICAgICJcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxIiArCi0gICAgIlwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDUiICsKLSAgICAiXDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NiIgKwotICAgICJcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxIiArCi0gICAgIlwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTMiICsKLSAgICAiXDEzNFwxMTRcMzIwXDExNVwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MiIgKwotICAgICJcMTIyXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwxMjZcMDAyIiArCi0gICAgIlx1ZmY5OVwwMDRcdWZmOTlcMDA1XHVmZjk5XDAwN1x1ZmY5OVwwMTBcdWZmOTlcMDExXHVmZjk5XDAxMlx1ZmY5OSIgKwotICAgICJcMDEzXHVmZjk5XDAxNFx1ZmY5OVwwMTVcdWZmOTlcMDE2XHVmZjk5XDAxN1x1ZmY5OVwwMjBcdWZmOTlcMDIxIiArCi0gICAgIlx1ZmY5OVwwMjJcdWZmOTlcMDIzXHVmZjk5XDAyNFx1ZmY5OVwwMjVcdWZmOTlcMDMyXHVmZjk5XDA1M1x1ZmY5OSIgKwotICAgICJcMDU0XHVmZjk5XDA1NVx1ZmY5OVwwNTZcdWZmOTlcMDU3XHVmZjk5XDA2MFx1ZmY5OVwwNjFcdWZmOTlcMDYyIiArCi0gICAgIlx1ZmY5OVwwNjNcdWZmOTlcMDY0XHVmZjk5XDA2NVx1ZmY5OVwwNjZcdWZmOTlcMDY3XHVmZjk5XDA3MVx1ZmY5OSIgKwotICAgICJcMDczXHVmZjk5XDA3NFx1ZmY5OVwwNzVcdWZmOTlcMTAwXHVmZjk5XDEwMVx1ZmY5OVwxMDJcdWZmOTlcMTA3IiArCi0gICAgIlx1ZmY5OVwxMTBcdWZmOTlcMTExXHVmZjk5XDAwMVwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjMiICsKLSAgICAiXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NiIgKwotICAgICJcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3IiArCi0gICAgIlwwNTVcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjMiICsKLSAgICAiXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MiIgKwotICAgICJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwIiArCi0gICAgIlwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDYiICsKLSAgICAiXDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNSIgKwotICAgICJcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzIiArCi0gICAgIlwxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMDA0XDA3N1x1MDExYlwwMDFcMDAyXDAwMCIgKwotICAgICJcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwIiArCi0gICAgIlwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDAiICsKLSAgICAiXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNCIgKwotICAgICJcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1IiArCi0gICAgIlwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzYiICsKLSAgICAiXDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MiIgKwotICAgICJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDBcMTIxIiArCi0gICAgIlwxMDFcMTc2XDEwMlwyMDJcMTAzXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MFwxMDciICsKLSAgICAiXDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMSIgKwotICAgICJcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0IiArCi0gICAgIlwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDZcMDMyXHVmZmY4XDEwMFx1ZmZmOFwwMDFcMDAyXDAwMFwwMDZcMDA3XHUwMTFmXDAzMiIgKwotICAgICJcMjI0XDAwMVwwMDJcMDAwXDEyNlwwMDJcdWZmODlcMDA0XHVmZjg5XDAwNVx1ZmY4OVwwMDdcdWZmODkiICsKLSAgICAiXDAxMFx1ZmY4OVwwMTFcdWZmODlcMDEyXHVmZjg5XDAxM1x1ZmY4OVwwMTRcdWZmODlcMDE1XHVmZjg5XDAxNiIgKwotICAgICJcdWZmODlcMDE3XHVmZjg5XDAyMFx1ZmY4OVwwMjFcdWZmODlcMDIyXHVmZjg5XDAyM1x1ZmY4OVwwMjRcdWZmODkiICsKLSAgICAiXDAyNVx1ZmY4OVwwMzJcdWZmODlcMDUzXHVmZjg5XDA1NFx1ZmY4OVwwNTVcdWZmODlcMDU2XHVmZjg5XDA1NyIgKwotICAgICJcdWZmODlcMDYwXHVmZjg5XDA2MVx1ZmY4OVwwNjJcdWZmODlcMDYzXHVmZjg5XDA2NFx1ZmY4OVwwNjVcdWZmODkiICsKLSAgICAiXDA2Nlx1ZmY4OVwwNjdcdWZmODlcMDcxXHVmZjg5XDA3M1x1ZmY4OVwwNzRcdWZmODlcMDc1XHVmZjg5XDEwMCIgKwotICAgICJcdWZmODlcMTAxXHVmZjg5XDEwMlx1ZmY4OVwxMDdcdWZmODlcMTEwXHVmZjg5XDExMVx1ZmY4OVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTI2XDAwMlx1ZmY4OFwwMDRcdWZmODhcMDA1XHVmZjg4XDAwN1x1ZmY4OFwwMTBcdWZmODhcMDExIiArCi0gICAgIlx1ZmY4OFwwMTJcdWZmODhcMDEzXHVmZjg4XDAxNFx1ZmY4OFwwMTVcdWZmODhcMDE2XHVmZjg4XDAxN1x1ZmY4OCIgKwotICAgICJcMDIwXHVmZjg4XDAyMVx1ZmY4OFwwMjJcdWZmODhcMDIzXHVmZjg4XDAyNFx1ZmY4OFwwMjVcdWZmODhcMDMyIiArCi0gICAgIlx1ZmY4OFwwNTNcdWZmODhcMDU0XHVmZjg4XDA1NVx1ZmY4OFwwNTZcdWZmODhcMDU3XHVmZjg4XDA2MFx1ZmY4OCIgKwotICAgICJcMDYxXHVmZjg4XDA2Mlx1ZmY4OFwwNjNcdWZmODhcMDY0XHVmZjg4XDA2NVx1ZmY4OFwwNjZcdWZmODhcMDY3IiArCi0gICAgIlx1ZmY4OFwwNzFcdWZmODhcMDczXHVmZjg4XDA3NFx1ZmY4OFwwNzVcdWZmODhcMTAwXHVmZjg4XDEwMVx1ZmY4OCIgKwotICAgICJcMTAyXHVmZjg4XDEwN1x1ZmY4OFwxMTBcdWZmODhcMTExXHVmZjg4XDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZmI1XDAwNFwyMjJcMDA1XHVmZmI1XDAwN1x1ZmZiNVwwMTBcdWZmYjVcMDExXHVmZmI1XDAxMlx1ZmZiNSIgKwotICAgICJcMDEzXHVmZmI1XDAxNFx1ZmZiNVwwMTVcdWZmYjVcMDE2XHVmZmI1XDAxN1x1ZmZiNVwwMjBcdWZmYjVcMDIxIiArCi0gICAgIlx1ZmZiNVwwMjJcdWZmYjVcMDIzXHVmZmI1XDAyNFx1ZmZiNVwwMjVcdWZmYjVcMDMyXHVmZmI1XDA1M1x1ZmZiNSIgKwotICAgICJcMDU0XHVmZmI1XDA1NVx1ZmZiNVwwNTZcdWZmYjVcMDU3XHVmZmI1XDA2MFx1ZmZiNVwwNjFcdWZmYjVcMDYyIiArCi0gICAgIlx1ZmZiNVwwNjNcdWZmYjVcMDY0XHVmZmI1XDA2NVx1ZmZiNVwwNjZcdWZmYjVcMDY3XHVmZmI1XDA3MVx1ZmZiNSIgKwotICAgICJcMDczXHVmZmI1XDA3NFx1ZmZiNVwwNzVcdWZmYjVcMTAwXHVmZmI1XDEwMVx1ZmZiNVwxMDJcdWZmYjVcMTA3IiArCi0gICAgIlx1ZmZiNVwxMTBcdWZmYjVcMTExXHVmZmI1XDAwMVwwMDJcMDAwXDEyMFwwMDJcdWZmY2ZcMDA1XHVmZmNmIiArCi0gICAgIlwwMDdcdWZmY2ZcMDEwXHVmZmNmXDAxMVx1ZmZjZlwwMTJcdWZmY2ZcMDEzXHVmZmNmXDAxNFx1ZmZjZlwwMTUiICsKLSAgICAiXHVmZmNmXDAxNlx1ZmZjZlwwMTdcdWZmY2ZcMDIwXHVmZmNmXDAyMVx1ZmZjZlwwMjJcdWZmY2ZcMDIzXHVmZmNmIiArCi0gICAgIlwwMzJcdWZmY2ZcMDUzXHVmZmNmXDA1NFx1ZmZjZlwwNTVcdWZmY2ZcMDU2XHVmZmNmXDA1N1x1ZmZjZlwwNjAiICsKLSAgICAiXHVmZmNmXDA2MVx1ZmZjZlwwNjJcdWZmY2ZcMDYzXHVmZmNmXDA2NFx1ZmZjZlwwNjVcdWZmY2ZcMDY2XHVmZmNmIiArCi0gICAgIlwwNjdcdWZmY2ZcMDcxXHVmZmNmXDA3M1x1ZmZjZlwwNzRcdWZmY2ZcMDc1XHVmZmNmXDEwMFx1ZmZjZlwxMDEiICsKLSAgICAiXHVmZmNmXDEwMlx1ZmZjZlwxMDdcdWZmY2ZcMTEwXHVmZmNmXDExMVx1ZmZjZlwwMDFcMDAyXDAwMFwxMjYiICsKLSAgICAiXDAwMlx1ZmY4YVwwMDRcdWZmOGFcMDA1XHVmZjhhXDAwN1x1ZmY4YVwwMTBcdWZmOGFcMDExXHVmZjhhXDAxMiIgKwotICAgICJcdWZmOGFcMDEzXHVmZjhhXDAxNFx1ZmY4YVwwMTVcdWZmOGFcMDE2XHVmZjhhXDAxN1x1ZmY4YVwwMjBcdWZmOGEiICsKLSAgICAiXDAyMVx1ZmY4YVwwMjJcdWZmOGFcMDIzXHVmZjhhXDAyNFx1ZmY4YVwwMjVcdWZmOGFcMDMyXHVmZjhhXDA1MyIgKwotICAgICJcdWZmOGFcMDU0XHVmZjhhXDA1NVx1ZmY4YVwwNTZcdWZmOGFcMDU3XHVmZjhhXDA2MFx1ZmY4YVwwNjFcdWZmOGEiICsKLSAgICAiXDA2Mlx1ZmY4YVwwNjNcdWZmOGFcMDY0XHVmZjhhXDA2NVx1ZmY4YVwwNjZcdWZmOGFcMDY3XHVmZjhhXDA3MSIgKwotICAgICJcdWZmOGFcMDczXHVmZjhhXDA3NFx1ZmY4YVwwNzVcdWZmOGFcMTAwXHVmZjhhXDEwMVx1ZmY4YVwxMDJcdWZmOGEiICsKLSAgICAiXDEwN1x1ZmY4YVwxMTBcdWZmOGFcMTExXHVmZjhhXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNGRcMDA0IiArCi0gICAgIlx1ZmY0ZFwwMDVcdWZmNGRcMDA3XHVmZjRkXDAxMFx1ZmY0ZFwwMTFcdWZmNGRcMDEyXHVmZjRkXDAxM1x1ZmY0ZCIgKwotICAgICJcMDE0XHVmZjRkXDAxNVx1ZmY0ZFwwMTZcdWZmNGRcMDE3XHVmZjRkXDAyMFx1ZmY0ZFwwMjFcdWZmNGRcMDIyIiArCi0gICAgIlx1ZmY0ZFwwMjNcdWZmNGRcMDI0XHVmZjRkXDAyNVx1ZmY0ZFwwMzFcdTAxMjZcMDMyXHVmZjRkXDA1M1x1ZmY0ZCIgKwotICAgICJcMDU0XHVmZjRkXDA1NVx1ZmY0ZFwwNTZcdWZmNGRcMDU3XHVmZjRkXDA2MFx1ZmY0ZFwwNjFcdWZmNGRcMDYyIiArCi0gICAgIlx1ZmY0ZFwwNjNcdWZmNGRcMDY0XHVmZjRkXDA2NVx1ZmY0ZFwwNjZcdWZmNGRcMDY3XHVmZjRkXDA3MVx1ZmY0ZCIgKwotICAgICJcMDczXHVmZjRkXDA3NFx1ZmY0ZFwwNzVcdWZmNGRcMTAwXHVmZjRkXDEwMVx1ZmY0ZFwxMDJcdWZmNGRcMTA3IiArCi0gICAgIlx1ZmY0ZFwxMTBcdWZmNGRcMTExXHVmZjRkXDAwMVwwMDJcMDAwXDEzNFwwMDJcdWZmNDNcMDA0XHVmZjQzIiArCi0gICAgIlwwMDVcdWZmNDNcMDA2XDM1M1wwMDdcdWZmNDNcMDEwXHVmZjQzXDAxMVx1ZmY0M1wwMTJcdWZmNDNcMDEzIiArCi0gICAgIlx1ZmY0M1wwMTRcdWZmNDNcMDE1XHVmZjQzXDAxNlx1ZmY0M1wwMTdcdWZmNDNcMDIwXHVmZjQzXDAyMVx1ZmY0MyIgKwotICAgICJcMDIyXHVmZjQzXDAyM1x1ZmY0M1wwMjRcdWZmNDNcMDI1XHVmZjQzXDAzMVx1ZmY0M1wwMzJcdWZmNDNcMDM1IiArCi0gICAgIlx1ZmY0M1wwNTNcdWZmNDNcMDU0XHVmZjQzXDA1NVx1ZmY0M1wwNTZcdWZmNDNcMDU3XHVmZjQzXDA2MFx1ZmY0MyIgKwotICAgICJcMDYxXHVmZjQzXDA2Mlx1ZmY0M1wwNjNcdWZmNDNcMDY0XHVmZjQzXDA2NVx1ZmY0M1wwNjZcdWZmNDNcMDY3IiArCi0gICAgIlx1ZmY0M1wwNzFcdWZmNDNcMDczXHVmZjQzXDA3NFx1ZmY0M1wwNzVcdWZmNDNcMTAwXHVmZjQzXDEwMVx1ZmY0MyIgKwotICAgICJcMTAyXHVmZjQzXDEwN1x1ZmY0M1wxMTBcdWZmNDNcMTExXHVmZjQzXDAwMVwwMDJcMDAwXDEyNlwwMDIiICsKLSAgICAiXHVmZmE5XDAwNFx1ZmZhOVwwMDVcdWZmYTlcMDA3XHVmZmE5XDAxMFx1ZmZhOVwwMTFcdWZmYTlcMDEyXHVmZmE5IiArCi0gICAgIlwwMTNcdWZmYTlcMDE0XHVmZmE5XDAxNVx1ZmZhOVwwMTZcdWZmYTlcMDE3XHVmZmE5XDAyMFx1ZmZhOVwwMjEiICsKLSAgICAiXHVmZmE5XDAyMlx1ZmZhOVwwMjNcdWZmYTlcMDI0XHVmZmE5XDAyNVx1ZmZhOVwwMzJcdWZmYTlcMDUzXHVmZmE5IiArCi0gICAgIlwwNTRcdWZmYTlcMDU1XHVmZmE5XDA1Nlx1ZmZhOVwwNTdcdWZmYTlcMDYwXHVmZmE5XDA2MVx1ZmZhOVwwNjIiICsKLSAgICAiXHVmZmE5XDA2M1x1ZmZhOVwwNjRcdWZmYTlcMDY1XHVmZmE5XDA2Nlx1ZmZhOVwwNjdcdWZmYTlcMDcxXHVmZmE5IiArCi0gICAgIlwwNzNcdWZmYTlcMDc0XHVmZmE5XDA3NVx1ZmZhOVwxMDBcdWZmYTlcMTAxXHVmZmE5XDEwMlx1ZmZhOVwxMDciICsKLSAgICAiXHVmZmE5XDExMFx1ZmZhOVwxMTFcdWZmYTlcMDAxXDAwMlwwMDBcMTY0XDAxMlx1MDEyN1wwMzZcMjQ2IiArCi0gICAgIlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDUiICsKLSAgICAiXDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NCIgKwotICAgICJcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyIiArCi0gICAgIlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjQiICsKLSAgICAiXDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3NyIgKwotICAgICJcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyIiArCi0gICAgIlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTQiICsKLSAgICAiXDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNCIgKwotICAgICJcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmY5YVwwMDQiICsKLSAgICAiXHVmZjlhXDAwNVx1ZmY5YVwwMDdcdWZmOWFcMDEwXHVmZjlhXDAxMVx1ZmY5YVwwMTJcdWZmOWFcMDEzXHVmZjlhIiArCi0gICAgIlwwMTRcdWZmOWFcMDE1XHVmZjlhXDAxNlx1ZmY5YVwwMTdcdWZmOWFcMDIwXHVmZjlhXDAyMVx1ZmY5YVwwMjIiICsKLSAgICAiXHVmZjlhXDAyM1x1ZmY5YVwwMjRcdWZmOWFcMDI1XHVmZjlhXDAzMlx1ZmY5YVwwNTNcdWZmOWFcMDU0XHVmZjlhIiArCi0gICAgIlwwNTVcdWZmOWFcMDU2XHVmZjlhXDA1N1x1ZmY5YVwwNjBcdWZmOWFcMDYxXHVmZjlhXDA2Mlx1ZmY5YVwwNjMiICsKLSAgICAiXHVmZjlhXDA2NFx1ZmY5YVwwNjVcdWZmOWFcMDY2XHVmZjlhXDA2N1x1ZmY5YVwwNzFcdWZmOWFcMDczXHVmZjlhIiArCi0gICAgIlwwNzRcdWZmOWFcMDc1XHVmZjlhXDEwMFx1ZmY5YVwxMDFcdWZmOWFcMTAyXHVmZjlhXDEwN1x1ZmY5YVwxMTAiICsKLSAgICAiXHVmZjlhXDExMVx1ZmY5YVwwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmEyXDAzNlx1ZmZhMlwwMzdcdWZmYTIiICsKLSAgICAiXDA0MFx1ZmZhMlwwNDFcdWZmYTJcMDQyXHVmZmEyXDA0M1x1ZmZhMlwwNDRcdWZmYTJcMDQ1XHVmZmEyXDA0NiIgKwotICAgICJcdWZmYTJcMDQ3XHVmZmEyXDA1MFx1ZmZhMlwwNTFcdWZmYTJcMDUyXHVmZmEyXDA1M1x1ZmZhMlwwNTRcdWZmYTIiICsKLSAgICAiXDA1NVx1ZmZhMlwwNTZcdWZmYTJcMDU3XHVmZmEyXDA2MFx1ZmZhMlwwNjFcdWZmYTJcMDYyXHVmZmEyXDA2MyIgKwotICAgICJcdWZmYTJcMDY0XHVmZmEyXDA2NVx1ZmZhMlwwNjZcdWZmYTJcMDY3XHVmZmEyXDA3MFx1ZmZhMlwwNzFcdWZmYTIiICsKLSAgICAiXDA3Mlx1ZmZhMlwwNzNcdWZmYTJcMDc0XHVmZmEyXDA3NVx1ZmZhMlwwNzZcdWZmYTJcMDc3XHVmZmEyXDEwMCIgKwotICAgICJcdWZmYTJcMTAxXHVmZmEyXDEwMlx1ZmZhMlwxMDNcdWZmYTJcMTA0XHVmZmEyXDEwNVx1ZmZhMlwxMDZcdWZmYTIiICsKLSAgICAiXDEwN1x1ZmZhMlwxMTBcdWZmYTJcMTExXHVmZmEyXDExMlx1ZmZhMlwxMTNcdWZmYTJcMTE0XHVmZmEyXDExNSIgKwotICAgICJcdWZmYTJcMTE2XHVmZmEyXDExN1x1ZmZhMlwxMjBcdWZmYTJcMTIxXHVmZmEyXDEyMlx1ZmZhMlwxMjNcdWZmYTIiICsKLSAgICAiXDEyNFx1ZmZhMlwxMzFcdWZmYTJcMDAxXDAwMlwwMDBcMjE2XDAwNlx1ZmZjMVwwMTBcdWZmYzFcMDExIiArCi0gICAgIlx1ZmZjMVwwMTJcdWZmYzFcMDI0XHVmZmMxXDAyNVx1ZmZjMVwwMjdcdWZmYzFcMDMwXHVmZmMxXDAzM1x1ZmZjMSIgKwotICAgICJcMDM0XHVmZmMxXDAzNlx1ZmZjMVwwMzdcdWZmYzFcMDQwXHVmZmMxXDA0MVx1ZmZjMVwwNDJcdWZmYzFcMDQzIiArCi0gICAgIlx1ZmZjMVwwNDRcdWZmYzFcMDQ1XHVmZmMxXDA0Nlx1ZmZjMVwwNDdcdWZmYzFcMDUwXHVmZmMxXDA1MVx1ZmZjMSIgKwotICAgICJcMDUyXHVmZmMxXDA1M1x1ZmZjMVwwNTRcdWZmYzFcMDU1XHVmZmMxXDA1Nlx1ZmZjMVwwNTdcdWZmYzFcMDYwIiArCi0gICAgIlx1ZmZjMVwwNjFcdWZmYzFcMDYyXHVmZmMxXDA2M1x1ZmZjMVwwNjRcdWZmYzFcMDY1XHVmZmMxXDA2Nlx1ZmZjMSIgKwotICAgICJcMDY3XHVmZmMxXDA3MFx1ZmZjMVwwNzFcdWZmYzFcMDcyXHVmZmMxXDA3M1x1ZmZjMVwwNzRcdWZmYzFcMDc1IiArCi0gICAgIlx1ZmZjMVwwNzZcdWZmYzFcMDc3XHVmZmMxXDEwMFx1ZmZjMVwxMDFcdWZmYzFcMTAyXHVmZmMxXDEwM1x1ZmZjMSIgKwotICAgICJcMTA0XHVmZmMxXDEwNVx1ZmZjMVwxMDZcdWZmYzFcMTA3XHVmZmMxXDExMFx1ZmZjMVwxMTFcdWZmYzFcMTEyIiArCi0gICAgIlx1ZmZjMVwxMTNcdWZmYzFcMTE0XHVmZmMxXDExNVx1ZmZjMVwxMTZcdWZmYzFcMTE3XHVmZmMxXDEyMFx1ZmZjMSIgKwotICAgICJcMTIxXHVmZmMxXDEyMlx1ZmZjMVwxMjNcdWZmYzFcMTI0XHVmZmMxXDEyNVx1ZmZjMVwxMjZcdWZmYzFcMTI3IiArCi0gICAgIlx1ZmZjMVwxMzBcdWZmYzFcMTMxXHVmZmMxXDAwMVwwMDJcMDAwXDIxNlwwMDZcdWZmYzVcMDEwXHVmZmM1IiArCi0gICAgIlwwMTFcdWZmYzVcMDEyXHVmZmM1XDAyNFx1ZmZjNVwwMjVcdWZmYzVcMDI3XHVmZmM1XDAzMFx1ZmZjNVwwMzMiICsKLSAgICAiXHVmZmM1XDAzNFx1ZmZjNVwwMzZcdWZmYzVcMDM3XHVmZmM1XDA0MFx1ZmZjNVwwNDFcdWZmYzVcMDQyXHVmZmM1IiArCi0gICAgIlwwNDNcdWZmYzVcMDQ0XHVmZmM1XDA0NVx1ZmZjNVwwNDZcdWZmYzVcMDQ3XHVmZmM1XDA1MFx1ZmZjNVwwNTEiICsKLSAgICAiXHVmZmM1XDA1Mlx1ZmZjNVwwNTNcdWZmYzVcMDU0XHVmZmM1XDA1NVx1ZmZjNVwwNTZcdWZmYzVcMDU3XHVmZmM1IiArCi0gICAgIlwwNjBcdWZmYzVcMDYxXHVmZmM1XDA2Mlx1ZmZjNVwwNjNcdWZmYzVcMDY0XHVmZmM1XDA2NVx1ZmZjNVwwNjYiICsKLSAgICAiXHVmZmM1XDA2N1x1ZmZjNVwwNzBcdWZmYzVcMDcxXHVmZmM1XDA3Mlx1ZmZjNVwwNzNcdWZmYzVcMDc0XHVmZmM1IiArCi0gICAgIlwwNzVcdWZmYzVcMDc2XHVmZmM1XDA3N1x1ZmZjNVwxMDBcdWZmYzVcMTAxXHVmZmM1XDEwMlx1ZmZjNVwxMDMiICsKLSAgICAiXHVmZmM1XDEwNFx1ZmZjNVwxMDVcdWZmYzVcMTA2XHVmZmM1XDEwN1x1ZmZjNVwxMTBcdWZmYzVcMTExXHVmZmM1IiArCi0gICAgIlwxMTJcdWZmYzVcMTEzXHVmZmM1XDExNFx1ZmZjNVwxMTVcdWZmYzVcMTE2XHVmZmM1XDExN1x1ZmZjNVwxMjAiICsKLSAgICAiXHVmZmM1XDEyMVx1ZmZjNVwxMjJcdWZmYzVcMTIzXHVmZmM1XDEyNFx1ZmZjNVwxMjVcdWZmYzVcMTI2XHVmZmM1IiArCi0gICAgIlwxMjdcdWZmYzVcMTMwXHVmZmM1XDEzMVx1ZmZjNVwwMDFcMDAyXDAwMFwyMTZcMDA2XHVmZmM2XDAxMCIgKwotICAgICJcdWZmYzZcMDExXHVmZmM2XDAxMlx1ZmZjNlwwMjRcdWZmYzZcMDI1XHVmZmM2XDAyN1x1ZmZjNlwwMzBcdWZmYzYiICsKLSAgICAiXDAzM1x1ZmZjNlwwMzRcdWZmYzZcMDM2XHVmZmM2XDAzN1x1ZmZjNlwwNDBcdWZmYzZcMDQxXHVmZmM2XDA0MiIgKwotICAgICJcdWZmYzZcMDQzXHVmZmM2XDA0NFx1ZmZjNlwwNDVcdWZmYzZcMDQ2XHVmZmM2XDA0N1x1ZmZjNlwwNTBcdWZmYzYiICsKLSAgICAiXDA1MVx1ZmZjNlwwNTJcdWZmYzZcMDUzXHVmZmM2XDA1NFx1ZmZjNlwwNTVcdWZmYzZcMDU2XHVmZmM2XDA1NyIgKwotICAgICJcdWZmYzZcMDYwXHVmZmM2XDA2MVx1ZmZjNlwwNjJcdWZmYzZcMDYzXHVmZmM2XDA2NFx1ZmZjNlwwNjVcdWZmYzYiICsKLSAgICAiXDA2Nlx1ZmZjNlwwNjdcdWZmYzZcMDcwXHVmZmM2XDA3MVx1ZmZjNlwwNzJcdWZmYzZcMDczXHVmZmM2XDA3NCIgKwotICAgICJcdWZmYzZcMDc1XHVmZmM2XDA3Nlx1ZmZjNlwwNzdcdWZmYzZcMTAwXHVmZmM2XDEwMVx1ZmZjNlwxMDJcdWZmYzYiICsKLSAgICAiXDEwM1x1ZmZjNlwxMDRcdWZmYzZcMTA1XHVmZmM2XDEwNlx1ZmZjNlwxMDdcdWZmYzZcMTEwXHVmZmM2XDExMSIgKwotICAgICJcdWZmYzZcMTEyXHVmZmM2XDExM1x1ZmZjNlwxMTRcdWZmYzZcMTE1XHVmZmM2XDExNlx1ZmZjNlwxMTdcdWZmYzYiICsKLSAgICAiXDEyMFx1ZmZjNlwxMjFcdWZmYzZcMTIyXHVmZmM2XDEyM1x1ZmZjNlwxMjRcdWZmYzZcMTI1XHVmZmM2XDEyNiIgKwotICAgICJcdWZmYzZcMTI3XHVmZmM2XDEzMFx1ZmZjNlwxMzFcdWZmYzZcMDAxXDAwMlwwMDBcMjE2XDAwNlx1ZmZiZiIgKwotICAgICJcMDEwXHVmZmJmXDAxMVx1ZmZiZlwwMTJcdWZmYmZcMDI0XHVmZmJmXDAyNVx1ZmZiZlwwMjdcdWZmYmZcMDMwIiArCi0gICAgIlx1ZmZiZlwwMzNcdWZmYmZcMDM0XHVmZmJmXDAzNlx1ZmZiZlwwMzdcdWZmYmZcMDQwXHVmZmJmXDA0MVx1ZmZiZiIgKwotICAgICJcMDQyXHVmZmJmXDA0M1x1ZmZiZlwwNDRcdWZmYmZcMDQ1XHVmZmJmXDA0Nlx1ZmZiZlwwNDdcdWZmYmZcMDUwIiArCi0gICAgIlx1ZmZiZlwwNTFcdWZmYmZcMDUyXHVmZmJmXDA1M1x1ZmZiZlwwNTRcdWZmYmZcMDU1XHVmZmJmXDA1Nlx1ZmZiZiIgKwotICAgICJcMDU3XHVmZmJmXDA2MFx1ZmZiZlwwNjFcdWZmYmZcMDYyXHVmZmJmXDA2M1x1ZmZiZlwwNjRcdWZmYmZcMDY1IiArCi0gICAgIlx1ZmZiZlwwNjZcdWZmYmZcMDY3XHVmZmJmXDA3MFx1ZmZiZlwwNzFcdWZmYmZcMDcyXHVmZmJmXDA3M1x1ZmZiZiIgKwotICAgICJcMDc0XHVmZmJmXDA3NVx1ZmZiZlwwNzZcdWZmYmZcMDc3XHVmZmJmXDEwMFx1ZmZiZlwxMDFcdWZmYmZcMTAyIiArCi0gICAgIlx1ZmZiZlwxMDNcdWZmYmZcMTA0XHVmZmJmXDEwNVx1ZmZiZlwxMDZcdWZmYmZcMTA3XHVmZmJmXDExMFx1ZmZiZiIgKwotICAgICJcMTExXHVmZmJmXDExMlx1ZmZiZlwxMTNcdWZmYmZcMTE0XHVmZmJmXDExNVx1ZmZiZlwxMTZcdWZmYmZcMTE3IiArCi0gICAgIlx1ZmZiZlwxMjBcdWZmYmZcMTIxXHVmZmJmXDEyMlx1ZmZiZlwxMjNcdWZmYmZcMTI0XHVmZmJmXDEyNVx1ZmZiZiIgKwotICAgICJcMTI2XHVmZmJmXDEyN1x1ZmZiZlwxMzBcdWZmYmZcMTMxXHVmZmJmXDAwMVwwMDJcMDAwXDIxNlwwMDYiICsKLSAgICAiXHVmZmM5XDAxMFx1ZmZjOVwwMTFcdWZmYzlcMDEyXHVmZmM5XDAyNFx1ZmZjOVwwMjVcdWZmYzlcMDI3XHVmZmM5IiArCi0gICAgIlwwMzBcdWZmYzlcMDMzXHVmZmM5XDAzNFx1ZmZjOVwwMzZcdWZmYzlcMDM3XHVmZmM5XDA0MFx1ZmZjOVwwNDEiICsKLSAgICAiXHVmZmM5XDA0Mlx1ZmZjOVwwNDNcdWZmYzlcMDQ0XHVmZmM5XDA0NVx1ZmZjOVwwNDZcdWZmYzlcMDQ3XHVmZmM5IiArCi0gICAgIlwwNTBcdWZmYzlcMDUxXHVmZmM5XDA1Mlx1ZmZjOVwwNTNcdWZmYzlcMDU0XHVmZmM5XDA1NVx1ZmZjOVwwNTYiICsKLSAgICAiXHVmZmM5XDA1N1x1ZmZjOVwwNjBcdWZmYzlcMDYxXHVmZmM5XDA2Mlx1ZmZjOVwwNjNcdWZmYzlcMDY0XHVmZmM5IiArCi0gICAgIlwwNjVcdWZmYzlcMDY2XHVmZmM5XDA2N1x1ZmZjOVwwNzBcdWZmYzlcMDcxXHVmZmM5XDA3Mlx1ZmZjOVwwNzMiICsKLSAgICAiXHVmZmM5XDA3NFx1ZmZjOVwwNzVcdWZmYzlcMDc2XHVmZmM5XDA3N1x1ZmZjOVwxMDBcdWZmYzlcMTAxXHVmZmM5IiArCi0gICAgIlwxMDJcdWZmYzlcMTAzXHVmZmM5XDEwNFx1ZmZjOVwxMDVcdWZmYzlcMTA2XHVmZmM5XDEwN1x1ZmZjOVwxMTAiICsKLSAgICAiXHVmZmM5XDExMVx1ZmZjOVwxMTJcdWZmYzlcMTEzXHVmZmM5XDExNFx1ZmZjOVwxMTVcdWZmYzlcMTE2XHVmZmM5IiArCi0gICAgIlwxMTdcdWZmYzlcMTIwXHVmZmM5XDEyMVx1ZmZjOVwxMjJcdWZmYzlcMTIzXHVmZmM5XDEyNFx1ZmZjOVwxMjUiICsKLSAgICAiXHVmZmM5XDEyNlx1ZmZjOVwxMjdcdWZmYzlcMTMwXHVmZmM5XDEzMVx1ZmZjOVwwMDFcMDAyXDAwMFwyMTYiICsKLSAgICAiXDAwNlx1ZmZjM1wwMTBcdWZmYzNcMDExXHVmZmMzXDAxMlx1ZmZjM1wwMjRcdWZmYzNcMDI1XHVmZmMzXDAyNyIgKwotICAgICJcdWZmYzNcMDMwXHVmZmMzXDAzM1x1ZmZjM1wwMzRcdWZmYzNcMDM2XHVmZmMzXDAzN1x1ZmZjM1wwNDBcdWZmYzMiICsKLSAgICAiXDA0MVx1ZmZjM1wwNDJcdWZmYzNcMDQzXHVmZmMzXDA0NFx1ZmZjM1wwNDVcdWZmYzNcMDQ2XHVmZmMzXDA0NyIgKwotICAgICJcdWZmYzNcMDUwXHVmZmMzXDA1MVx1ZmZjM1wwNTJcdWZmYzNcMDUzXHVmZmMzXDA1NFx1ZmZjM1wwNTVcdWZmYzMiICsKLSAgICAiXDA1Nlx1ZmZjM1wwNTdcdWZmYzNcMDYwXHVmZmMzXDA2MVx1ZmZjM1wwNjJcdWZmYzNcMDYzXHVmZmMzXDA2NCIgKwotICAgICJcdWZmYzNcMDY1XHVmZmMzXDA2Nlx1ZmZjM1wwNjdcdWZmYzNcMDcwXHVmZmMzXDA3MVx1ZmZjM1wwNzJcdWZmYzMiICsKLSAgICAiXDA3M1x1ZmZjM1wwNzRcdWZmYzNcMDc1XHVmZmMzXDA3Nlx1ZmZjM1wwNzdcdWZmYzNcMTAwXHVmZmMzXDEwMSIgKwotICAgICJcdWZmYzNcMTAyXHVmZmMzXDEwM1x1ZmZjM1wxMDRcdWZmYzNcMTA1XHVmZmMzXDEwNlx1ZmZjM1wxMDdcdWZmYzMiICsKLSAgICAiXDExMFx1ZmZjM1wxMTFcdWZmYzNcMTEyXHVmZmMzXDExM1x1ZmZjM1wxMTRcdWZmYzNcMTE1XHVmZmMzXDExNiIgKwotICAgICJcdWZmYzNcMTE3XHVmZmMzXDEyMFx1ZmZjM1wxMjFcdWZmYzNcMTIyXHVmZmMzXDEyM1x1ZmZjM1wxMjRcdWZmYzMiICsKLSAgICAiXDEyNVx1ZmZjM1wxMjZcdWZmYzNcMTI3XHVmZmMzXDEzMFx1ZmZjM1wxMzFcdWZmYzNcMDAxXDAwMlwwMDAiICsKLSAgICAiXDIxNlwwMDZcdWZmY2FcMDEwXHVmZmNhXDAxMVx1ZmZjYVwwMTJcdWZmY2FcMDI0XHVmZmNhXDAyNVx1ZmZjYSIgKwotICAgICJcMDI3XHVmZmNhXDAzMFx1ZmZjYVwwMzNcdWZmY2FcMDM0XHVmZmNhXDAzNlx1ZmZjYVwwMzdcdWZmY2FcMDQwIiArCi0gICAgIlx1ZmZjYVwwNDFcdWZmY2FcMDQyXHVmZmNhXDA0M1x1ZmZjYVwwNDRcdWZmY2FcMDQ1XHVmZmNhXDA0Nlx1ZmZjYSIgKwotICAgICJcMDQ3XHVmZmNhXDA1MFx1ZmZjYVwwNTFcdWZmY2FcMDUyXHVmZmNhXDA1M1x1ZmZjYVwwNTRcdWZmY2FcMDU1IiArCi0gICAgIlx1ZmZjYVwwNTZcdWZmY2FcMDU3XHVmZmNhXDA2MFx1ZmZjYVwwNjFcdWZmY2FcMDYyXHVmZmNhXDA2M1x1ZmZjYSIgKwotICAgICJcMDY0XHVmZmNhXDA2NVx1ZmZjYVwwNjZcdWZmY2FcMDY3XHVmZmNhXDA3MFx1ZmZjYVwwNzFcdWZmY2FcMDcyIiArCi0gICAgIlx1ZmZjYVwwNzNcdWZmY2FcMDc0XHVmZmNhXDA3NVx1ZmZjYVwwNzZcdWZmY2FcMDc3XHVmZmNhXDEwMFx1ZmZjYSIgKwotICAgICJcMTAxXHVmZmNhXDEwMlx1ZmZjYVwxMDNcdWZmY2FcMTA0XHVmZmNhXDEwNVx1ZmZjYVwxMDZcdWZmY2FcMTA3IiArCi0gICAgIlx1ZmZjYVwxMTBcdWZmY2FcMTExXHVmZmNhXDExMlx1ZmZjYVwxMTNcdWZmY2FcMTE0XHVmZmNhXDExNVx1ZmZjYSIgKwotICAgICJcMTE2XHVmZmNhXDExN1x1ZmZjYVwxMjBcdWZmY2FcMTIxXHVmZmNhXDEyMlx1ZmZjYVwxMjNcdWZmY2FcMTI0IiArCi0gICAgIlx1ZmZjYVwxMjVcdWZmY2FcMTI2XHVmZmNhXDEyN1x1ZmZjYVwxMzBcdWZmY2FcMTMxXHVmZmNhXDAwMVwwMDIiICsKLSAgICAiXDAwMFwyMTZcMDA2XHVmZmM0XDAxMFx1ZmZjNFwwMTFcdWZmYzRcMDEyXHVmZmM0XDAyNFx1ZmZjNFwwMjUiICsKLSAgICAiXHVmZmM0XDAyN1x1ZmZjNFwwMzBcdWZmYzRcMDMzXHVmZmM0XDAzNFx1ZmZjNFwwMzZcdWZmYzRcMDM3XHVmZmM0IiArCi0gICAgIlwwNDBcdWZmYzRcMDQxXHVmZmM0XDA0Mlx1ZmZjNFwwNDNcdWZmYzRcMDQ0XHVmZmM0XDA0NVx1ZmZjNFwwNDYiICsKLSAgICAiXHVmZmM0XDA0N1x1ZmZjNFwwNTBcdWZmYzRcMDUxXHVmZmM0XDA1Mlx1ZmZjNFwwNTNcdWZmYzRcMDU0XHVmZmM0IiArCi0gICAgIlwwNTVcdWZmYzRcMDU2XHVmZmM0XDA1N1x1ZmZjNFwwNjBcdWZmYzRcMDYxXHVmZmM0XDA2Mlx1ZmZjNFwwNjMiICsKLSAgICAiXHVmZmM0XDA2NFx1ZmZjNFwwNjVcdWZmYzRcMDY2XHVmZmM0XDA2N1x1ZmZjNFwwNzBcdWZmYzRcMDcxXHVmZmM0IiArCi0gICAgIlwwNzJcdWZmYzRcMDczXHVmZmM0XDA3NFx1ZmZjNFwwNzVcdWZmYzRcMDc2XHVmZmM0XDA3N1x1ZmZjNFwxMDAiICsKLSAgICAiXHVmZmM0XDEwMVx1ZmZjNFwxMDJcdWZmYzRcMTAzXHVmZmM0XDEwNFx1ZmZjNFwxMDVcdWZmYzRcMTA2XHVmZmM0IiArCi0gICAgIlwxMDdcdWZmYzRcMTEwXHVmZmM0XDExMVx1ZmZjNFwxMTJcdWZmYzRcMTEzXHVmZmM0XDExNFx1ZmZjNFwxMTUiICsKLSAgICAiXHVmZmM0XDExNlx1ZmZjNFwxMTdcdWZmYzRcMTIwXHVmZmM0XDEyMVx1ZmZjNFwxMjJcdWZmYzRcMTIzXHVmZmM0IiArCi0gICAgIlwxMjRcdWZmYzRcMTI1XHVmZmM0XDEyNlx1ZmZjNFwxMjdcdWZmYzRcMTMwXHVmZmM0XDEzMVx1ZmZjNFwwMDEiICsKLSAgICAiXDAwMlwwMDBcMjE2XDAwNlx1ZmZjZFwwMTBcdWZmY2RcMDExXHVmZmNkXDAxMlx1ZmZjZFwwMjRcdWZmY2QiICsKLSAgICAiXDAyNVx1ZmZjZFwwMjdcdWZmY2RcMDMwXHVmZmNkXDAzM1x1ZmZjZFwwMzRcdWZmY2RcMDM2XHVmZmNkXDAzNyIgKwotICAgICJcdWZmY2RcMDQwXHVmZmNkXDA0MVx1ZmZjZFwwNDJcdWZmY2RcMDQzXHVmZmNkXDA0NFx1ZmZjZFwwNDVcdWZmY2QiICsKLSAgICAiXDA0Nlx1ZmZjZFwwNDdcdWZmY2RcMDUwXHVmZmNkXDA1MVx1ZmZjZFwwNTJcdWZmY2RcMDUzXHVmZmNkXDA1NCIgKwotICAgICJcdWZmY2RcMDU1XHVmZmNkXDA1Nlx1ZmZjZFwwNTdcdWZmY2RcMDYwXHVmZmNkXDA2MVx1ZmZjZFwwNjJcdWZmY2QiICsKLSAgICAiXDA2M1x1ZmZjZFwwNjRcdWZmY2RcMDY1XHVmZmNkXDA2Nlx1ZmZjZFwwNjdcdWZmY2RcMDcwXHVmZmNkXDA3MSIgKwotICAgICJcdWZmY2RcMDcyXHVmZmNkXDA3M1x1ZmZjZFwwNzRcdWZmY2RcMDc1XHVmZmNkXDA3Nlx1ZmZjZFwwNzdcdWZmY2QiICsKLSAgICAiXDEwMFx1ZmZjZFwxMDFcdWZmY2RcMTAyXHVmZmNkXDEwM1x1ZmZjZFwxMDRcdWZmY2RcMTA1XHVmZmNkXDEwNiIgKwotICAgICJcdWZmY2RcMTA3XHVmZmNkXDExMFx1ZmZjZFwxMTFcdWZmY2RcMTEyXHVmZmNkXDExM1x1ZmZjZFwxMTRcdWZmY2QiICsKLSAgICAiXDExNVx1ZmZjZFwxMTZcdWZmY2RcMTE3XHVmZmNkXDEyMFx1ZmZjZFwxMjFcdWZmY2RcMTIyXHVmZmNkXDEyMyIgKwotICAgICJcdWZmY2RcMTI0XHVmZmNkXDEyNVx1ZmZjZFwxMjZcdWZmY2RcMTI3XHVmZmNkXDEzMFx1ZmZjZFwxMzFcdWZmY2QiICsKLSAgICAiXDAwMVwwMDJcMDAwXDIxNlwwMDZcdWZmY2NcMDEwXHVmZmNjXDAxMVx1ZmZjY1wwMTJcdWZmY2NcMDI0IiArCi0gICAgIlx1ZmZjY1wwMjVcdWZmY2NcMDI3XHVmZmNjXDAzMFx1ZmZjY1wwMzNcdWZmY2NcMDM0XHVmZmNjXDAzNlx1ZmZjYyIgKwotICAgICJcMDM3XHVmZmNjXDA0MFx1ZmZjY1wwNDFcdWZmY2NcMDQyXHVmZmNjXDA0M1x1ZmZjY1wwNDRcdWZmY2NcMDQ1IiArCi0gICAgIlx1ZmZjY1wwNDZcdWZmY2NcMDQ3XHVmZmNjXDA1MFx1ZmZjY1wwNTFcdWZmY2NcMDUyXHVmZmNjXDA1M1x1ZmZjYyIgKwotICAgICJcMDU0XHVmZmNjXDA1NVx1ZmZjY1wwNTZcdWZmY2NcMDU3XHVmZmNjXDA2MFx1ZmZjY1wwNjFcdWZmY2NcMDYyIiArCi0gICAgIlx1ZmZjY1wwNjNcdWZmY2NcMDY0XHVmZmNjXDA2NVx1ZmZjY1wwNjZcdWZmY2NcMDY3XHVmZmNjXDA3MFx1ZmZjYyIgKwotICAgICJcMDcxXHVmZmNjXDA3Mlx1ZmZjY1wwNzNcdWZmY2NcMDc0XHVmZmNjXDA3NVx1ZmZjY1wwNzZcdWZmY2NcMDc3IiArCi0gICAgIlx1ZmZjY1wxMDBcdWZmY2NcMTAxXHVmZmNjXDEwMlx1ZmZjY1wxMDNcdWZmY2NcMTA0XHVmZmNjXDEwNVx1ZmZjYyIgKwotICAgICJcMTA2XHVmZmNjXDEwN1x1ZmZjY1wxMTBcdWZmY2NcMTExXHVmZmNjXDExMlx1ZmZjY1wxMTNcdWZmY2NcMTE0IiArCi0gICAgIlx1ZmZjY1wxMTVcdWZmY2NcMTE2XHVmZmNjXDExN1x1ZmZjY1wxMjBcdWZmY2NcMTIxXHVmZmNjXDEyMlx1ZmZjYyIgKwotICAgICJcMTIzXHVmZmNjXDEyNFx1ZmZjY1wxMjVcdWZmY2NcMTI2XHVmZmNjXDEyN1x1ZmZjY1wxMzBcdWZmY2NcMTMxIiArCi0gICAgIlx1ZmZjY1wwMDFcMDAyXDAwMFwyMTZcMDA2XHVmZmNiXDAxMFx1ZmZjYlwwMTFcdWZmY2JcMDEyXHVmZmNiIiArCi0gICAgIlwwMjRcdWZmY2JcMDI1XHVmZmNiXDAyN1x1ZmZjYlwwMzBcdWZmY2JcMDMzXHVmZmNiXDAzNFx1ZmZjYlwwMzYiICsKLSAgICAiXHVmZmNiXDAzN1x1ZmZjYlwwNDBcdWZmY2JcMDQxXHVmZmNiXDA0Mlx1ZmZjYlwwNDNcdWZmY2JcMDQ0XHVmZmNiIiArCi0gICAgIlwwNDVcdWZmY2JcMDQ2XHVmZmNiXDA0N1x1ZmZjYlwwNTBcdWZmY2JcMDUxXHVmZmNiXDA1Mlx1ZmZjYlwwNTMiICsKLSAgICAiXHVmZmNiXDA1NFx1ZmZjYlwwNTVcdWZmY2JcMDU2XHVmZmNiXDA1N1x1ZmZjYlwwNjBcdWZmY2JcMDYxXHVmZmNiIiArCi0gICAgIlwwNjJcdWZmY2JcMDYzXHVmZmNiXDA2NFx1ZmZjYlwwNjVcdWZmY2JcMDY2XHVmZmNiXDA2N1x1ZmZjYlwwNzAiICsKLSAgICAiXHVmZmNiXDA3MVx1ZmZjYlwwNzJcdWZmY2JcMDczXHVmZmNiXDA3NFx1ZmZjYlwwNzVcdWZmY2JcMDc2XHVmZmNiIiArCi0gICAgIlwwNzdcdWZmY2JcMTAwXHVmZmNiXDEwMVx1ZmZjYlwxMDJcdWZmY2JcMTAzXHVmZmNiXDEwNFx1ZmZjYlwxMDUiICsKLSAgICAiXHVmZmNiXDEwNlx1ZmZjYlwxMDdcdWZmY2JcMTEwXHVmZmNiXDExMVx1ZmZjYlwxMTJcdWZmY2JcMTEzXHVmZmNiIiArCi0gICAgIlwxMTRcdWZmY2JcMTE1XHVmZmNiXDExNlx1ZmZjYlwxMTdcdWZmY2JcMTIwXHVmZmNiXDEyMVx1ZmZjYlwxMjIiICsKLSAgICAiXHVmZmNiXDEyM1x1ZmZjYlwxMjRcdWZmY2JcMTI1XHVmZmNiXDEyNlx1ZmZjYlwxMjdcdWZmY2JcMTMwXHVmZmNiIiArCi0gICAgIlwxMzFcdWZmY2JcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMiIgKwotICAgICJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2IiArCi0gICAgIlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDQiICsKLSAgICAiXDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2NyIgKwotICAgICJcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxIiArCi0gICAgIlwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTUiICsKLSAgICAiXDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NiIgKwotICAgICJcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDIxM1wxMDRcMjA3IiArCi0gICAgIlwxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTMiICsKLSAgICAiXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NCIgKwotICAgICJcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwIiArCi0gICAgIlwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwyMTZcMDA2XHVmZmMyXDAxMFx1ZmZjMlwwMTFcdWZmYzIiICsKLSAgICAiXDAxMlx1ZmZjMlwwMjRcdWZmYzJcMDI1XHVmZmMyXDAyN1x1ZmZjMlwwMzBcdWZmYzJcMDMzXHVmZmMyXDAzNCIgKwotICAgICJcdWZmYzJcMDM2XHVmZmMyXDAzN1x1ZmZjMlwwNDBcdWZmYzJcMDQxXHVmZmMyXDA0Mlx1ZmZjMlwwNDNcdWZmYzIiICsKLSAgICAiXDA0NFx1ZmZjMlwwNDVcdWZmYzJcMDQ2XHVmZmMyXDA0N1x1ZmZjMlwwNTBcdWZmYzJcMDUxXHVmZmMyXDA1MiIgKwotICAgICJcdWZmYzJcMDUzXHVmZmMyXDA1NFx1ZmZjMlwwNTVcdWZmYzJcMDU2XHVmZmMyXDA1N1x1ZmZjMlwwNjBcdWZmYzIiICsKLSAgICAiXDA2MVx1ZmZjMlwwNjJcdWZmYzJcMDYzXHVmZmMyXDA2NFx1ZmZjMlwwNjVcdWZmYzJcMDY2XHVmZmMyXDA2NyIgKwotICAgICJcdWZmYzJcMDcwXHVmZmMyXDA3MVx1ZmZjMlwwNzJcdWZmYzJcMDczXHVmZmMyXDA3NFx1ZmZjMlwwNzVcdWZmYzIiICsKLSAgICAiXDA3Nlx1ZmZjMlwwNzdcdWZmYzJcMTAwXHVmZmMyXDEwMVx1ZmZjMlwxMDJcdWZmYzJcMTAzXHVmZmMyXDEwNCIgKwotICAgICJcdWZmYzJcMTA1XHVmZmMyXDEwNlx1ZmZjMlwxMDdcdWZmYzJcMTEwXHVmZmMyXDExMVx1ZmZjMlwxMTJcdWZmYzIiICsKLSAgICAiXDExM1x1ZmZjMlwxMTRcdWZmYzJcMTE1XHVmZmMyXDExNlx1ZmZjMlwxMTdcdWZmYzJcMTIwXHVmZmMyXDEyMSIgKwotICAgICJcdWZmYzJcMTIyXHVmZmMyXDEyM1x1ZmZjMlwxMjRcdWZmYzJcMTI1XHVmZmMyXDEyNlx1ZmZjMlwxMjdcdWZmYzIiICsKLSAgICAiXDEzMFx1ZmZjMlwxMzFcdWZmYzJcMDAxXDAwMlwwMDBcMjE2XDAwNlx1ZmZjN1wwMTBcdWZmYzdcMDExIiArCi0gICAgIlx1ZmZjN1wwMTJcdWZmYzdcMDI0XHVmZmM3XDAyNVx1ZmZjN1wwMjdcdWZmYzdcMDMwXHVmZmM3XDAzM1x1ZmZjNyIgKwotICAgICJcMDM0XHVmZmM3XDAzNlx1ZmZjN1wwMzdcdWZmYzdcMDQwXHVmZmM3XDA0MVx1ZmZjN1wwNDJcdWZmYzdcMDQzIiArCi0gICAgIlx1ZmZjN1wwNDRcdWZmYzdcMDQ1XHVmZmM3XDA0Nlx1ZmZjN1wwNDdcdWZmYzdcMDUwXHVmZmM3XDA1MVx1ZmZjNyIgKwotICAgICJcMDUyXHVmZmM3XDA1M1x1ZmZjN1wwNTRcdWZmYzdcMDU1XHVmZmM3XDA1Nlx1ZmZjN1wwNTdcdWZmYzdcMDYwIiArCi0gICAgIlx1ZmZjN1wwNjFcdWZmYzdcMDYyXHVmZmM3XDA2M1x1ZmZjN1wwNjRcdWZmYzdcMDY1XHVmZmM3XDA2Nlx1ZmZjNyIgKwotICAgICJcMDY3XHVmZmM3XDA3MFx1ZmZjN1wwNzFcdWZmYzdcMDcyXHVmZmM3XDA3M1x1ZmZjN1wwNzRcdWZmYzdcMDc1IiArCi0gICAgIlx1ZmZjN1wwNzZcdWZmYzdcMDc3XHVmZmM3XDEwMFx1ZmZjN1wxMDFcdWZmYzdcMTAyXHVmZmM3XDEwM1x1ZmZjNyIgKwotICAgICJcMTA0XHVmZmM3XDEwNVx1ZmZjN1wxMDZcdWZmYzdcMTA3XHVmZmM3XDExMFx1ZmZjN1wxMTFcdWZmYzdcMTEyIiArCi0gICAgIlx1ZmZjN1wxMTNcdWZmYzdcMTE0XHVmZmM3XDExNVx1ZmZjN1wxMTZcdWZmYzdcMTE3XHVmZmM3XDEyMFx1ZmZjNyIgKwotICAgICJcMTIxXHVmZmM3XDEyMlx1ZmZjN1wxMjNcdWZmYzdcMTI0XHVmZmM3XDEyNVx1ZmZjN1wxMjZcdWZmYzdcMTI3IiArCi0gICAgIlx1ZmZjN1wxMzBcdWZmYzdcMTMxXHVmZmM3XDAwMVwwMDJcMDAwXDIxNlwwMDZcdWZmYzBcMDEwXHVmZmMwIiArCi0gICAgIlwwMTFcdWZmYzBcMDEyXHVmZmMwXDAyNFx1ZmZjMFwwMjVcdWZmYzBcMDI3XHVmZmMwXDAzMFx1ZmZjMFwwMzMiICsKLSAgICAiXHVmZmMwXDAzNFx1ZmZjMFwwMzZcdWZmYzBcMDM3XHVmZmMwXDA0MFx1ZmZjMFwwNDFcdWZmYzBcMDQyXHVmZmMwIiArCi0gICAgIlwwNDNcdWZmYzBcMDQ0XHVmZmMwXDA0NVx1ZmZjMFwwNDZcdWZmYzBcMDQ3XHVmZmMwXDA1MFx1ZmZjMFwwNTEiICsKLSAgICAiXHVmZmMwXDA1Mlx1ZmZjMFwwNTNcdWZmYzBcMDU0XHVmZmMwXDA1NVx1ZmZjMFwwNTZcdWZmYzBcMDU3XHVmZmMwIiArCi0gICAgIlwwNjBcdWZmYzBcMDYxXHVmZmMwXDA2Mlx1ZmZjMFwwNjNcdWZmYzBcMDY0XHVmZmMwXDA2NVx1ZmZjMFwwNjYiICsKLSAgICAiXHVmZmMwXDA2N1x1ZmZjMFwwNzBcdWZmYzBcMDcxXHVmZmMwXDA3Mlx1ZmZjMFwwNzNcdWZmYzBcMDc0XHVmZmMwIiArCi0gICAgIlwwNzVcdWZmYzBcMDc2XHVmZmMwXDA3N1x1ZmZjMFwxMDBcdWZmYzBcMTAxXHVmZmMwXDEwMlx1ZmZjMFwxMDMiICsKLSAgICAiXHVmZmMwXDEwNFx1ZmZjMFwxMDVcdWZmYzBcMTA2XHVmZmMwXDEwN1x1ZmZjMFwxMTBcdWZmYzBcMTExXHVmZmMwIiArCi0gICAgIlwxMTJcdWZmYzBcMTEzXHVmZmMwXDExNFx1ZmZjMFwxMTVcdWZmYzBcMTE2XHVmZmMwXDExN1x1ZmZjMFwxMjAiICsKLSAgICAiXHVmZmMwXDEyMVx1ZmZjMFwxMjJcdWZmYzBcMTIzXHVmZmMwXDEyNFx1ZmZjMFwxMjVcdWZmYzBcMTI2XHVmZmMwIiArCi0gICAgIlwxMjdcdWZmYzBcMTMwXHVmZmMwXDEzMVx1ZmZjMFwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTAiICsKLSAgICAiXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNSIgKwotICAgICJcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyIiArCi0gICAgIlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTciICsKLSAgICAiXDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1NyIgKwotICAgICJcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxIiArCi0gICAgIlwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzQiICsKLSAgICAiXDE2MVwwNzVcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMiIgKwotICAgICJcMTAzXDIxM1wxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExIiArCi0gICAgIlwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzMiICsKLSAgICAiXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNiIgKwotICAgICJcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwIiArCi0gICAgIlwwMTBcMTA1XDAxMVwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzAiICsKLSAgICAiXDEyNVwwMzNcMTAwXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NCIgKwotICAgICJcMDQyXDAwNFwwNDNcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwIiArCi0gICAgIlwxMTdcMDUxXDA3NVwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTIiICsKLSAgICAiXDA1N1wwMDZcMDYwXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NSIgKwotICAgICJcMTMxXDA2NlwxMDFcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyIiArCi0gICAgIlwwNzRcMTYxXDA3NVwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDIiICsKLSAgICAiXDIwMlwxMDNcMjEzXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMCIgKwotICAgICJcMTExXDE1MlwxMTJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3IiArCi0gICAgIlwxMzNcMTIwXDE0N1wxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDAiICsKLSAgICAiXDEyNlwwNDJcMTI3XDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMjE2XDAwNiIgKwotICAgICJcdWZmYzhcMDEwXHVmZmM4XDAxMVx1ZmZjOFwwMTJcdWZmYzhcMDI0XHVmZmM4XDAyNVx1ZmZjOFwwMjdcdWZmYzgiICsKLSAgICAiXDAzMFx1ZmZjOFwwMzNcdWZmYzhcMDM0XHVmZmM4XDAzNlx1ZmZjOFwwMzdcdWZmYzhcMDQwXHVmZmM4XDA0MSIgKwotICAgICJcdWZmYzhcMDQyXHVmZmM4XDA0M1x1ZmZjOFwwNDRcdWZmYzhcMDQ1XHVmZmM4XDA0Nlx1ZmZjOFwwNDdcdWZmYzgiICsKLSAgICAiXDA1MFx1ZmZjOFwwNTFcdWZmYzhcMDUyXHVmZmM4XDA1M1x1ZmZjOFwwNTRcdWZmYzhcMDU1XHVmZmM4XDA1NiIgKwotICAgICJcdWZmYzhcMDU3XHVmZmM4XDA2MFx1ZmZjOFwwNjFcdWZmYzhcMDYyXHVmZmM4XDA2M1x1ZmZjOFwwNjRcdWZmYzgiICsKLSAgICAiXDA2NVx1ZmZjOFwwNjZcdWZmYzhcMDY3XHVmZmM4XDA3MFx1ZmZjOFwwNzFcdWZmYzhcMDcyXHVmZmM4XDA3MyIgKwotICAgICJcdWZmYzhcMDc0XHVmZmM4XDA3NVx1ZmZjOFwwNzZcdWZmYzhcMDc3XHVmZmM4XDEwMFx1ZmZjOFwxMDFcdWZmYzgiICsKLSAgICAiXDEwMlx1ZmZjOFwxMDNcdWZmYzhcMTA0XHVmZmM4XDEwNVx1ZmZjOFwxMDZcdWZmYzhcMTA3XHVmZmM4XDExMCIgKwotICAgICJcdWZmYzhcMTExXHVmZmM4XDExMlx1ZmZjOFwxMTNcdWZmYzhcMTE0XHVmZmM4XDExNVx1ZmZjOFwxMTZcdWZmYzgiICsKLSAgICAiXDExN1x1ZmZjOFwxMjBcdWZmYzhcMTIxXHVmZmM4XDEyMlx1ZmZjOFwxMjNcdWZmYzhcMTI0XHVmZmM4XDEyNSIgKwotICAgICJcdWZmYzhcMTI2XHVmZmM4XDEyN1x1ZmZjOFwxMzBcdWZmYzhcMTMxXHVmZmM4XDAwMVwwMDJcMDAwXDAyNCIgKwotICAgICJcMDAyXHVmZmVhXDAwNVx1ZmZlYVwwMDdcdWZmZWFcMDMyXHVmZmVhXDEwMFx1ZmZlYVwxMDFcdWZmZWFcMTA3IiArCi0gICAgIlx1ZmZlYVwxMTBcdWZmZWFcMTExXHVmZmVhXDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZWJcMDA1XHVmZmViIiArCi0gICAgIlwwMDdcdWZmZWJcMDMyXHVmZmViXDEwMFx1ZmZlYlwxMDFcdWZmZWJcMTA3XHVmZmViXDExMFx1ZmZlYlwxMTEiICsKLSAgICAiXHVmZmViXDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZWNcMDA1XHVmZmVjXDAwN1x1ZmZlY1wwMzJcdWZmZWMiICsKLSAgICAiXDEwMFx1ZmZlY1wxMDFcdWZmZWNcMTA3XHVmZmVjXDExMFx1ZmZlY1wxMTFcdWZmZWNcMDAxXDAwMlwwMDAiICsKLSAgICAiXDE2NFwwMTJcdWZmYTFcMDM2XHVmZmExXDAzN1x1ZmZhMVwwNDBcdWZmYTFcMDQxXHVmZmExXDA0Mlx1ZmZhMSIgKwotICAgICJcMDQzXHVmZmExXDA0NFx1ZmZhMVwwNDVcdWZmYTFcMDQ2XHVmZmExXDA0N1x1ZmZhMVwwNTBcdWZmYTFcMDUxIiArCi0gICAgIlx1ZmZhMVwwNTJcdWZmYTFcMDUzXHVmZmExXDA1NFx1ZmZhMVwwNTVcdWZmYTFcMDU2XHVmZmExXDA1N1x1ZmZhMSIgKwotICAgICJcMDYwXHVmZmExXDA2MVx1ZmZhMVwwNjJcdWZmYTFcMDYzXHVmZmExXDA2NFx1ZmZhMVwwNjVcdWZmYTFcMDY2IiArCi0gICAgIlx1ZmZhMVwwNjdcdWZmYTFcMDcwXHVmZmExXDA3MVx1ZmZhMVwwNzJcdWZmYTFcMDczXHVmZmExXDA3NFx1ZmZhMSIgKwotICAgICJcMDc1XHVmZmExXDA3Nlx1ZmZhMVwwNzdcdWZmYTFcMTAwXHVmZmExXDEwMVx1ZmZhMVwxMDJcdWZmYTFcMTAzIiArCi0gICAgIlx1ZmZhMVwxMDRcdWZmYTFcMTA1XHVmZmExXDEwNlx1ZmZhMVwxMDdcdWZmYTFcMTEwXHVmZmExXDExMVx1ZmZhMSIgKwotICAgICJcMTEyXHVmZmExXDExM1x1ZmZhMVwxMTRcdWZmYTFcMTE1XHVmZmExXDExNlx1ZmZhMVwxMTdcdWZmYTFcMTIwIiArCi0gICAgIlx1ZmZhMVwxMjFcdWZmYTFcMTIyXHVmZmExXDEyM1x1ZmZhMVwxMjRcdWZmYTFcMTMxXHVmZmExXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDcyXHUwMTQwXDAwMVwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwIiArCi0gICAgIlx1MDEyNFwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMCIgKwotICAgICJcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1IiArCi0gICAgIlwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzEiICsKLSAgICAiXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MiIgKwotICAgICJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2IiArCi0gICAgIlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDciICsKLSAgICAiXDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXHUwMTQ2XDExM1x1MDE0NVwxMTRcMDI3XDExNVwwMjEiICsKLSAgICAiXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3XDEyMVwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNCIgKwotICAgICJcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDBcMTE0XDAwMlx1ZmY4MFwwMDVcdWZmODBcMDA3XHVmZjgwIiArCi0gICAgIlwwMTBcdTAxNGVcMDExXHVmZjgwXDAxMlx1MDE0Y1wwMTNcdWZmODBcMDE0XHVmZjgwXDAxNVx1ZmY4MFwwMTYiICsKLSAgICAiXHVmZjgwXDAxN1x1ZmY4MFwwMjBcdWZmODBcMDIxXHVmZjgwXDAyMlx1ZmY4MFwwMjNcdWZmODBcMDMyXHVmZjgwIiArCi0gICAgIlwwMzVcdTAxNGZcMDUzXHVmZjgwXDA1NFx1ZmY4MFwwNTVcdWZmODBcMDU2XHVmZjgwXDA1N1x1ZmY4MFwwNjAiICsKLSAgICAiXHVmZjgwXDA2MVx1ZmY4MFwwNjJcdWZmODBcMDYzXHVmZjgwXDA2NFx1ZmY4MFwwNjVcdWZmODBcMDY2XHVmZjgwIiArCi0gICAgIlwwNjdcdWZmODBcMDc1XHVmZjgwXDEwMFx1ZmY4MFwxMDFcdWZmODBcMTAyXHVmZjgwXDEwN1x1ZmY4MFwxMTAiICsKLSAgICAiXHVmZjgwXDExMVx1ZmY4MFwwMDFcMDAyXDAwMFwxMTRcMDAyXHVmZjc5XDAwNVx1ZmY3OVwwMDdcdWZmNzkiICsKLSAgICAiXDAxMFx1ZmY3OVwwMTFcdWZmNzlcMDEyXHVmZjc5XDAxM1x1ZmY3OVwwMTRcdWZmNzlcMDE1XHVmZjc5XDAxNiIgKwotICAgICJcdWZmNzlcMDE3XHVmZjc5XDAyMFx1ZmY3OVwwMjFcdWZmNzlcMDIyXHVmZjc5XDAyM1x1ZmY3OVwwMzJcdWZmNzkiICsKLSAgICAiXDAzNVx1ZmY3OVwwNTNcdWZmNzlcMDU0XHVmZjc5XDA1NVx1ZmY3OVwwNTZcdWZmNzlcMDU3XHVmZjc5XDA2MCIgKwotICAgICJcdWZmNzlcMDYxXHVmZjc5XDA2Mlx1ZmY3OVwwNjNcdWZmNzlcMDY0XHVmZjc5XDA2NVx1ZmY3OVwwNjZcdWZmNzkiICsKLSAgICAiXDA2N1x1ZmY3OVwwNzVcdWZmNzlcMTAwXHVmZjc5XDEwMVx1ZmY3OVwxMDJcdWZmNzlcMTA3XHVmZjc5XDExMCIgKwotICAgICJcdWZmNzlcMTExXHVmZjc5XDAwMVwwMDJcMDAwXDExMlwwMDJcdWZmZDZcMDA1XHVmZmQ2XDAwN1x1ZmZkNiIgKwotICAgICJcMDEwXHVmZmQ2XDAxMVx1ZmZkNlwwMTJcdWZmZDZcMDEzXHVmZmQ2XDAxNFx1ZmZkNlwwMTVcdWZmZDZcMDE2IiArCi0gICAgIlx1ZmZkNlwwMTdcdWZmZDZcMDIwXHVmZmQ2XDAyMVx1ZmZkNlwwMjJcdWZmZDZcMDIzXHVmZmQ2XDAzMlx1ZmZkNiIgKwotICAgICJcMDUzXHVmZmQ2XDA1NFx1ZmZkNlwwNTVcdWZmZDZcMDU2XHVmZmQ2XDA1N1x1ZmZkNlwwNjBcdWZmZDZcMDYxIiArCi0gICAgIlx1ZmZkNlwwNjJcdWZmZDZcMDYzXHVmZmQ2XDA2NFx1ZmZkNlwwNjVcdWZmZDZcMDY2XHVmZmQ2XDA2N1x1ZmZkNiIgKwotICAgICJcMDc1XHVmZmQ2XDEwMFx1ZmZkNlwxMDFcdWZmZDZcMTAyXHVmZmQ2XDEwN1x1ZmZkNlwxMTBcdWZmZDZcMTExIiArCi0gICAgIlx1ZmZkNlwwMDFcMDAyXDAwMFwxMTRcMDAyXHVmZjdhXDAwNVx1ZmY3YVwwMDdcdWZmN2FcMDEwXHVmZjdhIiArCi0gICAgIlwwMTFcdWZmN2FcMDEyXHVmZjdhXDAxM1x1ZmY3YVwwMTRcdWZmN2FcMDE1XHVmZjdhXDAxNlx1ZmY3YVwwMTciICsKLSAgICAiXHVmZjdhXDAyMFx1ZmY3YVwwMjFcdWZmN2FcMDIyXHVmZjdhXDAyM1x1ZmY3YVwwMzJcdWZmN2FcMDM1XHVmZjdhIiArCi0gICAgIlwwNTNcdWZmN2FcMDU0XHVmZjdhXDA1NVx1ZmY3YVwwNTZcdWZmN2FcMDU3XHVmZjdhXDA2MFx1ZmY3YVwwNjEiICsKLSAgICAiXHVmZjdhXDA2Mlx1ZmY3YVwwNjNcdWZmN2FcMDY0XHVmZjdhXDA2NVx1ZmY3YVwwNjZcdWZmN2FcMDY3XHVmZjdhIiArCi0gICAgIlwwNzVcdWZmN2FcMTAwXHVmZjdhXDEwMVx1ZmY3YVwxMDJcdWZmN2FcMTA3XHVmZjdhXDExMFx1ZmY3YVwxMTEiICsKLSAgICAiXHVmZjdhXDAwMVwwMDJcMDAwXDEyMFwwMDJcdWZmMWRcMDA1XHVmZjFkXDAwNlx1MDE0YVwwMDdcdWZmMWQiICsKLSAgICAiXDAxMFx1ZmYxZFwwMTFcdWZmMWRcMDEyXHVmZjFkXDAxM1x1ZmYxZFwwMTRcdWZmMWRcMDE1XHVmZjFkXDAxNiIgKwotICAgICJcdWZmMWRcMDE3XHVmZjFkXDAyMFx1ZmYxZFwwMjFcdWZmMWRcMDIyXHVmZjFkXDAyM1x1ZmYxZFwwMzFcdWZmMWQiICsKLSAgICAiXDAzMlx1ZmYxZFwwMzVcdWZmMWRcMDUzXHVmZjFkXDA1NFx1ZmYxZFwwNTVcdWZmMWRcMDU2XHVmZjFkXDA1NyIgKwotICAgICJcdWZmMWRcMDYwXHVmZjFkXDA2MVx1ZmYxZFwwNjJcdWZmMWRcMDYzXHVmZjFkXDA2NFx1ZmYxZFwwNjVcdWZmMWQiICsKLSAgICAiXDA2Nlx1ZmYxZFwwNjdcdWZmMWRcMDc1XHVmZjFkXDEwMFx1ZmYxZFwxMDFcdWZmMWRcMTAyXHVmZjFkXDEwNyIgKwotICAgICJcdWZmMWRcMTEwXHVmZjFkXDExMVx1ZmYxZFwwMDFcMDAyXDAwMFwxMjBcMDAyXHVmZjFlXDAwNVx1ZmYxZSIgKwotICAgICJcMDA2XHUwMTQ4XDAwN1x1ZmYxZVwwMTBcdWZmMWVcMDExXHVmZjFlXDAxMlx1ZmYxZVwwMTNcdWZmMWVcMDE0IiArCi0gICAgIlx1ZmYxZVwwMTVcdWZmMWVcMDE2XHVmZjFlXDAxN1x1ZmYxZVwwMjBcdWZmMWVcMDIxXHVmZjFlXDAyMlx1ZmYxZSIgKwotICAgICJcMDIzXHVmZjFlXDAzMVx1ZmYxZVwwMzJcdWZmMWVcMDM1XHVmZjFlXDA1M1x1ZmYxZVwwNTRcdWZmMWVcMDU1IiArCi0gICAgIlx1ZmYxZVwwNTZcdWZmMWVcMDU3XHVmZjFlXDA2MFx1ZmYxZVwwNjFcdWZmMWVcMDYyXHVmZjFlXDA2M1x1ZmYxZSIgKwotICAgICJcMDY0XHVmZjFlXDA2NVx1ZmYxZVwwNjZcdWZmMWVcMDY3XHVmZjFlXDA3NVx1ZmYxZVwxMDBcdWZmMWVcMTAxIiArCi0gICAgIlx1ZmYxZVwxMDJcdWZmMWVcMTA3XHVmZjFlXDExMFx1ZmYxZVwxMTFcdWZmMWVcMDAxXDAwMlwwMDBcMTIwIiArCi0gICAgIlwwMDJcdWZmNzdcMDA1XHVmZjc3XDAwN1x1ZmY3N1wwMTBcdWZmNzdcMDExXHVmZjc3XDAxMlx1ZmY3N1wwMTMiICsKLSAgICAiXHVmZjc3XDAxNFx1ZmY3N1wwMTVcdWZmNzdcMDE2XHVmZjc3XDAxN1x1ZmY3N1wwMjBcdWZmNzdcMDIxXHVmZjc3IiArCi0gICAgIlwwMjJcdWZmNzdcMDIzXHVmZjc3XDAzMlx1ZmY3N1wwMzVcdWZmNzdcMDUzXHVmZjc3XDA1NFx1ZmY3N1wwNTUiICsKLSAgICAiXHVmZjc3XDA1Nlx1ZmY3N1wwNTdcdWZmNzdcMDYwXHVmZjc3XDA2MVx1ZmY3N1wwNjJcdWZmNzdcMDYzXHVmZjc3IiArCi0gICAgIlwwNjRcdWZmNzdcMDY1XHVmZjc3XDA2Nlx1ZmY3N1wwNjdcdWZmNzdcMDcxXHVmZjc3XDA3M1x1ZmY3N1wwNzUiICsKLSAgICAiXHVmZjc3XDEwMFx1ZmY3N1wxMDFcdWZmNzdcMTAyXHVmZjc3XDEwN1x1ZmY3N1wxMTBcdWZmNzdcMTExXHVmZjc3IiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTQ5XDAwMVwwMDJcMDAwXDExMlwwMDJcdWZmN2VcMDA1IiArCi0gICAgIlx1ZmY3ZVwwMDdcdWZmN2VcMDEwXHVmZjdlXDAxMVx1ZmY3ZVwwMTJcdWZmN2VcMDEzXHVmZjdlXDAxNFx1ZmY3ZSIgKwotICAgICJcMDE1XHVmZjdlXDAxNlx1ZmY3ZVwwMTdcdWZmN2VcMDIwXHVmZjdlXDAyMVx1ZmY3ZVwwMjJcdWZmN2VcMDIzIiArCi0gICAgIlx1ZmY3ZVwwMzJcdWZmN2VcMDUzXHVmZjdlXDA1NFx1ZmY3ZVwwNTVcdWZmN2VcMDU2XHVmZjdlXDA1N1x1ZmY3ZSIgKwotICAgICJcMDYwXHVmZjdlXDA2MVx1ZmY3ZVwwNjJcdWZmN2VcMDYzXHVmZjdlXDA2NFx1ZmY3ZVwwNjVcdWZmN2VcMDY2IiArCi0gICAgIlx1ZmY3ZVwwNjdcdWZmN2VcMDc1XHVmZjdlXDEwMFx1ZmY3ZVwxMDFcdWZmN2VcMTAyXHVmZjdlXDEwN1x1ZmY3ZSIgKwotICAgICJcMTEwXHVmZjdlXDExMVx1ZmY3ZVwwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTRiXDAwMVwwMDJcMDAwIiArCi0gICAgIlwxMTRcMDAyXHVmZjc4XDAwNVx1ZmY3OFwwMDdcdWZmNzhcMDEwXHVmZjc4XDAxMVx1ZmY3OFwwMTJcdWZmNzgiICsKLSAgICAiXDAxM1x1ZmY3OFwwMTRcdWZmNzhcMDE1XHVmZjc4XDAxNlx1ZmY3OFwwMTdcdWZmNzhcMDIwXHVmZjc4XDAyMSIgKwotICAgICJcdWZmNzhcMDIyXHVmZjc4XDAyM1x1ZmY3OFwwMzJcdWZmNzhcMDM1XHVmZjc4XDA1M1x1ZmY3OFwwNTRcdWZmNzgiICsKLSAgICAiXDA1NVx1ZmY3OFwwNTZcdWZmNzhcMDU3XHVmZjc4XDA2MFx1ZmY3OFwwNjFcdWZmNzhcMDYyXHVmZjc4XDA2MyIgKwotICAgICJcdWZmNzhcMDY0XHVmZjc4XDA2NVx1ZmY3OFwwNjZcdWZmNzhcMDY3XHVmZjc4XDA3NVx1ZmY3OFwxMDBcdWZmNzgiICsKLSAgICAiXDEwMVx1ZmY3OFwxMDJcdWZmNzhcMTA3XHVmZjc4XDExMFx1ZmY3OFwxMTFcdWZmNzhcMDAxXDAwMlwwMDAiICsKLSAgICAiXDExMlwwMDJcdWZmN2NcMDA1XHVmZjdjXDAwN1x1ZmY3Y1wwMTBcdWZmN2NcMDExXHVmZjdjXDAxMlx1ZmY3YyIgKwotICAgICJcMDEzXHVmZjdjXDAxNFx1ZmY3Y1wwMTVcdWZmN2NcMDE2XHVmZjdjXDAxN1x1ZmY3Y1wwMjBcdWZmN2NcMDIxIiArCi0gICAgIlx1ZmY3Y1wwMjJcdWZmN2NcMDIzXHVmZjdjXDAzMlx1ZmY3Y1wwNTNcdWZmN2NcMDU0XHVmZjdjXDA1NVx1ZmY3YyIgKwotICAgICJcMDU2XHVmZjdjXDA1N1x1ZmY3Y1wwNjBcdWZmN2NcMDYxXHVmZjdjXDA2Mlx1ZmY3Y1wwNjNcdWZmN2NcMDY0IiArCi0gICAgIlx1ZmY3Y1wwNjVcdWZmN2NcMDY2XHVmZjdjXDA2N1x1ZmY3Y1wwNzVcdWZmN2NcMTAwXHVmZjdjXDEwMVx1ZmY3YyIgKwotICAgICJcMTAyXHVmZjdjXDEwN1x1ZmY3Y1wxMTBcdWZmN2NcMTExXHVmZjdjXDAwMVwwMDJcMDAwXDExMlwwMDIiICsKLSAgICAiXHVmZjdmXDAwNVx1ZmY3ZlwwMDdcdWZmN2ZcMDEwXHVmZjdmXDAxMVx1ZmY3ZlwwMTJcdWZmN2ZcMDEzXHVmZjdmIiArCi0gICAgIlwwMTRcdWZmN2ZcMDE1XHVmZjdmXDAxNlx1ZmY3ZlwwMTdcdWZmN2ZcMDIwXHVmZjdmXDAyMVx1ZmY3ZlwwMjIiICsKLSAgICAiXHVmZjdmXDAyM1x1ZmY3ZlwwMzJcdWZmN2ZcMDUzXHVmZjdmXDA1NFx1ZmY3ZlwwNTVcdWZmN2ZcMDU2XHVmZjdmIiArCi0gICAgIlwwNTdcdWZmN2ZcMDYwXHVmZjdmXDA2MVx1ZmY3ZlwwNjJcdWZmN2ZcMDYzXHVmZjdmXDA2NFx1ZmY3ZlwwNjUiICsKLSAgICAiXHVmZjdmXDA2Nlx1ZmY3ZlwwNjdcdWZmN2ZcMDc1XHVmZjdmXDEwMFx1ZmY3ZlwxMDFcdWZmN2ZcMTAyXHVmZjdmIiArCi0gICAgIlwxMDdcdWZmN2ZcMTEwXHVmZjdmXDExMVx1ZmY3ZlwwMDFcMDAyXDAwMFwxMTJcMDAyXHVmZjdiXDAwNSIgKwotICAgICJcdWZmN2JcMDA3XHVmZjdiXDAxMFx1ZmY3YlwwMTFcdWZmN2JcMDEyXHVmZjdiXDAxM1x1ZmY3YlwwMTRcdWZmN2IiICsKLSAgICAiXDAxNVx1ZmY3YlwwMTZcdWZmN2JcMDE3XHVmZjdiXDAyMFx1ZmY3YlwwMjFcdWZmN2JcMDIyXHVmZjdiXDAyMyIgKwotICAgICJcdWZmN2JcMDMyXHVmZjdiXDA1M1x1ZmY3YlwwNTRcdWZmN2JcMDU1XHVmZjdiXDA1Nlx1ZmY3YlwwNTdcdWZmN2IiICsKLSAgICAiXDA2MFx1ZmY3YlwwNjFcdWZmN2JcMDYyXHVmZjdiXDA2M1x1ZmY3YlwwNjRcdWZmN2JcMDY1XHVmZjdiXDA2NiIgKwotICAgICJcdWZmN2JcMDY3XHVmZjdiXDA3NVx1ZmY3YlwxMDBcdWZmN2JcMTAxXHVmZjdiXDEwMlx1ZmY3YlwxMDdcdWZmN2IiICsKLSAgICAiXDExMFx1ZmY3YlwxMTFcdWZmN2JcMDAxXDAwMlwwMDBcMTEyXDAwMlx1ZmY3ZFwwMDVcdWZmN2RcMDA3IiArCi0gICAgIlx1ZmY3ZFwwMTBcdWZmN2RcMDExXHVmZjdkXDAxMlx1ZmY3ZFwwMTNcdWZmN2RcMDE0XHVmZjdkXDAxNVx1ZmY3ZCIgKwotICAgICJcMDE2XHVmZjdkXDAxN1x1ZmY3ZFwwMjBcdWZmN2RcMDIxXHVmZjdkXDAyMlx1ZmY3ZFwwMjNcdWZmN2RcMDMyIiArCi0gICAgIlx1ZmY3ZFwwNTNcdWZmN2RcMDU0XHVmZjdkXDA1NVx1ZmY3ZFwwNTZcdWZmN2RcMDU3XHVmZjdkXDA2MFx1ZmY3ZCIgKwotICAgICJcMDYxXHVmZjdkXDA2Mlx1ZmY3ZFwwNjNcdWZmN2RcMDY0XHVmZjdkXDA2NVx1ZmY3ZFwwNjZcdWZmN2RcMDY3IiArCi0gICAgIlx1ZmY3ZFwwNzVcdWZmN2RcMTAwXHVmZjdkXDEwMVx1ZmY3ZFwxMDJcdWZmN2RcMTA3XHVmZjdkXDExMFx1ZmY3ZCIgKwotICAgICJcMTExXHVmZjdkXDAwMVwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDEiICsKLSAgICAiXDI2N1wwNDJcMjYxXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NiIgKwotICAgICJcMDUwXDIzNVwwNTFcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2IiArCi0gICAgIlwyNjJcMDU3XDMxN1wwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzciICsKLSAgICAiXDA2NVwzMTRcMDY2XDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3MyIgKwotICAgICJcMzAzXDA3NFwyMzNcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1IiArCi0gICAgIlwxMDJcMzAyXDEwM1wyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTAiICsKLSAgICAiXDI1MFwxMTFcMjU1XDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTJcMTE2XDMxMyIgKwotICAgICJcMTE3XDI0M1wxMjBcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxIiArCi0gICAgIlwyNzBcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE1M1wwMDFcMDAyXDAwMFwwMDRcMDA3XHVmZjVlIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjVmXDAwNFx1ZmY1ZlwwMDVcdWZmNWZcMDA3XHVmZjVmXDAxMCIgKwotICAgICJcdWZmNWZcMDExXHVmZjVmXDAxMlx1ZmY1ZlwwMTNcdWZmNWZcMDE0XHVmZjVmXDAxNVx1ZmY1ZlwwMTZcdWZmNWYiICsKLSAgICAiXDAxN1x1ZmY1ZlwwMjBcdWZmNWZcMDIxXHVmZjVmXDAyMlx1ZmY1ZlwwMjNcdWZmNWZcMDI0XHVmZjVmXDAyNSIgKwotICAgICJcdWZmNWZcMDMyXHVmZjVmXDAzNVx1ZmY1ZlwwNTNcdWZmNWZcMDU0XHVmZjVmXDA1NVx1ZmY1ZlwwNTZcdWZmNWYiICsKLSAgICAiXDA1N1x1ZmY1ZlwwNjBcdWZmNWZcMDYxXHVmZjVmXDA2Mlx1ZmY1ZlwwNjNcdWZmNWZcMDY0XHVmZjVmXDA2NSIgKwotICAgICJcdWZmNWZcMDY2XHVmZjVmXDA2N1x1ZmY1ZlwwNzFcdWZmNWZcMDczXHVmZjVmXDA3NFx1ZmY1ZlwwNzVcdWZmNWYiICsKLSAgICAiXDEwMFx1ZmY1ZlwxMDFcdWZmNWZcMTAyXHVmZjVmXDEwN1x1ZmY1ZlwxMTBcdWZmNWZcMTExXHVmZjVmXDAwMSIgKwotICAgICJcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxIiArCi0gICAgIlwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTEiICsKLSAgICAiXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxNyIgKwotICAgICJcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2IiArCi0gICAgIlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzMiICsKLSAgICAiXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwMyIgKwotICAgICJcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1IiArCi0gICAgIlwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjAiICsKLSAgICAiXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNFwwMDdcdTAxNThcMDAxXDAwMlwwMDBcMDA0XDAwN1x1ZmY1NlwwMDFcMDAyXDAwMCIgKwotICAgICJcMDA2XDAwN1x1ZmY1NFwwMzJcdWZmNTRcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY1N1wwMDRcdWZmNTciICsKLSAgICAiXDAwNVx1ZmY1N1wwMDdcdWZmNTdcMDEwXHVmZjU3XDAxMVx1ZmY1N1wwMTJcdWZmNTdcMDEzXHVmZjU3XDAxNCIgKwotICAgICJcdWZmNTdcMDE1XHVmZjU3XDAxNlx1ZmY1N1wwMTdcdWZmNTdcMDIwXHVmZjU3XDAyMVx1ZmY1N1wwMjJcdWZmNTciICsKLSAgICAiXDAyM1x1ZmY1N1wwMjRcdWZmNTdcMDI1XHVmZjU3XDAzMlx1ZmY1N1wwMzVcdWZmNTdcMDUzXHVmZjU3XDA1NCIgKwotICAgICJcdWZmNTdcMDU1XHVmZjU3XDA1Nlx1ZmY1N1wwNTdcdWZmNTdcMDYwXHVmZjU3XDA2MVx1ZmY1N1wwNjJcdWZmNTciICsKLSAgICAiXDA2M1x1ZmY1N1wwNjRcdWZmNTdcMDY1XHVmZjU3XDA2Nlx1ZmY1N1wwNjdcdWZmNTdcMDcxXHVmZjU3XDA3MyIgKwotICAgICJcdWZmNTdcMDc0XHVmZjU3XDA3NVx1ZmY1N1wxMDBcdWZmNTdcMTAxXHVmZjU3XDEwMlx1ZmY1N1wxMDdcdWZmNTciICsKLSAgICAiXDExMFx1ZmY1N1wxMTFcdWZmNTdcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZiNFwwMDRcMjIyXDAwNSIgKwotICAgICJcdWZmYjRcMDA3XHVmZmI0XDAxMFx1ZmZiNFwwMTFcdWZmYjRcMDEyXHVmZmI0XDAxM1x1ZmZiNFwwMTRcdWZmYjQiICsKLSAgICAiXDAxNVx1ZmZiNFwwMTZcdWZmYjRcMDE3XHVmZmI0XDAyMFx1ZmZiNFwwMjFcdWZmYjRcMDIyXHVmZmI0XDAyMyIgKwotICAgICJcdWZmYjRcMDI0XHVmZmI0XDAyNVx1ZmZiNFwwMzJcdWZmYjRcMDUzXHVmZmI0XDA1NFx1ZmZiNFwwNTVcdWZmYjQiICsKLSAgICAiXDA1Nlx1ZmZiNFwwNTdcdWZmYjRcMDYwXHVmZmI0XDA2MVx1ZmZiNFwwNjJcdWZmYjRcMDYzXHVmZmI0XDA2NCIgKwotICAgICJcdWZmYjRcMDY1XHVmZmI0XDA2Nlx1ZmZiNFwwNjdcdWZmYjRcMDcxXHVmZmI0XDA3M1x1ZmZiNFwwNzRcdWZmYjQiICsKLSAgICAiXDA3NVx1ZmZiNFwxMDBcdWZmYjRcMTAxXHVmZmI0XDEwMlx1ZmZiNFwxMDdcdWZmYjRcMTEwXHVmZmI0XDExMSIgKwotICAgICJcdWZmYjRcMDAxXDAwMlwwMDBcMTY2XDAwN1x1MDE1Y1wwMTJcdTAxNWJcMDM2XDI0NlwwMzdcMjYzIiArCi0gICAgIlwwNDBcMzE2XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDYiICsKLSAgICAiXDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwNyIgKwotICAgICJcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzIiArCi0gICAgIlwyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzIiICsKLSAgICAiXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMCIgKwotICAgICJcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2IiArCi0gICAgIlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTUiICsKLSAgICAiXDMxMlwxMTZcMzEzXDExN1wyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1MyIgKwotICAgICJcMTI0XDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDAwNlwwMDdcdWZmNThcMDMyXHVmZjU4XDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzBcMDAyXHVmZjVkXDAwNFx1ZmY1ZFwwMDVcdWZmNWRcMDA3XHVmZjVkXDAxMFx1ZmY1ZCIgKwotICAgICJcMDExXHVmZjVkXDAxMlx1ZmY1ZFwwMTNcdWZmNWRcMDE0XHVmZjVkXDAxNVx1ZmY1ZFwwMTZcdWZmNWRcMDE3IiArCi0gICAgIlx1ZmY1ZFwwMjBcdWZmNWRcMDIxXHVmZjVkXDAyMlx1ZmY1ZFwwMjNcdWZmNWRcMDI0XHVmZjVkXDAyNVx1ZmY1ZCIgKwotICAgICJcMDMyXHVmZjVkXDAzNVx1ZmY1ZFwwNTNcdWZmNWRcMDU0XHVmZjVkXDA1NVx1ZmY1ZFwwNTZcdWZmNWRcMDU3IiArCi0gICAgIlx1ZmY1ZFwwNjBcdWZmNWRcMDYxXHVmZjVkXDA2Mlx1ZmY1ZFwwNjNcdWZmNWRcMDY0XHVmZjVkXDA2NVx1ZmY1ZCIgKwotICAgICJcMDY2XHVmZjVkXDA2N1x1ZmY1ZFwwNzFcdWZmNWRcMDczXHVmZjVkXDA3NFx1ZmY1ZFwwNzVcdWZmNWRcMTAwIiArCi0gICAgIlx1ZmY1ZFwxMDFcdWZmNWRcMTAyXHVmZjVkXDEwN1x1ZmY1ZFwxMTBcdWZmNWRcMTExXHVmZjVkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDZcMDA3XHUwMTYwXDAzMlx1MDE1ZlwwMDFcMDAyXDAwMFwwMDZcMDA3XHVmZjU5XDAzMiIgKwotICAgICJcdWZmNTlcMDAxXDAwMlwwMDBcMTYyXDAzNlwyNDZcMDM3XDI2M1wwNDBcMzE2XDA0MVwyNjciICsKLSAgICAiXDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MCIgKwotICAgICJcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyIiArCi0gICAgIlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjUiICsKLSAgICAiXDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwMyIgKwotICAgICJcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyIiArCi0gICAgIlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTAiICsKLSAgICAiXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjBcMTE1XDMxMlwxMTZcMzEzXDExNyIgKwotICAgICJcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyM1wyNTNcMTI0XDE2MFwxMzFcMjcwIiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjVjXDAwNFx1ZmY1Y1wwMDVcdWZmNWNcMDA3XHVmZjVjXDAxMCIgKwotICAgICJcdWZmNWNcMDExXHVmZjVjXDAxMlx1ZmY1Y1wwMTNcdWZmNWNcMDE0XHVmZjVjXDAxNVx1ZmY1Y1wwMTZcdWZmNWMiICsKLSAgICAiXDAxN1x1ZmY1Y1wwMjBcdWZmNWNcMDIxXHVmZjVjXDAyMlx1ZmY1Y1wwMjNcdWZmNWNcMDI0XHVmZjVjXDAyNSIgKwotICAgICJcdWZmNWNcMDMyXHVmZjVjXDAzNVx1ZmY1Y1wwNTNcdWZmNWNcMDU0XHVmZjVjXDA1NVx1ZmY1Y1wwNTZcdWZmNWMiICsKLSAgICAiXDA1N1x1ZmY1Y1wwNjBcdWZmNWNcMDYxXHVmZjVjXDA2Mlx1ZmY1Y1wwNjNcdWZmNWNcMDY0XHVmZjVjXDA2NSIgKwotICAgICJcdWZmNWNcMDY2XHVmZjVjXDA2N1x1ZmY1Y1wwNzFcdWZmNWNcMDczXHVmZjVjXDA3NFx1ZmY1Y1wwNzVcdWZmNWMiICsKLSAgICAiXDEwMFx1ZmY1Y1wxMDFcdWZmNWNcMTAyXHVmZjVjXDEwN1x1ZmY1Y1wxMTBcdWZmNWNcMTExXHVmZjVjXDAwMSIgKwotICAgICJcMDAyXDAwMFwwMDZcMDA3XHUwMTYzXDAzNVx1MDE2MlwwMDFcMDAyXDAwMFwwMDRcMDA3XHUwMTY0IiArCi0gICAgIlwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjViXDAwNFx1ZmY1YlwwMDVcdWZmNWJcMDA3XHVmZjViXDAxMCIgKwotICAgICJcdWZmNWJcMDExXHVmZjViXDAxMlx1ZmY1YlwwMTNcdWZmNWJcMDE0XHVmZjViXDAxNVx1ZmY1YlwwMTZcdWZmNWIiICsKLSAgICAiXDAxN1x1ZmY1YlwwMjBcdWZmNWJcMDIxXHVmZjViXDAyMlx1ZmY1YlwwMjNcdWZmNWJcMDI0XHVmZjViXDAyNSIgKwotICAgICJcdWZmNWJcMDMyXHVmZjViXDAzNVx1ZmY1YlwwNTNcdWZmNWJcMDU0XHVmZjViXDA1NVx1ZmY1YlwwNTZcdWZmNWIiICsKLSAgICAiXDA1N1x1ZmY1YlwwNjBcdWZmNWJcMDYxXHVmZjViXDA2Mlx1ZmY1YlwwNjNcdWZmNWJcMDY0XHVmZjViXDA2NSIgKwotICAgICJcdWZmNWJcMDY2XHVmZjViXDA2N1x1ZmY1YlwwNzFcdWZmNWJcMDczXHVmZjViXDA3NFx1ZmY1YlwwNzVcdWZmNWIiICsKLSAgICAiXDEwMFx1ZmY1YlwxMDFcdWZmNWJcMTAyXHVmZjViXDEwN1x1ZmY1YlwxMTBcdWZmNWJcMTExXHVmZjViXDAwMSIgKwotICAgICJcMDAyXDAwMFwxMzBcMDAyXHVmZjVhXDAwNFx1ZmY1YVwwMDVcdWZmNWFcMDA3XHVmZjVhXDAxMFx1ZmY1YSIgKwotICAgICJcMDExXHVmZjVhXDAxMlx1ZmY1YVwwMTNcdWZmNWFcMDE0XHVmZjVhXDAxNVx1ZmY1YVwwMTZcdWZmNWFcMDE3IiArCi0gICAgIlx1ZmY1YVwwMjBcdWZmNWFcMDIxXHVmZjVhXDAyMlx1ZmY1YVwwMjNcdWZmNWFcMDI0XHVmZjVhXDAyNVx1ZmY1YSIgKwotICAgICJcMDMyXHVmZjVhXDAzNVx1ZmY1YVwwNTNcdWZmNWFcMDU0XHVmZjVhXDA1NVx1ZmY1YVwwNTZcdWZmNWFcMDU3IiArCi0gICAgIlx1ZmY1YVwwNjBcdWZmNWFcMDYxXHVmZjVhXDA2Mlx1ZmY1YVwwNjNcdWZmNWFcMDY0XHVmZjVhXDA2NVx1ZmY1YSIgKwotICAgICJcMDY2XHVmZjVhXDA2N1x1ZmY1YVwwNzFcdWZmNWFcMDczXHVmZjVhXDA3NFx1ZmY1YVwwNzVcdWZmNWFcMTAwIiArCi0gICAgIlx1ZmY1YVwxMDFcdWZmNWFcMTAyXHVmZjVhXDEwN1x1ZmY1YVwxMTBcdWZmNWFcMTExXHVmZjVhXDAwMVwwMDIiICsKLSAgICAiXDAwMFwwMDRcMDA3XHUwMTY2XDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNjlcMDA0XHVmZjY5XDAwNSIgKwotICAgICJcdWZmNjlcMDA3XHVmZjY5XDAxMFx1ZmY2OVwwMTFcdWZmNjlcMDEyXHVmZjY5XDAxM1x1ZmY2OVwwMTRcdWZmNjkiICsKLSAgICAiXDAxNVx1ZmY2OVwwMTZcdWZmNjlcMDE3XHVmZjY5XDAyMFx1ZmY2OVwwMjFcdWZmNjlcMDIyXHVmZjY5XDAyMyIgKwotICAgICJcdWZmNjlcMDI0XHVmZjY5XDAyNVx1ZmY2OVwwMzJcdWZmNjlcMDM1XHVmZjY5XDA1M1x1ZmY2OVwwNTRcdWZmNjkiICsKLSAgICAiXDA1NVx1ZmY2OVwwNTZcdWZmNjlcMDU3XHVmZjY5XDA2MFx1ZmY2OVwwNjFcdWZmNjlcMDYyXHVmZjY5XDA2MyIgKwotICAgICJcdWZmNjlcMDY0XHVmZjY5XDA2NVx1ZmY2OVwwNjZcdWZmNjlcMDY3XHVmZjY5XDA3MVx1ZmY2OVwwNzNcdWZmNjkiICsKLSAgICAiXDA3NFx1ZmY2OVwwNzVcdWZmNjlcMTAwXHVmZjY5XDEwMVx1ZmY2OVwxMDJcdWZmNjlcMTA3XHVmZjY5XDExMCIgKwotICAgICJcdWZmNjlcMTExXHVmZjY5XDAwMVwwMDJcMDAwXDE2NFwwMTJcdWZmYWVcMDM2XHVmZmFlXDAzN1x1ZmZhZSIgKwotICAgICJcMDQwXHVmZmFlXDA0MVx1ZmZhZVwwNDJcdWZmYWVcMDQzXHVmZmFlXDA0NFx1ZmZhZVwwNDVcdWZmYWVcMDQ2IiArCi0gICAgIlx1ZmZhZVwwNDdcdWZmYWVcMDUwXHVmZmFlXDA1MVx1ZmZhZVwwNTJcdWZmYWVcMDUzXHVmZmFlXDA1NFx1ZmZhZSIgKwotICAgICJcMDU1XHVmZmFlXDA1Nlx1ZmZhZVwwNTdcdWZmYWVcMDYwXHVmZmFlXDA2MVx1ZmZhZVwwNjJcdWZmYWVcMDYzIiArCi0gICAgIlx1ZmZhZVwwNjRcdWZmYWVcMDY1XHVmZmFlXDA2Nlx1ZmZhZVwwNjdcdWZmYWVcMDcwXHVmZmFlXDA3MVx1ZmZhZSIgKwotICAgICJcMDcyXHVmZmFlXDA3M1x1ZmZhZVwwNzRcdWZmYWVcMDc1XHVmZmFlXDA3Nlx1ZmZhZVwwNzdcdWZmYWVcMTAwIiArCi0gICAgIlx1ZmZhZVwxMDFcdWZmYWVcMTAyXHVmZmFlXDEwM1x1ZmZhZVwxMDRcdWZmYWVcMTA1XHVmZmFlXDEwNlx1ZmZhZSIgKwotICAgICJcMTA3XHVmZmFlXDExMFx1ZmZhZVwxMTFcdWZmYWVcMTEyXHVmZmFlXDExM1x1ZmZhZVwxMTRcdWZmYWVcMTE1IiArCi0gICAgIlx1ZmZhZVwxMTZcdWZmYWVcMTE3XHVmZmFlXDEyMFx1ZmZhZVwxMjFcdWZmYWVcMTIyXHVmZmFlXDEyM1x1ZmZhZSIgKwotICAgICJcMTI0XHVmZmFlXDEzMVx1ZmZhZVwwMDFcMDAyXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MCIgKwotICAgICJcMzE2XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwIiArCi0gICAgIlwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTUiICsKLSAgICAiXDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MSIgKwotICAgICJcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyIiArCi0gICAgIlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjYiICsKLSAgICAiXDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwNyIgKwotICAgICJcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyIiArCi0gICAgIlwxMTZcMzEzXDExN1wyNDNcMTIwXDI0N1wxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjQiICsKLSAgICAiXDE2MFwxMzFcMjcwXDAwMVwwMDJcMDAwXDAwNlwwMzJcMzMzXDEwMVx1MDE2YVwwMDFcMDAyIiArCi0gICAgIlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjUiICsKLSAgICAiXDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2MyIgKwotICAgICJcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2IiArCi0gICAgIlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDUiICsKLSAgICAiXDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2MyIgKwotICAgICJcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1IiArCi0gICAgIlwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NlwxMTVcMDc3XDE1MFwxMDAiICsKLSAgICAiXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDE2NFwxMDRcMDUzXDEwNVwxNTVcMTA2XDA2MCIgKwotICAgICJcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1IiArCi0gICAgIlwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjMiICsKLSAgICAiXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMSIgKwotICAgICJcMDAyXDAwMFwwMjBcMDAyXHVmZmY1XDAwNVx1ZmZmNVwwMDdcdWZmZjVcMDMyXHVmZmY1XDEwMFx1ZmZmNSIgKwotICAgICJcMTAxXHVmZmY1XDEwN1x1ZmZmNVwwMDFcMDAyXDAwMFwxNjRcMDEyXHUwMTI3XDAzNlwyNDZcMDM3IiArCi0gICAgIlwyNjNcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjFcMDQzXDI1N1wwNDRcMzExXDA0NVwyNDEiICsKLSAgICAiXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MVwyNzNcMDUyXDI3NVwwNTNcMjc0XDA1NCIgKwotICAgICJcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3XDA2MFwyNDBcMDYxXDI2MFwwNjJcMjU2IiArCi0gICAgIlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjZcMjM0XDA2N1wzMDVcMDcwXDI2NFwwNzEiICsKLSAgICAiXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzM1wwNzVcMjUxXDA3NlwyNDVcMDc3XDI1NCIgKwotICAgICJcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzXDIzNlwxMDRcMzAxXDEwNVwyMTJcMTA2IiArCi0gICAgIlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTVcMTEyXDE0MVwxMTNcMTM0XDExNFwzMjAiICsKLSAgICAiXDExNVwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMFwyNDdcMTIxXDI0MlwxMjJcMzA0XDEyMyIgKwotICAgICJcMjUzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjRjXDAwNFx1ZmY0YyIgKwotICAgICJcMDA1XHVmZjRjXDAwNlx1ZmY0OFwwMDdcdWZmNGNcMDEwXHVmZjRjXDAxMVx1ZmY0Y1wwMTJcdWZmNGNcMDEzIiArCi0gICAgIlx1ZmY0Y1wwMTRcdWZmNGNcMDE1XHVmZjRjXDAxNlx1ZmY0Y1wwMTdcdWZmNGNcMDIwXHVmZjRjXDAyMVx1ZmY0YyIgKwotICAgICJcMDIyXHVmZjRjXDAyM1x1ZmY0Y1wwMjRcdWZmNGNcMDI1XHVmZjRjXDAzMlx1ZmY0Y1wwNTNcdWZmNGNcMDU0IiArCi0gICAgIlx1ZmY0Y1wwNTVcdWZmNGNcMDU2XHVmZjRjXDA1N1x1ZmY0Y1wwNjBcdWZmNGNcMDYxXHVmZjRjXDA2Mlx1ZmY0YyIgKwotICAgICJcMDYzXHVmZjRjXDA2NFx1ZmY0Y1wwNjVcdWZmNGNcMDY2XHVmZjRjXDA2N1x1ZmY0Y1wwNzFcdWZmNGNcMDczIiArCi0gICAgIlx1ZmY0Y1wwNzRcdWZmNGNcMDc1XHVmZjRjXDEwMFx1ZmY0Y1wxMDFcdWZmNGNcMTAyXHVmZjRjXDEwN1x1ZmY0YyIgKwotICAgICJcMTEwXHVmZjRjXDExMVx1ZmY0Y1wwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmFjXDAzNlx1ZmZhY1wwMzciICsKLSAgICAiXHVmZmFjXDA0MFx1ZmZhY1wwNDFcdWZmYWNcMDQyXHVmZmFjXDA0M1x1ZmZhY1wwNDRcdWZmYWNcMDQ1XHVmZmFjIiArCi0gICAgIlwwNDZcdWZmYWNcMDQ3XHVmZmFjXDA1MFx1ZmZhY1wwNTFcdWZmYWNcMDUyXHVmZmFjXDA1M1x1ZmZhY1wwNTQiICsKLSAgICAiXHVmZmFjXDA1NVx1ZmZhY1wwNTZcdWZmYWNcMDU3XHVmZmFjXDA2MFx1ZmZhY1wwNjFcdWZmYWNcMDYyXHVmZmFjIiArCi0gICAgIlwwNjNcdWZmYWNcMDY0XHVmZmFjXDA2NVx1ZmZhY1wwNjZcdWZmYWNcMDY3XHVmZmFjXDA3MFx1ZmZhY1wwNzEiICsKLSAgICAiXHVmZmFjXDA3Mlx1ZmZhY1wwNzNcdWZmYWNcMDc0XHVmZmFjXDA3NVx1ZmZhY1wwNzZcdWZmYWNcMDc3XHVmZmFjIiArCi0gICAgIlwxMDBcdWZmYWNcMTAxXHVmZmFjXDEwMlx1ZmZhY1wxMDNcdWZmYWNcMTA0XHVmZmFjXDEwNVx1ZmZhY1wxMDYiICsKLSAgICAiXHVmZmFjXDEwN1x1ZmZhY1wxMTBcdWZmYWNcMTExXHVmZmFjXDExMlx1ZmZhY1wxMTNcdWZmYWNcMTE0XHVmZmFjIiArCi0gICAgIlwxMTVcdWZmYWNcMTE2XHVmZmFjXDExN1x1ZmZhY1wxMjBcdWZmYWNcMTIxXHVmZmFjXDEyMlx1ZmZhY1wxMjMiICsKLSAgICAiXHVmZmFjXDEyNFx1ZmZhY1wxMzFcdWZmYWNcMDAxXDAwMlwwMDBcMTY0XDAxMlx1ZmZiMVwwMzZcdWZmYjEiICsKLSAgICAiXDAzN1x1ZmZiMVwwNDBcdWZmYjFcMDQxXHVmZmIxXDA0Mlx1ZmZiMVwwNDNcdWZmYjFcMDQ0XHVmZmIxXDA0NSIgKwotICAgICJcdWZmYjFcMDQ2XHVmZmIxXDA0N1x1ZmZiMVwwNTBcdWZmYjFcMDUxXHVmZmIxXDA1Mlx1ZmZiMVwwNTNcdWZmYjEiICsKLSAgICAiXDA1NFx1ZmZiMVwwNTVcdWZmYjFcMDU2XHVmZmIxXDA1N1x1ZmZiMVwwNjBcdWZmYjFcMDYxXHVmZmIxXDA2MiIgKwotICAgICJcdWZmYjFcMDYzXHVmZmIxXDA2NFx1ZmZiMVwwNjVcdWZmYjFcMDY2XHVmZmIxXDA2N1x1ZmZiMVwwNzBcdWZmYjEiICsKLSAgICAiXDA3MVx1ZmZiMVwwNzJcdWZmYjFcMDczXHVmZmIxXDA3NFx1ZmZiMVwwNzVcdWZmYjFcMDc2XHVmZmIxXDA3NyIgKwotICAgICJcdWZmYjFcMTAwXHVmZmIxXDEwMVx1ZmZiMVwxMDJcdWZmYjFcMTAzXHVmZmIxXDEwNFx1ZmZiMVwxMDVcdWZmYjEiICsKLSAgICAiXDEwNlx1ZmZiMVwxMDdcdWZmYjFcMTEwXHVmZmIxXDExMVx1ZmZiMVwxMTJcdWZmYjFcMTEzXHVmZmIxXDExNCIgKwotICAgICJcdWZmYjFcMTE1XHVmZmIxXDExNlx1ZmZiMVwxMTdcdWZmYjFcMTIwXHVmZmIxXDEyMVx1ZmZiMVwxMjJcdWZmYjEiICsKLSAgICAiXDEyM1x1ZmZiMVwxMjRcdWZmYjFcMTMxXHVmZmIxXDAwMVwwMDJcMDAwXDAwNFwwNzJcdTAxNzFcMDAxIiArCi0gICAgIlwwMDJcMDAwXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwXDMxNlwwNDFcMjY3XDA0MlwyNjEiICsKLSAgICAiXDA0M1wyNTdcMDQ0XDMxMVwwNDVcMjQxXDA0NlwzMTBcMDQ3XDI3NlwwNTBcMjM1XDA1MSIgKwotICAgICJcMjczXDA1MlwyNzVcMDUzXDI3NFwwNTRcMzA3XDA1NVwyNTJcMDU2XDI2MlwwNTdcMzE3IiArCi0gICAgIlwwNjBcMjQwXDA2MVwyNjBcMDYyXDI1NlwwNjNcMjcxXDA2NFwyNzdcMDY1XDMxNFwwNjYiICsKLSAgICAiXDIzNFwwNjdcMzA1XDA3MFwyNjRcMDcxXDI3MlwwNzJcMzE1XDA3M1wzMDNcMDc0XDIzMyIgKwotICAgICJcMDc1XDI1MVwwNzZcMjQ1XDA3N1wyNTRcMTAwXDI2NlwxMDFcMjY1XDEwMlwzMDJcMTAzIiArCi0gICAgIlwyMzZcMTA0XDMwMVwxMDVcMjEyXDEwNlwzMDZcMTA3XDMwMFwxMTBcMjUwXDExMVwyNTUiICsKLSAgICAiXDExMlwxNDFcMTEzXDEzNFwxMTRcMzIwXDExNVwzMTJcMTE2XDMxM1wxMTdcMjQzXDEyMCIgKwotICAgICJcMjQ3XDEyMVwyNDJcMTIyXDMwNFwxMjNcMjUzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyIiArCi0gICAgIlwwMDBcMTE0XDAwMlx1ZmZkNFwwMDVcdWZmZDRcMDA3XHVmZmQ0XDAxMFx1ZmZkNFwwMTFcdWZmZDRcMDEyIiArCi0gICAgIlx1ZmZkNFwwMTNcdWZmZDRcMDE0XHVmZmQ0XDAxNVx1ZmZkNFwwMTZcdWZmZDRcMDE3XHVmZmQ0XDAyMFx1ZmZkNCIgKwotICAgICJcMDIxXHVmZmQ0XDAyMlx1ZmZkNFwwMjNcdWZmZDRcMDMyXHVmZmQ0XDA1M1x1ZmZkNFwwNTRcdWZmZDRcMDU1IiArCi0gICAgIlx1ZmZkNFwwNTZcdWZmZDRcMDU3XHVmZmQ0XDA2MFx1ZmZkNFwwNjFcdWZmZDRcMDYyXHVmZmQ0XDA2M1x1ZmZkNCIgKwotICAgICJcMDY0XHVmZmQ0XDA2NVx1ZmZkNFwwNjZcdWZmZDRcMDY3XHVmZmQ0XDA3MVx1ZmZkNFwwNzVcdWZmZDRcMTAwIiArCi0gICAgIlx1ZmZkNFwxMDFcdWZmZDRcMTAyXHVmZmQ0XDEwN1x1ZmZkNFwxMTBcdWZmZDRcMTExXHVmZmQ0XDAwMVwwMDIiICsKLSAgICAiXDAwMFwxMjBcMDAyXHVmZjgyXDAwNVx1ZmY4MlwwMDdcdWZmODJcMDEwXHVmZjgyXDAxMVx1ZmY4MlwwMTIiICsKLSAgICAiXHVmZjgyXDAxM1x1ZmY4MlwwMTRcdWZmODJcMDE1XHVmZjgyXDAxNlx1ZmY4MlwwMTdcdWZmODJcMDIwXHVmZjgyIiArCi0gICAgIlwwMjFcdWZmODJcMDIyXHVmZjgyXDAyM1x1ZmY4MlwwMzJcdWZmODJcMDM1XHUwMTc0XDA1M1x1ZmY4MlwwNTQiICsKLSAgICAiXHVmZjgyXDA1NVx1ZmY4MlwwNTZcdWZmODJcMDU3XHVmZjgyXDA2MFx1ZmY4MlwwNjFcdWZmODJcMDYyXHVmZjgyIiArCi0gICAgIlwwNjNcdWZmODJcMDY0XHVmZjgyXDA2NVx1ZmY4MlwwNjZcdWZmODJcMDY3XHVmZjgyXDA3MVx1ZmY4MlwwNzMiICsKLSAgICAiXHVmZjgyXDA3NVx1ZmY4MlwxMDBcdWZmODJcMTAxXHVmZjgyXDEwMlx1ZmY4MlwxMDdcdWZmODJcMTEwXHVmZjgyIiArCi0gICAgIlwxMTFcdWZmODJcMDAxXDAwMlwwMDBcMTE2XDAwMlx1ZmY4MVwwMDVcdWZmODFcMDA3XHVmZjgxXDAxMCIgKwotICAgICJcdWZmODFcMDExXHVmZjgxXDAxMlx1ZmY4MVwwMTNcdWZmODFcMDE0XHVmZjgxXDAxNVx1ZmY4MVwwMTZcdWZmODEiICsKLSAgICAiXDAxN1x1ZmY4MVwwMjBcdWZmODFcMDIxXHVmZjgxXDAyMlx1ZmY4MVwwMjNcdWZmODFcMDMyXHVmZjgxXDA1MyIgKwotICAgICJcdWZmODFcMDU0XHVmZjgxXDA1NVx1ZmY4MVwwNTZcdWZmODFcMDU3XHVmZjgxXDA2MFx1ZmY4MVwwNjFcdWZmODEiICsKLSAgICAiXDA2Mlx1ZmY4MVwwNjNcdWZmODFcMDY0XHVmZjgxXDA2NVx1ZmY4MVwwNjZcdWZmODFcMDY3XHVmZjgxXDA3MSIgKwotICAgICJcdWZmODFcMDczXHVmZjgxXDA3NVx1ZmY4MVwxMDBcdWZmODFcMTAxXHVmZjgxXDEwMlx1ZmY4MVwxMDdcdWZmODEiICsKLSAgICAiXDExMFx1ZmY4MVwxMTFcdWZmODFcMDAxXDAwMlwwMDBcMTI2XDAwMlx1ZmZiM1wwMDRcdWZmYjNcMDA1IiArCi0gICAgIlx1ZmZiM1wwMDdcdWZmYjNcMDEwXHVmZmIzXDAxMVx1ZmZiM1wwMTJcdWZmYjNcMDEzXHVmZmIzXDAxNFx1ZmZiMyIgKwotICAgICJcMDE1XHVmZmIzXDAxNlx1ZmZiM1wwMTdcdWZmYjNcMDIwXHVmZmIzXDAyMVx1ZmZiM1wwMjJcdWZmYjNcMDIzIiArCi0gICAgIlx1ZmZiM1wwMjRcdWZmYjNcMDI1XHVmZmIzXDAzMlx1ZmZiM1wwNTNcdWZmYjNcMDU0XHVmZmIzXDA1NVx1ZmZiMyIgKwotICAgICJcMDU2XHVmZmIzXDA1N1x1ZmZiM1wwNjBcdWZmYjNcMDYxXHVmZmIzXDA2Mlx1ZmZiM1wwNjNcdWZmYjNcMDY0IiArCi0gICAgIlx1ZmZiM1wwNjVcdWZmYjNcMDY2XHVmZmIzXDA2N1x1ZmZiM1wwNzFcdWZmYjNcMDczXHVmZmIzXDA3NFx1ZmZiMyIgKwotICAgICJcMDc1XHVmZmIzXDEwMFx1ZmZiM1wxMDFcdWZmYjNcMTAyXHVmZmIzXDEwN1x1ZmZiM1wxMTBcdWZmYjNcMTExIiArCi0gICAgIlx1ZmZiM1wwMDFcMDAyXDAwMFwxNjRcMDEyXHVmZmE0XDAzNlx1ZmZhNFwwMzdcdWZmYTRcMDQwXHVmZmE0IiArCi0gICAgIlwwNDFcdWZmYTRcMDQyXHVmZmE0XDA0M1x1ZmZhNFwwNDRcdWZmYTRcMDQ1XHVmZmE0XDA0Nlx1ZmZhNFwwNDciICsKLSAgICAiXHVmZmE0XDA1MFx1ZmZhNFwwNTFcdWZmYTRcMDUyXHVmZmE0XDA1M1x1ZmZhNFwwNTRcdWZmYTRcMDU1XHVmZmE0IiArCi0gICAgIlwwNTZcdWZmYTRcMDU3XHVmZmE0XDA2MFx1ZmZhNFwwNjFcdWZmYTRcMDYyXHVmZmE0XDA2M1x1ZmZhNFwwNjQiICsKLSAgICAiXHVmZmE0XDA2NVx1ZmZhNFwwNjZcdWZmYTRcMDY3XHVmZmE0XDA3MFx1ZmZhNFwwNzFcdWZmYTRcMDcyXHVmZmE0IiArCi0gICAgIlwwNzNcdWZmYTRcMDc0XHVmZmE0XDA3NVx1ZmZhNFwwNzZcdWZmYTRcMDc3XHVmZmE0XDEwMFx1ZmZhNFwxMDEiICsKLSAgICAiXHVmZmE0XDEwMlx1ZmZhNFwxMDNcdWZmYTRcMTA0XHVmZmE0XDEwNVx1ZmZhNFwxMDZcdWZmYTRcMTA3XHVmZmE0IiArCi0gICAgIlwxMTBcdWZmYTRcMTExXHVmZmE0XDExMlx1ZmZhNFwxMTNcdWZmYTRcMTE0XHVmZmE0XDExNVx1ZmZhNFwxMTYiICsKLSAgICAiXHVmZmE0XDExN1x1ZmZhNFwxMjBcdWZmYTRcMTIxXHVmZmE0XDEyMlx1ZmZhNFwxMjNcdWZmYTRcMTI0XHVmZmE0IiArCi0gICAgIlwxMzFcdWZmYTRcMDAxXDAwMlwwMDBcMjE2XDAwNlwxMTBcMDEwXDEwNVwwMTFcMTQ0XDAxMiIgKwotICAgICJcMTE2XDAyNFwwMjRcMDI1XDAxMFwwMjdcMDc3XDAzMFwxMjVcMDMzXDEwMFwwMzRcMTI2IiArCi0gICAgIlwwMzZcMDQ1XDAzN1wxNjNcMDQwXDE1M1wwNDFcMDU0XDA0MlwwMDRcMDQzXDA0NlwwNDQiICsKLSAgICAiXDAxMlwwNDVcMDIzXDA0NlwwMTRcMDQ3XDAzNFwwNTBcMTE3XDA1MVwwNzVcMDUyXDA2NyIgKwotICAgICJcMDUzXDA3MVwwNTRcMjA1XDA1NVwwMzdcMDU2XDA1MlwwNTdcMDA2XDA2MFwwMTdcMDYxIiArCi0gICAgIlwxMjBcMDYyXDEwNlwwNjNcMDc2XDA2NFwxMTFcMDY1XDEzMVwwNjZcMTAxXDA2N1wwNTUiICsKLSAgICAiXDA3MFwxNjJcMDcxXDAyNVwwNzJcMDA1XDA3M1wxNDJcMDc0XDE2MVwwNzVcMTQzXDA3NiIgKwotICAgICJcMjExXDA3N1wxNTBcMTAwXDEyMVwxMDFcMTc2XDEwMlwyMDJcMTAzXDIxM1wxMDRcMjA3IiArCi0gICAgIlwxMDVcMjEyXDEwNlwwNjBcMTA3XDEyMlwxMTBcMjAwXDExMVwxNTJcMTEyXDE0MVwxMTMiICsKLSAgICAiXDEzNFwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxXDA2NCIgKwotICAgICJcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTI1XDA0MFwxMjZcMDQyXDEyN1wxMTNcMTMwIiArCi0gICAgIlwxNzRcMTMxXDEzMlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMVwxNDQiICsKLSAgICAiXDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwXDAzNCIgKwotICAgICJcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDNcMDQ2IiArCi0gICAgIlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NVwwNTIiICsKLSAgICAiXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwXDAxNyIgKwotICAgICJcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDFcMDY3IiArCi0gICAgIlwwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NVwxNDMiICsKLSAgICAiXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzXDEwNCIgKwotICAgICJcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTJcMTQxIiArCi0gICAgIlwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0N1wxMjEiICsKLSAgICAiXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3XDExMyIgKwotICAgICJcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDIxNlwwMDZcMTEwXDAxMFwxMDVcMDExIiArCi0gICAgIlwxNDRcMDEyXDExNlwwMjRcMDI0XDAyNVwwMTBcMDI3XDA3N1wwMzBcMTI1XDAzM1wxMDAiICsKLSAgICAiXDAzNFwxMjZcMDM2XDA0NVwwMzdcMTYzXDA0MFwxNTNcMDQxXDA1NFwwNDJcMDA0XDA0MyIgKwotICAgICJcMDQ2XDA0NFwwMTJcMDQ1XDAyM1wwNDZcMDE0XDA0N1wwMzRcMDUwXDExN1wwNTFcMDc1IiArCi0gICAgIlwwNTJcMDY3XDA1M1wwNzFcMDU0XDIwNVwwNTVcMDM3XDA1NlwwNTJcMDU3XDAwNlwwNjAiICsKLSAgICAiXDAxN1wwNjFcMTIwXDA2MlwxMDZcMDYzXDA3NlwwNjRcMTExXDA2NVwxMzFcMDY2XDEwMSIgKwotICAgICJcMDY3XDA1NVwwNzBcMTYyXDA3MVwwMjVcMDcyXDAwNVwwNzNcMTQyXDA3NFwxNjFcMDc1IiArCi0gICAgIlwxNDNcMDc2XDIxMVwwNzdcMTUwXDEwMFwxMjFcMTAxXDE3NlwxMDJcMjAyXDEwM1wyMTMiICsKLSAgICAiXDEwNFwyMDdcMTA1XDIxMlwxMDZcMDYwXDEwN1wxMjJcMTEwXDIwMFwxMTFcMTUyXDExMiIgKwotICAgICJcMTQxXDExM1wxMzRcMTE0XDAyN1wxMTVcMDIxXDExNlwwNTZcMTE3XDEzM1wxMjBcMTQ3IiArCi0gICAgIlwxMjFcMDY0XDEyMlwwNTdcMTIzXDA2M1wxMjRcMTYwXDEyNVwwNDBcMTI2XDA0MlwxMjciICsKLSAgICAiXDExM1wxMzBcMTc0XDEzMVwxMzJcMDAxXDAwMlwwMDBcMTAwXDAwMlx1ZmZlNVwwMDVcdWZmZTUiICsKLSAgICAiXDAwN1x1ZmZlNVwwMTBcdWZmZTVcMDExXHVmZmU1XDAxMlx1MDEwOFwwMTRcdWZmZTVcMDE1XHVmZmU1XDAxNiIgKwotICAgICJcdWZmZTVcMDE3XHVmZmU1XDAyMFx1ZmZlNVwwMjFcdWZmZTVcMDIyXHVmZmU1XDAyM1x1ZmZlNVwwMzJcdWZmZTUiICsKLSAgICAiXDA1M1x1ZmZlNVwwNTRcdWZmZTVcMDU1XHVmZmU1XDA1Nlx1ZmZlNVwwNTdcdWZmZTVcMDYwXHVmZmU1XDA2MSIgKwotICAgICJcdTAxMGFcMDYyXHUwMTBiXDA2M1x1MDEwOVwwNzVcdWZmZTVcMTAwXHVmZmU1XDEwMVx1ZmZlNVwxMDJcdWZmZTUiICsKLSAgICAiXDEwN1x1ZmZlNVwxMTBcdWZmZTVcMTExXHVmZmU1XDAwMVwwMDJcMDAwXDEwMFwwMDJcdWZmZTZcMDA1IiArCi0gICAgIlx1ZmZlNlwwMDdcdWZmZTZcMDEwXHVmZmU2XDAxMVx1ZmZlNlwwMTJcdTAxMDhcMDE0XHVmZmU2XDAxNVx1ZmZlNiIgKwotICAgICJcMDE2XHVmZmU2XDAxN1x1ZmZlNlwwMjBcdWZmZTZcMDIxXHVmZmU2XDAyMlx1ZmZlNlwwMjNcdWZmZTZcMDMyIiArCi0gICAgIlx1ZmZlNlwwNTNcdWZmZTZcMDU0XHVmZmU2XDA1NVx1ZmZlNlwwNTZcdWZmZTZcMDU3XHVmZmU2XDA2MFx1ZmZlNiIgKwotICAgICJcMDYxXHUwMTBhXDA2Mlx1MDEwYlwwNjNcdTAxMDlcMDc1XHVmZmU2XDEwMFx1ZmZlNlwxMDFcdWZmZTZcMTAyIiArCi0gICAgIlx1ZmZlNlwxMDdcdWZmZTZcMTEwXHVmZmU2XDExMVx1ZmZlNlwwMDFcMDAyXDAwMFwwNjZcMDAyXHVmZmU4IiArCi0gICAgIlwwMDVcdWZmZThcMDA3XHVmZmU4XDAxMFx1MDE3OFwwMTFcdTAxNzlcMDE0XHVmZmU4XDAxNVx1ZmZlOFwwMTYiICsKLSAgICAiXHVmZmU4XDAxN1x1ZmZlOFwwMjBcdWZmZThcMDIxXHVmZmU4XDAyMlx1ZmZlOFwwMjNcdWZmZThcMDMyXHVmZmU4IiArCi0gICAgIlwwNTNcdWZmZThcMDU0XHVmZmU4XDA1NVx1ZmZlOFwwNTZcdWZmZThcMDU3XHVmZmU4XDA2MFx1ZmZlOFwwNzUiICsKLSAgICAiXHVmZmU4XDEwMFx1ZmZlOFwxMDFcdWZmZThcMTA3XHVmZmU4XDExMFx1ZmZlOFwxMTFcdWZmZThcMDAxXDAwMiIgKwotICAgICJcMDAwXDAwNFwwMDdcdTAxN2VcMDAxXDAwMlwwMDBcMTMwXDAwMlx1ZmY2ZFwwMDRcdWZmNmRcMDA1IiArCi0gICAgIlx1ZmY2ZFwwMDdcdWZmNmRcMDEwXHVmZjZkXDAxMVx1ZmY2ZFwwMTJcdWZmNmRcMDEzXHVmZjZkXDAxNFx1ZmY2ZCIgKwotICAgICJcMDE1XHVmZjZkXDAxNlx1ZmY2ZFwwMTdcdWZmNmRcMDIwXHVmZjZkXDAyMVx1ZmY2ZFwwMjJcdWZmNmRcMDIzIiArCi0gICAgIlx1ZmY2ZFwwMjRcdWZmNmRcMDI1XHVmZjZkXDAzMlx1ZmY2ZFwwMzVcdWZmNmRcMDUzXHVmZjZkXDA1NFx1ZmY2ZCIgKwotICAgICJcMDU1XHVmZjZkXDA1Nlx1ZmY2ZFwwNTdcdWZmNmRcMDYwXHVmZjZkXDA2MVx1ZmY2ZFwwNjJcdWZmNmRcMDYzIiArCi0gICAgIlx1ZmY2ZFwwNjRcdWZmNmRcMDY1XHVmZjZkXDA2Nlx1ZmY2ZFwwNjdcdWZmNmRcMDcxXHVmZjZkXDA3M1x1ZmY2ZCIgKwotICAgICJcMDc0XHVmZjZkXDA3NVx1ZmY2ZFwxMDBcdWZmNmRcMTAxXHVmZjZkXDEwMlx1ZmY2ZFwxMDdcdWZmNmRcMTEwIiArCi0gICAgIlx1ZmY2ZFwxMTFcdWZmNmRcMDAxXDAwMlwwMDBcMTI0XDAwMlx1ZmZiZFwwMDVcdWZmYmRcMDA3XHVmZmJkIiArCi0gICAgIlwwMTBcdWZmYmRcMDExXHVmZmJkXDAxMlx1ZmZiZFwwMTNcdWZmYmRcMDE0XHVmZmJkXDAxNVx1ZmZiZFwwMTYiICsKLSAgICAiXHVmZmJkXDAxN1x1ZmZiZFwwMjBcdWZmYmRcMDIxXHVmZmJkXDAyMlx1ZmZiZFwwMjNcdWZmYmRcMDI0XHUwMTA0IiArCi0gICAgIlwwMjVcdTAxMDVcMDMyXHVmZmJkXDA1M1x1ZmZiZFwwNTRcdWZmYmRcMDU1XHVmZmJkXDA1Nlx1ZmZiZFwwNTciICsKLSAgICAiXHVmZmJkXDA2MFx1ZmZiZFwwNjFcdWZmYmRcMDYyXHVmZmJkXDA2M1x1ZmZiZFwwNjRcdWZmYmRcMDY1XHVmZmJkIiArCi0gICAgIlwwNjZcdWZmYmRcMDY3XHVmZmJkXDA3MVx1ZmZiZFwwNzNcdWZmYmRcMDc0XHVmZmJkXDA3NVx1ZmZiZFwxMDAiICsKLSAgICAiXHVmZmJkXDEwMVx1ZmZiZFwxMDJcdWZmYmRcMTA3XHVmZmJkXDExMFx1ZmZiZFwxMTFcdWZmYmRcMDAxXDAwMiIgKwotICAgICJcMDAwXDE2NFwwMTJcdWZmYWFcMDM2XHVmZmFhXDAzN1x1ZmZhYVwwNDBcdWZmYWFcMDQxXHVmZmFhXDA0MiIgKwotICAgICJcdWZmYWFcMDQzXHVmZmFhXDA0NFx1ZmZhYVwwNDVcdWZmYWFcMDQ2XHVmZmFhXDA0N1x1ZmZhYVwwNTBcdWZmYWEiICsKLSAgICAiXDA1MVx1ZmZhYVwwNTJcdWZmYWFcMDUzXHVmZmFhXDA1NFx1ZmZhYVwwNTVcdWZmYWFcMDU2XHVmZmFhXDA1NyIgKwotICAgICJcdWZmYWFcMDYwXHVmZmFhXDA2MVx1ZmZhYVwwNjJcdWZmYWFcMDYzXHVmZmFhXDA2NFx1ZmZhYVwwNjVcdWZmYWEiICsKLSAgICAiXDA2Nlx1ZmZhYVwwNjdcdWZmYWFcMDcwXHVmZmFhXDA3MVx1ZmZhYVwwNzJcdWZmYWFcMDczXHVmZmFhXDA3NCIgKwotICAgICJcdWZmYWFcMDc1XHVmZmFhXDA3Nlx1ZmZhYVwwNzdcdWZmYWFcMTAwXHVmZmFhXDEwMVx1ZmZhYVwxMDJcdWZmYWEiICsKLSAgICAiXDEwM1x1ZmZhYVwxMDRcdWZmYWFcMTA1XHVmZmFhXDEwNlx1ZmZhYVwxMDdcdWZmYWFcMTEwXHVmZmFhXDExMSIgKwotICAgICJcdWZmYWFcMTEyXHVmZmFhXDExM1x1ZmZhYVwxMTRcdWZmYWFcMTE1XHVmZmFhXDExNlx1ZmZhYVwxMTdcdWZmYWEiICsKLSAgICAiXDEyMFx1ZmZhYVwxMjFcdWZmYWFcMTIyXHVmZmFhXDEyM1x1ZmZhYVwxMjRcdWZmYWFcMTMxXHVmZmFhXDAwMSIgKwotICAgICJcMDAyXDAwMFwwMTBcMDA3XHUwMTg1XDEyMlx1MDE4NlwxMjNcdTAxODRcMDAxXDAwMlwwMDBcMDA0IiArCi0gICAgIlwwMDdcdTAxODhcMDAxXDAwMlwwMDBcMDA0XDAwN1x1MDE4N1wwMDFcMDAyXDAwMFwwMDRcMDA2IiArCi0gICAgIlx1MDE1NFwwMDFcMDAyXDAwMFwxMzBcMDAyXHVmZjZjXDAwNFx1ZmY2Y1wwMDVcdWZmNmNcMDA3XHVmZjZjIiArCi0gICAgIlwwMTBcdWZmNmNcMDExXHVmZjZjXDAxMlx1ZmY2Y1wwMTNcdWZmNmNcMDE0XHVmZjZjXDAxNVx1ZmY2Y1wwMTYiICsKLSAgICAiXHVmZjZjXDAxN1x1ZmY2Y1wwMjBcdWZmNmNcMDIxXHVmZjZjXDAyMlx1ZmY2Y1wwMjNcdWZmNmNcMDI0XHVmZjZjIiArCi0gICAgIlwwMjVcdWZmNmNcMDMyXHVmZjZjXDAzNVx1ZmY2Y1wwNTNcdWZmNmNcMDU0XHVmZjZjXDA1NVx1ZmY2Y1wwNTYiICsKLSAgICAiXHVmZjZjXDA1N1x1ZmY2Y1wwNjBcdWZmNmNcMDYxXHVmZjZjXDA2Mlx1ZmY2Y1wwNjNcdWZmNmNcMDY0XHVmZjZjIiArCi0gICAgIlwwNjVcdWZmNmNcMDY2XHVmZjZjXDA2N1x1ZmY2Y1wwNzFcdWZmNmNcMDczXHVmZjZjXDA3NFx1ZmY2Y1wwNzUiICsKLSAgICAiXHVmZjZjXDEwMFx1ZmY2Y1wxMDFcdWZmNmNcMTAyXHVmZjZjXDEwN1x1ZmY2Y1wxMTBcdWZmNmNcMTExXHVmZjZjIiArCi0gICAgIlwwMDFcMDAyXDAwMFwwMDRcMDA2XHUwMTVhXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmFcMDA0IiArCi0gICAgIlx1ZmY2YVwwMDVcdWZmNmFcMDA3XHVmZjZhXDAxMFx1ZmY2YVwwMTFcdWZmNmFcMDEyXHVmZjZhXDAxM1x1ZmY2YSIgKwotICAgICJcMDE0XHVmZjZhXDAxNVx1ZmY2YVwwMTZcdWZmNmFcMDE3XHVmZjZhXDAyMFx1ZmY2YVwwMjFcdWZmNmFcMDIyIiArCi0gICAgIlx1ZmY2YVwwMjNcdWZmNmFcMDI0XHVmZjZhXDAyNVx1ZmY2YVwwMzJcdWZmNmFcMDM1XHVmZjZhXDA1M1x1ZmY2YSIgKwotICAgICJcMDU0XHVmZjZhXDA1NVx1ZmY2YVwwNTZcdWZmNmFcMDU3XHVmZjZhXDA2MFx1ZmY2YVwwNjFcdWZmNmFcMDYyIiArCi0gICAgIlx1ZmY2YVwwNjNcdWZmNmFcMDY0XHVmZjZhXDA2NVx1ZmY2YVwwNjZcdWZmNmFcMDY3XHVmZjZhXDA3MVx1ZmY2YSIgKwotICAgICJcMDczXHVmZjZhXDA3NFx1ZmY2YVwwNzVcdWZmNmFcMTAwXHVmZjZhXDEwMVx1ZmY2YVwxMDJcdWZmNmFcMTA3IiArCi0gICAgIlx1ZmY2YVwxMTBcdWZmNmFcMTExXHVmZjZhXDAwMVwwMDJcMDAwXDEzMFwwMDJcdWZmNmJcMDA0XHVmZjZiIiArCi0gICAgIlwwMDVcdWZmNmJcMDA3XHVmZjZiXDAxMFx1ZmY2YlwwMTFcdWZmNmJcMDEyXHVmZjZiXDAxM1x1ZmY2YlwwMTQiICsKLSAgICAiXHVmZjZiXDAxNVx1ZmY2YlwwMTZcdWZmNmJcMDE3XHVmZjZiXDAyMFx1ZmY2YlwwMjFcdWZmNmJcMDIyXHVmZjZiIiArCi0gICAgIlwwMjNcdWZmNmJcMDI0XHVmZjZiXDAyNVx1ZmY2YlwwMzJcdWZmNmJcMDM1XHVmZjZiXDA1M1x1ZmY2YlwwNTQiICsKLSAgICAiXHVmZjZiXDA1NVx1ZmY2YlwwNTZcdWZmNmJcMDU3XHVmZjZiXDA2MFx1ZmY2YlwwNjFcdWZmNmJcMDYyXHVmZjZiIiArCi0gICAgIlwwNjNcdWZmNmJcMDY0XHVmZjZiXDA2NVx1ZmY2YlwwNjZcdWZmNmJcMDY3XHVmZjZiXDA3MVx1ZmY2YlwwNzMiICsKLSAgICAiXHVmZjZiXDA3NFx1ZmY2YlwwNzVcdWZmNmJcMTAwXHVmZjZiXDEwMVx1ZmY2YlwxMDJcdWZmNmJcMTA3XHVmZjZiIiArCi0gICAgIlwxMTBcdWZmNmJcMTExXHVmZjZiXDAwMVwwMDJcMDAwXDAwNFwwNzBcdTAxOGFcMDAxXDAwMlwwMDAiICsKLSAgICAiXDE2MlwwMzZcMjQ2XDAzN1wyNjNcMDQwXHUwMTI0XDA0MVwyNjdcMDQyXDI2MVwwNDNcMjU3IiArCi0gICAgIlwwNDRcMzExXDA0NVwyNDFcMDQ2XDMxMFwwNDdcMjc2XDA1MFwyMzVcMDUxXDI3M1wwNTIiICsKLSAgICAiXDI3NVwwNTNcMjc0XDA1NFwzMDdcMDU1XDI1MlwwNTZcMjYyXDA1N1wzMTdcMDYwXDI0MCIgKwotICAgICJcMDYxXDI2MFwwNjJcMjU2XDA2M1wyNzFcMDY0XDI3N1wwNjVcMzE0XDA2NlwyMzRcMDY3IiArCi0gICAgIlwzMDVcMDcwXDI2NFwwNzFcMjcyXDA3MlwzMTVcMDczXDMwM1wwNzRcMjMzXDA3NVwyNTEiICsKLSAgICAiXDA3NlwyNDVcMDc3XDI1NFwxMDBcMjY2XDEwMVwyNjVcMTAyXDMwMlwxMDNcMjM2XDEwNCIgKwotICAgICJcMzAxXDEwNVwyMTJcMTA2XDMwNlwxMDdcMzAwXDExMFwyNTBcMTExXDI1NVwxMTJcdTAxNDYiICsKLSAgICAiXDExM1x1MDE0NVwxMTRcMDI3XDExNVwwMjFcMTE2XDA1NlwxMTdcMTMzXDEyMFwxNDdcMTIxIiArCi0gICAgIlwwNjRcMTIyXDA1N1wxMjNcMDYzXDEyNFwxNjBcMTMxXDI3MFwwMDFcMDAyXDAwMFwxMTAiICsKLSAgICAiXDAwMlx1ZmZkOFwwMDVcdWZmZDhcMDA3XHVmZmQ4XDAxMFx1ZmZkOFwwMTFcdWZmZDhcMDEyXHVmZmQ4XDAxMyIgKwotICAgICJcdWZmZDhcMDE0XHVmZmQ4XDAxNVx1ZmZkOFwwMTZcdWZmZDhcMDE3XHVmZmQ4XDAyMFx1ZmZkOFwwMjFcdWZmZDgiICsKLSAgICAiXDAyMlx1ZmZkOFwwMjNcdWZmZDhcMDMyXHVmZmQ4XDA1M1x1ZmZkOFwwNTRcdWZmZDhcMDU1XHVmZmQ4XDA1NiIgKwotICAgICJcdWZmZDhcMDU3XHVmZmQ4XDA2MFx1ZmZkOFwwNjFcdWZmZDhcMDYyXHVmZmQ4XDA2M1x1ZmZkOFwwNjRcdWZmZDgiICsKLSAgICAiXDA2NVx1ZmZkOFwwNjZcdWZmZDhcMDc1XHVmZmQ4XDEwMFx1ZmZkOFwxMDFcdWZmZDhcMTAyXHVmZmQ4XDEwNyIgKwotICAgICJcdWZmZDhcMTEwXHVmZmQ4XDExMVx1ZmZkOFwwMDFcMDAyXDAwMFwwMDRcMDcyXHUwMThkXDAwMVwwMDIiICsKLSAgICAiXDAwMFwxNjJcMDM2XDI0NlwwMzdcMjYzXDA0MFwzMTZcMDQxXDI2N1wwNDJcMjYxXDA0MyIgKwotICAgICJcMjU3XDA0NFwzMTFcMDQ1XDI0MVwwNDZcMzEwXDA0N1wyNzZcMDUwXDIzNVwwNTFcMjczIiArCi0gICAgIlwwNTJcMjc1XDA1M1wyNzRcMDU0XDMwN1wwNTVcMjUyXDA1NlwyNjJcMDU3XDMxN1wwNjAiICsKLSAgICAiXDI0MFwwNjFcMjYwXDA2MlwyNTZcMDYzXDI3MVwwNjRcMjc3XDA2NVwzMTRcMDY2XDIzNCIgKwotICAgICJcMDY3XDMwNVwwNzBcMjY0XDA3MVwyNzJcMDcyXDMxNVwwNzNcMzAzXDA3NFwyMzNcMDc1IiArCi0gICAgIlwyNTFcMDc2XDI0NVwwNzdcMjU0XDEwMFwyNjZcMTAxXDI2NVwxMDJcMzAyXDEwM1wyMzYiICsKLSAgICAiXDEwNFwzMDFcMTA1XDIxMlwxMDZcMzA2XDEwN1wzMDBcMTEwXDI1MFwxMTFcMjU1XDExMiIgKwotICAgICJcMTQxXDExM1wxMzRcMTE0XDMyMFwxMTVcMzEyXDExNlwzMTNcMTE3XDI0M1wxMjBcMjQ3IiArCi0gICAgIlwxMjFcMjQyXDEyMlwzMDRcMTIzXDI1M1wxMjRcMTYwXDEzMVwyNzBcMDAxXDAwMlwwMDAiICsKLSAgICAiXDExNlwwMDJcdWZmZDJcMDA1XHVmZmQyXDAwN1x1ZmZkMlwwMTBcdWZmZDJcMDExXHVmZmQyXDAxMlx1ZmZkMiIgKwotICAgICJcMDEzXHVmZmQyXDAxNFx1ZmZkMlwwMTVcdWZmZDJcMDE2XHVmZmQyXDAxN1x1ZmZkMlwwMjBcdWZmZDJcMDIxIiArCi0gICAgIlx1ZmZkMlwwMjJcdWZmZDJcMDIzXHVmZmQyXDAzMlx1ZmZkMlwwNTNcdWZmZDJcMDU0XHVmZmQyXDA1NVx1ZmZkMiIgKwotICAgICJcMDU2XHVmZmQyXDA1N1x1ZmZkMlwwNjBcdWZmZDJcMDYxXHVmZmQyXDA2Mlx1ZmZkMlwwNjNcdWZmZDJcMDY0IiArCi0gICAgIlx1ZmZkMlwwNjVcdWZmZDJcMDY2XHVmZmQyXDA2N1x1ZmZkMlwwNzFcdWZmZDJcMDczXHVmZmQyXDA3NVx1ZmZkMiIgKwotICAgICJcMTAwXHVmZmQyXDEwMVx1ZmZkMlwxMDJcdWZmZDJcMTA3XHVmZmQyXDExMFx1ZmZkMlwxMTFcdWZmZDJcMDAxIiArCi0gICAgIlwwMDJcMDAwXDAwNFwwMDJcMDAwXDAwMVwwMDJcMDAwXDE2NFwwMTJcdWZmYTVcMDM2XHVmZmE1IiArCi0gICAgIlwwMzdcdWZmYTVcMDQwXHVmZmE1XDA0MVx1ZmZhNVwwNDJcdWZmYTVcMDQzXHVmZmE1XDA0NFx1ZmZhNVwwNDUiICsKLSAgICAiXHVmZmE1XDA0Nlx1ZmZhNVwwNDdcdWZmYTVcMDUwXHVmZmE1XDA1MVx1ZmZhNVwwNTJcdWZmYTVcMDUzXHVmZmE1IiArCi0gICAgIlwwNTRcdWZmYTVcMDU1XHVmZmE1XDA1Nlx1ZmZhNVwwNTdcdWZmYTVcMDYwXHVmZmE1XDA2MVx1ZmZhNVwwNjIiICsKLSAgICAiXHVmZmE1XDA2M1x1ZmZhNVwwNjRcdWZmYTVcMDY1XHVmZmE1XDA2Nlx1ZmZhNVwwNjdcdWZmYTVcMDcwXHVmZmE1IiArCi0gICAgIlwwNzFcdWZmYTVcMDcyXHVmZmE1XDA3M1x1ZmZhNVwwNzRcdWZmYTVcMDc1XHVmZmE1XDA3Nlx1ZmZhNVwwNzciICsKLSAgICAiXHVmZmE1XDEwMFx1ZmZhNVwxMDFcdWZmYTVcMTAyXHVmZmE1XDEwM1x1ZmZhNVwxMDRcdWZmYTVcMTA1XHVmZmE1IiArCi0gICAgIlwxMDZcdWZmYTVcMTA3XHVmZmE1XDExMFx1ZmZhNVwxMTFcdWZmYTVcMTEyXHVmZmE1XDExM1x1ZmZhNVwxMTQiICsKLSAgICAiXHVmZmE1XDExNVx1ZmZhNVwxMTZcdWZmYTVcMTE3XHVmZmE1XDEyMFx1ZmZhNVwxMjFcdWZmYTVcMTIyXHVmZmE1IiArCi0gICAgIlwxMjNcdWZmYTVcMTI0XHVmZmE1XDEzMVx1ZmZhNVwwMDFcMDAyXDAwMFwxMjZcMDAyXHVmZmE3XDAwNCIgKwotICAgICJcdWZmYTdcMDA1XHVmZmE3XDAwN1x1ZmZhN1wwMTBcdWZmYTdcMDExXHVmZmE3XDAxMlx1ZmZhN1wwMTNcdWZmYTciICsKLSAgICAiXDAxNFx1ZmZhN1wwMTVcdWZmYTdcMDE2XHVmZmE3XDAxN1x1ZmZhN1wwMjBcdWZmYTdcMDIxXHVmZmE3XDAyMiIgKwotICAgICJcdWZmYTdcMDIzXHVmZmE3XDAyNFx1ZmZhN1wwMjVcdWZmYTdcMDMyXHVmZmE3XDA1M1x1ZmZhN1wwNTRcdWZmYTciICsKLSAgICAiXDA1NVx1ZmZhN1wwNTZcdWZmYTdcMDU3XHVmZmE3XDA2MFx1ZmZhN1wwNjFcdWZmYTdcMDYyXHVmZmE3XDA2MyIgKwotICAgICJcdWZmYTdcMDY0XHVmZmE3XDA2NVx1ZmZhN1wwNjZcdWZmYTdcMDY3XHVmZmE3XDA3MVx1ZmZhN1wwNzNcdWZmYTciICsKLSAgICAiXDA3NFx1ZmZhN1wwNzVcdWZmYTdcMTAwXHVmZmE3XDEwMVx1ZmZhN1wxMDJcdWZmYTdcMTA3XHVmZmE3XDExMCIgKwotICAgICJcdWZmYTdcMTExXHVmZmE3XDAwMVwwMDJcMDAwXDE2NFwwMTJcdWZmYWJcMDM2XHVmZmFiXDAzN1x1ZmZhYiIgKwotICAgICJcMDQwXHVmZmFiXDA0MVx1ZmZhYlwwNDJcdWZmYWJcMDQzXHVmZmFiXDA0NFx1ZmZhYlwwNDVcdWZmYWJcMDQ2IiArCi0gICAgIlx1ZmZhYlwwNDdcdWZmYWJcMDUwXHVmZmFiXDA1MVx1ZmZhYlwwNTJcdWZmYWJcMDUzXHVmZmFiXDA1NFx1ZmZhYiIgKwotICAgICJcMDU1XHVmZmFiXDA1Nlx1ZmZhYlwwNTdcdWZmYWJcMDYwXHVmZmFiXDA2MVx1ZmZhYlwwNjJcdWZmYWJcMDYzIiArCi0gICAgIlx1ZmZhYlwwNjRcdWZmYWJcMDY1XHVmZmFiXDA2Nlx1ZmZhYlwwNjdcdWZmYWJcMDcwXHVmZmFiXDA3MVx1ZmZhYiIgKwotICAgICJcMDcyXHVmZmFiXDA3M1x1ZmZhYlwwNzRcdWZmYWJcMDc1XHVmZmFiXDA3Nlx1ZmZhYlwwNzdcdWZmYWJcMTAwIiArCi0gICAgIlx1ZmZhYlwxMDFcdWZmYWJcMTAyXHVmZmFiXDEwM1x1ZmZhYlwxMDRcdWZmYWJcMTA1XHVmZmFiXDEwNlx1ZmZhYiIgKwotICAgICJcMTA3XHVmZmFiXDExMFx1ZmZhYlwxMTFcdWZmYWJcMTEyXHVmZmFiXDExM1x1ZmZhYlwxMTRcdWZmYWJcMTE1IiArCi0gICAgIlx1ZmZhYlwxMTZcdWZmYWJcMTE3XHVmZmFiXDEyMFx1ZmZhYlwxMjFcdWZmYWJcMTIyXHVmZmFiXDEyM1x1ZmZhYiIgKwotICAgICJcMTI0XHVmZmFiXDEzMVx1ZmZhYlwwMDFcMDAyXDAwMFwyMTZcMDA2XDExMFwwMTBcMTA1XDAxMSIgKwotICAgICJcMTQ0XDAxMlwxMTZcMDI0XDAyNFwwMjVcMDEwXDAyN1wwNzdcMDMwXDEyNVwwMzNcMTAwIiArCi0gICAgIlwwMzRcMTI2XDAzNlwwNDVcMDM3XDE2M1wwNDBcMTUzXDA0MVwwNTRcMDQyXDAwNFwwNDMiICsKLSAgICAiXDA0NlwwNDRcMDEyXDA0NVwwMjNcMDQ2XDAxNFwwNDdcMDM0XDA1MFwxMTdcMDUxXDA3NSIgKwotICAgICJcMDUyXDA2N1wwNTNcMDcxXDA1NFwyMDVcMDU1XDAzN1wwNTZcMDUyXDA1N1wwMDZcMDYwIiArCi0gICAgIlwwMTdcMDYxXDEyMFwwNjJcMTA2XDA2M1wwNzZcMDY0XDExMVwwNjVcMTMxXDA2NlwxMDEiICsKLSAgICAiXDA2N1wwNTVcMDcwXDE2MlwwNzFcMDI1XDA3MlwwMDVcMDczXDE0MlwwNzRcMTYxXDA3NSIgKwotICAgICJcMTQzXDA3NlwyMTFcMDc3XDE1MFwxMDBcMTIxXDEwMVwxNzZcMTAyXDIwMlwxMDNcMjEzIiArCi0gICAgIlwxMDRcMjA3XDEwNVwyMTJcMTA2XDA2MFwxMDdcMTIyXDExMFwyMDBcMTExXDE1MlwxMTIiICsKLSAgICAiXDE0MVwxMTNcMTM0XDExNFwwMjdcMTE1XDAyMVwxMTZcMDU2XDExN1wxMzNcMTIwXDE0NyIgKwotICAgICJcMTIxXDA2NFwxMjJcMDU3XDEyM1wwNjNcMTI0XDE2MFwxMjVcMDQwXDEyNlwwNDJcMTI3IiArCi0gICAgIlwxMTNcMTMwXDE3NFwxMzFcMTMyXDAwMVwwMDJcMDAwXDAyNFwwMDJcdWZmZjBcMDA1XHVmZmYwIiArCi0gICAgIlwwMDdcdWZmZjBcMDMyXHVmZmYwXDEwMFx1ZmZmMFwxMDFcdWZmZjBcMTA3XHVmZmYwXDExMFwyMDZcMTExIiArCi0gICAgIlx1ZmZmMFwwMDFcMDAyXDAwMFwxMjRcMDAyXHVmZmJjXDAwNVx1ZmZiY1wwMDdcdWZmYmNcMDEwXHVmZmJjIiArCi0gICAgIlwwMTFcdWZmYmNcMDEyXHVmZmJjXDAxM1x1ZmZiY1wwMTRcdWZmYmNcMDE1XHVmZmJjXDAxNlx1ZmZiY1wwMTciICsKLSAgICAiXHVmZmJjXDAyMFx1ZmZiY1wwMjFcdWZmYmNcMDIyXHVmZmJjXDAyM1x1ZmZiY1wwMjRcdTAxMDRcMDI1XHUwMTA1IiArCi0gICAgIlwwMzJcdWZmYmNcMDUzXHVmZmJjXDA1NFx1ZmZiY1wwNTVcdWZmYmNcMDU2XHVmZmJjXDA1N1x1ZmZiY1wwNjAiICsKLSAgICAiXHVmZmJjXDA2MVx1ZmZiY1wwNjJcdWZmYmNcMDYzXHVmZmJjXDA2NFx1ZmZiY1wwNjVcdWZmYmNcMDY2XHVmZmJjIiArCi0gICAgIlwwNjdcdWZmYmNcMDcxXHVmZmJjXDA3M1x1ZmZiY1wwNzRcdWZmYmNcMDc1XHVmZmJjXDEwMFx1ZmZiY1wxMDEiICsKLSAgICAiXHVmZmJjXDEwMlx1ZmZiY1wxMDdcdWZmYmNcMTEwXHVmZmJjXDExMVx1ZmZiY1wwMDFcMDAyXDAwMFwxNjQiICsKLSAgICAiXDAxMlx1ZmZhZFwwMzZcdWZmYWRcMDM3XHVmZmFkXDA0MFx1ZmZhZFwwNDFcdWZmYWRcMDQyXHVmZmFkXDA0MyIgKwotICAgICJcdWZmYWRcMDQ0XHVmZmFkXDA0NVx1ZmZhZFwwNDZcdWZmYWRcMDQ3XHVmZmFkXDA1MFx1ZmZhZFwwNTFcdWZmYWQiICsKLSAgICAiXDA1Mlx1ZmZhZFwwNTNcdWZmYWRcMDU0XHVmZmFkXDA1NVx1ZmZhZFwwNTZcdWZmYWRcMDU3XHVmZmFkXDA2MCIgKwotICAgICJcdWZmYWRcMDYxXHVmZmFkXDA2Mlx1ZmZhZFwwNjNcdWZmYWRcMDY0XHVmZmFkXDA2NVx1ZmZhZFwwNjZcdWZmYWQiICsKLSAgICAiXDA2N1x1ZmZhZFwwNzBcdWZmYWRcMDcxXHVmZmFkXDA3Mlx1ZmZhZFwwNzNcdWZmYWRcMDc0XHVmZmFkXDA3NSIgKwotICAgICJcdWZmYWRcMDc2XHVmZmFkXDA3N1x1ZmZhZFwxMDBcdWZmYWRcMTAxXHVmZmFkXDEwMlx1ZmZhZFwxMDNcdWZmYWQiICsKLSAgICAiXDEwNFx1ZmZhZFwxMDVcdWZmYWRcMTA2XHVmZmFkXDEwN1x1ZmZhZFwxMTBcdWZmYWRcMTExXHVmZmFkXDExMiIgKwotICAgICJcdWZmYWRcMTEzXHVmZmFkXDExNFx1ZmZhZFwxMTVcdWZmYWRcMTE2XHVmZmFkXDExN1x1ZmZhZFwxMjBcdWZmYWQiICsKLSAgICAiXDEyMVx1ZmZhZFwxMjJcdWZmYWRcMTIzXHVmZmFkXDEyNFx1ZmZhZFwxMzFcdWZmYWRcMDAxXDAwMiIgfSk7Ci0KLSAgLyoqIEFjY2VzcyB0byBwYXJzZS1hY3Rpb24gdGFibGUuICovCi0gIHB1YmxpYyBzaG9ydFtdW10gYWN0aW9uX3RhYmxlKCkge3JldHVybiBfYWN0aW9uX3RhYmxlO30KLQotICAvKiogPGNvZGU+cmVkdWNlX2dvdG88L2NvZGU+IHRhYmxlLiAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNob3J0W11bXSBfcmVkdWNlX3RhYmxlID0gCi0gICAgdW5wYWNrRnJvbVN0cmluZ3MobmV3IFN0cmluZ1tdIHsKLSAgICAiXDAwMFx1MDE5NFwwMDBcMTcyXDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxIiArCi0gICAgIlwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzNcMDQzXDAzNlwxNjQiICsKLSAgICAiXDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NSIgKwotICAgICJcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwIiArCi0gICAgIlwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjFcMTAzXDA2MlwwMzFcMDY1XDIwMlwwNjYiICsKLSAgICAiXDAxMFwwNjdcMDcxXDA3MFwwNjdcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMiIgKwotICAgICJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzIiArCi0gICAgIlwwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTMiICsKLSAgICAiXDExMlwxMzdcMTEzXDEyNlwxMTRcMDE0XDExNVwxMjNcMTE2XDA0MlwxMTdcMDczXDEyMCIgKwotICAgICJcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDExNlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MiIgKwotICAgICJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyIiArCi0gICAgIlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XHUwMTk0XDA3MVwxNjVcMDcyXDA2NSIgKwotICAgICJcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxIiArCi0gICAgIlwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjciICsKLSAgICAiXDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIyXDAzMlwxMjNcMTAxXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDA0MFwwMDNcdTAxMjIiICsKLSAgICAiXDAyMFwxMTFcMDIzXDA3MlwwNDBcdTAxOTBcMDcxXDE2NVwwNzJcMDY1XDEwM1wwMjdcMTA0IiArCi0gICAgIlwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzciICsKLSAgICAiXDExM1wxMjZcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDExNlwwMDMiICsKLSAgICAiXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMiIgKwotICAgICJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzIiArCi0gICAgIlwxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0Nlx1MDE3ZVwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MCIgKwotICAgICJcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyIiArCi0gICAgIlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjciICsKLSAgICAiXDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwNDBcMDAzXHUwMTIyIiArCi0gICAgIlwwMjBcMTExXDAyM1wwNzJcMDQwXHUwMTc0XDA3MVwxNjVcMDcyXDA2NVwxMDNcMDI3XDEwNCIgKwotICAgICJcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3IiArCi0gICAgIlwxMTNcMTI2XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDRcMDM0XHUwMTU4XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxMFwwMjciICsKLSAgICAiXHUwMTM4XDA2M1x1MDEzN1wwNjRcdTAxMzNcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwNDBcMDAzIiArCi0gICAgIlx1MDEyMlwwMjBcMTExXDAyM1wwNzJcMDQwXHUwMTI0XDA3MVwxNjVcMDcyXDA2NVwxMDNcMDI3IiArCi0gICAgIlwxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTIiICsKLSAgICAiXDEzN1wxMTNcMTI2XDAwMVwwMDFcMDAwXDAxMFwwMDNcMjM2XDAyMFwzMjBcMDIyXHUwMTIxIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDEyNFwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMCIgKwotICAgICJcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3IiArCi0gICAgIlwxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDMiICsKLSAgICAiXDA0NlwxMzVcMDQ3XHUwMTIwXDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1IiArCi0gICAgIlwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjciICsKLSAgICAiXDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMiIgKwotICAgICJcMTM3XDExM1wxMjZcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNFwwMzRcdTAxMWZcMDAxXDAwMVwwMDBcMTcwXDAwMyIgKwotICAgICJcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyIiArCi0gICAgIlwwMjZcMDM1XDAzMlwxNDRcMDMzXHUwMTFjXDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MSIgKwotICAgICJcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1IiArCi0gICAgIlwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjAiICsKLSAgICAiXDE3NlwwNjFcMTAzXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2NyIgKwotICAgICJcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3IiArCi0gICAgIlwxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzAiICsKLSAgICAiXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNSIgKwotICAgICJcMTIzXDExNlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDEyNFwwMDNcMDQ2XDAwNFwwMzRcMDA3IiArCi0gICAgIlwyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDQiICsKLSAgICAiXDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NSIgKwotICAgICJcMjAzXDA0NlwxMzVcMDQ3XDM3M1wwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyIiArCi0gICAgIlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDMiICsKLSAgICAiXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExMyIgKwotICAgICJcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDA0XDAzNFwyMTdcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE1MFwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMCIgKwotICAgICJcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3IiArCi0gICAgIlwxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDMiICsKLSAgICAiXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NiIgKwotICAgICJcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjJcMDMxXDA2N1wwNzFcMDcwXDIwN1wwNzFcMTY1IiArCi0gICAgIlwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDAiICsKLSAgICAiXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMiIgKwotICAgICJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxIiArCi0gICAgIlwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwxMzRcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2IiArCi0gICAgIlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDEiICsKLSAgICAiXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNSIgKwotICAgICJcMDUyXDAxN1wwNTNcMDY0XDA1NFwyMTZcMDU1XDA0MFwwNzFcMTY1XDA3MlwwNjVcMDczIiArCi0gICAgIlwxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzAiICsKLSAgICAiXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMCIgKwotICAgICJcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyIiArCi0gICAgIlwxMjNcMTAxXDAwMVwwMDFcMDAwXDEzNFwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjAiICsKLSAgICAiXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NiIgKwotICAgICJcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2IiArCi0gICAgIlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDIxNVwwNTVcMDQwXDA3MVwxNjUiICsKLSAgICAiXDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMCIgKwotICAgICJcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyIiArCi0gICAgIlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIwXDE1NlwxMjEiICsKLSAgICAiXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDA0XDEyNFwyMjBcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwxNzBcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzIiICsKLSAgICAiXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzM1wyMjJcMDM2XDE2NFwwMzdcMTY2XDA0MCIgKwotICAgICJcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1IiArCi0gICAgIlwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTciICsKLSAgICAiXDEzNFwwNjBcMTc2XDA2MVwxMDNcMDYyXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MSIgKwotICAgICJcMDcwXDA2N1wwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2IiArCi0gICAgIlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTUiICsKLSAgICAiXDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExMyIgKwotICAgICJcMTI2XDExNVwxMjNcMTE2XDA0MlwxMTdcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyIiArCi0gICAgIlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNjZcMDAzXDA0NlwwMDQiICsKLSAgICAiXDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNSIgKwotICAgICJcMDMyXDE0NFwwMzZcMTY0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzIiArCi0gICAgIlwxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjQiICsKLSAgICAiXDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjFcMjI1XDA2MiIgKwotICAgICJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjdcMDcxXDA3MFwwNjdcMDcxXDE2NVwwNzJcMDY1IiArCi0gICAgIlwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDEiICsKLSAgICAiXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyNyIgKwotICAgICJcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMTVcMTIzXDExNlwwNDJcMTE3IiArCi0gICAgIlwwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTY2XDAwMyIgKwotICAgICJcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyIiArCi0gICAgIlwwMjZcMDM1XDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDIiICsKLSAgICAiXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxNyIgKwotICAgICJcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxIiArCi0gICAgIlwyMzBcMDYyXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjUiICsKLSAgICAiXDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMCIgKwotICAgICJcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyIiArCi0gICAgIlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTYiICsKLSAgICAiXDA0MlwxMTdcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTBcMDAzXDIzNlwwMjBcMzIwXDAyMlwyNDNcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDE2NlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzIiArCi0gICAgIlwwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzQiICsKLSAgICAiXDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0NyIgKwotICAgICJcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0IiArCi0gICAgIlwwNjBcMTc2XDA2MVwzMjJcMDYyXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzAiICsKLSAgICAiXDA2N1wwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNSIgKwotICAgICJcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1IiArCi0gICAgIlwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjYiICsKLSAgICAiXDExNVwxMjNcMTE2XDA0MlwxMTdcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyMyIgKwotICAgICJcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDRcMDAzXDMyNFwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAxMlwwMDNcMjM2XDAyMFwzMjBcMDIyXDMyN1wwMzUiICsKLSAgICAiXDMyNlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE2NiIgKwotICAgICJcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1IiArCi0gICAgIlwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjEiICsKLSAgICAiXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MiIgKwotICAgICJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2IiArCi0gICAgIlwwNjFcMzMxXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzEiICsKLSAgICAiXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MiIgKwotICAgICJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2IiArCi0gICAgIlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjMiICsKLSAgICAiXDExNlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE2NlwwMDNcMDQ2IiArCi0gICAgIlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjYiICsKLSAgICAiXDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NSIgKwotICAgICJcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzIiArCi0gICAgIlwwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MVwzMzQiICsKLSAgICAiXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1XDA3MiIgKwotICAgICJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2IiArCi0gICAgIlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDciICsKLSAgICAiXDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2XDA0MiIgKwotICAgICJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDEwXDAwM1wyMzZcMDIwXDMyMFwwMjJcMzM2XDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTY2XDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMCIgKwotICAgICJcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzZcMTY0IiArCi0gICAgIlwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDUiICsKLSAgICAiXDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MCIgKwotICAgICJcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxXDM0MFwwNjJcMDMxXDA2NVwyMDJcMDY2IiArCi0gICAgIlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjIiICsKLSAgICAiXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwMyIgKwotICAgICJcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzIiArCi0gICAgIlwxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTZcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjEiICsKLSAgICAiXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMTcwXDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxIiArCi0gICAgIlwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzNcMzQzXDAzNlwxNjQiICsKLSAgICAiXDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NSIgKwotICAgICJcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwIiArCi0gICAgIlwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjFcMTAzXDA2MlwwMzFcMDY1XDIwMlwwNjYiICsKLSAgICAiXDAxMFwwNjdcMDcxXDA3MFwwNjdcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMiIgKwotICAgICJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzIiArCi0gICAgIlwwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTMiICsKLSAgICAiXDExMlwxMzdcMTEzXDEyNlwxMTVcMTIzXDExNlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMSIgKwotICAgICJcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwxNjZcMDAzXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjEiICsKLSAgICAiXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NiIgKwotICAgICJcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2IiArCi0gICAgIlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTAiICsKLSAgICAiXDA1N1wxMzRcMDYwXDE3NlwwNjFcMzQ2XDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2NyIgKwotICAgICJcMDcxXDA3MFwwNjdcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwIiArCi0gICAgIlwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDQiICsKLSAgICAiXDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzNyIgKwotICAgICJcMTEzXDEyNlwxMTVcMTIzXDExNlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyIiArCi0gICAgIlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTY2XDAwM1wwNDYiICsKLSAgICAiXDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNiIgKwotICAgICJcMDM1XDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1IiArCi0gICAgIlwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTMiICsKLSAgICAiXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxXDM1MCIgKwotICAgICJcMDYyXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyIiArCi0gICAgIlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDYiICsKLSAgICAiXDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwNyIgKwotICAgICJcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTZcMDQyIiArCi0gICAgIlwxMTdcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEyXDAwM1wyMzZcMDE1XDM1NiIgKwotICAgICJcMDE2XDM1NVwwMjBcMzU3XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMTBcMDAzXDIzNlwwMTJcMzYyXDAyMFwzNjNcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDA2XDAwM1wzNjZcMDA3XDM2N1wwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE3MFwwMDNcMDQ2XDAwNFwwMzRcMDA3IiArCi0gICAgIlwyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMVwzNzUiICsKLSAgICAiXDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0MyIgKwotICAgICJcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0IiArCi0gICAgIlwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYxXDM3NlwwNjIiICsKLSAgICAiXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NSIgKwotICAgICJcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxIiArCi0gICAgIlwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjciICsKLSAgICAiXDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTZcMDQyXDExNyIgKwotICAgICJcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE2NlwwMDMiICsKLSAgICAiXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMiIgKwotICAgICJcMDI2XDAzNVwwMzJcMTQ0XDAzNlwxNjRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyIiArCi0gICAgIlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTciICsKLSAgICAiXDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XDEzNFwwNjBcMTc2XDA2MSIgKwotICAgICJcdTAxMDJcMDYyXDAzMVwwNjVcMjAyXDA2NlwwMTBcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjUiICsKLSAgICAiXDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMCIgKwotICAgICJcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyIiArCi0gICAgIlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTE1XDEyM1wxMTYiICsKLSAgICAiXDA0MlwxMTdcMDczXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTE0XDAwM1wwNDZcMDA0IiArCi0gICAgIlwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzUiICsKLSAgICAiXDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NCIgKwotICAgICJcMTcxXDA0NVx1MDEwNlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjAiICsKLSAgICAiXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNCIgKwotICAgICJcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3IiArCi0gICAgIlwxMTNcMTI2XDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwxMTRcMDAzXDA0NlwwMDQiICsKLSAgICAiXDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNSIgKwotICAgICJcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0IiArCi0gICAgIlwxNzFcMDQ1XHUwMTA1XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MCIgKwotICAgICJcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0IiArCi0gICAgIlwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzciICsKLSAgICAiXDExM1wxMjZcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDE0MFwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExIiArCi0gICAgIlwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDAiICsKLSAgICAiXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNSIgKwotICAgICJcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1Nlx1MDExMlwwNjAiICsKLSAgICAiXDE3NlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNSIgKwotICAgICJcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1IiArCi0gICAgIlwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjYiICsKLSAgICAiXDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxXDAwMVwwMDBcMTQwXDAwMyIgKwotICAgICJcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyIiArCi0gICAgIlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDMiICsKLSAgICAiXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NCIgKwotICAgICJcMDU0XDA0N1wwNTVcMDQwXDA1Nlx1MDExMVwwNjBcMTc2XDA3MVwxNjVcMDcyXDA2NVwwNzMiICsKLSAgICAiXDE1MFwwNzRcMTIyXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MCIgKwotICAgICJcMTAyXDAyMVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwIiArCi0gICAgIlwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzIiICsKLSAgICAiXDEyM1wxMDFcMDAxXDAwMVwwMDBcMTQwXDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMCIgKwotICAgICJcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzdcMTY2IiArCi0gICAgIlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDYiICsKLSAgICAiXDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XHUwMTEwIiArCi0gICAgIlwwNjBcMTc2XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzYiICsKLSAgICAiXDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NSIgKwotICAgICJcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzIiArCi0gICAgIlwxMjZcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwxNDAiICsKLSAgICAiXDAwM1wwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNSIgKwotICAgICJcMDEyXDAyNlwwMzVcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1IiArCi0gICAgIlwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTMiICsKLSAgICAiXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XHUwMTBiXDA2MFwxNzZcMDcxXDE2NVwwNzJcMDY1IiArCi0gICAgIlwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNlwxMDEiICsKLSAgICAiXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3XDEyNyIgKwotICAgICJcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTNcMTIyIiArCi0gICAgIlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMTM2XDAwM1wwNDYiICsKLSAgICAiXDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MlwwMjVcMDEyXDAyNiIgKwotICAgICJcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MVwwNjFcMDQyXDE0NVwwNDNcMTA2IiArCi0gICAgIlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1XDA1MlwwMTdcMDUzXDA2NFwwNTQiICsKLSAgICAiXDA0N1wwNTVcMDQwXDA2MFx1MDEwZlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzRcMTIyIiArCi0gICAgIlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMVwxMDMiICsKLSAgICAiXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExXDExMyIgKwotICAgICJcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDFcMDAxIiArCi0gICAgIlwwMDFcMDAwXDEzNlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzYiICsKLSAgICAiXDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0XDA0MSIgKwotICAgICJcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDdcMDE1IiArCi0gICAgIlwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA2MFx1MDEwZVwwNzFcMTY1XDA3MiIgKwotICAgICJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2IiArCi0gICAgIlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDciICsKLSAgICAiXDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1MyIgKwotICAgICJcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDA0XDAwM1x1MDExN1wwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEwXDAwM1wyMzYiICsKLSAgICAiXDAyMFwzMjBcMDIyXHUwMTE5XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNjZcMDAzIiArCi0gICAgIlwwNDZcMDA0XDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTIiICsKLSAgICAiXDAyNlwwMzVcMDMyXDE0NFwwMzZcMTY0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MiIgKwotICAgICJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3IiArCi0gICAgIlwwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjEiICsKLSAgICAiXHUwMTFiXDA2MlwwMzFcMDY1XDIwMlwwNjZcMDEwXDA2N1wwNzFcMDcwXDA2N1wwNzFcMTY1IiArCi0gICAgIlwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDAiICsKLSAgICAiXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMiIgKwotICAgICJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDExNVwxMjNcMTE2IiArCi0gICAgIlwwNDJcMTE3XDA3M1wxMjBcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMCIgKwotICAgICJcMDAyXDAwMVwwMDFcMDAwXDAwNFwxMjRcMjIwXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDRcMDAzXDMyNFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE0NlwwMDNcMDQ2IiArCi0gICAgIlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjYiICsKLSAgICAiXDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNiIgKwotICAgICJcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0IiArCi0gICAgIlwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjJcMDMxXDA2N1x1MDEzYyIgKwotICAgICJcMDcxXDE2NVwwNzJcMDY1XDA3M1wxNTBcMDc0XDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3IiArCi0gICAgIlwxNzJcMTAwXDAwNlwxMDFcMTcwXDEwMlwwMjFcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzAiICsKLSAgICAiXDEwNlwxMDJcMTA3XDEyN1wxMTBcMTY3XDExMVwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMCIgKwotICAgICJcMTU2XDEyMVwxNTNcMTIyXDAzMlwxMjNcMTAxXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwxNDZcMDAzXDA0NlwwMDQiICsKLSAgICAiXDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNSIgKwotICAgICJcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0IiArCi0gICAgIlwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDciICsKLSAgICAiXDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYyXDAzMVwwNjdcdTAxM2JcMDcxIiArCi0gICAgIlwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzIiICsKLSAgICAiXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNiIgKwotICAgICJcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2IiArCi0gICAgIlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwxNDZcMDAzXDA0NlwwMDQiICsKLSAgICAiXDAzNFwwMDdcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNSIgKwotICAgICJcMDMyXDE0NFwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0IiArCi0gICAgIlwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDciICsKLSAgICAiXDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MFwxNzZcMDYyXDAzMVwwNjdcdTAxM2FcMDcxIiArCi0gICAgIlwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzIiICsKLSAgICAiXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNiIgKwotICAgICJcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2IiArCi0gICAgIlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDA0MFwwMDNcMjM2XDAxN1x1MDE0M1wwMjAiICsKLSAgICAiXHUwMTQ2XDAzMFx1MDE0MFwwNTFcdTAxNDJcMDcyXHUwMTQxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwIiArCi0gICAgIlwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDA0XDAyNFx1MDE0Y1wwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICJcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTIiICsKLSAgICAiXDAwM1wyMzZcMDE0XHUwMTUwXDAxNlx1MDE1MVwwMjBcMzU3XDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTJcMDAzXDIzNiIgKwotICAgICJcMDEwXHUwMTU0XDAxM1x1MDE1NVwwMjBcdTAxNTZcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDQiICsKLSAgICAiXDEyNFwyMjBcMDAxXDAwMVwwMDBcMDEyXDAwM1wyMzZcMDExXHUwMTVjXDAxM1x1MDE1ZFwwMjAiICsKLSAgICAiXHUwMTU2XDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEwXDAwM1wyMzZcMDEyXHUwMTYwXDAyMCIgKwotICAgICJcMzYzXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMTJcMDAzXDIzNiIgKwotICAgICJcMDIwXDMyMFwwMjJcMzI3XDAzNVx1MDE2OFwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDAiICsKLSAgICAiXDE2NlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMVwxMzZcMDIzXDA3MiIgKwotICAgICJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM2XDE2NFwwMzdcMTY2XDA0MFwxNzRcMDQxIiArCi0gICAgIlwwNjFcMDQyXDE0NVwwNDNcMTA2XDA0NFwxNzFcMDQ1XDIwM1wwNDZcMTM1XDA0N1wwMTUiICsKLSAgICAiXDA1MlwwMTdcMDUzXDA2NFwwNTRcMDQ3XDA1NVwwNDBcMDU2XDA1MFwwNTdcMTM0XDA2MCIgKwotICAgICJcMTc2XDA2MVx1MDE2YVwwNjJcMDMxXDA2NVwyMDJcMDY2XDAxMFwwNjdcMDcxXDA3MFwwNjciICsKLSAgICAiXDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3NyIgKwotICAgICJcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwIiArCi0gICAgIlwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMTUiICsKLSAgICAiXDEyM1wxMTZcMDQyXDExN1wwNzNcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMSIgKwotICAgICJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwNFwwMDNcdTAxNmNcMDAxXDAwMVwwMDAiICsKLSAgICAiXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMiIgKwotICAgICJcMDAxXDAwMVwwMDBcMDEyXDAwM1wyMzZcMDE3XHUwMTcyXDAyMFx1MDE0NlwwNTBcdTAxNzFcMDAxIiArCi0gICAgIlwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE0NFwwMDNcMDQ2XDAwNCIgKwotICAgICJcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1IiArCi0gICAgIlwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDQiICsKLSAgICAiXDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0NyIgKwotICAgICJcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjJcdTAxN2JcMDcxXDE2NVwwNzIiICsKLSAgICAiXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzZcMDI1XDA3N1wxNzJcMTAwXDAwNiIgKwotICAgICJcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NVwxMDVcMDMwXDEwNlwxMDJcMTA3IiArCi0gICAgIlwxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzXDEyNlwxMjBcMTU2XDEyMVwxNTMiICsKLSAgICAiXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwxNDJcMDAzXDA0NlwwMDRcMDM0XDAwNyIgKwotICAgICJcMjAwXDAyMFwxMTFcMDIxXDEzNlwwMjNcMDcyXDAyNVwwMTJcMDI2XDAzNVwwMzJcMTQ0IiArCi0gICAgIlwwMzdcMTY2XDA0MFwxNzRcMDQxXDA2MVwwNDJcMTQ1XDA0M1wxMDZcMDQ0XDE3MVwwNDUiICsKLSAgICAiXDIwM1wwNDZcMTM1XDA0N1wwMTVcMDUyXDAxN1wwNTNcMDY0XDA1NFwwNDdcMDU1XDA0MCIgKwotICAgICJcMDU2XDA1MFwwNTdcdTAxN2FcMDYwXDE3NlwwNzFcMTY1XDA3MlwwNjVcMDczXDE1MFwwNzQiICsKLSAgICAiXDEyMlwwNzVcMDYwXDA3NlwwMjVcMDc3XDE3MlwxMDBcMDA2XDEwMVwxNzBcMTAyXDAyMSIgKwotICAgICJcMTAzXDAyN1wxMDRcMTU1XDEwNVwwMzBcMTA2XDEwMlwxMDdcMTI3XDExMFwxNjdcMTExIiArCi0gICAgIlwxMTNcMTEyXDEzN1wxMTNcMTI2XDEyMFwxNTZcMTIxXDE1M1wxMjJcMDMyXDEyM1wxMDEiICsKLSAgICAiXDAwMVwwMDFcMDAwXDE0MlwwMDNcMDQ2XDAwNFwwMzRcMDA3XDIwMFwwMjBcMTExXDAyMSIgKwotICAgICJcMTM2XDAyM1wwNzJcMDI1XDAxMlwwMjZcMDM1XDAzMlwxNDRcMDM3XDE2NlwwNDBcMTc0IiArCi0gICAgIlwwNDFcMDYxXDA0MlwxNDVcMDQzXDEwNlwwNDRcMTcxXDA0NVwyMDNcMDQ2XDEzNVwwNDciICsKLSAgICAiXDAxNVwwNTJcMDE3XDA1M1wwNjRcMDU0XDA0N1wwNTVcMDQwXDA1NlwwNTBcMDU3XHUwMTc5IiArCi0gICAgIlwwNjBcMTc2XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjJcMDc1XDA2MFwwNzYiICsKLSAgICAiXDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwM1wwMjdcMTA0XDE1NSIgKwotICAgICJcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzXDExMlwxMzdcMTEzIiArCi0gICAgIlwxMjZcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxIiArCi0gICAgIlwwMDBcMDA2XDExMVx1MDE4MVwxMTNcdTAxODJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwIiArCi0gICAgIlwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDIiICsKLSAgICAiXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMSIgKwotICAgICJcMDAxXDAwMFwwNDBcMDAzXDIzNlwwMTdcdTAxNDNcMDIwXHUwMTQ2XDAzMFx1MDE0MFwwNTFcdTAxOGEiICsKLSAgICAiXDA3Mlx1MDE0MVwxMDNcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwIiArCi0gICAgIlwxNjdcMTExXDExM1wxMTJcMTM3XDExM1wxMjZcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDEiICsKLSAgICAiXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDEyXDAwM1wyMzZcMDE3XHUwMTcyXDAyMFx1MDE0NlwwNTAiICsKLSAgICAiXHUwMThkXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyIiArCi0gICAgIlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDE1MlwwMDMiICsKLSAgICAiXDA0NlwwMDRcMDM0XDAwN1wyMDBcMDIwXDExMVwwMjFcMTM2XDAyM1wwNzJcMDI1XDAxMiIgKwotICAgICJcMDI2XDAzNVwwMzJcMTQ0XDAzN1wxNjZcMDQwXDE3NFwwNDFcMDYxXDA0MlwxNDVcMDQzIiArCi0gICAgIlwxMDZcMDQ0XDE3MVwwNDVcMjAzXDA0NlwxMzVcMDQ3XDAxNVwwNTJcMDE3XDA1M1wwNjQiICsKLSAgICAiXDA1NFwwNDdcMDU1XDA0MFwwNTZcMDUwXDA1N1wxMzRcMDYwXDE3NlwwNjJcMDMxXDA2NSIgKwotICAgICJcdTAxOTNcMDY3XDA3MVwwNzBcMDY3XDA3MVwxNjVcMDcyXDA2NVwwNzNcMTUwXDA3NFwxMjIiICsKLSAgICAiXDA3NVwwNjBcMDc2XDAyNVwwNzdcMTcyXDEwMFwwMDZcMTAxXDE3MFwxMDJcMDIxXDEwMyIgKwotICAgICJcMDI3XDEwNFwxNTVcMTA1XDAzMFwxMDZcMTAyXDEwN1wxMjdcMTEwXDE2N1wxMTFcMTEzIiArCi0gICAgIlwxMTJcMTM3XDExM1wxMjZcMTIwXDE1NlwxMjFcMTUzXDEyMlwwMzJcMTIzXDEwMVwwMDEiICsKLSAgICAiXDAwMVwwMDBcMDAyXDAwMVwwMDFcMDAwXDAwMlwwMDFcMDAxXDAwMFwwMDJcMDAxXDAwMSIgKwotICAgICIiIH0pOwotCi0gIC8qKiBBY2Nlc3MgdG8gPGNvZGU+cmVkdWNlX2dvdG88L2NvZGU+IHRhYmxlLiAqLwotICBwdWJsaWMgc2hvcnRbXVtdIHJlZHVjZV90YWJsZSgpIHtyZXR1cm4gX3JlZHVjZV90YWJsZTt9Ci0KLSAgLyoqIEluc3RhbmNlIG9mIGFjdGlvbiBlbmNhcHN1bGF0aW9uIGNsYXNzLiAqLwotICBwcm90ZWN0ZWQgQ1VQJFhQYXRoQ3VwJGFjdGlvbnMgYWN0aW9uX29iajsKLQotICAvKiogQWN0aW9uIGVuY2Fwc3VsYXRpb24gb2JqZWN0IGluaXRpYWxpemVyLiAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbml0X2FjdGlvbnMoKQotICAgIHsKLSAgICAgIGFjdGlvbl9vYmogPSBuZXcgQ1VQJFhQYXRoQ3VwJGFjdGlvbnModGhpcyk7Ci0gICAgfQotCi0gIC8qKiBJbnZva2UgYSB1c2VyIHN1cHBsaWVkIHBhcnNlIGFjdGlvbi4gKi8KLSAgcHVibGljIGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sIGRvX2FjdGlvbigKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBhY3RfbnVtLAotICAgIGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyIHBhcnNlciwKLSAgICBqYXZhLnV0aWwuU3RhY2sgICAgICAgICAgICBzdGFjaywKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB0b3ApCi0gICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KLSAgewotICAgIC8qIGNhbGwgY29kZSBpbiBnZW5lcmF0ZWQgY2xhc3MgKi8KLSAgICByZXR1cm4gYWN0aW9uX29iai5DVVAkWFBhdGhDdXAkZG9fYWN0aW9uKGFjdF9udW0sIHBhcnNlciwgc3RhY2ssIHRvcCk7Ci0gIH0KLQotICAvKiogSW5kaWNhdGVzIHN0YXJ0IHN0YXRlLiAqLwotICBwdWJsaWMgaW50IHN0YXJ0X3N0YXRlKCkge3JldHVybiAwO30KLSAgLyoqIEluZGljYXRlcyBzdGFydCBwcm9kdWN0aW9uLiAqLwotICBwdWJsaWMgaW50IHN0YXJ0X3Byb2R1Y3Rpb24oKSB7cmV0dXJuIDE7fQotCi0gIC8qKiA8Y29kZT5FT0Y8L2NvZGU+IFN5bWJvbCBpbmRleC4gKi8KLSAgcHVibGljIGludCBFT0Zfc3ltKCkge3JldHVybiAwO30KLQotICAvKiogPGNvZGU+ZXJyb3I8L2NvZGU+IFN5bWJvbCBpbmRleC4gKi8KLSAgcHVibGljIGludCBlcnJvcl9zeW0oKSB7cmV0dXJuIDE7fQotCi0KLQotCi1wdWJsaWMgdm9pZCByZXBvcnRfZXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBpbmZvKSB7Ci0JU3RyaW5nIGVyciA9ICJQYXJzZXIgZXJyb3I6ICI7Ci0KLQlYUGF0aEZsZXggbGV4ZXIgPSAoWFBhdGhGbGV4KSBnZXRTY2FubmVyKCk7Ci0KLQllcnIgKz0gImxpbmUgIiArIGxleGVyLmxpbmVubygpOwotCWVyciArPSAiIGNvbCAiICsgbGV4ZXIuY29sbm8oKTsKLQllcnIgKz0gIjogIiArIGxleGVyLnl5dGV4dCgpOwotCi0JCi0JdGhyb3cgbmV3IEN1cEVycm9yKGVycik7Ci19Ci0KLX0KLQotLyoqIEN1cCBnZW5lcmF0ZWQgY2xhc3MgdG8gZW5jYXBzdWxhdGUgdXNlciBzdXBwbGllZCBhY3Rpb24gY29kZS4qLwotY2xhc3MgQ1VQJFhQYXRoQ3VwJGFjdGlvbnMgewotICBwcml2YXRlIGZpbmFsIFhQYXRoQ3VwIHBhcnNlcjsKLQotICAvKiogQ29uc3RydWN0b3IgKi8KLSAgQ1VQJFhQYXRoQ3VwJGFjdGlvbnMoWFBhdGhDdXAgcGFyc2VyKSB7Ci0gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7Ci0gIH0KLQotICAvKiogTWV0aG9kIHdpdGggdGhlIGFjdHVhbCBnZW5lcmF0ZWQgYWN0aW9uIGNvZGUuICovCi0gIHB1YmxpYyBmaW5hbCBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBDVVAkWFBhdGhDdXAkZG9fYWN0aW9uKAotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRhY3RfbnVtLAotICAgIGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2VyIENVUCRYUGF0aEN1cCRwYXJzZXIsCi0gICAgamF2YS51dGlsLlN0YWNrICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHN0YWNrLAotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIENVUCRYUGF0aEN1cCR0b3ApCi0gICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KLSAgICB7Ci0gICAgICAvKiBTeW1ib2wgb2JqZWN0IGZvciByZXR1cm4gZnJvbSBhY3Rpb25zICovCi0gICAgICBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAvKiBzZWxlY3QgdGhlIGFjdGlvbiBiYXNlZCBvbiB0aGUgYWN0aW9uIG51bWJlciAqLwotICAgICAgc3dpdGNoIChDVVAkWFBhdGhDdXAkYWN0X251bSkKLSAgICAgICAgewotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI4NDogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gR0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJnZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyODM6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEdUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZ3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjgyOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImxlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI4MTogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gTFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyODA6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IE5FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibmUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjc5OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBFUSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVxIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3ODogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gTU9EIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibW9kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3NzogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gSURJViAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlkaXYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjc2OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBESVYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkaXYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjc1OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3NDogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gQU5EIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI3MzogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gRUxTRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsc2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjcyOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBUSEVOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidGhlbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzE6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEVWRVJZIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXZlcnkiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjcwOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBTT01FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic29tZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjk6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFNBVElTRklFUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNhdGlzZmllcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjg6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFJFVFVSTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInJldHVybiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjc6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IElOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY2OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBGT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjY1OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBJUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImlzIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2NDogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gQ0FTVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3QiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjYzOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBDQVNUQUJMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3RhYmxlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2MjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gVFJFQVQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNjE6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEFTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjYwOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBPRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9mIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1OTogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gSU5TVEFOQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbnN0YW5jZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTg6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEVYQ0VQVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImV4Y2VwdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTc6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IElOVEVSU0VDVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImludGVyc2VjdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTY6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFVOSU9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidW5pb24iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjU1OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBBTkNFU1RPUl9PUl9TRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYW5jZXN0b3Itb3Itc2VsZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTQ6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFBSRUNFRElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInByZWNlZGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTM6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFBSRUNFRElOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUICA9IG5ldyBTdHJpbmcoInByZWNlZGluZy1zaWJsaW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1MjogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gQU5DRVNUT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3RvciIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTE6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFBBUkVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInBhcmVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNTA6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IE5BTUVTUEFDRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5hbWVzcGFjZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDk6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEZPTExPV0lORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImZvbGxvd2luZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDg6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IEZPTExPV0lOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ3OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBERVNDRU5EQU5UX09SX1NFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50LW9mLXNlbGYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ2OiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBTRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic2VsZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDU6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IERFU0NFTkRBTlQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkZXNjZW5kYW50Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIvKlVucmVzZXJ2ZWROQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0NDogLy8gVW5yZXNlcnZlZE5DTmFtZSA6Oj0gQ0hJTEQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJjaGlsZCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDM6IC8vIFVucmVzZXJ2ZWROQ05hbWUgOjo9IFRPIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidG8iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMi8qVW5yZXNlcnZlZE5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQyOiAvLyBVbnJlc2VydmVkTkNOYW1lIDo6PSBOQ05BTUUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyLypVbnJlc2VydmVkTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNDE6IC8vIE5DTmFtZSA6Oj0gR0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJnZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI0MDogLy8gTkNOYW1lIDo6PSBHVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImd0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM5OiAvLyBOQ05hbWUgOjo9IExFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzg6IC8vIE5DTmFtZSA6Oj0gTFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJsdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIzNzogLy8gTkNOYW1lIDo6PSBORSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5lIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM2OiAvLyBOQ05hbWUgOjo9IEVRIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXEiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzU6IC8vIE5DTmFtZSA6Oj0gTU9EIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygibW9kIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM0OiAvLyBOQ05hbWUgOjo9IFRZUEVTV0lUQ0ggCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0eXBlc3dpdGNoIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjMzOiAvLyBOQ05hbWUgOjo9IFRFWFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJ0ZXh0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjMyOiAvLyBOQ05hbWUgOjo9IFNDSEVNQV9FTEVNRU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygic2NoZW1hLWVsZW1lbnQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzE6IC8vIE5DTmFtZSA6Oj0gU0NIRU1BX0FUVFJJQlVURSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNjaGVtYS1hdHRyaWJ1dGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMzA6IC8vIE5DTmFtZSA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjk6IC8vIE5DTmFtZSA6Oj0gTk9ERSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm5vZGUiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjg6IC8vIE5DTmFtZSA6Oj0gSVRFTSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlPYmplY3QgbiA9IChPYmplY3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIml0ZW0iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjc6IC8vIE5DTmFtZSA6Oj0gRU1QVFlfU0VRVUVOQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJT2JqZWN0IG4gPSAoT2JqZWN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJlbXB0eS1zZXF1ZW5jZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNjogLy8gTkNOYW1lIDo6PSBFTEVNRU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZWxlbWVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNTogLy8gTkNOYW1lIDo6PSBET0NVTUVOVF9OT0RFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZG9jdW1lbnQtbm9kZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyNDogLy8gTkNOYW1lIDo6PSBDT01NRU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU9iamVjdCBuID0gKE9iamVjdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiY29tbWVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyMzogLy8gTkNOYW1lIDo6PSBJRElWIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaWRpdiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyMjogLy8gTkNOYW1lIDo6PSBESVYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJkaXYiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMjE6IC8vIE5DTmFtZSA6Oj0gT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJvciIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyMDogLy8gTkNOYW1lIDo6PSBBTkQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmQiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTk6IC8vIE5DTmFtZSA6Oj0gRUxTRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImVsc2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTg6IC8vIE5DTmFtZSA6Oj0gVEhFTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInRoZW4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTc6IC8vIE5DTmFtZSA6Oj0gSUYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpZiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxNjogLy8gTkNOYW1lIDo6PSBFVkVSWSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImV2ZXJ5Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE1OiAvLyBOQ05hbWUgOjo9IFNPTUUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzb21lIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjE0OiAvLyBOQ05hbWUgOjo9IFNBVElTRklFUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInNhdGlzZmllcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxMzogLy8gTkNOYW1lIDo6PSBSRVRVUk4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJyZXR1cm4iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTI6IC8vIE5DTmFtZSA6Oj0gSU4gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpbiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIxMTogLy8gTkNOYW1lIDo6PSBGT1IgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJmb3IiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTA6IC8vIE5DTmFtZSA6Oj0gSVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJpcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwOTogLy8gTkNOYW1lIDo6PSBDQVNUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiY2FzdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwODogLy8gTkNOYW1lIDo6PSBDQVNUQUJMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNhc3RhYmxlIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA3OiAvLyBOQ05hbWUgOjo9IFRSRUFUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiYXMiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDY6IC8vIE5DTmFtZSA6Oj0gQVMgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhcyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwNTogLy8gTkNOYW1lIDo6PSBPRiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoIm9mIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjA0OiAvLyBOQ05hbWUgOjo9IElOU1RBTkNFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiaW5zdGFuY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMDM6IC8vIE5DTmFtZSA6Oj0gRVhDRVBUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZXhjZXB0Iik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjAyOiAvLyBOQ05hbWUgOjo9IElOVEVSU0VDVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImludGVyc2VjdCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwMTogLy8gTkNOYW1lIDo6PSBVTklPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInVuaW9uIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjAwOiAvLyBOQ05hbWUgOjo9IEFOQ0VTVE9SX09SX1NFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJhbmNlc3Rvci1vci1zZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk5OiAvLyBOQ05hbWUgOjo9IFBSRUNFRElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInByZWNlZGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5ODogLy8gTkNOYW1lIDo6PSBQUkVDRURJTkdfU0lCTElORyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCAgPSBuZXcgU3RyaW5nKCJwcmVjZWRpbmctc2libGluZyIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5NzogLy8gTkNOYW1lIDo6PSBBTkNFU1RPUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImFuY2VzdG9yIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTk2OiAvLyBOQ05hbWUgOjo9IFBBUkVOVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoInBhcmVudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE5NTogLy8gTkNOYW1lIDo6PSBOQU1FU1BBQ0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJuYW1lc3BhY2UiKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTQ6IC8vIE5DTmFtZSA6Oj0gRk9MTE9XSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTkzOiAvLyBOQ05hbWUgOjo9IEZPTExPV0lOR19TSUJMSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZm9sbG93aW5nLXNpYmxpbmciKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTI6IC8vIE5DTmFtZSA6Oj0gREVTQ0VOREFOVF9PUl9TRUxGIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudC1vZi1zZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTkxOiAvLyBOQ05hbWUgOjo9IFNFTEYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIG4gPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU3RyaW5nKCJzZWxmIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTkwOiAvLyBOQ05hbWUgOjo9IEFUVFJJQlVURSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImF0dHJpYnV0ZSIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4OTogLy8gTkNOYW1lIDo6PSBERVNDRU5EQU5UIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygiZGVzY2VuZGFudCIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxLypOQ05hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE4ODogLy8gTkNOYW1lIDo6PSBDSElMRCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmcoImNoaWxkIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEvKk5DTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg3OiAvLyBOQ05hbWUgOjo9IFRPIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFN0cmluZygidG8iKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODY6IC8vIE5DTmFtZSA6Oj0gTkNOQU1FIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMS8qTkNOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODU6IC8vIFVucmVzZXJ2ZWRRTmFtZSA6Oj0gTkNOYW1lIENPTE9OIE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVN0cmluZyBwID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIGwgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUocCxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTUvKlVucmVzZXJ2ZWRRTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTg0OiAvLyBVbnJlc2VydmVkUU5hbWUgOjo9IFVucmVzZXJ2ZWROQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZShsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTUvKlVucmVzZXJ2ZWRRTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTgzOiAvLyBMb2NhbFBhcnQgOjo9IE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQvKkxvY2FsUGFydCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTgyOiAvLyBQcmVmaXggOjo9IE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMvKlByZWZpeCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTgxOiAvLyBRTmFtZSA6Oj0gTkNOYW1lIENPTE9OIE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVN0cmluZyBwID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nIGwgPSAoU3RyaW5nKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUocCxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTQvKlFOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODA6IC8vIFFOYW1lIDo6PSBOQ05hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgbCA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZShsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTQvKlFOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzk6IC8vIFZhck5hbWUgOjo9IFFOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgbiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTYvKlZhck5hbWUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3ODogLy8gU3RyaW5nTGl0ZXJhbCA6Oj0gU1RSSU5HIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTdHJpbmcgcyA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdHJpbmdMaXRlcmFsKHMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1LypTdHJpbmdMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzc6IC8vIERvdWJsZUxpdGVyYWwgOjo9IERPVUJMRSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG91YmxlTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRG91YmxlIGQgPSAoRG91YmxlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRG91YmxlTGl0ZXJhbChkLmRvdWJsZVZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2NC8qRG91YmxlTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc2OiAvLyBEZWNpbWFsTGl0ZXJhbCA6Oj0gREVDSU1BTCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVjaW1hbExpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IGRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBkcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUJpZ0RlY2ltYWwgZCA9IChCaWdEZWNpbWFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRGVjaW1hbExpdGVyYWwoZCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYyLypEZWNpbWFsTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc1OiAvLyBJbnRlZ2VyTGl0ZXJhbCA6Oj0gSU5URUdFUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlckxpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IGlsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBpcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUJpZ0ludGVnZXIgaSA9IChCaWdJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlckxpdGVyYWwoaSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYzLypJbnRlZ2VyTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc0OiAvLyBUeXBlTmFtZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4LypUeXBlTmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTczOiAvLyBFbGVtZW50TmFtZSA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg5LypFbGVtZW50TmFtZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTcyOiAvLyBBdHRyaWJ1dGVOYW1lIDo6PSBRTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEyLypBdHRyaWJ1dGVOYW1lKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNzE6IC8vIEVsZW1lbnREZWNsYXJhdGlvbiA6Oj0gRWxlbWVudE5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2LypFbGVtZW50RGVjbGFyYXRpb24qLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE3MDogLy8gU2NoZW1hRWxlbWVudFRlc3QgOjo9IFNDSEVNQV9FTEVNRU5UIExQQVIgRWxlbWVudERlY2xhcmF0aW9uIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNjaGVtYUVsZW1UZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSBlID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2NoZW1hRWxlbVRlc3QoZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDczLypTY2hlbWFFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY5OiAvLyBFbGVtZW50TmFtZU9yV2lsZGNhcmQgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBudWxsOyAvKiBYWFggKi8gCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNy8qRWxlbWVudE5hbWVPcldpbGRjYXJkKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjg6IC8vIEVsZW1lbnROYW1lT3JXaWxkY2FyZCA6Oj0gRWxlbWVudE5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBlID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBlOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3LypFbGVtZW50TmFtZU9yV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2NzogLy8gRWxlbWVudFRlc3QgOjo9IEVMRU1FTlQgTFBBUiBFbGVtZW50TmFtZU9yV2lsZGNhcmQgQ09NTUEgVHlwZU5hbWUgUVVFU1RJT05NQVJLIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLnJpZ2h0OwotCQlRTmFtZSBlID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC00KSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlRTmFtZSB0ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCQotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkLHQsdHJ1ZSk7Ci0JCQkgIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcxLypFbGVtZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC02KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY2OiAvLyBFbGVtZW50VGVzdCA6Oj0gRUxFTUVOVCBMUEFSIEVsZW1lbnROYW1lT3JXaWxkY2FyZCBDT01NQSBUeXBlTmFtZSBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJUU5hbWUgZSA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgICAgLy8gWFhYOiB3aWxkY2FyZCEhCi0JCQkgICAgIGJvb2xlYW4gd2lsZCA9IGZhbHNlOwotCQkJICAgICBpZihlID09IG51bGwpCi0JCQkgICAgIAl3aWxkID0gdHJ1ZTsKLQkJCQkKLQkJCSAgICAgUkVTVUxUID0gbmV3IEVsZW1lbnRUZXN0KGUsd2lsZCx0KTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzEvKkVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjU6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgRWxlbWVudE5hbWVPcldpbGRjYXJkIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSBlID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCQotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGUgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgRWxlbWVudFRlc3QoZSx3aWxkKTsKLQkJCSAgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzEvKkVsZW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjQ6IC8vIEVsZW1lbnRUZXN0IDo6PSBFTEVNRU5UIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBFbGVtZW50VGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3MS8qRWxlbWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2MzogLy8gQXR0cmlidXRlRGVjbGFyYXRpb24gOjo9IEF0dHJpYnV0ZU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxMC8qQXR0cmlidXRlRGVjbGFyYXRpb24qLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE2MjogLy8gU2NoZW1hQXR0cmlidXRlVGVzdCA6Oj0gU0NIRU1BX0FUVFJJQlVURSBMUEFSIEF0dHJpYnV0ZURlY2xhcmF0aW9uIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNjaGVtYUF0dHJUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSBhID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2NoZW1hQXR0clRlc3QoYSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDcyLypTY2hlbWFBdHRyaWJ1dGVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNjE6IC8vIEF0dHJpYk5hbWVPcldpbGRjYXJkIDo6PSBTVEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRTmFtZSBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbnVsbDsgLyogWFhYICovIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDExLypBdHRyaWJOYW1lT3JXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTYwOiAvLyBBdHRyaWJOYW1lT3JXaWxkY2FyZCA6Oj0gQXR0cmlidXRlTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIGEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IGE7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDExLypBdHRyaWJOYW1lT3JXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTU5OiAvLyBBdHRyaWJ1dGVUZXN0IDo6PSBBVFRSSUJVVEUgTFBBUiBBdHRyaWJOYW1lT3JXaWxkY2FyZCBDT01NQSBUeXBlTmFtZSBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBdHRyaWJ1dGVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlRTmFtZSBhID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlRTmFtZSB0ID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCQotCQkJICAgICAvLyBYWFg6IHdpbGRjYXJkISEKLQkJCSAgICAgYm9vbGVhbiB3aWxkID0gZmFsc2U7Ci0JCQkgICAgIGlmKGEgPT0gbnVsbCkKLQkJCSAgICAgCXdpbGQgPSB0cnVlOwotCQkJCQotCQkJICAgICBSRVNVTFQgPSBuZXcgQXR0cmlidXRlVGVzdChhLHdpbGQsdCk7Ci0JCQkgIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY5LypBdHRyaWJ1dGVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTg6IC8vIEF0dHJpYnV0ZVRlc3QgOjo9IEFUVFJJQlVURSBMUEFSIEF0dHJpYk5hbWVPcldpbGRjYXJkIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJpYnV0ZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVFOYW1lIGEgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJCi0JCQkgICAgIC8vIFhYWDogd2lsZGNhcmQhIQotCQkJICAgICBib29sZWFuIHdpbGQgPSBmYWxzZTsKLQkJCSAgICAgaWYoYSA9PSBudWxsKQotCQkJICAgICAJd2lsZCA9IHRydWU7Ci0JCQkJCi0JCQkgICAgIFJFU1VMVCA9IG5ldyBBdHRyaWJ1dGVUZXN0KGEsd2lsZCk7Ci0JCQkgIAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY5LypBdHRyaWJ1dGVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTc6IC8vIEF0dHJpYnV0ZVRlc3QgOjo9IEFUVFJJQlVURSBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF0dHJpYnV0ZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBBdHRyaWJ1dGVUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY5LypBdHRyaWJ1dGVUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTY6IC8vIFBJVGVzdCA6Oj0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiBMUEFSIFN0cmluZ0xpdGVyYWwgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUElUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlTdHJpbmdMaXRlcmFsIHMgPSAoU3RyaW5nTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFBJVGVzdChzLnN0cmluZygpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjgvKlBJVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTU1OiAvLyBQSVRlc3QgOjo9IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gTFBBUiBOQ05hbWUgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUElUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBQSVRlc3Qobik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY4LypQSVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1NDogLy8gUElUZXN0IDo6PSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUElUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgUElUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY4LypQSVRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1MzogLy8gQ29tbWVudFRlc3QgOjo9IENPTU1FTlQgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb21tZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IENvbW1lbnRUZXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY3LypDb21tZW50VGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTUyOiAvLyBUZXh0VGVzdCA6Oj0gVEVYVCBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgVGV4dFRlc3QoKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjYvKlRleHRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNTE6IC8vIERvY3VtZW50VGVzdCA6Oj0gRE9DVU1FTlRfTk9ERSBMUEFSIFNjaGVtYUVsZW1lbnRUZXN0IFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERvY3VtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJU2NoZW1hRWxlbVRlc3QgZSA9IChTY2hlbWFFbGVtVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IERvY3VtZW50VGVzdChEb2N1bWVudFRlc3QuU0NIRU1BX0VMRU1FTlQsZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDY1LypEb2N1bWVudFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1MDogLy8gRG9jdW1lbnRUZXN0IDo6PSBET0NVTUVOVF9OT0RFIExQQVIgRWxlbWVudFRlc3QgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlFbGVtZW50VGVzdCBlID0gKEVsZW1lbnRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRG9jdW1lbnRUZXN0KERvY3VtZW50VGVzdC5FTEVNRU5ULGUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2NS8qRG9jdW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDk6IC8vIERvY3VtZW50VGVzdCA6Oj0gRE9DVU1FTlRfTk9ERSBMUEFSIFJQQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERvY3VtZW50VGVzdCBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IERvY3VtZW50VGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2NS8qRG9jdW1lbnRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDg6IC8vIEFueUtpbmRUZXN0IDo6PSBOT0RFIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQW55S2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBBbnlLaW5kVGVzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3MC8qQW55S2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0NzogLy8gS2luZFRlc3QgOjo9IEFueUtpbmRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQW55S2luZFRlc3QgbiA9IChBbnlLaW5kVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDY6IC8vIEtpbmRUZXN0IDo6PSBUZXh0VGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVRleHRUZXN0IG4gPSAoVGV4dFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ1OiAvLyBLaW5kVGVzdCA6Oj0gQ29tbWVudFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb21tZW50VGVzdCBuID0gKENvbW1lbnRUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0NDogLy8gS2luZFRlc3QgOjo9IFBJVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVBJVGVzdCBuID0gKFBJVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDM6IC8vIEtpbmRUZXN0IDo6PSBTY2hlbWFBdHRyaWJ1dGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2NoZW1hQXR0clRlc3QgbiA9IChTY2hlbWFBdHRyVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxNDI6IC8vIEtpbmRUZXN0IDo6PSBTY2hlbWFFbGVtZW50VGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNjaGVtYUVsZW1UZXN0IG4gPSAoU2NoZW1hRWxlbVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQxOiAvLyBLaW5kVGVzdCA6Oj0gQXR0cmlidXRlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgS2luZFRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUF0dHJpYnV0ZVRlc3QgbiA9IChBdHRyaWJ1dGVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ni8qS2luZFRlc3QqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE0MDogLy8gS2luZFRlc3QgOjo9IEVsZW1lbnRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBLaW5kVGVzdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRWxlbWVudFRlc3QgbiA9IChFbGVtZW50VGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTYvKktpbmRUZXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzk6IC8vIEtpbmRUZXN0IDo6PSBEb2N1bWVudFRlc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEtpbmRUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlEb2N1bWVudFRlc3QgbiA9IChEb2N1bWVudFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU2LypLaW5kVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM4OiAvLyBBdG9taWNUeXBlIDo6PSBRTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDEzLypBdG9taWNUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzc6IC8vIEl0ZW1UeXBlIDo6PSBJVEVNIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSXRlbVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJdGVtVHlwZShJdGVtVHlwZS5JVEVNLG51bGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMi8qSXRlbVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzNjogLy8gSXRlbVR5cGUgOjo9IEtpbmRUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJdGVtVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQga2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGtyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJS2luZFRlc3QgayA9IChLaW5kVGVzdCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEl0ZW1UeXBlKEl0ZW1UeXBlLktJTkRURVNULGspOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMi8qSXRlbVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzNTogLy8gSXRlbVR5cGUgOjo9IEF0b21pY1R5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZW1UeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCBxbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBxID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSXRlbVR5cGUoSXRlbVR5cGUuUU5BTUUscSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIyLypJdGVtVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM0OiAvLyBPY2N1cnJlbmNlSW5kaWNhdG9yIDo6PSBQTFVTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihTZXF1ZW5jZVR5cGUuUExVUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE4LypPY2N1cnJlbmNlSW5kaWNhdG9yKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMzM6IC8vIE9jY3VycmVuY2VJbmRpY2F0b3IgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFNlcXVlbmNlVHlwZS5TVEFSKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTgvKk9jY3VycmVuY2VJbmRpY2F0b3IqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzMjogLy8gT2NjdXJyZW5jZUluZGljYXRvciA6Oj0gUVVFU1RJT05NQVJLIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihTZXF1ZW5jZVR5cGUuUVVFU1RJT04pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOC8qT2NjdXJyZW5jZUluZGljYXRvciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTMxOiAvLyBTZXF1ZW5jZVR5cGUgOjo9IEVNUFRZX1NFUVVFTkNFIExQQVIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VxdWVuY2VUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKFNlcXVlbmNlVHlwZS5FTVBUWSwgbnVsbCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM5LypTZXF1ZW5jZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEzMDogLy8gU2VxdWVuY2VUeXBlIDo6PSBJdGVtVHlwZSBPY2N1cnJlbmNlSW5kaWNhdG9yIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTZXF1ZW5jZVR5cGUgUkVTVUxUID0gbnVsbDsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUl0ZW1UeXBlIHQgPSAoSXRlbVR5cGUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IGlsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBpcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUludGVnZXIgaSA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKGkuaW50VmFsdWUoKSwgdCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM5LypTZXF1ZW5jZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyOTogLy8gU2VxdWVuY2VUeXBlIDo6PSBJdGVtVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2VxdWVuY2VUeXBlIFJFU1VMVCA9IG51bGw7Ci0JCWludCB0bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgdHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlJdGVtVHlwZSB0ID0gKEl0ZW1UeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgU2VxdWVuY2VUeXBlKFNlcXVlbmNlVHlwZS5OT05FLCB0KTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzkvKlNlcXVlbmNlVHlwZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI4OiAvLyBTaW5nbGVUeXBlIDo6PSBBdG9taWNUeXBlIFFVRVNUSU9OTUFSSyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2luZ2xlVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNpbmdsZVR5cGUodCx0cnVlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzgvKlNpbmdsZVR5cGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyNzogLy8gU2luZ2xlVHlwZSA6Oj0gQXRvbWljVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2luZ2xlVHlwZSBSRVNVTFQgPSBudWxsOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJUU5hbWUgdCA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFNpbmdsZVR5cGUodCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM4LypTaW5nbGVUeXBlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjY6IC8vIEZ1bmN0aW9uQ2FsbE1pZGRsZSA6Oj0gRnVuY3Rpb25DYWxsTWlkZGxlIENPTU1BIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBjcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gYyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIzLypGdW5jdGlvbkNhbGxNaWRkbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyNTogLy8gRnVuY3Rpb25DYWxsTWlkZGxlIDo6PSBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCSAgIENvbGxlY3Rpb24gYyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCSAgIGMuYWRkKGUpOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIzLypGdW5jdGlvbkNhbGxNaWRkbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyNDogLy8gRnVuY3Rpb25DYWxsIDo6PSBVbnJlc2VydmVkUU5hbWUgTFBBUiBGdW5jdGlvbkNhbGxNaWRkbGUgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRnVuY3Rpb25DYWxsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGEgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkKLQkJCSAgIFJFU1VMVCA9IG5ldyBGdW5jdGlvbkNhbGwobixhKTsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYwLypGdW5jdGlvbkNhbGwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyMzogLy8gRnVuY3Rpb25DYWxsIDo6PSBVbnJlc2VydmVkUU5hbWUgTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGdW5jdGlvbkNhbGwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIG4gPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJCi0JCQkgICBSRVNVTFQgPSBuZXcgRnVuY3Rpb25DYWxsKG4sbmV3IEFycmF5TGlzdCgpKTsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYwLypGdW5jdGlvbkNhbGwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEyMjogLy8gQ29udGV4dEl0ZW1FeHByIDo6PSBET1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENudHhJdGVtRXhwciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IENudHhJdGVtRXhwcigpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1OS8qQ29udGV4dEl0ZW1FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMjE6IC8vIFBhcmVudGhlc2l6ZWRFeHByIDo6PSBMUEFSIEV4cHIgUlBBUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBlID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IGU7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI0LypQYXJlbnRoZXNpemVkRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTIwOiAvLyBQYXJlbnRoZXNpemVkRXhwciA6Oj0gTFBBUiBSUEFSIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgQXJyYXlMaXN0KCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI0LypQYXJlbnRoZXNpemVkRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE5OiAvLyBWYXJSZWYgOjo9IERPTExBUiBWYXJOYW1lIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBWYXJSZWYgUkVTVUxUID0gbnVsbDsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBWYXJSZWYodik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU4LypWYXJSZWYqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExODogLy8gTnVtZXJpY0xpdGVyYWwgOjo9IERvdWJsZUxpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlEb3VibGVMaXRlcmFsIG4gPSAoRG91YmxlTGl0ZXJhbCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNjEvKk51bWVyaWNMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTc6IC8vIE51bWVyaWNMaXRlcmFsIDo6PSBEZWNpbWFsTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTnVtZXJpY0xpdGVyYWwgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCURlY2ltYWxMaXRlcmFsIG4gPSAoRGVjaW1hbExpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDYxLypOdW1lcmljTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTE2OiAvLyBOdW1lcmljTGl0ZXJhbCA6Oj0gSW50ZWdlckxpdGVyYWwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlJbnRlZ2VyTGl0ZXJhbCBuID0gKEludGVnZXJMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg2MS8qTnVtZXJpY0xpdGVyYWwqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExNTogLy8gTGl0ZXJhbCA6Oj0gU3RyaW5nTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGl0ZXJhbCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU3RyaW5nTGl0ZXJhbCBuID0gKFN0cmluZ0xpdGVyYWwpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU3LypMaXRlcmFsKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTQ6IC8vIExpdGVyYWwgOjo9IE51bWVyaWNMaXRlcmFsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBMaXRlcmFsIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOdW1lcmljTGl0ZXJhbCBuID0gKE51bWVyaWNMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1Ny8qTGl0ZXJhbCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTEzOiAvLyBQcmltYXJ5RXhwciA6Oj0gRnVuY3Rpb25DYWxsIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQcmltYXJ5RXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRnVuY3Rpb25DYWxsIG4gPSAoRnVuY3Rpb25DYWxsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOS8qUHJpbWFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDExMjogLy8gUHJpbWFyeUV4cHIgOjo9IENvbnRleHRJdGVtRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNudHhJdGVtRXhwciBuID0gKENudHhJdGVtRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTE6IC8vIFByaW1hcnlFeHByIDo6PSBQYXJlbnRoZXNpemVkRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgUGFyRXhwcihlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjkvKlByaW1hcnlFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTA6IC8vIFByaW1hcnlFeHByIDo6PSBWYXJSZWYgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFByaW1hcnlFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlWYXJSZWYgbiA9IChWYXJSZWYpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI5LypQcmltYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA5OiAvLyBQcmltYXJ5RXhwciA6Oj0gTGl0ZXJhbCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUHJpbWFyeUV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUxpdGVyYWwgbiA9IChMaXRlcmFsKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyOS8qUHJpbWFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwODogLy8gUHJlZGljYXRlIDo6PSBMQlJBQ0tFVCBFeHByIFJCUkFDS0VUIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGUgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQkgUkVTVUxUID0gZTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woODIvKlByZWRpY2F0ZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTA3OiAvLyBQcmVkaWNhdGVMaXN0IDo6PSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEFycmF5TGlzdCgpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNi8qUHJlZGljYXRlTGlzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwNjogLy8gUHJlZGljYXRlTGlzdCA6Oj0gUHJlZGljYXRlTGlzdCBQcmVkaWNhdGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBjcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gYyA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHAgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkKLQkJCSAgIGMuYWRkKHApOwotCQkJICAgUkVTVUxUID0gYzsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI2LypQcmVkaWNhdGVMaXN0Ki8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDU6IC8vIEZpbHRlckV4cHIgOjo9IFByaW1hcnlFeHByIFByZWRpY2F0ZUxpc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZpbHRlckV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgcGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUHJpbWFyeUV4cHIgcGUgPSAoUHJpbWFyeUV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gZSA9IChDb2xsZWN0aW9uKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRmlsdGVyRXhwcihwZSwgZSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDgxLypGaWx0ZXJFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMDQ6IC8vIFdpbGRjYXJkIDo6PSBTVEFSIENPTE9OIE5DTmFtZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUU5hbWUgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0cmluZyBuID0gKFN0cmluZykoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFFOYW1lKCIqIiwgbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE3LypXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAzOiAvLyBXaWxkY2FyZCA6Oj0gTkNOYW1lIENPTE9OIFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlTdHJpbmcgbiA9IChTdHJpbmcpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBRTmFtZShuLCAiKiIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxNy8qV2lsZGNhcmQqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwMjogLy8gV2lsZGNhcmQgOjo9IFNUQVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgUU5hbWUoIioiLCIqIik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE3LypXaWxkY2FyZCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAxOiAvLyBOYW1lVGVzdCA6Oj0gV2lsZGNhcmQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5hbWVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTmFtZVRlc3Qobik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU1LypOYW1lVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTAwOiAvLyBOYW1lVGVzdCA6Oj0gUU5hbWUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5hbWVUZXN0IFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlRTmFtZSBuID0gKFFOYW1lKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgTmFtZVRlc3Qobik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDU1LypOYW1lVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTk6IC8vIE5vZGVUZXN0IDo6PSBOYW1lVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5hbWVUZXN0IG4gPSAoTmFtZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMwLypOb2RlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTg6IC8vIE5vZGVUZXN0IDo6PSBLaW5kVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZVRlc3QgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUtpbmRUZXN0IG4gPSAoS2luZFRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMwLypOb2RlVGVzdCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTc6IC8vIEFiYnJldlJldmVyc2VTdGVwIDo6PSBET1RET1QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFJldmVyc2VTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgUmV2ZXJzZVN0ZXAoUmV2ZXJzZVN0ZXAuRE9URE9ULG51bGwpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzMi8qQWJicmV2UmV2ZXJzZVN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk2OiAvLyBSZXZlcnNlQXhpcyA6Oj0gQU5DRVNUT1JfT1JfU0VMRiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5BTkNFU1RPUl9PUl9TRUxGKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMTkvKlJldmVyc2VBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA5NTogLy8gUmV2ZXJzZUF4aXMgOjo9IFBSRUNFRElORyBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihSZXZlcnNlU3RlcC5QUkVDRURJTkcpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk0OiAvLyBSZXZlcnNlQXhpcyA6Oj0gUFJFQ0VESU5HX1NJQkxJTkcgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuUFJFQ0VESU5HX1NJQkxJTkcpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDkzOiAvLyBSZXZlcnNlQXhpcyA6Oj0gQU5DRVNUT1IgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoUmV2ZXJzZVN0ZXAuQU5DRVNUT1IpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgxOS8qUmV2ZXJzZUF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDkyOiAvLyBSZXZlcnNlQXhpcyA6Oj0gUEFSRU5UIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKFJldmVyc2VTdGVwLlBBUkVOVCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDE5LypSZXZlcnNlQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTE6IC8vIFJldmVyc2VTdGVwIDo6PSBBYmJyZXZSZXZlcnNlU3RlcCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUmV2ZXJzZVN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVJldmVyc2VTdGVwIG4gPSAoUmV2ZXJzZVN0ZXApKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMxLypSZXZlcnNlU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgOTA6IC8vIFJldmVyc2VTdGVwIDo6PSBSZXZlcnNlQXhpcyBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUmV2ZXJzZVN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IGFsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCBhcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgYSA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlOb2RlVGVzdCBuID0gKE5vZGVUZXN0KSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSAgUkVTVUxUID0gbmV3IFJldmVyc2VTdGVwKGEuaW50VmFsdWUoKSwgbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMxLypSZXZlcnNlU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODk6IC8vIEFiYnJldkZvcndhcmRTdGVwIDo6PSBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yd2FyZFN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5OT05FLCBuKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzQvKkFiYnJldkZvcndhcmRTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4ODogLy8gQWJicmV2Rm9yd2FyZFN0ZXAgOjo9IEFUX1NZTSBOb2RlVGVzdCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yd2FyZFN0ZXAgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChGb3J3YXJkU3RlcC5BVF9TWU0sIG4pOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNC8qQWJicmV2Rm9yd2FyZFN0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg3OiAvLyBGb3J3YXJkQXhpcyA6Oj0gTkFNRVNQQUNFIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLk5BTUVTUEFDRSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIwLypGb3J3YXJkQXhpcyovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgODY6IC8vIEZvcndhcmRBeGlzIDo6PSBGT0xMT1dJTkcgQ09MT05DT0xPTiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoRm9yd2FyZFN0ZXAuRk9MTE9XSU5HKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4NTogLy8gRm9yd2FyZEF4aXMgOjo9IEZPTExPV0lOR19TSUJMSU5HIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkZPTExPV0lOR19TSUJMSU5HKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4NDogLy8gRm9yd2FyZEF4aXMgOjo9IERFU0NFTkRBTlRfT1JfU0VMRiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UX09SX1NFTEYpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDgzOiAvLyBGb3J3YXJkQXhpcyA6Oj0gU0VMRiBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5TRUxGKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4MjogLy8gRm9yd2FyZEF4aXMgOjo9IEFUVFJJQlVURSBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5BVFRSSUJVVEUpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMC8qRm9yd2FyZEF4aXMqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDgxOiAvLyBGb3J3YXJkQXhpcyA6Oj0gREVTQ0VOREFOVCBDT0xPTkNPTE9OIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihGb3J3YXJkU3RlcC5ERVNDRU5EQU5UKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA4MDogLy8gRm9yd2FyZEF4aXMgOjo9IENISUxEIENPTE9OQ09MT04gCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKEZvcndhcmRTdGVwLkNISUxEKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjAvKkZvcndhcmRBeGlzKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3OTogLy8gRm9yd2FyZFN0ZXAgOjo9IEFiYnJldkZvcndhcmRTdGVwIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3J3YXJkU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRm9yd2FyZFN0ZXAgbiA9IChGb3J3YXJkU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzMvKkZvcndhcmRTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3ODogLy8gRm9yd2FyZFN0ZXAgOjo9IEZvcndhcmRBeGlzIE5vZGVUZXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGb3J3YXJkU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciBhID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCU5vZGVUZXN0IG4gPSAoTm9kZVRlc3QpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBGb3J3YXJkU3RlcChhLmludFZhbHVlKCksbik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDMzLypGb3J3YXJkU3RlcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzc6IC8vIEF4aXNTdGVwIDo6PSBSZXZlcnNlU3RlcCBQcmVkaWNhdGVMaXN0IAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBBeGlzU3RlcCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJUmV2ZXJzZVN0ZXAgcyA9IChSZXZlcnNlU3RlcCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBwID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBBeGlzU3RlcChzLCBwKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woODAvKkF4aXNTdGVwKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3NjogLy8gQXhpc1N0ZXAgOjo9IEZvcndhcmRTdGVwIFByZWRpY2F0ZUxpc3QgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEF4aXNTdGVwIFJFU1VMVCA9IG51bGw7Ci0JCWludCBzbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnJpZ2h0OwotCQlGb3J3YXJkU3RlcCBzID0gKEZvcndhcmRTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHAgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEF4aXNTdGVwKHMsIHApOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg4MC8qQXhpc1N0ZXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc1OiAvLyBTdGVwRXhwciA6Oj0gRmlsdGVyRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RlcEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUZpbHRlckV4cHIgbiA9IChGaWx0ZXJFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNS8qU3RlcEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDc0OiAvLyBTdGVwRXhwciA6Oj0gQXhpc1N0ZXAgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0ZXBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlBeGlzU3RlcCBuID0gKEF4aXNTdGVwKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNS8qU3RlcEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDczOiAvLyBSZWxhdGl2ZVBhdGhFeHByIDo6PSBSZWxhdGl2ZVBhdGhFeHByIEZPUldBUkRfU0xBU0hTTEFTSCBTdGVwRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlYUGF0aEV4cHIgcCA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0ZXBFeHByIHMgPSAoU3RlcEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJcC5hZGRfdGFpbCgyLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNi8qUmVsYXRpdmVQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzI6IC8vIFJlbGF0aXZlUGF0aEV4cHIgOjo9IFJlbGF0aXZlUGF0aEV4cHIgRk9SV0FSRF9TTEFTSCBTdGVwRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFBhdGhFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgcHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlYUGF0aEV4cHIgcCA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0ZXBFeHByIHMgPSAoU3RlcEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJcC5hZGRfdGFpbCgxLHMpOwotCQkJCVJFU1VMVCA9IHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgzNi8qUmVsYXRpdmVQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzE6IC8vIFJlbGF0aXZlUGF0aEV4cHIgOjo9IFN0ZXBFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IHNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVN0ZXBFeHByIHMgPSAoU3RlcEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMCwoU3RlcEV4cHIpcyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM2LypSZWxhdGl2ZVBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA3MDogLy8gUGF0aEV4cHIgOjo9IFJlbGF0aXZlUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIG4gPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OC8qUGF0aEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY5OiAvLyBQYXRoRXhwciA6Oj0gRk9SV0FSRF9TTEFTSFNMQVNIIFJlbGF0aXZlUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIHAgPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCXAuc2V0X3NsYXNoZXMoMik7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc4LypQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjg6IC8vIFBhdGhFeHByIDo6PSBGT1JXQVJEX1NMQVNIIFJlbGF0aXZlUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHByaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIHAgPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCXAuc2V0X3NsYXNoZXMoMSk7Ci0JCQkJUkVTVUxUID0gcDsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDc4LypQYXRoRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjc6IC8vIFBhdGhFeHByIDo6PSBGT1JXQVJEX1NMQVNIIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBYUGF0aEV4cHIoMSxudWxsKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzgvKlBhdGhFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2NjogLy8gTm9kZUNvbXAgOjo9IEdSRUFURVJfR1JFQVRFUiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HUkVBVEVSX0dSRUFURVIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyMS8qTm9kZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY1OiAvLyBOb2RlQ29tcCA6Oj0gTEVTU19MRVNTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NfTEVTUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIxLypOb2RlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjQ6IC8vIE5vZGVDb21wIDo6PSBJUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5JUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDIxLypOb2RlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjM6IC8vIFZhbHVlQ29tcCA6Oj0gR0UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR0UpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA2MjogLy8gVmFsdWVDb21wIDo6PSBHVCAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5HVCk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDYxOiAvLyBWYWx1ZUNvbXAgOjo9IExFIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNjA6IC8vIFZhbHVlQ29tcCA6Oj0gTFQgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTFQpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MC8qVmFsdWVDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1OTogLy8gVmFsdWVDb21wIDo6PSBORSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5ORSk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUwLypWYWx1ZUNvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDU4OiAvLyBWYWx1ZUNvbXAgOjo9IEVRIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkVRKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTAvKlZhbHVlQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTc6IC8vIEdlbmVyYWxDb21wIDo6PSBHUkVBVEVSRVFVQUwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUkVRVUFMKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1NjogLy8gR2VuZXJhbENvbXAgOjo9IEdSRUFURVIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuR1JFQVRFUik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTU6IC8vIEdlbmVyYWxDb21wIDo6PSBMRVNTRVFVQUwgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEludGVnZXIgUkVTVUxUID0gbnVsbDsKLQkJIFJFU1VMVCA9IG5ldyBJbnRlZ2VyKENtcEV4cHIuTEVTU0VRVUFMKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1NDogLy8gR2VuZXJhbENvbXAgOjo9IExFU1NUSEFOIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkxFU1NUSEFOKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDkvKkdlbmVyYWxDb21wKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1MzogLy8gR2VuZXJhbENvbXAgOjo9IE5PVEVRVUFMUyAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSW50ZWdlciBSRVNVTFQgPSBudWxsOwotCQkgUkVTVUxUID0gbmV3IEludGVnZXIoQ21wRXhwci5OT1RFUVVBTFMpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OS8qR2VuZXJhbENvbXAqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDUyOiAvLyBHZW5lcmFsQ29tcCA6Oj0gRVFVQUxTIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJbnRlZ2VyIFJFU1VMVCA9IG51bGw7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZWdlcihDbXBFeHByLkVRVUFMUyk7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ5LypHZW5lcmFsQ29tcCovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTE6IC8vIFZhbHVlRXhwciA6Oj0gUGF0aEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFhQYXRoRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJWFBhdGhFeHByIG4gPSAoWFBhdGhFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3OS8qVmFsdWVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA1MDogLy8gVW5hcnlFeHByIDo6PSBQTFVTIFVuYXJ5RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgYWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGFyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBhID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBQbHVzRXhwcihhKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzcvKlVuYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDk6IC8vIFVuYXJ5RXhwciA6Oj0gTUlOVVMgVW5hcnlFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBhbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgYXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGEgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE1pbnVzRXhwcihhKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMzcvKlVuYXJ5RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDg6IC8vIFVuYXJ5RXhwciA6Oj0gVmFsdWVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlYUGF0aEV4cHIgbiA9IChYUGF0aEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDM3LypVbmFyeUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ3OiAvLyBDYXN0RXhwciA6Oj0gVW5hcnlFeHByIENBU1QgQVMgU2luZ2xlVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNpbmdsZVR5cGUgciA9IChTaW5nbGVUeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ2FzdEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQzLypDYXN0RXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDY6IC8vIENhc3RFeHByIDo6PSBVbmFyeUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0My8qQ2FzdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQ1OiAvLyBDYXN0YWJsZUV4cHIgOjo9IENhc3RFeHByIENBU1RBQkxFIEFTIFNpbmdsZVR5cGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlTaW5nbGVUeXBlIHIgPSAoU2luZ2xlVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENhc3RhYmxlRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDEvKkNhc3RhYmxlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDQ6IC8vIENhc3RhYmxlRXhwciA6Oj0gQ2FzdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0MS8qQ2FzdGFibGVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0MzogLy8gVHJlYXRFeHByIDo6PSBDYXN0YWJsZUV4cHIgVFJFQVQgQVMgU2VxdWVuY2VUeXBlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJU2VxdWVuY2VUeXBlIHIgPSAoU2VxdWVuY2VUeXBlKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgVHJlYXRBc0V4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQwLypUcmVhdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMykpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQyOiAvLyBUcmVhdEV4cHIgOjo9IENhc3RhYmxlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQwLypUcmVhdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDQxOiAvLyBJbnN0YW5jZW9mRXhwciA6Oj0gVHJlYXRFeHByIElOU1RBTkNFIE9GIFNlcXVlbmNlVHlwZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTMpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVNlcXVlbmNlVHlwZSByID0gKFNlcXVlbmNlVHlwZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEluc3RPZkV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQyLypJbnN0YW5jZW9mRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0zKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNDA6IC8vIEluc3RhbmNlb2ZFeHByIDo6PSBUcmVhdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Mi8qSW5zdGFuY2VvZkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM5OiAvLyBJbnRlcnNlY3RFeGNlcHRFeHByIDo6PSBJbnRlcnNlY3RFeGNlcHRFeHByIEVYQ0VQVCBJbnN0YW5jZW9mRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRXhjZXB0RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDYvKkludGVyc2VjdEV4Y2VwdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM4OiAvLyBJbnRlcnNlY3RFeGNlcHRFeHByIDo6PSBJbnRlcnNlY3RFeGNlcHRFeHByIElOVEVSU0VDVCBJbnN0YW5jZW9mRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgSW50ZXJzZWN0RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDYvKkludGVyc2VjdEV4Y2VwdEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM3OiAvLyBJbnRlcnNlY3RFeGNlcHRFeHByIDo6PSBJbnN0YW5jZW9mRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ2LypJbnRlcnNlY3RFeGNlcHRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzNjogLy8gVW5pb25FeHByIDo6PSBVbmlvbkV4cHIgUElQRSBJbnRlcnNlY3RFeGNlcHRFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBQaXBlRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDQvKlVuaW9uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzU6IC8vIFVuaW9uRXhwciA6Oj0gVW5pb25FeHByIFVOSU9OIEludGVyc2VjdEV4Y2VwdEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFVuaW9uRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDQvKlVuaW9uRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzQ6IC8vIFVuaW9uRXhwciA6Oj0gSW50ZXJzZWN0RXhjZXB0RXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ0LypVbmlvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDMzOiAvLyBNdWx0aXBsaWNhdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciBNT0QgVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBNb2RFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzMjogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgSURJViBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IElEaXZFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAzMTogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBNdWx0aXBsaWNhdGl2ZUV4cHIgRElWIFVuaW9uRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgRGl2RXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDUvKk11bHRpcGxpY2F0aXZlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMzA6IC8vIE11bHRpcGxpY2F0aXZlRXhwciA6Oj0gTXVsdGlwbGljYXRpdmVFeHByIFNUQVIgVW5pb25FeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBNdWxFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyOTogLy8gTXVsdGlwbGljYXRpdmVFeHByIDo6PSBVbmlvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0NS8qTXVsdGlwbGljYXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyODogLy8gQWRkaXRpdmVFeHByIDo6PSBBZGRpdGl2ZUV4cHIgTUlOVVMgTXVsdGlwbGljYXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgcmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IHJyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciByID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBTdWJFeHByKGwsIHIpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0OC8qQWRkaXRpdmVFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyNzogLy8gQWRkaXRpdmVFeHByIDo6PSBBZGRpdGl2ZUV4cHIgUExVUyBNdWx0aXBsaWNhdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEFkZEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ4LypBZGRpdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI2OiAvLyBBZGRpdGl2ZUV4cHIgOjo9IE11bHRpcGxpY2F0aXZlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ4LypBZGRpdGl2ZUV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI1OiAvLyBSYW5nZUV4cHIgOjo9IEFkZGl0aXZlRXhwciBUTyBBZGRpdGl2ZUV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IFJhbmdlRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTMvKlJhbmdlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjQ6IC8vIFJhbmdlRXhwciA6Oj0gQWRkaXRpdmVFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTMvKlJhbmdlRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMjM6IC8vIENvbXBhcmlzb25FeHByIDo6PSBSYW5nZUV4cHIgTm9kZUNvbXAgUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciB0ID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NC8qQ29tcGFyaXNvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIyOiAvLyBDb21wYXJpc29uRXhwciA6Oj0gUmFuZ2VFeHByIEdlbmVyYWxDb21wIFJhbmdlRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IGxyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJRXhwciBsID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCUludGVnZXIgdCA9IChJbnRlZ2VyKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IENtcEV4cHIobCwgciwgdC5pbnRWYWx1ZSgpKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTQvKkNvbXBhcmlzb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAyMTogLy8gQ29tcGFyaXNvbkV4cHIgOjo9IFJhbmdlRXhwciBWYWx1ZUNvbXAgUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0OwotCQlpbnQgbHJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlFeHByIGwgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgdGxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkubGVmdDsKLQkJaW50IHRyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5yaWdodDsKLQkJSW50ZWdlciB0ID0gKEludGVnZXIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS52YWx1ZTsKLQkJaW50IHJsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBycmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgciA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuZXcgQ21wRXhwcihsLCByLCB0LmludFZhbHVlKCkpOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1NC8qQ29tcGFyaXNvbkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDIwOiAvLyBDb21wYXJpc29uRXhwciA6Oj0gUmFuZ2VFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTQvKkNvbXBhcmlzb25FeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxOTogLy8gQW5kRXhwciA6Oj0gQW5kRXhwciBBTkQgQ29tcGFyaXNvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IEFuZEV4cHIobCwgcik7IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUxLypBbmRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxODogLy8gQW5kRXhwciA6Oj0gQ29tcGFyaXNvbkV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgbiA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg1MS8qQW5kRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTc6IC8vIE9yRXhwciA6Oj0gT3JFeHByIE9SIEFuZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IGxsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgbCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBybGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgcnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIHIgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IE9yRXhwcihsLCByKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNTIvKk9yRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTY6IC8vIE9yRXhwciA6Oj0gQW5kRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBuID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDUyLypPckV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDE1OiAvLyBJZkV4cHIgOjo9IElGIExQQVIgRXhwciBSUEFSIFRIRU4gRXhwclNpbmdsZSBFTFNFIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElmRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdDsKLQkJaW50IGV4cHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBleHBzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTUpKS52YWx1ZTsKLQkJaW50IHRsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB0cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUV4cHIgdCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkudmFsdWU7Ci0JCWludCBlbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIGUgPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbmV3IElmRXhwcihleHBzLCB0LCBlKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzcvKklmRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC03KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTQ6IC8vIFF1YW50aWZpZWRFeHByTWlkZGxlIDo6PSBRdWFudGlmaWVkRXhwck1pZGRsZSBDT01NQSBET0xMQVIgVmFyTmFtZSBJTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdDsKLQkJaW50IHBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcHMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnZhbHVlOwotCQlpbnQgdmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHZyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI3LypRdWFudGlmaWVkRXhwck1pZGRsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTM6IC8vIFF1YW50aWZpZWRFeHByTWlkZGxlIDo6PSBWYXJOYW1lIElOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI3LypRdWFudGlmaWVkRXhwck1pZGRsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTI6IC8vIFF1YW50aWZpZWRFeHByIDo6PSBFVkVSWSBET0xMQVIgUXVhbnRpZmllZEV4cHJNaWRkbGUgU0FUSVNGSUVTIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFF1YW50aWZpZWRFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwYWlyc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHBhaXJzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcGFpcnMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJUXVhbnRpZmllZEV4cHIgcWUgPSBuZXcgUXVhbnRpZmllZEV4cHIoUXVhbnRpZmllZEV4cHIuQUxMLAotCQkJCQkJCQkgICAgICAgcGFpcnMsIGUpOwotCQkJCVJFU1VMVCA9IHFlOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzYvKlF1YW50aWZpZWRFeHByKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTQpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSAxMTogLy8gUXVhbnRpZmllZEV4cHIgOjo9IFNPTUUgRE9MTEFSIFF1YW50aWZpZWRFeHByTWlkZGxlIFNBVElTRklFUyBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBRdWFudGlmaWVkRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGFpcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwYWlyc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBhaXJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCVF1YW50aWZpZWRFeHByIHFlID0gbmV3IFF1YW50aWZpZWRFeHByKFF1YW50aWZpZWRFeHByLlNPTUUsCi0JCQkJCQkJCSAgICAgICBwYWlycywgZSk7Ci0JCQkJUkVTVUxUID0gcWU7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3Ni8qUXVhbnRpZmllZEV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDEwOiAvLyBTaW1wbGVGb3JDbGF1c2UgOjo9IFNpbXBsZUZvckNsYXVzZSBDT01NQSBET0xMQVIgVmFyTmFtZSBJTiBFeHByU2luZ2xlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDb2xsZWN0aW9uIFJFU1VMVCA9IG51bGw7Ci0JCWludCBwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkubGVmdDsKLQkJaW50IHBzcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC01KSkucmlnaHQ7Ci0JCUNvbGxlY3Rpb24gcHMgPSAoQ29sbGVjdGlvbikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLnZhbHVlOwotCQlpbnQgdmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdDsKLQkJaW50IHZyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS5yaWdodDsKLQkJUU5hbWUgdiA9IChRTmFtZSkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnZhbHVlOwotCQlpbnQgZWxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGVyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBlID0gKEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJCi0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI4LypTaW1wbGVGb3JDbGF1c2UqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNSkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDk6IC8vIFNpbXBsZUZvckNsYXVzZSA6Oj0gRk9SIERPTExBUiBWYXJOYW1lIElOIEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IHZsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCB2cmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkucmlnaHQ7Ci0JCVFOYW1lIHYgPSAoUU5hbWUpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCUNvbGxlY3Rpb24gcGFpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJVmFyRXhwclBhaXIgcCA9IG5ldyBWYXJFeHByUGFpcih2LGUpOwotCQkJCXBhaXJzLmFkZChwKTsKLQkJCQlSRVNVTFQgPSBwYWlyczsKLQkJCQotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDI4LypTaW1wbGVGb3JDbGF1c2UqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtNCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDg6IC8vIEZvckV4cHIgOjo9IFNpbXBsZUZvckNsYXVzZSBSRVRVUk4gRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRm9yRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgcGFpcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBwYWlyc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIHBhaXJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGVsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBlcmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCUV4cHIgZSA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCQotCQkJCUZvckV4cHIgZmV4cCA9IG5ldyBGb3JFeHByKHBhaXJzLGUpOwotCQkJCVJFU1VMVCA9IGZleHA7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg3NS8qRm9yRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0yKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNzogLy8gRXhwclNpbmdsZSA6Oj0gT3JFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlFeHByIG4gPSAoRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDcvKkV4cHJTaW5nbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDY6IC8vIEV4cHJTaW5nbGUgOjo9IElmRXhwciAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRXhwciBSRVNVTFQgPSBudWxsOwotCQlpbnQgbmxlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IG5yaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJSWZFeHByIG4gPSAoSWZFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSBSRVNVTFQgPSBuOyAKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCg0Ny8qRXhwclNpbmdsZSovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgNTogLy8gRXhwclNpbmdsZSA6Oj0gUXVhbnRpZmllZEV4cHIgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4cHIgUkVTVUxUID0gbnVsbDsKLQkJaW50IG5sZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQ7Ci0JCWludCBucmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQ7Ci0JCVF1YW50aWZpZWRFeHByIG4gPSAoUXVhbnRpZmllZEV4cHIpKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG47IAotICAgICAgICAgICAgICBDVVAkWFBhdGhDdXAkcmVzdWx0ID0gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKDQ3LypFeHByU2luZ2xlKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKi4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgY2FzZSA0OiAvLyBFeHByU2luZ2xlIDo6PSBGb3JFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHByIFJFU1VMVCA9IG51bGw7Ci0JCWludCBubGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgbnJpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0OwotCQlGb3JFeHByIG4gPSAoRm9yRXhwcikoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnZhbHVlOwotCQkgUkVTVUxUID0gbjsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNDcvKkV4cHJTaW5nbGUqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDM6IC8vIEV4cHIgOjo9IEV4cHIgQ09NTUEgRXhwclNpbmdsZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ29sbGVjdGlvbiBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhwcnNsZWZ0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQ7Ci0JCWludCBleHByc3JpZ2h0ID0gKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLnJpZ2h0OwotCQlDb2xsZWN0aW9uIGV4cHJzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTIpKS52YWx1ZTsKLQkJaW50IGV4bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXhyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBleCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSAKLQkJCQlleHBycy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHJzOwotCQkJCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMjUvKkV4cHIqLywgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMikpLmxlZnQsICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodCwgUkVTVUxUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDI6IC8vIEV4cHIgOjo9IEV4cHJTaW5nbGUgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbGxlY3Rpb24gUkVTVUxUID0gbnVsbDsKLQkJaW50IGV4bGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0OwotCQlpbnQgZXhyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJRXhwciBleCA9IChFeHByKSgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpIENVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkudmFsdWU7Ci0JCSAKLQkJCQlDb2xsZWN0aW9uIGV4cHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJZXhwcy5hZGQoZXgpOwotCQkJCVJFU1VMVCA9IGV4cHM7Ci0JCQkKLSAgICAgICAgICAgICAgQ1VQJFhQYXRoQ3VwJHJlc3VsdCA9IG5ldyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCgyNS8qRXhwciovLCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdCwgKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbClDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMCkpLnJpZ2h0LCBSRVNVTFQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBDVVAkWFBhdGhDdXAkcmVzdWx0OwotCi0gICAgICAgICAgLyouIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4qLwotICAgICAgICAgIGNhc2UgMTogLy8gJFNUQVJUIDo6PSBYUGF0aCBFT0YgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCBSRVNVTFQgPSBudWxsOwotCQlpbnQgc3RhcnRfdmFsbGVmdCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0OwotCQlpbnQgc3RhcnRfdmFscmlnaHQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0xKSkucmlnaHQ7Ci0JCVhQYXRoIHN0YXJ0X3ZhbCA9IChYUGF0aCkoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKSBDVVAkWFBhdGhDdXAkc3RhY2suZWxlbWVudEF0KENVUCRYUGF0aEN1cCR0b3AtMSkpLnZhbHVlOwotCQlSRVNVTFQgPSBzdGFydF92YWw7Ci0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woMC8qJFNUQVJUKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTEpKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgLyogQUNDRVBUICovCi0gICAgICAgICAgQ1VQJFhQYXRoQ3VwJHBhcnNlci5kb25lX3BhcnNpbmcoKTsKLSAgICAgICAgICByZXR1cm4gQ1VQJFhQYXRoQ3VwJHJlc3VsdDsKLQotICAgICAgICAgIC8qLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuKi8KLSAgICAgICAgICBjYXNlIDA6IC8vIFhQYXRoIDo6PSBFeHByIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBYUGF0aCBSRVNVTFQgPSBudWxsOwotCQlpbnQgZXhwc2xlZnQgPSAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkubGVmdDsKLQkJaW50IGV4cHNyaWdodCA9ICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5yaWdodDsKLQkJQ29sbGVjdGlvbiBleHBzID0gKENvbGxlY3Rpb24pKChqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCkgQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS52YWx1ZTsKLQkJIFJFU1VMVCA9IG5ldyBYUGF0aChleHBzKTsgCi0gICAgICAgICAgICAgIENVUCRYUGF0aEN1cCRyZXN1bHQgPSBuZXcgamF2YV9jdXAucnVudGltZS5TeW1ib2woNzQvKlhQYXRoKi8sICgoamF2YV9jdXAucnVudGltZS5TeW1ib2wpQ1VQJFhQYXRoQ3VwJHN0YWNrLmVsZW1lbnRBdChDVVAkWFBhdGhDdXAkdG9wLTApKS5sZWZ0LCAoKGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKUNVUCRYUGF0aEN1cCRzdGFjay5lbGVtZW50QXQoQ1VQJFhQYXRoQ3VwJHRvcC0wKSkucmlnaHQsIFJFU1VMVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIENVUCRYUGF0aEN1cCRyZXN1bHQ7Ci0KLSAgICAgICAgICAvKiAuIC4gLiAuIC4gLiovCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAiSW52YWxpZCBhY3Rpb24gbnVtYmVyIGZvdW5kIGluIGludGVybmFsIHBhcnNlIHRhYmxlIik7Ci0KLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEN1cFJlc3RyaWN0ZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhDdXBSZXN0cmljdGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNjdkM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEN1cFJlc3RyaWN0ZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgQnVnIDMzODQ5NCAgIC0gcHJvaGliaXRpbmcgeHBhdGggZXhwcmVzc2lvbnMgc3RhcnRpbmcgd2l0aCAvIG9yIC8vIHRvIGJlIHBhcnNlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotcHVibGljIGNsYXNzIFhQYXRoQ3VwUmVzdHJpY3RlZCBleHRlbmRzIFhQYXRoQ3VwIHsKLQotICAvKiogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gKi8KLSAgcHVibGljIFhQYXRoQ3VwUmVzdHJpY3RlZCgpIHtzdXBlcigpO30KLSAgCi0gIC8qKiBDb25zdHJ1Y3RvciB3aGljaCBzZXRzIHRoZSBkZWZhdWx0IHNjYW5uZXIuICovCi0gIHB1YmxpYyBYUGF0aEN1cFJlc3RyaWN0ZWQoamF2YV9jdXAucnVudGltZS5TY2FubmVyIHMpIHtzdXBlcihzKTt9Ci0KLSAgLyoqIEludm9rZSBhIHVzZXIgc3VwcGxpZWQgcGFyc2UgYWN0aW9uLiAqLwotICBwdWJsaWMgamF2YV9jdXAucnVudGltZS5TeW1ib2wgZG9fYWN0aW9uKAotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGFjdF9udW0sCi0gICAgamF2YV9jdXAucnVudGltZS5scl9wYXJzZXIgcGFyc2VyLAotICAgIGphdmEudXRpbC5TdGFjayAgICAgICAgICAgIHN0YWNrLAotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHRvcCkKLSAgICB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGFjdF9udW0gPT0gNjcgfHwgYWN0X251bSA9PSA2OCB8fCBhY3RfbnVtID09IDY5KSB7Ci0gICAgCS8vIHRoZXNlIGFjdGlvbiBudW1iZXJzIGNvcnJlc3BvbmQgdG8gZm9sbG93aW5nIGdyYW1tYXIgcHJvZHVjdGlvbnMsCi0gICAgCS8vIGEpIEZPUldBUkRfU0xBU0gKLSAgICAJLy8gYikgRk9SV0FSRF9TTEFTSCBSZWxhdGl2ZVBhdGhFeHByCi0gICAgCS8vIGMpIEZPUldBUkRfU0xBU0hTTEFTSCBSZWxhdGl2ZVBhdGhFeHByCi0gICAgCXRocm93IG5ldyBFeGNlcHRpb24oIkV4cHJlc3Npb24gc3RhcnRzIHdpdGggLyBvciAvLyIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICByZXR1cm4gYWN0aW9uX29iai5DVVAkWFBhdGhDdXAkZG9fYWN0aW9uKGFjdF9udW0sIHBhcnNlciwgc3RhY2ssIHRvcCk7Ci0gICAgfQotICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc3NzBlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hQYXRoRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbDsKLQotLyoqCi0gKiBUaGlzIGVycm9yIGlzIHRocm93biB3aGVuIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGFuIFhQYXRoIGV4Y2VwdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFhQYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNjYyNDYzMTc5MjA4NzMwMzIwOUw7Ci0JcHJpdmF0ZSBTdHJpbmcgX3JlYXNvbjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBYUGF0aEVycm9yCi0JICogCi0JICogQHBhcmFtIHJlYXNvbgotCSAqICAgICAgICAgICAgSXMgdGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bi4KLQkgKi8KLQlwdWJsaWMgWFBhdGhFcnJvcihTdHJpbmcgcmVhc29uKSB7Ci0JCV9yZWFzb24gPSByZWFzb247Ci0JfQotCi0JLyoqCi0JICogVGhlIHJlYXNvbiB3aHkgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSByZWFzb24gd2h5IHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvdy4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlYXNvbigpIHsKLQkJcmV0dXJuIF9yZWFzb247Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvWFBhdGhGbGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMGU3MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YUGF0aEZsZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMTkgKzAsMCBAQAotLyogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBnZW5lcmF0ZWQgYnkgSkZsZXggMS40LjMgb24gMTIvMTQvMDkgMjowMiBBTSAqLwotCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0vLyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0vLyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAqCi0vLyAqIENvbnRyaWJ1dG9yczoKLS8vICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLS8vICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA5ODcgLSBmaXhlZCBsaXRlcmFsIGlzc3VlcyBmb3IgaW50ZWdlciBhbmQgZGVjaW1hbAotLy8gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBJRiBUSEVOIEVMU0UgcGFyc2luZyBhbmQgdXBkYXRlIGdyYW1tYXJzCi0vLyAqICAgICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotLy8gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyOTc3MDcgLSBNaXNzaW5nIHRoZSBlbXB0eS1zZXF1ZW5jZSgpIHR5cGUKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzY2FubmVyIGdlbmVyYXRlZCBieSAKLSAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuamZsZXguZGUvIj5KRmxleDwvYT4gMS40LjMKLSAqIG9uIDEyLzE0LzA5IDI6MDIgQU0gZnJvbSB0aGUgc3BlY2lmaWNhdGlvbiBmaWxlCi0gKiA8dHQ+L1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLTMuNU01L29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9ncmFtbWFycy94cGF0aC5sZXg8L3R0PgotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhGbGV4IGltcGxlbWVudHMgamF2YV9jdXAucnVudGltZS5TY2FubmVyIHsKLQotICAvKiogVGhpcyBjaGFyYWN0ZXIgZGVub3RlcyB0aGUgZW5kIG9mIGZpbGUgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWVlFT0YgPSAtMTsKLQotICAvKiogaW5pdGlhbCBzaXplIG9mIHRoZSBsb29rYWhlYWQgYnVmZmVyICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9CVUZGRVJTSVpFID0gMTYzODQ7Ci0KLSAgLyoqIGxleGljYWwgc3RhdGVzICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlZSU5JVElBTCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1FTlQgPSAyOwotCi0gIC8qKgotICAgKiBaWl9MRVhTVEFURVtsXSBpcyB0aGUgc3RhdGUgaW4gdGhlIERGQSBmb3IgdGhlIGxleGljYWwgc3RhdGUgbAotICAgKiBaWl9MRVhTVEFURVtsKzFdIGlzIHRoZSBzdGF0ZSBpbiB0aGUgREZBIGZvciB0aGUgbGV4aWNhbCBzdGF0ZSBsCi0gICAqICAgICAgICAgICAgICAgICAgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKLSAgICogbCBpcyBvZiB0aGUgZm9ybSBsID0gMiprLCBrIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBaWl9MRVhTVEFURVtdID0geyAKLSAgICAgMCwgIDAsICAxLCAxCi0gIH07Ci0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIGNoYXJhY3RlcnMgdG8gY2hhcmFjdGVyIGNsYXNzZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaWl9DTUFQX1BBQ0tFRCA9IAotICAgICJcMTFcMFwxXDFcMVwxXDJcMFwxXDFcMjJcMFwxXDFcMVwyMlwxXDJcMVwwIisKLSAgICAiXDFcMzBcMlwwXDFcM1wxXDEyXDFcMTZcMVwxN1wxXDdcMVwyN1wxXDExXDFcNSIrCi0gICAgIlwxXDI1XDEyXDRcMVwxM1wxXDBcMVwyM1wxXDIxXDFcMjRcMVwzMVwxXDI2XDRcMTAiKwotICAgICJcMVw2XDI1XDEwXDFcMTRcMVwwXDFcMTVcMVwwXDFcMTBcMVwwXDFcNDJcMVw0NSIrCi0gICAgIlwxXDMyXDFcMzZcMVwzN1wxXDQ3XDFcNTJcMVwzM1wxXDM0XDJcMTBcMVwzNVwxXDUzIisKLSAgICAiXDFcNDFcMVw1MFwxXDU0XDFcNTVcMVw0NFwxXDQwXDFcNDNcMVw0NlwxXDU2XDFcNTEiKwotICAgICJcMVw1N1wxXDYwXDFcMTBcMVwwXDFcMjBcdWZmODNcMCI7Ci0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIGNoYXJhY3RlcnMgdG8gY2hhcmFjdGVyIGNsYXNzZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgW10gWlpfQ01BUCA9IHp6VW5wYWNrQ01hcChaWl9DTUFQX1BBQ0tFRCk7Ci0KLSAgLyoqIAotICAgKiBUcmFuc2xhdGVzIERGQSBzdGF0ZXMgdG8gYWN0aW9uIHN3aXRjaCBsYWJlbHMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfQUNUSU9OID0genpVbnBhY2tBY3Rpb24oKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQUNUSU9OX1BBQ0tFRF8wID0KLSAgICAiXDJcMFwxXDFcMVwyXDJcMVwxXDNcMVw0XDFcNVwxXDYiKwotICAgICJcMVw3XDFcMTBcMVwxMVwxXDEyXDFcMTNcMVwxNFwxXDE1XDFcMTYiKwotICAgICJcMVwxN1wxXDFcMVwyMFwxXDIxXDFcMjJcMVwyM1wxXDI0XDFcMjUiKwotICAgICJcMVwyNlwyMFw1XDJcMlwxXDBcMVwyN1wxXDBcMVwyN1wxXDMwIisKLSAgICAiXDFcMFwxXDMxXDFcMzJcMVwzM1wxXDM0XDFcMzVcMVwzNlwxXDM3IisKLSAgICAiXDFcNDBcMVw0MVw0XDVcMVw0MlwxXDQzXDFcNVwxXDQ0XDFcNDUiKwotICAgICJcMVw0Nlw1XDVcMVw0N1w2XDVcMVw1MFwyXDVcMVw1MVw1XDUiKwotICAgICJcMVw1Mlw0XDVcMVw1M1wxXDU0XDFcNTVcMVw1NlwzXDVcMVw1NyIrCi0gICAgIlwxXDYwXDFcNjFcMVwwXDdcNVwxXDYyXDE2XDVcMVw2M1wxMFw1IisKLSAgICAiXDFcNjRcMVw2NVw0XDVcMVw2NlwxXDVcMVw2N1wyXDVcMVw3MCIrCi0gICAgIlwzXDVcMVw3MVw0XDVcMVw3MlwxXDVcMVw3M1wxXDVcMVw3NCIrCi0gICAgIlwyXDVcMVw3NVwxXDc2XDEwXDVcMVw3N1wxMFw1XDFcMTAwXDZcNSIrCi0gICAgIlwxXDEwMVwyXDVcMVwxMDJcMTRcNVwxXDEwM1w2XDVcMVwxMDRcMVw1IisKLSAgICAiXDFcMTA1XDNcNVwxXDEwNlw0XDVcMVwxMDdcMTJcNVwxXDExMFwxXDExMSIrCi0gICAgIlwxMFw1XDFcMTEyXDVcNVwxXDExM1w1XDVcMVwxMTRcMVwxMTVcMVw1IisKLSAgICAiXDFcMTE2XDFcNVwxXDExN1wxXDEyMFwxXDVcMVwxMjFcNVw1XDFcMTIyIisKLSAgICAiXDI2XDVcMVwxMjNcMTBcNVwxXDEyNFwxXDEyNVwxNFw1XDFcMTI2XDFcMTI3IisKLSAgICAiXDRcNVwxXDEzMFwxXDEzMVwxXDVcMVwxMzJcNFw1XDFcMTMzIjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tBY3Rpb24oKSB7Ci0gICAgaW50IFtdIHJlc3VsdCA9IG5ldyBpbnRbMzMzXTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBvZmZzZXQgPSB6elVucGFja0FjdGlvbihaWl9BQ1RJT05fUEFDS0VEXzAsIG9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHp6VW5wYWNrQWN0aW9uKFN0cmluZyBwYWNrZWQsIGludCBvZmZzZXQsIGludCBbXSByZXN1bHQpIHsKLSAgICBpbnQgaSA9IDA7ICAgICAgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSBvZmZzZXQ7ICAvKiBpbmRleCBpbiB1bnBhY2tlZCBhcnJheSAqLwotICAgIGludCBsID0gcGFja2VkLmxlbmd0aCgpOwotICAgIHdoaWxlIChpIDwgbCkgewotICAgICAgaW50IGNvdW50ID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgaW50IHZhbHVlID0gcGFja2VkLmNoYXJBdChpKyspOwotICAgICAgZG8gcmVzdWx0W2orK10gPSB2YWx1ZTsgd2hpbGUgKC0tY291bnQgPiAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLQotCi0gIC8qKiAKLSAgICogVHJhbnNsYXRlcyBhIHN0YXRlIHRvIGEgcm93IGluZGV4IGluIHRoZSB0cmFuc2l0aW9uIHRhYmxlCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfUk9XTUFQID0genpVbnBhY2tSb3dNYXAoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfUk9XTUFQX1BBQ0tFRF8wID0KLSAgICAiXDBcMFwwXDYxXDBcMTQyXDBcMTQyXDBcMjIzXDBcMzA0XDBcMzY1XDBcdTAxMjYiKwotICAgICJcMFx1MDE1N1wwXDE0MlwwXDE0MlwwXHUwMTg4XDBcdTAxYjlcMFwxNDJcMFwxNDJcMFwxNDIiKwotICAgICJcMFwxNDJcMFwxNDJcMFwxNDJcMFx1MDFlYVwwXHUwMjFiXDBcdTAyNGNcMFx1MDI3ZFwwXDE0MiIrCi0gICAgIlwwXDE0MlwwXDE0MlwwXDE0MlwwXHUwMmFlXDBcdTAyZGZcMFx1MDMxMFwwXHUwMzQxXDBcdTAzNzIiKwotICAgICJcMFx1MDNhM1wwXHUwM2Q0XDBcdTA0MDVcMFx1MDQzNlwwXHUwNDY3XDBcdTA0OThcMFx1MDRjOVwwXHUwNGZhIisKLSAgICAiXDBcdTA1MmJcMFx1MDU1Y1wwXHUwNThkXDBcdTA1YmVcMFx1MDVlZlwwXDIyM1wwXHUwNjIwXDBcMzA0IisKLSAgICAiXDBcdTA2NTFcMFx1MDY4MlwwXHUwNmIzXDBcMTQyXDBcMTQyXDBcMTQyXDBcMTQyXDBcMTQyIisKLSAgICAiXDBcMTQyXDBcMTQyXDBcMTQyXDBcMTQyXDBcdTA2ZTRcMFx1MDcxNVwwXHUwNzQ2XDBcdTA3NzciKwotICAgICJcMFx1MDE1N1wwXHUwN2E4XDBcdTA3ZDlcMFx1MDE1N1wwXHUwMTU3XDBcdTAxNTdcMFx1MDgwYVwwXHUwODNiIisKLSAgICAiXDBcdTA4NmNcMFx1MDg5ZFwwXHUwOGNlXDBcdTAxNTdcMFx1MDhmZlwwXHUwOTMwXDBcdTA5NjFcMFx1MDk5MiIrCi0gICAgIlwwXHUwOWMzXDBcdTA5ZjRcMFx1MDE1N1wwXHUwYTI1XDBcdTBhNTZcMFx1MDE1N1wwXHUwYTg3XDBcdTBhYjgiKwotICAgICJcMFx1MGFlOVwwXHUwYjFhXDBcdTBiNGJcMFx1MDE1N1wwXHUwYjdjXDBcdTBiYWRcMFx1MGJkZVwwXHUwYzBmIisKLSAgICAiXDBcdTAxNTdcMFx1MDE1N1wwXHUwMTU3XDBcdTAxNTdcMFx1MGM0MFwwXHUwYzcxXDBcdTBjYTJcMFwxNDIiKwotICAgICJcMFwxNDJcMFx1MGNkM1wwXHUwY2QzXDBcdTBkMDRcMFx1MGQzNVwwXHUwZDY2XDBcdTBkOTdcMFx1MGRjOCIrCi0gICAgIlwwXHUwZGY5XDBcdTBlMmFcMFx1MDE1N1wwXHUwZTViXDBcdTBlOGNcMFx1MGViZFwwXHUwZWVlXDBcdTBmMWYiKwotICAgICJcMFx1MGY1MFwwXHUwZjgxXDBcdTBmYjJcMFx1MGZlM1wwXHUxMDE0XDBcdTEwNDVcMFx1MTA3NlwwXHUxMGE3IisKLSAgICAiXDBcdTEwZDhcMFx1MDE1N1wwXHUxMTA5XDBcdTExM2FcMFx1MTE2YlwwXHUxMTljXDBcdTExY2RcMFx1MTFmZSIrCi0gICAgIlwwXHUxMjJmXDBcdTEyNjBcMFx1MDE1N1wwXHUwMTU3XDBcdTEyOTFcMFx1MTJjMlwwXHUxMmYzXDBcdTEzMjQiKwotICAgICJcMFx1MTM1NVwwXHUxMzg2XDBcdTAxNTdcMFx1MTNiN1wwXHUxM2U4XDBcdTAxNTdcMFx1MTQxOVwwXHUxNDRhIisKLSAgICAiXDBcdTE0N2JcMFx1MDE1N1wwXHUxNGFjXDBcdTE0ZGRcMFx1MTUwZVwwXHUxNTNmXDBcdTAxNTdcMFx1MTU3MCIrCi0gICAgIlwwXHUwMTU3XDBcdTE1YTFcMFx1MDE1N1wwXHUxNWQyXDBcdTE2MDNcMFx1MDE1N1wwXHUwMTU3XDBcdTE2MzQiKwotICAgICJcMFx1MTY2NVwwXHUxNjk2XDBcdTE2YzdcMFx1MTZmOFwwXHUxNzI5XDBcdTE3NWFcMFx1MTc4YlwwXHUwMTU3IisKLSAgICAiXDBcdTE3YmNcMFx1MTdlZFwwXHUxODFlXDBcdTE4NGZcMFx1MTg4MFwwXHUxOGIxXDBcdTE4ZTJcMFx1MTkxMyIrCi0gICAgIlwwXHUwMTU3XDBcdTE5NDRcMFx1MTk3NVwwXHUxOWE2XDBcdTE5ZDdcMFx1MWEwOFwwXHUxYTM5XDBcdTAxNTciKwotICAgICJcMFx1MWE2YVwwXHUxYTliXDBcdTAxNTdcMFx1MWFjY1wwXHUxYWZkXDBcdTFiMmVcMFx1MWI1ZlwwXHUxYjkwIisKLSAgICAiXDBcdTFiYzFcMFx1MWJmMlwwXHUxYzIzXDBcdTFjNTRcMFx1MWM4NVwwXHUxY2I2XDBcdTFjZTdcMFx1MDE1NyIrCi0gICAgIlwwXHUxZDE4XDBcdTFkNDlcMFx1MWQ3YVwwXHUxZGFiXDBcdTFkZGNcMFx1MWUwZFwwXHUwMTU3XDBcdTFlM2UiKwotICAgICJcMFx1MDE1N1wwXHUxZTZmXDBcdTFlYTBcMFx1MWVkMVwwXHUwMTU3XDBcdTFmMDJcMFx1MWYzM1wwXHUxZjY0IisKLSAgICAiXDBcdTFmOTVcMFx1MDE1N1wwXHUxZmM2XDBcdTFmZjdcMFx1MjAyOFwwXHUyMDU5XDBcdTIwOGFcMFx1MjBiYiIrCi0gICAgIlwwXHUyMGVjXDBcdTIxMWRcMFx1MjE0ZVwwXHUyMTdmXDBcdTAxNTdcMFx1MDE1N1wwXHUyMWIwXDBcdTIxZTEiKwotICAgICJcMFx1MjIxMlwwXHUyMjQzXDBcdTIyNzRcMFx1MjJhNVwwXHUyMmQ2XDBcdTIzMDdcMFx1MjMzOFwwXHUyMzY5IisKLSAgICAiXDBcdTIzOWFcMFx1MjNjYlwwXHUyM2ZjXDBcdTI0MmRcMFx1MDE1N1wwXHUyNDVlXDBcdTI0OGZcMFx1MjRjMCIrCi0gICAgIlwwXHUyNGYxXDBcdTI1MjJcMFx1MDE1N1wwXHUwMTU3XDBcdTI1NTNcMFx1MDE1N1wwXHUyNTg0XDBcdTI1YjUiKwotICAgICJcMFx1MjVlNlwwXHUyNjE3XDBcdTI2NDhcMFx1MjY3OVwwXHUyNmFhXDBcdTI2ZGJcMFx1MjcwY1wwXHUyNzNkIisKLSAgICAiXDBcdTAxNTdcMFx1Mjc2ZVwwXHUyNzlmXDBcdTI3ZDBcMFx1MjgwMVwwXHUyODMyXDBcdTI4NjNcMFx1Mjg5NCIrCi0gICAgIlwwXHUyOGM1XDBcdTI4ZjZcMFx1MjkyN1wwXHUyOTU4XDBcdTI5ODlcMFx1MjliYVwwXHUyOWViXDBcdTJhMWMiKwotICAgICJcMFx1MmE0ZFwwXHUyYTdlXDBcdTJhYWZcMFx1MmFlMFwwXHUyYjExXDBcdTJiNDJcMFx1MmI3M1wwXHUwMTU3IisKLSAgICAiXDBcdTJiYTRcMFx1MmJkNVwwXHUyYzA2XDBcdTJjMzdcMFx1MmM2OFwwXHUyYzk5XDBcdTJjY2FcMFx1MmNmYiIrCi0gICAgIlwwXHUwMTU3XDBcdTAxNTdcMFx1MmQyY1wwXHUyZDVkXDBcdTJkOGVcMFx1MmRiZlwwXHUyZGYwXDBcdTJlMjEiKwotICAgICJcMFx1MmU1MlwwXHUyZTgzXDBcdTJlYjRcMFx1MmVlNVwwXHUyZjE2XDBcdTJmNDdcMFx1MDE1N1wwXHUwMTU3IisKLSAgICAiXDBcdTJmNzhcMFx1MmZhOVwwXHUyZmRhXDBcdTMwMGJcMFx1MDE1N1wwXHUwMTU3XDBcdTMwM2NcMFx1MDE1NyIrCi0gICAgIlwwXHUzMDZkXDBcdTMwOWVcMFx1MzBjZlwwXHUzMTAwXDBcdTAxNTciOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBbXSB6elVucGFja1Jvd01hcCgpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFszMzNdOwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIG9mZnNldCA9IHp6VW5wYWNrUm93TWFwKFpaX1JPV01BUF9QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tSb3dNYXAoU3RyaW5nIHBhY2tlZCwgaW50IG9mZnNldCwgaW50IFtdIHJlc3VsdCkgewotICAgIGludCBpID0gMDsgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSBvZmZzZXQ7ICAvKiBpbmRleCBpbiB1bnBhY2tlZCBhcnJheSAqLwotICAgIGludCBsID0gcGFja2VkLmxlbmd0aCgpOwotICAgIHdoaWxlIChpIDwgbCkgewotICAgICAgaW50IGhpZ2ggPSBwYWNrZWQuY2hhckF0KGkrKykgPDwgMTY7Ci0gICAgICByZXN1bHRbaisrXSA9IGhpZ2ggfCBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLSAgLyoqIAotICAgKiBUaGUgdHJhbnNpdGlvbiB0YWJsZSBvZiB0aGUgREZBCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfVFJBTlMgPSB6elVucGFja1RyYW5zKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpaX1RSQU5TX1BBQ0tFRF8wID0KLSAgICAiXDFcM1wxXDRcMVw1XDFcNlwxXDdcMVwxMFwxXDExXDFcMTIiKwotICAgICJcMVwxMVwxXDEzXDFcMTRcMVwxNVwxXDE2XDFcMTdcMVwyMFwxXDIxIisKLSAgICAiXDFcMjJcMVwyM1wxXDI0XDFcMjVcMVwyNlwxXDI3XDFcMzBcMVwzMSIrCi0gICAgIlwxXDMyXDFcMzNcMVwzNFwxXDExXDFcMzVcMVwzNlwxXDM3XDFcNDAiKwotICAgICJcMVw0MVwxXDQyXDFcNDNcMVw0NFwxXDQ1XDFcMTFcMVw0NlwxXDQ3IisKLSAgICAiXDFcNTBcMVwxMVwxXDUxXDFcNTJcMVw1M1w0XDExXDEyXDRcMVw1NCIrCi0gICAgIlwxXDU1XDQ1XDRcNjFcMFwyXDU2XDFcNTdcNTZcNTZcM1w2MFwxXDYxIisKLSAgICAiXDU1XDYwXDRcMFwxXDdcMVw2MlwxXDYzXDMwXDBcMVw2M1wyNVwwIisKLSAgICAiXDFcNjJcMVw2NFw1N1wwXDNcMTFcMVwwXDJcMTFcMjBcMFwyN1wxMSIrCi0gICAgIlwxM1wwXDFcNjVcNjBcMFwxXDY2XDY2XDBcMVw2N1w2MFwwXDFcNzAiKwotICAgICJcMVwwXDFcNzFcNTZcMFwxXDcyXDJcMFwxXDczXDYxXDBcMVw3NCIrCi0gICAgIlwzN1wwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDExXDFcNzVcNlwxMSIrCi0gICAgIlwxXDc2XDVcMTFcMVw3N1wxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDRcMTFcMVwxMDBcMVwxMVwxXDEwMVwxXDEwMlwxXDExXDFcMTAzIisKLSAgICAiXDNcMTFcMVwxMDRcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMTA1XDNcMTFcMVwxMDZcMTVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwyXDExXDFcMTA3XDJcMTFcMVwxMTBcMTBcMTFcMVwxMTEiKwotICAgICJcMTBcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwzXDExXDFcMTEyIisKLSAgICAiXDE1XDExXDFcMTEzXDFcMTFcMVwxMTRcMVwxMTVcMVwxMTZcMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDFcMTE3XDRcMTFcMVwxMjBcMlwxMSIrCi0gICAgIlwxXDEyMVw1XDExXDFcMTIyXDEwXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNVwxMVwxXDEyM1wyXDExXDFcMTI0XDVcMTFcMVwxMjVcMTBcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMTI2XDFcMTI3IisKLSAgICAiXDFcMTFcMVwxMzBcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxXDExXDFcMTMxXDNcMTFcMVwxMzJcNFwxMVwxXDEzM1wzXDExXDFcMTM0IisKLSAgICAiXDdcMTFcMVwxMzVcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcMTM2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMSIrCi0gICAgIlwxXDEzN1wxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExIisKLSAgICAiXDFcMTQwXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTEiKwotICAgICJcMVwxNDFcMlwxMVwxXDE0MlwxMVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwxNDNcM1wxMVwxXDE0NFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE2XDExXDFcMTQ1XDEwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwxNDZcMVwxMVwxXDE0N1wxNFwxMSIrCi0gICAgIlwxM1wwXDFcMTUwXDYzXDBcMVwxNTFcNDRcMFwxXDU2XDYxXDBcMVw2MCIrCi0gICAgIlw2MVwwXDFcNjJcMVwwXDFcNjNcMzBcMFwxXDYzXDI1XDBcMVwxNTIiKwotICAgICJcMlwwXDFcMTUzXDFcMFwxXDE1M1w1M1wwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMTU0XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNlwxMVwxXDE1NVwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDIxXDExXDFcMTU2XDVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMTU3XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNlwxMVwxXDE2MFwyXDExXDFcMTYxXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNVwxMVwxXDE2MlwyMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDI0XDExXDFcMTYzXDJcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw2XDExXDFcMTY0XDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMVwxNjVcMjZcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw1XDExXDFcMTY2XDFcMTY3XDIwXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjJcMTFcMVwxNzBcNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwxNzFcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxXDE3MlwyNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDFcMTFcMVwxNzNcMjVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwzXDExXDFcMTc0XDIzXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTFcMTFcMVwxNzVcMTVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwyMVwxMVwxXDE3Nlw1XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMjFcMTFcMVwxNzdcNVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVwyMDBcMjJcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDIwMVwzXDExXDFcMjAyXDIyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwyMDNcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjA0XDIxXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMjVcMTFcMVwyMDVcMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyMDZcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMlwxMVwxXDIwN1w0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwyMTBcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyXDExXDFcMjExXDI0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcM1wxMVwxXDIxMlw2XDExXDFcMjEzXDE0XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNFwxMVwxXDIxNFwyMlwxMSIrCi0gICAgIlw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExXDFcMjE1XDE0XDExIisKLSAgICAiXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDIxNlwxMFwxMSIrCi0gICAgIlwxXDIxN1wxMFwxMVw0XDBcMVwxNTJcNjBcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcM1wxMVwxXDIyMFwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMjIxXDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMjFcMTFcMVwyMjJcNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDI0XDExXDFcMjIzXDJcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDIyNFwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwyMjVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyMVwxMVwxXDIyNlw1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVwyMjdcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxNFwxMVwxXDIzMFwxMlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDIxXDExXDFcMjMxXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjMyXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTFcMTFcMVwyMzNcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMlwxMVwxXDIzNFwxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyMzVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjM2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTVcMTFcMVwyMzdcMTFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwyXDExXDFcMjQwXDI0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0MVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwyNDJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjQzXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDI0NFwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEyXDExXDFcMjQ1XDE0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcN1wxMVwxXDI0NlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMjQ3XDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTBcMTFcMVwyNTBcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjUxXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTRcMTFcMVwyNTJcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxNlwxMVwxXDI1M1wxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDNcMTFcMVwyNTRcMjNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlw1XDExXDFcMjU1XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMVwyNTZcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXDI1NyIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDRcMTFcMVwyNjAiKwotICAgICJcMjJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMFwxMVwxXDI2MSIrCi0gICAgIlwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwyNjIiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMFwxMVwxXDI2MyIrCi0gICAgIlwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExXDFcMjY0IisKLSAgICAiXDE0XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDI2NSIrCi0gICAgIlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIxXDExXDFcMjY2IisKLSAgICAiXDVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMjY3IisKLSAgICAiXDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjZcMTFcMVwyNzAiKwotICAgICJcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyNlwxMVwxXDI3MVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMjcyXDRcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXDI3M1w1XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDI3NFwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwyNzVcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw2XDExXDFcMjc2XDIwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMlwxMVwxXDI3N1wyNFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzAwXDE1XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNlwxMVwxXDMwMVwyMFwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDEyXDExXDFcMzAyXDE0XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMwM1wxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDE2XDExXDFcMzA0XDEwXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMwNVwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTFcMVwzMDZcMjFcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcMzA3XDIxXDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMTNcMTFcMVwzMTBcMTNcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzExXDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXDMxMlwxN1wxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDZcMTFcMVwzMTNcMjBcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDJcMTFcMjBcMFw3XDExXDFcMzE0XDE3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcNVwxMVwxXDMxNVwyMVwxMVw0XDAiKwotICAgICJcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMTZcMTdcMTFcNFwwIisKLSAgICAiXDNcMTFcMVwwXDFcMTFcMVwzMTdcMjBcMFwyN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDExXDExXDFcMzIwXDE1XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTBcMTFcMVwzMjFcMTZcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxNVwxMVwxXDMyMlwxMVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDIyXDExXDFcMzIzXDRcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMyNFwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDEzXDExXDFcMzI1XDEzXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTdcMTFcMVwzMjZcN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDdcMTFcMVwzMjdcMTdcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxN1wxMVwxXDMzMFw3XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTFcMTFcMVwzMzFcMTVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw0XDExXDFcMzMyXDIyXDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcNlwxMVwxXDMzM1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDNcMTFcMVwzMzRcMjNcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXDMzNVwxNVwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDFcMzM2XDI2XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXDMzN1wyMVwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDRcMTFcMVwzNDBcMjJcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw3XDExXDFcMzQxXDE3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMTFcMTFcMVwzNDJcMTVcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFw2XDExXDFcMzQzXDIwXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwxXDExXDFcMzQ0XDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzQ1XDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTBcMTFcMVwzNDZcMTZcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxNlwxMVwxXDM0N1wxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDE0XDExXDFcMzUwXDEyXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM1MVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVwzNTJcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwyXDExXDFcMzUzXDI0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcNlwxMVwxXDM1NFwyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDVcMTFcMVwzNTVcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcMzU2XDIxXDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMVwzNTdcMjZcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxMFwxMVwxXDM2MFwxNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDExXDExXDFcMzYxXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcNVwxMVwxXDM2MlwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVwzNjNcMlwxMVwxXDM2NFwxNlwxMVw0XDBcM1wxMVwxXDAiKwotICAgICJcMlwxMVwyMFwwXDVcMTFcMVwzNjVcMjFcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxXDM2NlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEyXDExXDFcMzY3XDE0XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMTFcMTFcMVwzNzBcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxMVwxMVwxXDM3MVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDdcMTFcMVwzNzJcMTdcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw3XDExXDFcMzczXDE3XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcMlwxMVwxXDM3NFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDExXDExXDFcMzc1XDE1XDExXDRcMFwzXDExXDFcMFwyXDExIisKLSAgICAiXDIwXDBcN1wxMVwxXDM3NlwxN1wxMVw0XDBcM1wxMVwxXDBcMVwxMSIrCi0gICAgIlwxXDM3N1wyMFwwXDI3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMjNcMTFcMVx1MDEwMFwzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcM1wxMVwxXHUwMTAxXDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTFcMTFcMVx1MDEwMlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDZcMTFcMVx1MDEwM1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDVcMTFcMVx1MDEwNFwyMVwxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTA1IisKLSAgICAiXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxMDZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxXHUwMTA3IisKLSAgICAiXDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTFcMVx1MDEwOCIrCi0gICAgIlw2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTFcMVx1MDEwOSIrCi0gICAgIlw2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXHUwMTBhIisKLSAgICAiXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTFcMVx1MDEwYiIrCi0gICAgIlwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDdcMTFcMVx1MDEwYyIrCi0gICAgIlwxN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE0XDExXDFcdTAxMGQiKwotICAgICJcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExXDFcdTAxMGUiKwotICAgICJcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxMVwxMVwxXHUwMTBmIisKLSAgICAiXDE1XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTZcMTFcMVx1MDExMCIrCi0gICAgIlwxMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDFcMTFcMVx1MDExMSIrCi0gICAgIlwyNVwxMVw0XDBcM1wxMVwxXDBcMVwxMVwxXHUwMTEyXDIwXDBcMjdcMTEiKwotICAgICJcNFwwXDNcMTFcMVwwXDFcMTFcMVx1MDExM1wyMFwwXDI3XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwyXDExXDIwXDBcMjBcMTFcMVx1MDExNFw2XDExXDRcMCIrCi0gICAgIlwzXDExXDFcMFwxXDExXDFcdTAxMTVcMjBcMFwyN1wxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDE2XDExXDFcdTAxMTZcMTBcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFw1XDExXDFcdTAxMTdcMjFcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwyMVwxMVwxXHUwMTE4XDVcMTFcNFwwXDNcMTEiKwotICAgICJcMVwwXDJcMTFcMjBcMFwxMlwxMVwxXHUwMTE5XDE0XDExXDRcMFwzXDExIisKLSAgICAiXDFcMFwyXDExXDIwXDBcMTJcMTFcMVx1MDExYVwxNFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVx1MDExYlwyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMlwxMVwyMFwwXDZcMTFcMVx1MDExY1wyMFwxMVw0XDBcM1wxMSIrCi0gICAgIlwxXDBcMVwxMVwxXHUwMTFkXDIwXDBcMjdcMTFcNFwwXDNcMTFcMVwwIisKLSAgICAiXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTFlXDEwXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNFwxMVwxXHUwMTFmXDIyXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcN1wxMVwxXHUwMTIwXDE3XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcNVwxMVwxXHUwMTIxXDIxXDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwyXDExXDIwXDBcMlwxMVwxXHUwMTIyXDI0XDExXDRcMFwzXDExXDFcMCIrCi0gICAgIlwxXDExXDFcdTAxMjNcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVx1MDEyNFwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVx1MDEyNVwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDJcMTFcMVx1MDEyNlwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMSIrCi0gICAgIlwyMFwwXDEyXDExXDFcdTAxMjdcMTRcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFw1XDExXDFcdTAxMjhcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTEiKwotICAgICJcMjBcMFwxXHUwMTI5XDI2XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcN1wxMVwxXHUwMTJhXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcMTNcMTFcMVx1MDEyYlwxM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDZcMTFcMVx1MDEyY1wyMFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwIisKLSAgICAiXDEzXDExXDFcdTAxMmRcMTNcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMCIrCi0gICAgIlwxM1wxMVwxXHUwMTJlXDEzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDAiKwotICAgICJcN1wxMVwxXHUwMTJmXDE3XDExXDRcMFwzXDExXDFcMFwxXDExXDFcdTAxMzAiKwotICAgICJcMjBcMFwyN1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDVcMTEiKwotICAgICJcMVx1MDEzMVwyMVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxMzJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNFwxMSIrCi0gICAgIlwxXHUwMTMzXDEyXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNVwxMSIrCi0gICAgIlwxXHUwMTM0XDIxXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMSIrCi0gICAgIlwxXHUwMTM1XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcM1wxMSIrCi0gICAgIlwxXHUwMTM2XDIzXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMSIrCi0gICAgIlwxXHUwMTM3XDIwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcNlwxMSIrCi0gICAgIlwxXHUwMTM4XDIwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTFcMTEiKwotICAgICJcMVx1MDEzOVwxNVwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDEzYVwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTEiKwotICAgICJcMVx1MDEzYlwyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDJcMTEiKwotICAgICJcMVx1MDEzY1wyNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExIisKLSAgICAiXDFcdTAxM2RcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxM2VcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFw1XDExIisKLSAgICAiXDFcdTAxM2ZcMjFcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNVwxMSIrCi0gICAgIlwxXHUwMTQwXDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMSIrCi0gICAgIlwxXHUwMTQxXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMSIrCi0gICAgIlwxXHUwMTQyXDE3XDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMTJcMTEiKwotICAgICJcMVx1MDE0M1wxNFwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDNcMTEiKwotICAgICJcMVx1MDE0NFwyM1wxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExIisKLSAgICAiXDFcdTAxNDVcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDIwXDExIisKLSAgICAiXDFcdTAxNDZcNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDE0XDExIisKLSAgICAiXDFcdTAxNDdcMTJcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNVwxMSIrCi0gICAgIlwxXHUwMTQ4XDExXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcMVx1MDE0OSIrCi0gICAgIlwyNlwxMVw0XDBcM1wxMVwxXDBcMlwxMVwyMFwwXDExXDExXDFcdTAxNGEiKwotICAgICJcMTVcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwyXDExXDFcdTAxNGIiKwotICAgICJcMjRcMTFcNFwwXDNcMTFcMVwwXDJcMTFcMjBcMFwxNlwxMVwxXHUwMTRjIisKLSAgICAiXDEwXDExXDRcMFwzXDExXDFcMFwyXDExXDIwXDBcN1wxMVwxXHUwMTRkIisKLSAgICAiXDE3XDExIjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgW10genpVbnBhY2tUcmFucygpIHsKLSAgICBpbnQgW10gcmVzdWx0ID0gbmV3IGludFsxMjU5M107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tUcmFucyhaWl9UUkFOU19QQUNLRURfMCwgb2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgenpVbnBhY2tUcmFucyhTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIHZhbHVlLS07Ci0gICAgICBkbyByZXN1bHRbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gajsKLSAgfQotCi0KLSAgLyogZXJyb3IgY29kZXMgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFpaX1VOS05PV05fRVJST1IgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfTk9fTUFUQ0ggPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWlpfUFVTSEJBQ0tfMkJJRyA9IDI7Ci0KLSAgLyogZXJyb3IgbWVzc2FnZXMgZm9yIHRoZSBjb2RlcyBhYm92ZSAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfRVJST1JfTVNHW10gPSB7Ci0gICAgIlVua293biBpbnRlcm5hbCBzY2FubmVyIGVycm9yIiwKLSAgICAiRXJyb3I6IGNvdWxkIG5vdCBtYXRjaCBpbnB1dCIsCi0gICAgIkVycm9yOiBwdXNoYmFjayB2YWx1ZSB3YXMgdG9vIGxhcmdlIgotICB9OwotCi0gIC8qKgotICAgKiBaWl9BVFRSSUJVVEVbYVN0YXRlXSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiBzdGF0ZSA8Y29kZT5hU3RhdGU8L2NvZGU+Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gWlpfQVRUUklCVVRFID0genpVbnBhY2tBdHRyaWJ1dGUoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWlpfQVRUUklCVVRFX1BBQ0tFRF8wID0KLSAgICAiXDJcMFwyXDExXDVcMVwyXDExXDJcMVw2XDExXDRcMVw0XDExIisKLSAgICAiXDIyXDFcMVwwXDFcMVwxXDBcMlwxXDFcMFwxMVwxMVw1M1wxIisKLSAgICAiXDJcMTFcMVwxXDFcMFwzNDJcMSI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IFtdIHp6VW5wYWNrQXR0cmlidXRlKCkgewotICAgIGludCBbXSByZXN1bHQgPSBuZXcgaW50WzMzM107Ci0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgb2Zmc2V0ID0genpVbnBhY2tBdHRyaWJ1dGUoWlpfQVRUUklCVVRFX1BBQ0tFRF8wLCBvZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCB6elVucGFja0F0dHJpYnV0ZShTdHJpbmcgcGFja2VkLCBpbnQgb2Zmc2V0LCBpbnQgW10gcmVzdWx0KSB7Ci0gICAgaW50IGkgPSAwOyAgICAgICAvKiBpbmRleCBpbiBwYWNrZWQgc3RyaW5nICAqLwotICAgIGludCBqID0gb2Zmc2V0OyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICBpbnQgbCA9IHBhY2tlZC5sZW5ndGgoKTsKLSAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgIGludCBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGludCB2YWx1ZSA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGRvIHJlc3VsdFtqKytdID0gdmFsdWU7IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLSAgLyoqIHRoZSBpbnB1dCBkZXZpY2UgKi8KLSAgcHJpdmF0ZSBqYXZhLmlvLlJlYWRlciB6elJlYWRlcjsKLQotICAvKiogdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIERGQSAqLwotICBwcml2YXRlIGludCB6elN0YXRlOwotCi0gIC8qKiB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlICovCi0gIHByaXZhdGUgaW50IHp6TGV4aWNhbFN0YXRlID0gWVlJTklUSUFMOwotCi0gIC8qKiB0aGlzIGJ1ZmZlciBjb250YWlucyB0aGUgY3VycmVudCB0ZXh0IHRvIGJlIG1hdGNoZWQgYW5kIGlzCi0gICAgICB0aGUgc291cmNlIG9mIHRoZSB5eXRleHQoKSBzdHJpbmcgKi8KLSAgcHJpdmF0ZSBjaGFyIHp6QnVmZmVyW10gPSBuZXcgY2hhcltaWl9CVUZGRVJTSVpFXTsKLQotICAvKiogdGhlIHRleHRwb3NpdGlvbiBhdCB0aGUgbGFzdCBhY2NlcHRpbmcgc3RhdGUgKi8KLSAgcHJpdmF0ZSBpbnQgenpNYXJrZWRQb3M7Ci0KLSAgLyoqIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciAqLwotICBwcml2YXRlIGludCB6ekN1cnJlbnRQb3M7Ci0KLSAgLyoqIHN0YXJ0UmVhZCBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB5eXRleHQoKSBzdHJpbmcgaW4gdGhlIGJ1ZmZlciAqLwotICBwcml2YXRlIGludCB6elN0YXJ0UmVhZDsKLQotICAvKiogZW5kUmVhZCBtYXJrcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciwgdGhhdCBoYXMgYmVlbiByZWFkCi0gICAgICBmcm9tIGlucHV0ICovCi0gIHByaXZhdGUgaW50IHp6RW5kUmVhZDsKLQotICAvKiogbnVtYmVyIG9mIG5ld2xpbmVzIGVuY291bnRlcmVkIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2hlZCB0ZXh0ICovCi0gIHByaXZhdGUgaW50IHl5bGluZTsKLQotICAvKiogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2hlZCB0ZXh0ICovCi0gIHByaXZhdGUgaW50IHl5Y2hhcjsKLQotICAvKioKLSAgICogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxhc3QgbmV3bGluZSB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIAotICAgKiBtYXRjaGVkIHRleHQKLSAgICovCi0gIHByaXZhdGUgaW50IHl5Y29sdW1uOwotCi0gIC8qKiAKLSAgICogenpBdEJPTCA9PSB0cnVlIDw9PiB0aGUgc2Nhbm5lciBpcyBjdXJyZW50bHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekF0Qk9MID0gdHJ1ZTsKLQotICAvKiogenpBdEVPRiA9PSB0cnVlIDw9PiB0aGUgc2Nhbm5lciBpcyBhdCB0aGUgRU9GICovCi0gIHByaXZhdGUgYm9vbGVhbiB6ekF0RU9GOwotCi0gIC8qKiBkZW5vdGVzIGlmIHRoZSB1c2VyLUVPRi1jb2RlIGhhcyBhbHJlYWR5IGJlZW4gZXhlY3V0ZWQgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6RU9GRG9uZTsKLQotICAvKiB1c2VyIGNvZGU6ICovCi0JcHVibGljIGludCBsaW5lbm8oKSB7IHJldHVybiB5eWxpbmUgKyAxOyB9Ci0JcHVibGljIGludCBjb2xubygpIHsgcmV0dXJuIHl5Y29sdW1uICsgMTsgfQotCi0JcHJpdmF0ZSBTeW1ib2wgc3ltYm9sKGludCB0eXBlKSB7Ci0JCXJldHVybiBuZXcgU3ltYm9sKHR5cGUsIGxpbmVubygpLCBjb2xubygpKTsKLQl9Ci0JcHJpdmF0ZSBTeW1ib2wgc3ltYm9sKGludCB0eXBlLCBPYmplY3QgdmFsdWUpIHsKLQkJcmV0dXJuIG5ldyBTeW1ib2wodHlwZSwgbGluZW5vKCksIGNvbG5vKCksIHZhbHVlKTsKLQl9Ci0KLQlwcml2YXRlIGludCBjb21tZW50TGV2ZWwgPSAwOwotCi0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgc2Nhbm5lcgotICAgKiBUaGVyZSBpcyBhbHNvIGEgamF2YS5pby5JbnB1dFN0cmVhbSB2ZXJzaW9uIG9mIHRoaXMgY29uc3RydWN0b3IuCi0gICAqCi0gICAqIEBwYXJhbSAgIGluICB0aGUgamF2YS5pby5SZWFkZXIgdG8gcmVhZCBpbnB1dCBmcm9tLgotICAgKi8KLSAgcHVibGljIFhQYXRoRmxleChqYXZhLmlvLlJlYWRlciBpbikgewotICAgIHRoaXMuenpSZWFkZXIgPSBpbjsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHNjYW5uZXIuCi0gICAqIFRoZXJlIGlzIGFsc28gamF2YS5pby5SZWFkZXIgdmVyc2lvbiBvZiB0aGlzIGNvbnN0cnVjdG9yLgotICAgKgotICAgKiBAcGFyYW0gICBpbiAgdGhlIGphdmEuaW8uSW5wdXRzdHJlYW0gdG8gcmVhZCBpbnB1dCBmcm9tLgotICAgKi8KLSAgWFBhdGhGbGV4KGphdmEuaW8uSW5wdXRTdHJlYW0gaW4pIHsKLSAgICB0aGlzKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKGluKSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFVucGFja3MgdGhlIGNvbXByZXNzZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlLgotICAgKgotICAgKiBAcGFyYW0gcGFja2VkICAgdGhlIHBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICogQHJldHVybiAgICAgICAgIHRoZSB1bnBhY2tlZCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNoYXIgW10genpVbnBhY2tDTWFwKFN0cmluZyBwYWNrZWQpIHsKLSAgICBjaGFyIFtdIG1hcCA9IG5ldyBjaGFyWzB4MTAwMDBdOwotICAgIGludCBpID0gMDsgIC8qIGluZGV4IGluIHBhY2tlZCBzdHJpbmcgICovCi0gICAgaW50IGogPSAwOyAgLyogaW5kZXggaW4gdW5wYWNrZWQgYXJyYXkgKi8KLSAgICB3aGlsZSAoaSA8IDEzMikgewotICAgICAgaW50ICBjb3VudCA9IHBhY2tlZC5jaGFyQXQoaSsrKTsKLSAgICAgIGNoYXIgdmFsdWUgPSBwYWNrZWQuY2hhckF0KGkrKyk7Ci0gICAgICBkbyBtYXBbaisrXSA9IHZhbHVlOyB3aGlsZSAoLS1jb3VudCA+IDApOwotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLQotICAvKioKLSAgICogUmVmaWxscyB0aGUgaW5wdXQgYnVmZmVyLgotICAgKgotICAgKiBAcmV0dXJuICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+LCBpZmYgdGhlcmUgd2FzIG5ldyBpbnB1dC4KLSAgICogCi0gICAqIEBleGNlcHRpb24gICBqYXZhLmlvLklPRXhjZXB0aW9uICBpZiBhbnkgSS9PLUVycm9yIG9jY3VycwotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHp6UmVmaWxsKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotCi0gICAgLyogZmlyc3Q6IG1ha2Ugcm9vbSAoaWYgeW91IGNhbikgKi8KLSAgICBpZiAoenpTdGFydFJlYWQgPiAwKSB7Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KHp6QnVmZmVyLCB6elN0YXJ0UmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgenpCdWZmZXIsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIHp6RW5kUmVhZC16elN0YXJ0UmVhZCk7Ci0KLSAgICAgIC8qIHRyYW5zbGF0ZSBzdG9yZWQgcG9zaXRpb25zICovCi0gICAgICB6ekVuZFJlYWQtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6Q3VycmVudFBvcy09IHp6U3RhcnRSZWFkOwotICAgICAgenpNYXJrZWRQb3MtPSB6elN0YXJ0UmVhZDsKLSAgICAgIHp6U3RhcnRSZWFkID0gMDsKLSAgICB9Ci0KLSAgICAvKiBpcyB0aGUgYnVmZmVyIGJpZyBlbm91Z2g/ICovCi0gICAgaWYgKHp6Q3VycmVudFBvcyA+PSB6ekJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgIC8qIGlmIG5vdDogYmxvdyBpdCB1cCAqLwotICAgICAgY2hhciBuZXdCdWZmZXJbXSA9IG5ldyBjaGFyW3p6Q3VycmVudFBvcyoyXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoenpCdWZmZXIsIDAsIG5ld0J1ZmZlciwgMCwgenpCdWZmZXIubGVuZ3RoKTsKLSAgICAgIHp6QnVmZmVyID0gbmV3QnVmZmVyOwotICAgIH0KLQotICAgIC8qIGZpbmFsbHk6IGZpbGwgdGhlIGJ1ZmZlciB3aXRoIG5ldyBpbnB1dCAqLwotICAgIGludCBudW1SZWFkID0genpSZWFkZXIucmVhZCh6ekJ1ZmZlciwgenpFbmRSZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ekJ1ZmZlci5sZW5ndGgtenpFbmRSZWFkKTsKLQotICAgIGlmIChudW1SZWFkID4gMCkgewotICAgICAgenpFbmRSZWFkKz0gbnVtUmVhZDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gdW5saWtlbHkgYnV0IG5vdCBpbXBvc3NpYmxlOiByZWFkIDAgY2hhcmFjdGVycywgYnV0IG5vdCBhdCBlbmQgb2Ygc3RyZWFtICAgIAotICAgIGlmIChudW1SZWFkID09IDApIHsKLSAgICAgIGludCBjID0genpSZWFkZXIucmVhZCgpOwotICAgICAgaWYgKGMgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB6ekJ1ZmZlclt6ekVuZFJlYWQrK10gPSAoY2hhcikgYzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgCi0gICAgfQotCi0JLy8gbnVtUmVhZCA8IDAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gICAgCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5Y2xvc2UoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgenpBdEVPRiA9IHRydWU7ICAgICAgICAgICAgLyogaW5kaWNhdGUgZW5kIG9mIGZpbGUgKi8KLSAgICB6ekVuZFJlYWQgPSB6elN0YXJ0UmVhZDsgIC8qIGludmFsaWRhdGUgYnVmZmVyICAgICovCi0KLSAgICBpZiAoenpSZWFkZXIgIT0gbnVsbCkKLSAgICAgIHp6UmVhZGVyLmNsb3NlKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIHNjYW5uZXIgdG8gcmVhZCBmcm9tIGEgbmV3IGlucHV0IHN0cmVhbS4KLSAgICogRG9lcyBub3QgY2xvc2UgdGhlIG9sZCByZWFkZXIuCi0gICAqCi0gICAqIEFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgYXJlIHJlc2V0LCB0aGUgb2xkIGlucHV0IHN0cmVhbSAKLSAgICogPGI+Y2Fubm90PC9iPiBiZSByZXVzZWQgKGludGVybmFsIGJ1ZmZlciBpcyBkaXNjYXJkZWQgYW5kIGxvc3QpLgotICAgKiBMZXhpY2FsIHN0YXRlIGlzIHNldCB0byA8dHQ+WlpfSU5JVElBTDwvdHQ+LgotICAgKgotICAgKiBAcGFyYW0gcmVhZGVyICAgdGhlIG5ldyBpbnB1dCBzdHJlYW0gCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB5eXJlc2V0KGphdmEuaW8uUmVhZGVyIHJlYWRlcikgewotICAgIHp6UmVhZGVyID0gcmVhZGVyOwotICAgIHp6QXRCT0wgID0gdHJ1ZTsKLSAgICB6ekF0RU9GICA9IGZhbHNlOwotICAgIHp6RU9GRG9uZSA9IGZhbHNlOwotICAgIHp6RW5kUmVhZCA9IHp6U3RhcnRSZWFkID0gMDsKLSAgICB6ekN1cnJlbnRQb3MgPSB6ek1hcmtlZFBvcyA9IDA7Ci0gICAgeXlsaW5lID0geXljaGFyID0geXljb2x1bW4gPSAwOwotICAgIHp6TGV4aWNhbFN0YXRlID0gWVlJTklUSUFMOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY3VycmVudCBsZXhpY2FsIHN0YXRlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIGludCB5eXN0YXRlKCkgewotICAgIHJldHVybiB6ekxleGljYWxTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEVudGVycyBhIG5ldyBsZXhpY2FsIHN0YXRlCi0gICAqCi0gICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IGxleGljYWwgc3RhdGUKLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHl5YmVnaW4oaW50IG5ld1N0YXRlKSB7Ci0gICAgenpMZXhpY2FsU3RhdGUgPSBuZXdTdGF0ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgY3VycmVudCByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHl5dGV4dCgpIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZyggenpCdWZmZXIsIHp6U3RhcnRSZWFkLCB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZCApOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIDx0dD5wb3M8L3R0PiBmcm9tIHRoZSAKLSAgICogbWF0Y2hlZCB0ZXh0LiAKLSAgICogCi0gICAqIEl0IGlzIGVxdWl2YWxlbnQgdG8geXl0ZXh0KCkuY2hhckF0KHBvcyksIGJ1dCBmYXN0ZXIKLSAgICoKLSAgICogQHBhcmFtIHBvcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciB0byBmZXRjaC4gCi0gICAqICAgICAgICAgICAgQSB2YWx1ZSBmcm9tIDAgdG8geXlsZW5ndGgoKS0xLgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zCi0gICAqLwotICBwdWJsaWMgZmluYWwgY2hhciB5eWNoYXJhdChpbnQgcG9zKSB7Ci0gICAgcmV0dXJuIHp6QnVmZmVyW3p6U3RhcnRSZWFkK3Bvc107Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCByZWdpb24uCi0gICAqLwotICBwdWJsaWMgZmluYWwgaW50IHl5bGVuZ3RoKCkgewotICAgIHJldHVybiB6ek1hcmtlZFBvcy16elN0YXJ0UmVhZDsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFJlcG9ydHMgYW4gZXJyb3IgdGhhdCBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nLgotICAgKgotICAgKiBJbiBhIHdlbGxmb3JtZWQgc2Nhbm5lciAobm8gb3Igb25seSBjb3JyZWN0IHVzYWdlIG9mIAotICAgKiB5eXB1c2hiYWNrKGludCkgYW5kIGEgbWF0Y2gtYWxsIGZhbGxiYWNrIHJ1bGUpIHRoaXMgbWV0aG9kIAotICAgKiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhpbmdzIHRoYXQgIkNhbid0IFBvc3NpYmx5IEhhcHBlbiIuCi0gICAqIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgc29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZwotICAgKiAoZS5nLiBhIEpGbGV4IGJ1ZyBwcm9kdWNpbmcgYSBmYXVsdHkgc2Nhbm5lciBldGMuKS4KLSAgICoKLSAgICogVXN1YWwgc3ludGF4L3NjYW5uZXIgbGV2ZWwgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUKLSAgICogaW4gZXJyb3IgZmFsbGJhY2sgcnVsZXMuCi0gICAqCi0gICAqIEBwYXJhbSAgIGVycm9yQ29kZSAgdGhlIGNvZGUgb2YgdGhlIGVycm9ybWVzc2FnZSB0byBkaXNwbGF5Ci0gICAqLwotICBwcml2YXRlIHZvaWQgenpTY2FuRXJyb3IoaW50IGVycm9yQ29kZSkgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBtZXNzYWdlID0gWlpfRVJST1JfTVNHW2Vycm9yQ29kZV07Ci0gICAgfQotICAgIGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZSA9IFpaX0VSUk9SX01TR1taWl9VTktOT1dOX0VSUk9SXTsKLSAgICB9Ci0KLSAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Ci0gIH0gCi0KLQotICAvKioKLSAgICogUHVzaGVzIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZSBpbnB1dCBzdHJlYW0uCi0gICAqCi0gICAqIFRoZXkgd2lsbCBiZSByZWFkIGFnYWluIGJ5IHRoZW4gbmV4dCBjYWxsIG9mIHRoZSBzY2FubmluZyBtZXRob2QKLSAgICoKLSAgICogQHBhcmFtIG51bWJlciAgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlYWQgYWdhaW4uCi0gICAqICAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiB5eWxlbmd0aCgpIQotICAgKi8KLSAgcHVibGljIHZvaWQgeXlwdXNoYmFjayhpbnQgbnVtYmVyKSAgewotICAgIGlmICggbnVtYmVyID4geXlsZW5ndGgoKSApCi0gICAgICB6elNjYW5FcnJvcihaWl9QVVNIQkFDS18yQklHKTsKLQotICAgIHp6TWFya2VkUG9zIC09IG51bWJlcjsKLSAgfQotCi0KLSAgLyoqCi0gICAqIENvbnRhaW5zIHVzZXIgRU9GLWNvZGUsIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgZXhhY3RseSBvbmNlLAotICAgKiB3aGVuIHRoZSBlbmQgb2YgZmlsZSBpcyByZWFjaGVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgenpEb0VPRigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICBpZiAoIXp6RU9GRG9uZSkgewotICAgICAgenpFT0ZEb25lID0gdHJ1ZTsKLSAgICAgIHl5Y2xvc2UoKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXN1bWVzIHNjYW5uaW5nIHVudGlsIHRoZSBuZXh0IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLAotICAgKiB0aGUgZW5kIG9mIGlucHV0IGlzIGVuY291bnRlcmVkIG9yIGFuIEkvTy1FcnJvciBvY2N1cnMuCi0gICAqCi0gICAqIEByZXR1cm4gICAgICB0aGUgbmV4dCB0b2tlbgotICAgKiBAZXhjZXB0aW9uICAgamF2YS5pby5JT0V4Y2VwdGlvbiAgaWYgYW55IEkvTy1FcnJvciBvY2N1cnMKLSAgICovCi0gIHB1YmxpYyBqYXZhX2N1cC5ydW50aW1lLlN5bWJvbCBuZXh0X3Rva2VuKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgIGludCB6eklucHV0OwotICAgIGludCB6ekFjdGlvbjsKLQotICAgIC8vIGNhY2hlZCBmaWVsZHM6Ci0gICAgaW50IHp6Q3VycmVudFBvc0w7Ci0gICAgaW50IHp6TWFya2VkUG9zTDsKLSAgICBpbnQgenpFbmRSZWFkTCA9IHp6RW5kUmVhZDsKLSAgICBjaGFyIFtdIHp6QnVmZmVyTCA9IHp6QnVmZmVyOwotICAgIGNoYXIgW10genpDTWFwTCA9IFpaX0NNQVA7Ci0KLSAgICBpbnQgW10genpUcmFuc0wgPSBaWl9UUkFOUzsKLSAgICBpbnQgW10genpSb3dNYXBMID0gWlpfUk9XTUFQOwotICAgIGludCBbXSB6ekF0dHJMID0gWlpfQVRUUklCVVRFOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIHp6TWFya2VkUG9zTCA9IHp6TWFya2VkUG9zOwotCi0gICAgICBib29sZWFuIHp6UiA9IGZhbHNlOwotICAgICAgZm9yICh6ekN1cnJlbnRQb3NMID0genpTdGFydFJlYWQ7IHp6Q3VycmVudFBvc0wgPCB6ek1hcmtlZFBvc0w7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpDdXJyZW50UG9zTCsrKSB7Ci0gICAgICAgIHN3aXRjaCAoenpCdWZmZXJMW3p6Q3VycmVudFBvc0xdKSB7Ci0gICAgICAgIGNhc2UgJ1x1MDAwQic6Ci0gICAgICAgIGNhc2UgJ1x1MDAwQyc6Ci0gICAgICAgIGNhc2UgJ1x1MDA4NSc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOCc6Ci0gICAgICAgIGNhc2UgJ1x1MjAyOSc6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgeXlsaW5lKys7Ci0gICAgICAgICAgeXljb2x1bW4gPSAwOwotICAgICAgICAgIHp6UiA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICBpZiAoenpSKQotICAgICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB5eWxpbmUrKzsKLSAgICAgICAgICAgIHl5Y29sdW1uID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgenpSID0gZmFsc2U7Ci0gICAgICAgICAgeXljb2x1bW4rKzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoenpSKSB7Ci0gICAgICAgIC8vIHBlZWsgb25lIGNoYXJhY3RlciBhaGVhZCBpZiBpdCBpcyBcbiAoaWYgd2UgaGF2ZSBjb3VudGVkIG9uZSBsaW5lIHRvbyBtdWNoKQotICAgICAgICBib29sZWFuIHp6UGVlazsKLSAgICAgICAgaWYgKHp6TWFya2VkUG9zTCA8IHp6RW5kUmVhZEwpCi0gICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgZWxzZSBpZiAoenpBdEVPRikKLSAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgIHp6RW5kUmVhZEwgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgenpNYXJrZWRQb3NMID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgenpCdWZmZXJMID0genpCdWZmZXI7Ci0gICAgICAgICAgaWYgKGVvZikgCi0gICAgICAgICAgICB6elBlZWsgPSBmYWxzZTsKLSAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgenpQZWVrID0genpCdWZmZXJMW3p6TWFya2VkUG9zTF0gPT0gJ1xuJzsKLSAgICAgICAgfQotICAgICAgICBpZiAoenpQZWVrKSB5eWxpbmUtLTsKLSAgICAgIH0KLSAgICAgIHp6QWN0aW9uID0gLTE7Ci0KLSAgICAgIHp6Q3VycmVudFBvc0wgPSB6ekN1cnJlbnRQb3MgPSB6elN0YXJ0UmVhZCA9IHp6TWFya2VkUG9zTDsKLSAgCi0gICAgICB6elN0YXRlID0gWlpfTEVYU1RBVEVbenpMZXhpY2FsU3RhdGVdOwotCi0KLSAgICAgIHp6Rm9yQWN0aW9uOiB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgCi0gICAgICAgICAgaWYgKHp6Q3VycmVudFBvc0wgPCB6ekVuZFJlYWRMKQotICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgIGVsc2UgaWYgKHp6QXRFT0YpIHsKLSAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgIGJyZWFrIHp6Rm9yQWN0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIHN0b3JlIGJhY2sgY2FjaGVkIHBvc2l0aW9ucwotICAgICAgICAgICAgenpDdXJyZW50UG9zICA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICB6ek1hcmtlZFBvcyAgID0genpNYXJrZWRQb3NMOwotICAgICAgICAgICAgYm9vbGVhbiBlb2YgPSB6elJlZmlsbCgpOwotICAgICAgICAgICAgLy8gZ2V0IHRyYW5zbGF0ZWQgcG9zaXRpb25zIGFuZCBwb3NzaWJseSBuZXcgYnVmZmVyCi0gICAgICAgICAgICB6ekN1cnJlbnRQb3NMICA9IHp6Q3VycmVudFBvczsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCAgID0genpNYXJrZWRQb3M7Ci0gICAgICAgICAgICB6ekJ1ZmZlckwgICAgICA9IHp6QnVmZmVyOwotICAgICAgICAgICAgenpFbmRSZWFkTCAgICAgPSB6ekVuZFJlYWQ7Ci0gICAgICAgICAgICBpZiAoZW9mKSB7Ci0gICAgICAgICAgICAgIHp6SW5wdXQgPSBZWUVPRjsKLSAgICAgICAgICAgICAgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgenpJbnB1dCA9IHp6QnVmZmVyTFt6ekN1cnJlbnRQb3NMKytdOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpbnQgenpOZXh0ID0genpUcmFuc0xbIHp6Um93TWFwTFt6elN0YXRlXSArIHp6Q01hcExbenpJbnB1dF0gXTsKLSAgICAgICAgICBpZiAoenpOZXh0ID09IC0xKSBicmVhayB6ekZvckFjdGlvbjsKLSAgICAgICAgICB6elN0YXRlID0genpOZXh0OwotCi0gICAgICAgICAgaW50IHp6QXR0cmlidXRlcyA9IHp6QXR0ckxbenpTdGF0ZV07Ci0gICAgICAgICAgaWYgKCAoenpBdHRyaWJ1dGVzICYgMSkgPT0gMSApIHsKLSAgICAgICAgICAgIHp6QWN0aW9uID0genpTdGF0ZTsKLSAgICAgICAgICAgIHp6TWFya2VkUG9zTCA9IHp6Q3VycmVudFBvc0w7Ci0gICAgICAgICAgICBpZiAoICh6ekF0dHJpYnV0ZXMgJiA4KSA9PSA4ICkgYnJlYWsgenpGb3JBY3Rpb247Ci0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gc3RvcmUgYmFjayBjYWNoZWQgcG9zaXRpb24KLSAgICAgIHp6TWFya2VkUG9zID0genpNYXJrZWRQb3NMOwotCi0gICAgICBzd2l0Y2ggKHp6QWN0aW9uIDwgMCA/IHp6QWN0aW9uIDogWlpfQUNUSU9OW3p6QWN0aW9uXSkgewotICAgICAgICBjYXNlIDc0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JVEVNKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQ2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uR1QpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgODE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTU6IGJyZWFrOwotICAgICAgICBjYXNlIDE1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgOTY6IGJyZWFrOwotICAgICAgICBjYXNlIDM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlRFR0VSLCBuZXcgQmlnSW50ZWdlcih5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FUSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDk4OiBicmVhazsKLSAgICAgICAgY2FzZSA3MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSA5OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQU1FU1BBQ0UpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDA6IGJyZWFrOwotICAgICAgICBjYXNlIDM0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIzOiAKLSAgICAgICAgICB7IC8vIGdldCByaWQgb2YgcXVvdGVzCi0JCQkJU3RyaW5nIHN0ciA9IHl5dGV4dCgpOwotCQkJCWFzc2VydCBzdHIubGVuZ3RoKCkgPj0gMjsKLQkJCQlyZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlNUUklORywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkxpdGVyYWxVdGlscy51bnF1b3RlKHN0cikpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDI6IGJyZWFrOwotICAgICAgICBjYXNlIDE6IAotICAgICAgICAgIHsgU3RyaW5nIGVyciA9ICJVbmtub3duIGNoYXJhY3RlciBhdCBsaW5lICIgKyBsaW5lbm8oKTsgCi0JCWVyciArPSAiIGNvbCAiICsgY29sbm8oKTsKLQkJZXJyICs9ICI6ICIgKyB5eXRleHQoKTsgCi0JCQkgICAgIAotCQl0aHJvdyBuZXcgSkZsZXhFcnJvcihlcnIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDM6IGJyZWFrOwotICAgICAgICBjYXNlIDIwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUEpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDQ6IGJyZWFrOwotICAgICAgICBjYXNlIDcwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5MRVNTX0xFU1MpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDc6IGJyZWFrOwotICAgICAgICBjYXNlIDY1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVFJFQVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMDg6IGJyZWFrOwotICAgICAgICBjYXNlIDEzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU1RBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEwOTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjY6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5VTklPTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMjE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0xMQVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTE6IGJyZWFrOwotICAgICAgICBjYXNlIDg1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0VMRU1FTlQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTI6IGJyZWFrOwotICAgICAgICBjYXNlIDM1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uSU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTM6IGJyZWFrOwotICAgICAgICBjYXNlIDQzOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uT1IpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTQ6IGJyZWFrOwotICAgICAgICBjYXNlIDI1OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9URE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE1OiBicmVhazsKLSAgICAgICAgY2FzZSA4MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRZUEVTV0lUQ0gpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTY6IGJyZWFrOwotICAgICAgICBjYXNlIDU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5OQ05BTUUsIHl5dGV4dCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTE3OiBicmVhazsKLSAgICAgICAgY2FzZSAyNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRFQ0lNQUwsIG5ldyBCaWdEZWNpbWFsKHl5dGV4dCgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDExODogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVF9TWU0pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMTk6IGJyZWFrOwotICAgICAgICBjYXNlIDI5OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU0VRVUFMKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIwOiBicmVhazsKLSAgICAgICAgY2FzZSAyNjogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsgLy8gaW50IG92ZXJmbG93ID1QCi0JCQkgIHl5YmVnaW4oQ09NTUVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ET0NVTUVOVF9OT0RFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTIyOiBicmVhazsKLSAgICAgICAgY2FzZSAzMzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPUldBUkRfU0xBU0hTTEFTSCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyMzogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT1JXQVJEX1NMQVNIKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI0OiBicmVhazsKLSAgICAgICAgY2FzZSA2NzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVYQ0VQVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNTogYnJlYWs7Ci0gICAgICAgIGNhc2UgODk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5QUkVDRURJTkdfU0lCTElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JTlNUQU5DRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEyNzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTc6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FTFNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI4OiBicmVhazsKLSAgICAgICAgY2FzZSA0NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTI5OiBicmVhazsKLSAgICAgICAgY2FzZSA0NzogCi0gICAgICAgICAgeyBjb21tZW50TGV2ZWwrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMwOiBicmVhazsKLSAgICAgICAgY2FzZSAzNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMxOiBicmVhazsKLSAgICAgICAgY2FzZSA0MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRPKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMyOiBicmVhazsKLSAgICAgICAgY2FzZSA4NDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkVNUFRZX1NFUVVFTkNFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTMzOiBicmVhazsKLSAgICAgICAgY2FzZSA4MDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBSRUNFRElORyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMzE6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5HUkVBVEVSRVFVQUwpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzU6IGJyZWFrOwotICAgICAgICBjYXNlIDg3OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5DRVNUT1JfT1JfU0VMRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzNjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5BVFRSSUJVVEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzc6IGJyZWFrOwotICAgICAgICBjYXNlIDg2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0NIRU1BX0FUVFJJQlVURSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDEzODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5GT0xMT1dJTkcpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxMzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRk9SKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQwOiBicmVhazsKLSAgICAgICAgY2FzZSAxNDogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBJUEUpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNDE6IGJyZWFrOwotICAgICAgICBjYXNlIDIyOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUVVFU1RJT05NQVJLKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQyOiBicmVhazsKLSAgICAgICAgY2FzZSAzNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkxFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQzOiBicmVhazsKLSAgICAgICAgY2FzZSA3NTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLklOVEVSU0VDVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDg6IAotICAgICAgICAgIHsgY29tbWVudExldmVsLS07IAotCQkJICBpZihjb21tZW50TGV2ZWwgPT0gMCkKLQkJICAgICAgICAgIAl5eWJlZ2luKFlZSU5JVElBTCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5PRik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjM6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DSElMRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0NzogYnJlYWs7Ci0gICAgICAgIGNhc2UgNDA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ORSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE0ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTg6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TRUxGKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTQ5OiBicmVhazsKLSAgICAgICAgY2FzZSAyNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OQ09MT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTA6IGJyZWFrOwotICAgICAgICBjYXNlIDUwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUxOiBicmVhazsKLSAgICAgICAgY2FzZSA4ODogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkZPTExPV0lOR19TSUJMSU5HKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTUyOiBicmVhazsKLSAgICAgICAgY2FzZSA2MjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlRFWFQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTM6IGJyZWFrOwotICAgICAgICBjYXNlIDY4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uUkVUVVJOKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU0OiBicmVhazsKLSAgICAgICAgY2FzZSA1MzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1PRCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBMVVMpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNTY6IGJyZWFrOwotICAgICAgICBjYXNlIDI4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9URVFVQUxTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTU3OiBicmVhazsKLSAgICAgICAgY2FzZSAzMjogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVJfR1JFQVRFUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1ODogYnJlYWs7Ci0gICAgICAgIGNhc2UgNjQ6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5FVkVSWSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE1OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5DQVNUQUJMRSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2MDogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTA6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5ERVNDRU5EQU5UX09SX1NFTEYpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjE6IGJyZWFrOwotICAgICAgICBjYXNlIDc2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uU0FUSVNGSUVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTYyOiBicmVhazsKLSAgICAgICAgY2FzZSA5MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBST0NFU1NJTkdfSU5TVFJVQ1RJT04pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjM6IGJyZWFrOwotICAgICAgICBjYXNlIDE2OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEVTU1RIQU4pOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjQ6IGJyZWFrOwotICAgICAgICBjYXNlIDU0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQ0FTVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2NTogYnJlYWs7Ci0gICAgICAgIGNhc2UgMTI6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5SUEFSKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTY2OiBicmVhazsKLSAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IC8qIGlnbm9yZSAqLwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjc6IGJyZWFrOwotICAgICAgICBjYXNlIDEwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTEJSQUNLRVQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNjg6IGJyZWFrOwotICAgICAgICBjYXNlIDYwOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTk9ERSk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE2OTogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTU6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5JRElWKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTcwOiBicmVhazsKLSAgICAgICAgY2FzZSA0OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkRPVUJMRSwgbmV3IERvdWJsZSh5eXRleHQoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzE6IGJyZWFrOwotICAgICAgICBjYXNlIDYxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uVEhFTik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3MjogYnJlYWs7Ci0gICAgICAgIGNhc2UgNTk6IAotICAgICAgICAgIHsgcmV0dXJuIHN5bWJvbChYcGF0aFN5bS5TT01FKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTczOiBicmVhazsKLSAgICAgICAgY2FzZSA2OTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlBBUkVOVCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE3NDogYnJlYWs7Ci0gICAgICAgIGNhc2UgNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLk1JTlVTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc1OiBicmVhazsKLSAgICAgICAgY2FzZSA0MTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkFTKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc2OiBicmVhazsKLSAgICAgICAgY2FzZSA0OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uRE9UKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc3OiBicmVhazsKLSAgICAgICAgY2FzZSAxMTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLlJCUkFDS0VUKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTc4OiBicmVhazsKLSAgICAgICAgY2FzZSAxNzogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkdSRUFURVIpOwotICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAxNzk6IGJyZWFrOwotICAgICAgICBjYXNlIDUxOiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uQU5EKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgwOiBicmVhazsKLSAgICAgICAgY2FzZSA4OiAKLSAgICAgICAgICB7IHJldHVybiBzeW1ib2woWHBhdGhTeW0uTFBBUik7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDE4MTogYnJlYWs7Ci0gICAgICAgIGNhc2UgOTogCi0gICAgICAgICAgeyByZXR1cm4gc3ltYm9sKFhwYXRoU3ltLkNPTE9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMTgyOiBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgaWYgKHp6SW5wdXQgPT0gWVlFT0YgJiYgenpTdGFydFJlYWQgPT0genpDdXJyZW50UG9zKSB7Ci0gICAgICAgICAgICB6ekF0RU9GID0gdHJ1ZTsKLSAgICAgICAgICAgIHp6RG9FT0YoKTsKLSAgICAgICAgICAgICAgeyByZXR1cm4gbmV3IGphdmFfY3VwLnJ1bnRpbWUuU3ltYm9sKFhwYXRoU3ltLkVPRik7IH0KLSAgICAgICAgICB9IAotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgenpTY2FuRXJyb3IoWlpfTk9fTUFUQ0gpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hwYXRoU3ltLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL1hwYXRoU3ltLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NDZhNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9YcGF0aFN5bS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGUgZm9sbG93aW5nIGNvZGUgd2FzIGdlbmVyYXRlZCBieSBDVVAgdjAuMTBrCi0vLyBGcmkgSnVuIDI1IDAxOjExOjA2IENFU1QgMjAxMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsOwotCi0vKiogQ1VQIGdlbmVyYXRlZCBjbGFzcyBjb250YWluaW5nIHN5bWJvbCBjb25zdGFudHMuICovCi1wdWJsaWMgY2xhc3MgWHBhdGhTeW0gewotICAvKiB0ZXJtaW5hbHMgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVF9PUl9TRUxGID0gMzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTID0gNTY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdUID0gNDU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lORyA9IDM0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JXQVJEX1NMQVNIU0xBU0ggPSAxOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSRU5UID0gMzY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFID0gNDY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPQ1VNRU5UX05PREUgPSA3NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFNRVNQQUNFID0gMzU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUldBUkRfU0xBU0ggPSAxODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJFQVQgPSA1NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9ERSA9IDc0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01NQSA9IDI0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTkNFU1RPUiA9IDM3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMVCA9IDQzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFR0VSID0gODM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPVUJMRSA9IDg0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDSElMRCA9IDI4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0xMT1dJTkdfU0lCTElORyA9IDMzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVSWSA9IDY2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRUxGID0gMzE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFID0gNDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVMRU1FTlQgPSA4MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVYVCA9IDc2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQU5DRSA9IDUzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RFUVVBTFMgPSAxMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEhFTiA9IDY4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0hFTUFfRUxFTUVOVCA9IDgxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0hFTUFfQVRUUklCVVRFID0gNzk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOQ0VTVE9SX09SX1NFTEYgPSA0MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVEgPSA0MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HID0gMzk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PRCA9IDQ5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVF9TWU0gPSAyMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9MTEFSID0gMjU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYQ0VQVCA9IDUyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVNTVEhBTiA9IDEyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQSVBFID0gOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU0VRVUFMID0gMTM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVNUSU9OTUFSSyA9IDI3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTFVTID0gNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSURJViA9IDQ4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMUEFSID0gNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JT04gPSA1MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUkVRVUFMID0gMTU7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQ0lNQUwgPSA4NTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9SID0gNjA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVIgPSA4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSID0gMTQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSRUNFRElOR19TSUJMSU5HID0gMzg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJViA9IDQ3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVRVUk4gPSA2MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxTRSA9IDY5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBET1RET1QgPSAyMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9UID0gMjY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVPRiA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5DTkFNRSA9IDg3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01NRU5UID0gNzc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVSU0VDVCA9IDUxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSUEFSID0gNTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVRFTSA9IDczOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTVBUWV9TRVFVRU5DRSA9IDcyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVNUQUJMRSA9IDU3OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJUyA9IDU5OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5VUyA9IDc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gPSA3ODsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU4gPSA2MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1IgPSA3MTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXJyb3IgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEUgPSAzMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSUYgPSA2NzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRVNXSVRDSCA9IDgyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVNUID0gNTg7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9GID0gNTQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9OID0gMjM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NFTkRBTlQgPSAyOTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09NRSA9IDY1OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQlJBQ0tFVCA9IDM7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9OQ09MT04gPSAyMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUl9HUkVBVEVSID0gMTc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUUklORyA9IDg2OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQVRJU0ZJRVMgPSA2MzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5EID0gNzA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRPID0gNjQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExCUkFDS0VUID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkUgPSA0MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU19MRVNTID0gMTY7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVRVUFMUyA9IDEwOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BZGRFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BZGRFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MzMyNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQWRkRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGJpbmFyeSBvcGVyYXRpb24gQWRkLCB0YWtlcyAyIGlucHV0cyBhbmQgcmV0dXJucyB0aGUgY29tYmluZWQKLSAqIHZhbHVlLgotICovCi1wdWJsaWMgY2xhc3MgQWRkRXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFkZEV4cHIKLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBBZGRFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FuZEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0FuZEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzMzE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbmRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgYmluYXJ5IG9wZXJhdGlvbiBBbmQuIFRoZSB2YWx1ZSBvZiBhbiBhbmQtZXhwcmVzc2lvbiBpcyBkZXRlcm1pbmVkCi0gKiBieSB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWVzIChFQlYncykgb2YgaXRzIG9wZXJhbmRzLgotICovCi1wdWJsaWMgY2xhc3MgQW5kRXhwciBleHRlbmRzIEJpbkV4cHIgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFuZEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICBpbnB1dDIgeHBhdGggZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgQW5kRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbnlLaW5kVGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQW55S2luZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4ZjliMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BbnlLaW5kVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyB0byB0ZXN0IGEgdHlwZSBvZiBhbnkga2luZC4gVGhpcyBtYXRjaGVzIGFueSBub2RlIGluIHRoZSBleHByZXNzaW9uLgotICovCi1wdWJsaWMgY2xhc3MgQW55S2luZFRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycywgU3RhdGljQ29udGV4dCBzYykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIE5vZGVUeXBlLmNsYXNzOwotCX0KLQkKLQkKLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BdHRyRWxlbVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJFbGVtVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDc5NTE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJFbGVtVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLQotLyoqCi0gKiBDb21tb24gYmFzZSBjbGFzcyBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXR0ckVsZW1UZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgUU5hbWUgX25hbWU7Ci0JcHJpdmF0ZSBRTmFtZSBfdHlwZTsgLy8gbWF5IGJlIG51bGwKLQlwcml2YXRlIGJvb2xlYW4gX3dpbGQ7IC8vIHVzZSB3aWxkIHFuYW1lID8KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGUgYW5kIEVsZW1lbnQgdGVzdHMuIFRoaXMgdGFrZXMgaW4gMyBpbnB1dHMsCi0JICogTmFtZSwgd2lsZGNhcmQgdGVzdCh0cnVlL2ZhbHNlKSBhbmQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/IFRydWUvRmFsc2UuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFFOYW1lIHR5cGUuCi0JICovCi0JcHVibGljIEF0dHJFbGVtVGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUpIHsKLQkJX25hbWUgPSBuYW1lOwotCQlfd2lsZCA9IHdpbGQ7Ci0JCV90eXBlID0gdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lCi0JICogYW5kIHdpbGRjYXJkIHRlc3QodHJ1ZS9mYWxzZSkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyBUcnVlL0ZhbHNlLgotCSAqLwotCXB1YmxpYyBBdHRyRWxlbVRlc3QoUU5hbWUgbmFtZSwgYm9vbGVhbiB3aWxkKSB7Ci0JCXRoaXMobmFtZSwgd2lsZCwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVmYXVsdCBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlIGFuZCBFbGVtZW50IHRlc3RzLiBUaGlzIHRha2VzIGluIG5vCi0JICogaW5wdXRzLgotCSAqLwotCXB1YmxpYyBBdHRyRWxlbVRlc3QoKSB7Ci0JCXRoaXMobnVsbCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIHdpbGRjYXJkIHRlc3QuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygd2lsZGNhcmQgdGVzdC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB3aWxkKCkgewotCQlyZXR1cm4gX3dpbGQ7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgbmFtZSB0ZXN0LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG5hbWUgdGVzdC4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIF9uYW1lOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIHR5cGUgdGVzdC4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0eXBlIHRlc3QuCi0JICovCi0JcHVibGljIFFOYW1lIHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc2hvcnQgZ2V0RGVydmlhdGlvblR5cGVzKCkgewotCQlyZXR1cm4gVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9MSVNUIHwgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9FWFRFTlNJT04KLQkJCQl8IFR5cGVEZWZpbml0aW9uLkRFUklWQVRJT05fUkVTVFJJQ1RJT04KLQkJCQl8IFR5cGVEZWZpbml0aW9uLkRFUklWQVRJT05fU1VCU1RJVFVUSU9OOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJpYnV0ZVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F0dHJpYnV0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VkZDBhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9BdHRyaWJ1dGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyOTg1MzUgLSBBdHRyaWJ1dGUgaW5zdGFuY2Ugb2YgaW1wcm92ZW1lbnRzIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkF0dHJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBDbGFzcyB1c2VkIHRvIG1hdGNoIGFuIGF0dHJpYnV0ZSBub2RlIGJ5IGl0cyBuYW1lIGFuZC9vciB0eXBlLgotICovCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlVGVzdCBleHRlbmRzIEF0dHJFbGVtVGVzdCB7Ci0KLQlwcml2YXRlIEFueVR5cGUgYW55VHlwZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlVGVzdC4gVGhpcyBvbmUgdGFrZXMgaW4gMyBpbnB1dHMsIE5hbWUsIHdpbGRjYXJkCi0JICogdGVzdCh0cnVlL2ZhbHNlKSBhbmQgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3QsIFRydWUvRmFsc2UuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFFOYW1lIHR5cGUuCi0JICovCi0JcHVibGljIEF0dHJpYnV0ZVRlc3QoUU5hbWUgbmFtZSwgYm9vbGVhbiB3aWxkLCBRTmFtZSB0eXBlKSB7Ci0JCXN1cGVyKG5hbWUsIHdpbGQsIHR5cGUpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyaWJ1dGVUZXN0LiBUaGlzIG9uZSB0YWtlcyBpbiAyIGlucHV0cywgTmFtZSBhbmQKLQkgKiB3aWxkY2FyZCB0ZXN0KHRydWUvZmFsc2UpLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gd2lsZAotCSAqICAgICAgICAgICAgV2lsZGNhcmQgdGVzdCwgVHJ1ZS9GYWxzZS4KLQkgKi8KLQlwdWJsaWMgQXR0cmlidXRlVGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQpIHsKLQkJc3VwZXIobmFtZSwgd2lsZCk7Ci0JfQotCi0JLyoqCi0JICogRGVmYXVsdCBDb25zdHJ1Y3RvciBmb3IgQXR0cmlidXRlVGVzdC4KLQkgKi8KLQlwdWJsaWMgQXR0cmlidXRlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycywgU3RhdGljQ29udGV4dCBzYykgewotCQlpZiAobmFtZSgpID09IG51bGwgJiYgIXdpbGQoKSkgewotCQkJcmV0dXJuIG5ldyBBdHRyVHlwZSgpOwotCQl9Ci0KLQkJSXRlbSBhdCA9IHJzLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCXJldHVybiBuZXcgQXR0clR5cGUoKTsKLQkJfQotCi0JCXJldHVybiBjcmVhdGVBdHRyVHlwZShhdCwgc2MpOwotCX0KLQotCXByaXZhdGUgQW55VHlwZSBjcmVhdGVBdHRyVHlwZShJdGVtIGF0LCBTdGF0aWNDb250ZXh0IHNjKSB7Ci0JCWFueVR5cGUgPSBuZXcgQXR0clR5cGUoKTsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGF0OwotCQlOb2RlIG5vZGUgPSBub2RlVHlwZS5ub2RlX3ZhbHVlKCk7Ci0JCWlmIChub2RlID09IG51bGwpIHsKLQkJCXJldHVybiBhbnlUeXBlOwotCQl9Ci0KLQkJU3RyaW5nIG5vZGVOYW1lID0gbm9kZS5nZXRMb2NhbE5hbWUoKTsKLQotCQlpZiAod2lsZCgpKSB7Ci0JCQlpZiAodHlwZSgpICE9IG51bGwpIHsKLQkJCQlhbnlUeXBlID0gY3JlYXRlQXR0ckZvclhTRFR5cGUobm9kZSwgc2MpOwotCQkJfQotCQl9IGVsc2UgaWYgKG5vZGVOYW1lLmVxdWFscyhuYW1lKCkubG9jYWwoKSkpIHsKLQkJCWlmICh0eXBlKCkgIT0gbnVsbCkgewotCQkJCWFueVR5cGUgPSBjcmVhdGVBdHRyRm9yWFNEVHlwZShub2RlLCBzYyk7Ci0JCQl9IGVsc2UgewotCQkJCWFueVR5cGUgPSBuZXcgQXR0clR5cGUoKEF0dHIpIG5vZGUsIHNjLmdldFR5cGVNb2RlbCgpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYW55VHlwZTsKLQl9Ci0KLQlwcml2YXRlIEFueVR5cGUgY3JlYXRlQXR0ckZvclhTRFR5cGUoTm9kZSBub2RlLCBTdGF0aWNDb250ZXh0IHNjKSB7Ci0JCUF0dHIgYXR0ciA9IChBdHRyKSBub2RlOwotCQkKLQkJVHlwZU1vZGVsIHR5cGVNb2RlbCA9IHNjLmdldFR5cGVNb2RlbCgpOwotCQlUeXBlRGVmaW5pdGlvbiB0eXBlZGVmID0gdHlwZU1vZGVsLmdldFR5cGUoYXR0cik7Ci0KLQkJaWYgKHR5cGVkZWYgIT0gbnVsbCkgewotCQkJaWYgKHR5cGVkZWYuZGVyaXZlZEZyb20odHlwZSgpLm5hbWVzcGFjZSgpLCB0eXBlKCkubG9jYWwoKSwKLQkJCQkJZ2V0RGVydmlhdGlvblR5cGVzKCkpKSB7Ci0JCQkJYW55VHlwZSA9IG5ldyBBdHRyVHlwZShhdHRyLCBzYy5nZXRUeXBlTW9kZWwoKSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhbnlUeXBlID0gbmV3IEF0dHJUeXBlKGF0dHIsIHNjLmdldFR5cGVNb2RlbCgpKTsKLQkJfQotCQlyZXR1cm4gYW55VHlwZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiB3aWxkKCk7Ci0JfQotCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIEF0dHJUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXhpc1N0ZXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0F4aXNTdGVwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmUzYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQXhpc1N0ZXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIEF4aXNTdGVwLCB0aGlzIGdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBub2Rlcy4gVGhlc2UKLSAqIG5vZGVzIGFyZSBhbHdheXMgcmV0dXJuZWQgaW4gRG9jdW1lbnQgT3JkZXIuIFRoaXMgY2FuIGJlIEZvcndhcmQgU3RlcCBvcgotICogUmV2ZXJzZSBTdGVwLgotICovCi1wdWJsaWMgY2xhc3MgQXhpc1N0ZXAgZXh0ZW5kcyBTdGVwRXhwciB7Ci0JcHJpdmF0ZSBTdGVwIF9zdGVwOwotCXByaXZhdGUgQ29sbGVjdGlvbiBfZXhwcnM7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXhpc1N0ZXAuCi0JICogCi0JICogQHBhcmFtIHN0ZXAKLQkgKiAgICAgICAgICAgIERlZmluZXMgZm9yd2FyZC9yZXZlcnNlIHN0ZXAuCi0JICogQHBhcmFtIGV4cHJzCi0JICogICAgICAgICAgICBDb2xsZWN0aW9uIG9mIHhwYXRoIGV4cHJlc3Npb25zLgotCSAqLwotCXB1YmxpYyBBeGlzU3RlcChTdGVwIHN0ZXAsIENvbGxlY3Rpb24gZXhwcnMpIHsKLQkJX3N0ZXAgPSBzdGVwOwotCQlfZXhwcnMgPSBleHByczsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBBZHZhbmNlcyB0byBuZXh0IHN0ZXAuCi0JICogCi0JICogQHJldHVybiBQcmV2aW91cyBzdGVwLgotCSAqLwotCXB1YmxpYyBTdGVwIHN0ZXAoKSB7Ci0JCXJldHVybiBfc3RlcDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHN0ZXAgZGlyZWN0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9zdGVwKFN0ZXAgcykgewotCQlfc3RlcCA9IHM7Ci0JfQotCi0JLyoqCi0JICogSW50ZXJhdG9yLgotCSAqIAotCSAqIEByZXR1cm4gSXRlcmF0ZWQgZXhwcmVzc2lvbnMuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2V4cHJzLml0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBzaXplIG9mIGV4cHJlc3Npb25zLgotCSAqIAotCSAqIEByZXR1cm4gU2l6ZSBvZiBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgaW50IHByZWRpY2F0ZV9jb3VudCgpIHsKLQkJcmV0dXJuIF9leHBycy5zaXplKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQmluRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQmluRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjA3Yzc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0JpbkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQWJzdHJhY3QgY2xhc3MgZm9yIGEgQmluYXJ5IG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEJpbkV4cHIgZXh0ZW5kcyBFeHByIHsKLQkvLyBYWFg6IHJldmlldyBoaWVyYXJjaHkgLSBzdHJpY3RseSBzaG91bGQgYmUgRXhwcgotCS8vIG9yIHJlbmFtZSB0byBiaW5vcAotCXByaXZhdGUgWFBhdGhOb2RlIF9sZWZ0OwotCXByaXZhdGUgWFBhdGhOb2RlIF9yaWdodDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBCaW5FeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBsZWZ0IHhwYXRoIG5vZGUgZm9yIHRoZSBvcGVyYXRpb24uCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIHJpZ2h0IHhwYXRoIG5vZGUgZm9yIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEJpbkV4cHIoWFBhdGhOb2RlIGwsIFhQYXRoTm9kZSByKSB7Ci0JCV9sZWZ0ID0gbDsKLQkJX3JpZ2h0ID0gcjsKLQl9Ci0KLQkvKioKLQkgKiBMZWZ0IHhwYXRoIG5vZGUuCi0JICogCi0JICogQHJldHVybiBMZWZ0IG5vZGUuCi0JICovCi0JcHVibGljIFhQYXRoTm9kZSBsZWZ0KCkgewotCQlyZXR1cm4gX2xlZnQ7Ci0JfQotCi0JLyoqCi0JICogUmlnaHQgeHBhdGggbm9kZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJpZ2h0IG5vZGUuCi0JICovCi0JcHVibGljIFhQYXRoTm9kZSByaWdodCgpIHsKLQkJcmV0dXJuIF9yaWdodDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGxlZnQgeHBhdGggbm9kZS4KLQkgKiAKLQkgKiBAcGFyYW0gbgotCSAqICAgICAgICAgICAgTGVmdCBub2RlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9sZWZ0KFhQYXRoTm9kZSBuKSB7Ci0JCV9sZWZ0ID0gbjsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHJpZ2h0IHhwYXRoIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG4KLQkgKiAgICAgICAgICAgIFJpZ2h0IG5vZGUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3JpZ2h0KFhQYXRoTm9kZSBuKSB7Ci0JCV9yaWdodCA9IG47Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ2FzdEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Nhc3RFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZmM5ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ2FzdEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkZ1bmN0aW9uOwotCi0vKioKLSAqIEEgY2xhc3MgdGhhdCBjcmVhdGVzIGEgbmV3IHZhbHVlIG9mIGEgc3BlY2lmaWMgdHlwZSBiYXNlZCBvbiBhbiBleGlzdGluZwotICogdmFsdWUuIEEgY2FzdCBleHByZXNzaW9uIHRha2VzIHR3byBvcGVyYW5kczogYW4gaW5wdXQgZXhwcmVzc2lvbiBhbmQgYSB0YXJnZXQKLSAqIHR5cGUuIFRoZSB0eXBlIG9mIHRoZSBpbnB1dCBleHByZXNzaW9uIGlzIGNhbGxlZCB0aGUgaW5wdXQgdHlwZS4gVGhlIHRhcmdldAotICogdHlwZSBtdXN0IGJlIGEgbmFtZWQgYXRvbWljIHR5cGUsIHJlcHJlc2VudGVkIGJ5IGEgUU5hbWUsIG9wdGlvbmFsbHkgZm9sbG93ZWQKLSAqIGJ5IHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciA/IGlmIGFuIGVtcHR5IHNlcXVlbmNlIGlzIHBlcm1pdHRlZC4gSWYgdGhlCi0gKiB0YXJnZXQgdHlwZSBoYXMgbm8gbmFtZXNwYWNlIHByZWZpeCwgaXQgaXMgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgZGVmYXVsdAotICogZWxlbWVudC90eXBlIG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIENhc3RFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JcHJpdmF0ZSBGdW5jdGlvbiBfZnVuY3Rpb247Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ2FzdEV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0IHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIFNpbmdsZVR5cGUgdG8gY2FzdCBsIHRvLgotCSAqLwotCXB1YmxpYyBDYXN0RXhwcihFeHByIGwsIFNpbmdsZVR5cGUgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkKLQlwdWJsaWMgRnVuY3Rpb24gZnVuY3Rpb24oKSB7Ci0JCXJldHVybiBfZnVuY3Rpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldF9mdW5jdGlvbihGdW5jdGlvbiBfZnVuY3Rpb24pIHsKLQkJdGhpcy5fZnVuY3Rpb24gPSBfZnVuY3Rpb247Ci0JfQotCQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Nhc3RhYmxlRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ2FzdGFibGVFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNWYzNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ2FzdGFibGVFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBBIGNsYXNzIHRoYXQgdGVzdHMgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIGNhc3RhYmxlIGludG8gYSBnaXZlbiB0eXBlLiBUaGlzCi0gKiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgdHlwZSBmb3IgcHJvY2Vzc2luZyBhIGdpdmVuIHZhbHVlLgotICovCi1wdWJsaWMgY2xhc3MgQ2FzdGFibGVFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBDYXN0YWJsZUV4cHIKLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgU2luZ2xlVHlwZSB0byBjaGVjayBsIGFnYWluc3QuCi0JICovCi0JcHVibGljIENhc3RhYmxlRXhwcihFeHByIGwsIFNpbmdsZVR5cGUgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DbXBFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DbXBFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTc2NWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvQ21wRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFRoZSBjb21wYXJpc29uIG9mIGV4cHJlc3Npb24gb3BlcmF0b3IgdGFrZXMgdGhlIHZhbHVlIG9mIGl0cyBsZWZ0IG9wZXJhbmQgYW5kCi0gKiBjb21wYXJlcyAoZGVwZW5kYW50IG9uIHR5cGUpIGFnYWluc3QgaXRzIHJpZ2h0IG9wZXJhbmQsIGFjY29yZGluZyB0byB0aGUKLSAqIHJ1bGVzIG9mIHRoZSBwYXJ0aWN1bGFyIGNvbXBhcmlzb24gcnVsZQotICovCi1wdWJsaWMgY2xhc3MgQ21wRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVFVQUxTIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUVVBTFMgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9URVFVQUxTIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RFUVVBTFMgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEVTU1RIQU4gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFU1NUSEFOID0gMjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExFU1NFUVVBTCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU0VRVUFMID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdSRUFURVIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVIgPSA0OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR1JFQVRFUkVRVUFMIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUkVBVEVSRVFVQUwgPSA1OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRVEgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVRID0gNjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIE5FIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORSA9IDc7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBMVCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTFQgPSA4OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTEUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFID0gOTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEdUIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVCA9IDEwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgR0Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFID0gMTE7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBJUyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVMgPSAxMjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIExFU1NfTEVTUyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVTU19MRVNTID0gMTM7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBHUkVBVEVSX0dSRUFURVIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSRUFURVJfR1JFQVRFUiA9IDE0OwotCi0JcHJpdmF0ZSBpbnQgX3R5cGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ21wRXhwcgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dCB4cGF0aCBsZWZ0IGV4cHJlc3Npb24vdmFyaWFibGUKLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQgeHBhdGggcmlnaHQgZXhwcmVzc2lvbi92YXJpYWJsZQotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICB3aGF0IGNvbXBhcmlzb24gdG8gdXNlIGwgYWdhaW5zdCByLgotCSAqLwotCXB1YmxpYyBDbXBFeHByKEV4cHIgbCwgRXhwciByLCBpbnQgdHlwZSkgewotCQlzdXBlcihsLCByKTsKLQotCQlfdHlwZSA9IHR5cGU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBjb21wYXJpc29uIHR5cGUKLQkgKi8KLQlwdWJsaWMgaW50IHR5cGUoKSB7Ci0JCXJldHVybiBfdHlwZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9DbnR4SXRlbUV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NudHhJdGVtRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Q0Njk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NudHhJdGVtRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIENvbnRleHQgSXRlbSBFeHByZXNpb25zLgotICovCi1wdWJsaWMgY2xhc3MgQ250eEl0ZW1FeHByIGV4dGVuZHMgUHJpbWFyeUV4cHIgewotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NvbW1lbnRUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Db21tZW50VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY0NGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0NvbW1lbnRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ29tbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBDb21tZW50IHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50VGVzdCBleHRlbmRzIEtpbmRUZXN0IHsKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycywgU3RhdGljQ29udGV4dCBzYykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpIHsKLQkJcmV0dXJuIENvbW1lbnRUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGVjaW1hbExpdGVyYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RlY2ltYWxMaXRlcmFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNTdlN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGVjaW1hbExpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKlRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nICIuIiBidXQgbm8gZSBvciBFIGNoYXJhY3RlciBpcyBhbgotICogYXRvbWljIHZhbHVlIG9mIHR5cGUgeHM6ZGVjaW1hbAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWNpbWFsTGl0ZXJhbCBleHRlbmRzIE51bWVyaWNMaXRlcmFsIHsKLQlwcml2YXRlIFhTRGVjaW1hbCBfdmFsdWU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRGVjaW1hbExpdGVyYWwKLQkgKiAKLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIGRvdWJsZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBEZWNpbWFsTGl0ZXJhbChCaWdEZWNpbWFsIHZhbHVlKSB7Ci0JCV92YWx1ZSA9IG5ldyBYU0RlY2ltYWwodmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4geHM6ZGVjaW1hbCB2YWx1ZQotCSAqLwotCXB1YmxpYyBYU0RlY2ltYWwgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGl2RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRGl2RXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGI2NmU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RpdkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBEaXZpc2lvbiBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIERpdkV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRGl2RXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBEaXZFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvY3VtZW50VGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG9jdW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMWMyNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG9jdW1lbnRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRG9jVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIERvY3VtZW50IHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgRUxFTUVOVC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNDSEVNQV9FTEVNRU5ULgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDSEVNQV9FTEVNRU5UID0gMjsKLQotCS8vIFhYWDogcG9seW1vcnBoaXNtCi0JcHJpdmF0ZSBpbnQgX3R5cGU7Ci0KLQlwcml2YXRlIEF0dHJFbGVtVGVzdCBfZXRlc3Q7Ci0JcHJpdmF0ZSBTY2hlbWFFbGVtVGVzdCBfc2NoZW1hX2V0ZXN0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIERvY3VtZW50VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgeHBhdGggb2JqZWN0IHRvIHRlc3QuCi0JICovCi0JcHVibGljIERvY3VtZW50VGVzdChpbnQgdHlwZSwgT2JqZWN0IGFyZykgewotCQlfZXRlc3QgPSBudWxsOwotCQlfc2NoZW1hX2V0ZXN0ID0gbnVsbDsKLQotCQlfdHlwZSA9IHR5cGU7Ci0JCXN3aXRjaCAoX3R5cGUpIHsKLQkJY2FzZSBFTEVNRU5UOgotCQkJX2V0ZXN0ID0gKEF0dHJFbGVtVGVzdCkgYXJnOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NIRU1BX0VMRU1FTlQ6Ci0JCQlfc2NoZW1hX2V0ZXN0ID0gKFNjaGVtYUVsZW1UZXN0KSBhcmc7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIERvY3VtZW50VGVzdC4KLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRUZXN0KCkgewotCQl0aGlzKE5PTkUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEdldCB0ZXN0IHR5cGUuCi0JICogCi0JICogQHJldHVybiBUeXBlIG9mIHRlc3QuCi0JICovCi0JcHVibGljIGludCB0eXBlKCkgewotCQlyZXR1cm4gX3R5cGU7Ci0JfQotCi0JLyoqCi0JICogRWxlbWVudCB0ZXN0LgotCSAqIAotCSAqIEByZXR1cm4gRWxlbWVudCB0ZXN0LgotCSAqLwotCXB1YmxpYyBBdHRyRWxlbVRlc3QgZWxlbV90ZXN0KCkgewotCQlyZXR1cm4gX2V0ZXN0OwotCX0KLQotCS8qKgotCSAqIFNjaGVtYSBlbGVtZW50IHRlc3QuCi0JICogCi0JICogQHJldHVybiBTY2hlbWEgZWxlbWVudCB0ZXN0LgotCSAqLwotCXB1YmxpYyBTY2hlbWFFbGVtVGVzdCBzY2hlbWFfZWxlbV90ZXN0KCkgewotCQlyZXR1cm4gX3NjaGVtYV9ldGVzdDsKLQl9Ci0KLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycywgU3RhdGljQ29udGV4dCBzYykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCXJldHVybiBEb2NUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG91YmxlTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRG91YmxlTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQ4YzNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0RvdWJsZUxpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICpUaGUgdmFsdWUgb2YgYSBudW1lcmljIGxpdGVyYWwgY29udGFpbmluZyBhbiBlIG9yIEUgY2hhcmFjdGVyIGlzIGFuIGF0b21pYwotICogdmFsdWUgb2YgdHlwZSB4czpkb3VibGUKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRG91YmxlTGl0ZXJhbCBleHRlbmRzIE51bWVyaWNMaXRlcmFsIHsKLQlwcml2YXRlIFhTRG91YmxlIF92YWx1ZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEb3VibGVpdGVyYWwKLQkgKiAKLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIGRvdWJsZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBEb3VibGVMaXRlcmFsKGRvdWJsZSB2YWx1ZSkgewotCQlfdmFsdWUgPSBuZXcgWFNEb3VibGUodmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4geHM6ZG91YmxlIHZhbHVlCi0JICovCi0JcHVibGljIFhTRG91YmxlIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRWxlbWVudFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0VsZW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NTIwN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRWxlbWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBFbGVtZW50IHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdCBleHRlbmRzIEF0dHJFbGVtVGVzdCB7Ci0JcHJpdmF0ZSBib29sZWFuIF9xbWFyayA9IGZhbHNlOwotCi0JcHJpdmF0ZSBBbnlUeXBlIGFueVR5cGUgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDQgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotCSAqIHRlc3QodHJ1ZS9mYWxzZSksIHR5cGUgYW5kIHF1ZXN0aW9uIG1hcmsgdGVzdCh0cnVlL2ZhbHNlKS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgTmFtZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIHdpbGQKLQkgKiAgICAgICAgICAgIFdpbGRjYXJkIHRlc3Q/ICh0cnVlL2ZhbHNlKS4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSBvZiBlbGVtZW50IHRvIHRlc3QuCi0JICogQHBhcmFtIHFtYXJrCi0JICogICAgICAgICAgICBOaWxsZWQgcHJvcGVydHkgKHRydWUvZmFsc2UpLgotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUsIGJvb2xlYW4gcW1hcmspIHsKLQkJc3VwZXIobmFtZSwgd2lsZCwgdHlwZSk7Ci0JCV9xbWFyayA9IHFtYXJrOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4gVGhpcyB0YWtlcyBpbiAzIGlucHV0cywgTmFtZSwgd2lsZGNhcmQKLQkgKiB0ZXN0KHRydWUvZmFsc2UpYW5kIHR5cGUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIE5hbWUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFR5cGUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdChRTmFtZSBuYW1lLCBib29sZWFuIHdpbGQsIFFOYW1lIHR5cGUpIHsKLQkJc3VwZXIobmFtZSwgd2lsZCwgdHlwZSk7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LiBUaGlzIHRha2VzIGluIDIgaW5wdXRzLCBOYW1lLCB3aWxkY2FyZAotCSAqIHRlc3QodHJ1ZS9mYWxzZSkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIE5hbWUgb2YgZWxlbWVudCB0byB0ZXN0LgotCSAqIEBwYXJhbSB3aWxkCi0JICogICAgICAgICAgICBXaWxkY2FyZCB0ZXN0PyAodHJ1ZS9mYWxzZSkuCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFFOYW1lIG5hbWUsIGJvb2xlYW4gd2lsZCkgewotCQlzdXBlcihuYW1lLCB3aWxkKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4KLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IG5pbGxlZCBwcm9wZXJ0eS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGJvb2xlYW4gcW1hcmsoKSB7Ci0JCXJldHVybiBfcW1hcms7Ci0JfQotCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMsIFN0YXRpY0NvbnRleHQgc2MpIHsKLQotCQlpZiAobmFtZSgpID09IG51bGwgJiYgIXdpbGQoKSkgewotCQkJcmV0dXJuIG5ldyBFbGVtZW50VHlwZSgpOwotCQl9Ci0KLQkJSXRlbSBhdCA9IHJzLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCXJldHVybiBuZXcgRWxlbWVudFR5cGUoKTsKLQkJfQotCi0JCXJldHVybiBjcmVhdGVFbGVtZW50VHlwZShhdCwgc2MpOwotCX0KLQotCXByaXZhdGUgQW55VHlwZSBjcmVhdGVFbGVtZW50VHlwZShJdGVtIGF0LCBTdGF0aWNDb250ZXh0IHNjKSB7Ci0JCWFueVR5cGUgPSBuZXcgRWxlbWVudFR5cGUoKTsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGF0OwotCQlOb2RlIG5vZGUgPSBub2RlVHlwZS5ub2RlX3ZhbHVlKCk7Ci0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7Ci0JCQlkb2MgPSAoRG9jdW1lbnQpIG5vZGU7Ci0JCX0gZWxzZSB7Ci0JCQlkb2MgPSBub2RlVHlwZS5ub2RlX3ZhbHVlKCkuZ2V0T3duZXJEb2N1bWVudCgpOwotCQl9Ci0JCQotCQlOb2RlTGlzdCBub2RlTGlzdCA9IG51bGw7CQkKLQkJaWYgKCF3aWxkKCkpIHsKLQkJCW5vZGVMaXN0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMobmFtZSgpLm5hbWVzcGFjZSgpLAotCQkJCQluYW1lKCkubG9jYWwoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlub2RlTGlzdCA9IG5ldyBTaW5nbGVJdGVtTm9kZUxpc3RJbXBsKG5vZGUpOwotCQl9Ci0KLQkJaWYgKG5vZGVMaXN0LmdldExlbmd0aCgpID4gMCkgewotCQkJYW55VHlwZSA9IGNyZWF0ZUVsZW1lbnRGb3JYU0RUeXBlKG5vZGVMaXN0LCBzYyk7Ci0JCX0KLQkJcmV0dXJuIGFueVR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBBbnlUeXBlIGNyZWF0ZUVsZW1lbnRGb3JYU0RUeXBlKE5vZGVMaXN0IG5vZGVMaXN0LCBTdGF0aWNDb250ZXh0IHNjKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIG5vZGVMaXN0Lml0ZW0oaSk7Ci0JCQkKLQkJCVR5cGVNb2RlbCB0eXBlTW9kZWwgPSBzYy5nZXRUeXBlTW9kZWwoKTsKLQkJCVR5cGVEZWZpbml0aW9uIHR5cGVkZWYgPSB0eXBlTW9kZWwuZ2V0VHlwZShlbGVtZW50KTsKLQkJCWlmICh0eXBlKCkgPT0gbnVsbCB8fCB0eXBlZGVmID09IG51bGwpIHsKLQkJCQlhbnlUeXBlID0gbmV3IEVsZW1lbnRUeXBlKGVsZW1lbnQsIHR5cGVNb2RlbCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWlmICh0eXBlZGVmLmRlcml2ZWRGcm9tKHR5cGUoKS5uYW1lc3BhY2UoKSwgdHlwZSgpLmxvY2FsKCksCi0JCQkJCQlnZXREZXJ2aWF0aW9uVHlwZXMoKSkpIHsKLQkJCQkJYW55VHlwZSA9IG5ldyBFbGVtZW50VHlwZShlbGVtZW50LCB0eXBlTW9kZWwpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGFueVR5cGU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNXaWxkKCkgewotCQlyZXR1cm4gd2lsZCgpOwotCX0KLQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCXJldHVybiBFbGVtZW50VHlwZS5jbGFzczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2luZ2xlSXRlbU5vZGVMaXN0SW1wbCBpbXBsZW1lbnRzIE5vZGVMaXN0IHsKLQkJcHJpdmF0ZSBOb2RlIG5vZGU7Ci0JCXB1YmxpYyBTaW5nbGVJdGVtTm9kZUxpc3RJbXBsKE5vZGUgbm9kZSkgewotCQkJdGhpcy5ub2RlID0gbm9kZTsKLQkJfQotCi0JCXB1YmxpYyBOb2RlIGl0ZW0oaW50IGluZGV4KSB7Ci0JCQlyZXR1cm4gbm9kZTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQkJaWYgKG5vZGUgIT0gbnVsbCkgewotCQkJCXJldHVybiAxOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4Y2VwdEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4Y2VwdEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkzMTljYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FeGNlcHRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBUaGUgZXhjZXB0IG9wZXJhdG9yIHRha2VzIHR3byBub2RlIHNlcXVlbmNlcyBhcyBvcGVyYW5kcyBhbmQgcmV0dXJucyBhCi0gKiBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCB0aGUgbm9kZXMgdGhhdCBvY2N1ciBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBidXQgbm90IGluCi0gKiB0aGUgc2Vjb25kIG9wZXJhbmQuCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGNlcHRFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRXhjZXB0RXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBFeGNlcHRFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0V4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc3YmE5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9FeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBub3JtYWwgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFeHByIGV4dGVuZHMgWFBhdGhOb2RlIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZpbHRlckV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZpbHRlckV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY0MTVjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9GaWx0ZXJFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgZmlsdGVyIGV4cHJlc3Npb24gY29uc2lzdHMgc2ltcGx5IG9mIGEgcHJpbWFyeSBleHByZXNzaW9uIGZvbGxvd2VkIGJ5IHplcm8KLSAqIG9yIG1vcmUgcHJlZGljYXRlcy4gVGhlIHJlc3VsdCBvZiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gY29uc2lzdHMgb2YgYWxsIHRoZQotICogaXRlbXMgcmV0dXJuZWQgYnkgdGhlIHByaW1hcnkgZXhwcmVzc2lvbiBmb3Igd2hpY2ggYWxsIHRoZSBwcmVkaWNhdGVzIGFyZQotICogdHJ1ZS4gSWYgbm8gcHJlZGljYXRlcyBhcmUgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IGlzIHNpbXBseSB0aGUgcmVzdWx0IG9mIHRoZQotICogcHJpbWFyeSBleHByZXNzaW9uLiBUaGlzIHJlc3VsdCBtYXkgY29udGFpbiBub2RlcywgYXRvbWljIHZhbHVlcywgb3IgYW55Ci0gKiBjb21iaW5hdGlvbiBvZiB0aGVzZS4gVGhlIG9yZGVyaW5nIG9mIHRoZSBpdGVtcyByZXR1cm5lZCBieSBhIGZpbHRlcgotICogZXhwcmVzc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGVpciBvcmRlciBpbiB0aGUgcmVzdWx0IG9mIHRoZSBwcmltYXJ5Ci0gKiBleHByZXNzaW9uLiBDb250ZXh0IHBvc2l0aW9ucyBhcmUgYXNzaWduZWQgdG8gaXRlbXMgYmFzZWQgb24gdGhlaXIgb3JkaW5hbAotICogcG9zaXRpb24gaW4gdGhlIHJlc3VsdCBzZXF1ZW5jZS4gVGhlIGZpcnN0IGNvbnRleHQgcG9zaXRpb24gaXMgMS4KLSAqLwotcHVibGljIGNsYXNzIEZpbHRlckV4cHIgZXh0ZW5kcyBTdGVwRXhwciB7Ci0JcHJpdmF0ZSBQcmltYXJ5RXhwciBfcGV4cHI7Ci0JcHJpdmF0ZSBDb2xsZWN0aW9uIF9leHByczsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIG9mIEZpbHRlckV4cHIuCi0JICogCi0JICogQHBhcmFtIHBleHByCi0JICogICAgICAgICAgICBpcyBjb3BpZWQgdG8gX3BleHByLgotCSAqIEBwYXJhbSBleHBycwotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9leHBycy4gCi0JICovCi0JcHVibGljIEZpbHRlckV4cHIoUHJpbWFyeUV4cHIgcGV4cHIsIENvbGxlY3Rpb24gZXhwcnMpIHsKLQkJX3BleHByID0gcGV4cHI7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgcHJpbWFyeSBleHByZXNzaW9uLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHByaW1hcnkgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgUHJpbWFyeUV4cHIgcHJpbWFyeSgpIHsKLQkJcmV0dXJuIF9wZXhwcjsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5leHQgcHJlZGljYXRlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5leHQgcHJlZGljYXRlLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF9leHBycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFNldCBhIG5ldyBwcmltYXJ5IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIGlzIHNldCBhcyB0aGUgbmV3IHByaW1hcnkgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfcHJpbWFyeShQcmltYXJ5RXhwciBlKSB7Ci0JCV9wZXhwciA9IGU7Ci0JfQotCi0JLyoqCi0JICogQ291bnQgdGhlIG51bWJlciBvZiBwcmVkaWNhdGVzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHNpemUgb2YgdGhlIGNvbGxlY3Rpb24gb2YgcHJlZGljYXRlcy4KLQkgKi8KLQlwdWJsaWMgaW50IHByZWRpY2F0ZV9jb3VudCgpIHsKLQkJcmV0dXJuIF9leHBycy5zaXplKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRm9yRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRm9yRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWMxMjFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0ZvckV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHRoZSBGb3IgZXhwcmVzc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEZvckV4cHIgZXh0ZW5kcyBFeHByIHsKLQlwcml2YXRlIENvbGxlY3Rpb24gX3Zhcl9leHByX3BhaXJzOwotCXByaXZhdGUgRXhwciBfcmV0dXJuOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZvckV4cHIuCi0JICogCi0JICogQHBhcmFtIHZhcmV4cAotCSAqICAgICAgICAgICAgRXhwcmVzc2lvbnMuCi0JICogQHBhcmFtIHJldAotCSAqICAgICAgICAgICAgUmV0dXJuIGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIEZvckV4cHIoQ29sbGVjdGlvbiB2YXJleHAsIEV4cHIgcmV0KSB7Ci0JCV92YXJfZXhwcl9wYWlycyA9IHZhcmV4cDsKLQkJX3JldHVybiA9IHJldDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBJdGVyYXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHIgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIFNldCBFeHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICBFeHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9leHByKEV4cHIgZSkgewotCQlfcmV0dXJuID0gZTsKLQl9Ci0KLQkvLyB1c2VkIGZvciBub3JtYWxpemF0aW9uLi4uIGJhc2ljYWxseSBqdXN0IGtlZXAgYSAic2ltcGxlIGZvciIuLi4gbm8KLQkvLyBwYWlycy4uLiBjb2xsZWN0aW9uIHdpbGwgYWx3YXlzIGhhdmUgMSBlbGVtZW50Ci0JLyoqCi0JICogTm9ybWFsaXphdGlvbiBvZiBleHByZXNzaW9uIHBhaXJzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRydW5jYXRlX3BhaXJzKCkgewotCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBfdmFyX2V4cHJfcGFpcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlpLm5leHQoKTsKLQkJCWlmICghZmlyc3QpCi0JCQkJaS5yZW1vdmUoKTsKLQotCQkJZmlyc3QgPSBmYWxzZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIENvbGxlY3Rpb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gRXhwcmVzc2lvbiBwYWlycy4KLQkgKi8KLQlwdWJsaWMgQ29sbGVjdGlvbiB2ZV9wYWlycygpIHsKLQkJcmV0dXJuIF92YXJfZXhwcl9wYWlyczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Gb3J3YXJkU3RlcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRm9yd2FyZFN0ZXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5MjgwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9Gb3J3YXJkU3RlcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5BdHRyaWJ1dGVBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5DaGlsZEF4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkRlc2NlbmRhbnRBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5EZXNjZW5kYW50T3JTZWxmQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9sbG93aW5nQXhpczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuRm9sbG93aW5nU2libGluZ0F4aXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLkZvcndhcmRBeGlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZWxmQXhpczsKLQotLyoqCi0gKiBDbGFzcyBmb3IgRm9yd2FyZCBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGb3J3YXJkU3RlcCBleHRlbmRzIFN0ZXAgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTk9ORS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05FID0gMDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIENISUxELgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENISUxEID0gMTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIERFU0NFTkRBTlQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVCA9IDI7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBVFRSSUJVVEUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFNFTEYuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VMRiA9IDQ7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBERVNDRU5EQU5UX09SX1NFTEYuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VOREFOVF9PUl9TRUxGID0gNTsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEZPTExPV0lOR19TSUJMSU5HLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPTExPV0lOR19TSUJMSU5HID0gNjsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEZPTExPV0lORy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0xMT1dJTkcgPSA3OwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgTkFNRVNQQUNFLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUVTUEFDRSA9IDg7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBVF9TWU0uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRfU1lNID0gOTsKLQotCXByaXZhdGUgaW50IF9heGlzOwotCi0JLy8gWFhYOiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgaW50IGF4aXMuLi4gYW5kIG1ha2Ugb25seSB0aGlzIHRoZSBheGlzCi0JcHJpdmF0ZSBGb3J3YXJkQXhpcyBfaXRlcmF0b3I7Ci0KLQkvLyBYWFg6IG5lZWRzIHRvIGJlIGZpeGVkCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZV9pdGVyYXRvcigpIHsKLQkJc3dpdGNoIChfYXhpcykgewotCQljYXNlIE5PTkU6Ci0JCQlpZiAobm9kZV90ZXN0KCkgaW5zdGFuY2VvZiBBdHRyaWJ1dGVUZXN0KQotCQkJCV9pdGVyYXRvciA9IG5ldyBBdHRyaWJ1dGVBeGlzKCk7Ci0JCQllbHNlCi0JCQkJX2l0ZXJhdG9yID0gbmV3IENoaWxkQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDSElMRDoKLQkJCV9pdGVyYXRvciA9IG5ldyBDaGlsZEF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgREVTQ0VOREFOVDoKLQkJCV9pdGVyYXRvciA9IG5ldyBEZXNjZW5kYW50QXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGT0xMT1dJTkdfU0lCTElORzoKLQkJCV9pdGVyYXRvciA9IG5ldyBGb2xsb3dpbmdTaWJsaW5nQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGT0xMT1dJTkc6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgRm9sbG93aW5nQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBVF9TWU06Ci0JCWNhc2UgQVRUUklCVVRFOgotCQkJX2l0ZXJhdG9yID0gbmV3IEF0dHJpYnV0ZUF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0VMRjoKLQkJCV9pdGVyYXRvciA9IG5ldyBTZWxmQXhpcygpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBERVNDRU5EQU5UX09SX1NFTEY6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgRGVzY2VuZGFudE9yU2VsZkF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTkFNRVNQQUNFOgotCQkJdGhyb3cgbmV3IFN0YXRpY0Vycm9yKCJYUFNUMDAxMCIsICJuYW1lc3BhY2UgYXhpcyBub3QgaW1wbGVtZW50ZWQiKTsKLQkJCQotCQlkZWZhdWx0OgotCQkJYXNzZXJ0IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm9yd2FyZFN0ZXAuCi0JICogCi0JICogQHBhcmFtIGF4aXMKLQkgKiAgICAgICAgICAgIEF4aXMgbnVtYmVyLgotCSAqIEBwYXJhbSBub2RlX3Rlc3QKLQkgKiAgICAgICAgICAgIE5vZGUgdGVzdC4KLQkgKi8KLQlwdWJsaWMgRm9yd2FyZFN0ZXAoaW50IGF4aXMsIE5vZGVUZXN0IG5vZGVfdGVzdCkgewotCQlzdXBlcihub2RlX3Rlc3QpOwotCi0JCV9heGlzID0gYXhpczsKLQotCQl1cGRhdGVfaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBBeGlzIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBBeGlzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgaW50IGF4aXMoKSB7Ci0JCXJldHVybiBfYXhpczsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgQXhpcyB0byBjdXJyZW50LgotCSAqIAotCSAqIEBwYXJhbSBheGlzCi0JICogICAgICAgICAgICBBeGlzIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfYXhpcyhpbnQgYXhpcykgewotCQlfYXhpcyA9IGF4aXM7Ci0JCXVwZGF0ZV9pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEZvcndhcmRBeGlzIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2l0ZXJhdG9yOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0Z1bmN0aW9uQ2FsbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRnVuY3Rpb25DYWxsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTU1NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvRnVuY3Rpb25DYWxsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkZ1bmN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENsYXNzIGZvciBGdW5jdGlvbiBDYWxsIHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGdW5jdGlvbkNhbGwgZXh0ZW5kcyBQcmltYXJ5RXhwciB7Ci0JcHJpdmF0ZSBRTmFtZSBfbmFtZTsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2FyZ3M7Ci0JcHJpdmF0ZSBGdW5jdGlvbiBfZnVuY3Rpb247Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnVuY3Rpb25DYWxsLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgQ29sbGVjdGlvbiBvZiBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIEZ1bmN0aW9uQ2FsbChRTmFtZSBuYW1lLCBDb2xsZWN0aW9uIGFyZ3MpIHsKLQkJX25hbWUgPSBuYW1lOwotCQlfYXJncyA9IGFyZ3M7Ci0JfQotCQotCXB1YmxpYyBGdW5jdGlvbiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIF9mdW5jdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0X2Z1bmN0aW9uKEZ1bmN0aW9uIF9mdW5jdGlvbikgewotCQl0aGlzLl9mdW5jdGlvbiA9IF9mdW5jdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfYXJncy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEFyaXR5IGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBBcml0eSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCBhcml0eSgpIHsKLQkJcmV0dXJuIF9hcmdzLnNpemUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JRGl2RXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSURpdkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjMGMxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JRGl2RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgSW50ZWdlciBkaXZpc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIElEaXZFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIElEaXZFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBsZWZ0IHZhbHVlLgotCSAqIEBwYXJhbSByCi0JICogICAgICAgICAgICByaWdodCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgSURpdkV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSWZFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JZkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhMTk2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JZkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgSUYgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBJZkV4cHIgZXh0ZW5kcyBFeHByIHsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2V4cHJzOwotCXByaXZhdGUgRXhwciBfdGhlbjsKLQlwcml2YXRlIEV4cHIgX2Vsc2U7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgSWZFeHByLgotCSAqIAotCSAqIEBwYXJhbSBleHBzCi0JICogICAgICAgICAgICBDb25kaXRpb24gZXhwcmVzc2lvbnMuCi0JICogQHBhcmFtIHQKLQkgKiAgICAgICAgICAgIElmIHRydWUgZXhwcmVzc2lvbnMuCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIElmIGZhbHNlL2Vsc2UgZXhwcmVzc2lvbnMuCi0JICovCi0JcHVibGljIElmRXhwcihDb2xsZWN0aW9uIGV4cHMsIEV4cHIgdCwgRXhwciBlKSB7Ci0JCV9leHBycyA9IGV4cHM7Ci0JCV90aGVuID0gdDsKLQkJX2Vsc2UgPSBlOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2V4cHJzLml0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgRXhwcmVzc2lvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXhwciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEV4cHIgdGhlbl9jbGF1c2UoKSB7Ci0JCXJldHVybiBfdGhlbjsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRXhwciBlbHNlX2NsYXVzZSgpIHsKLQkJcmV0dXJuIF9lbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0luc3RPZkV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0luc3RPZkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlNzEyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnN0T2ZFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBUaGUgYm9vbGVhbiBvcGVyYXRvciAnaW5zdGFuY2Ugb2YnIHRha2VzIHRoZSB2YWx1ZSBvZiBpdHMgZmlyc3Qgb3BlcmFuZCBhbmQKLSAqIG1hdGNoZXMgaXRzIHR5cGUgdG8gdGhlIFNlcXVlbmNlVHlwZSBpbiBpdHMgc2Vjb25kIG9wZXJhbmQsIGFjY29yZGluZyB0byB0aGUKLSAqIHJ1bGVzIGZvciBTZXF1ZW5jZVR5cGUgbWF0Y2hpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnN0T2ZFeHByIGV4dGVuZHMgQmluRXhwciB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEluc3RPZkV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGlucHV0IHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIFNlcXVlbmNlVHlwZSB0byBjaGVjayBsIGFnYWluc3QuCi0JICovCi0JcHVibGljIEluc3RPZkV4cHIoRXhwciBsLCBTZXF1ZW5jZVR5cGUgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlZ2VyTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW50ZWdlckxpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOTZkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlZ2VyTGl0ZXJhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgbGl0ZXJhbCBjb250YWluaW5nIG5vICIuIiBhbmFkIG5vIGUgb3IgRSBjaGFyYWN0ZXIgaXMKLSAqIGFuIGF0b21pYyB2YWx1ZSBvZiB0eXBlIHhzOmludGVnZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgSW50ZWdlckxpdGVyYWwgZXh0ZW5kcyBOdW1lcmljTGl0ZXJhbCB7Ci0JcHJpdmF0ZSBYU0ludGVnZXIgX3ZhbHVlOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEludGVnZXJMaXRlcmFsCi0JICogCi0JICogQHBhcmFtIGkKLQkgKiAgICAgICAgICAgIGludGVnZXIgdmFsdWUKLQkgKi8KLQlwdWJsaWMgSW50ZWdlckxpdGVyYWwoQmlnSW50ZWdlciBpKSB7Ci0JCV92YWx1ZSA9IG5ldyBYU0ludGVnZXIoaSk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB4czppbnRlZ2VyIHZhbHVlCi0JICovCi0JcHVibGljIFhTSW50ZWdlciB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlcnNlY3RFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9JbnRlcnNlY3RFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ODc3MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSW50ZXJzZWN0RXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogVGhlIGludGVyc2VjdCBvcGVyYXRvciB0YWtlcyB0d28gbm9kZSBzZXF1ZW5jZXMgYXMgb3BlcmFuZHMgYW5kIHJldHVybnMgYQotICogc2VxdWVuY2UgY29udGFpbmluZyBhbGwgdGhlIG5vZGVzIHRoYXQgb2NjdXIgaW4gYm90aCBvcGVyYW5kcy4KLSAqLwotcHVibGljIGNsYXNzIEludGVyc2VjdEV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBJbnRlcnNlY3RFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIEludGVyc2VjdEV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSXRlbVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0l0ZW1UeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWNmN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvSXRlbVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgSXRlbSBub2RlIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBJdGVtVHlwZSBleHRlbmRzIFhQYXRoTm9kZSB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBJVEVNLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElURU0gPSAwOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUU5BTUUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUU5BTUUgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgS0lORFRFU1QuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORFRFU1QgPSAyOwotCXByaXZhdGUgaW50IF90eXBlOwotCi0JcHJpdmF0ZSBRTmFtZSBfcW5hbWU7Ci0JcHJpdmF0ZSBLaW5kVGVzdCBfa3Rlc3Q7Ci0KLQkvLyBYWFg6IHBvbHltb3JwaGlzbQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBJdGVtVHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZS4KLQkgKiBAcGFyYW0gdmFsdWUKLQkgKiAgICAgICAgICAgIE9iamVjdCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgSXRlbVR5cGUoaW50IHR5cGUsIE9iamVjdCB2YWx1ZSkgewotCQlfcW5hbWUgPSBudWxsOwotCQlfa3Rlc3QgPSBudWxsOwotCi0JCV90eXBlID0gdHlwZTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBRTkFNRToKLQkJCV9xbmFtZSA9IChRTmFtZSkgdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBLSU5EVEVTVDoKLQkJCV9rdGVzdCA9IChLaW5kVGVzdCkgdmFsdWU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFR5cGUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFR5cGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFFOYW1lIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBRTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFFOYW1lIHFuYW1lKCkgewotCQlyZXR1cm4gX3FuYW1lOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgS2luZFRlc3QgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEtpbmRUZXN0IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgS2luZFRlc3Qga2luZF90ZXN0KCkgewotCQlyZXR1cm4gX2t0ZXN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0tpbmRUZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9LaW5kVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTFlNjEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0tpbmRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgS2luZFRlc3Qgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgS2luZFRlc3QgZXh0ZW5kcyBOb2RlVGVzdCB7Ci0JCi0JYWJzdHJhY3QgcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMsIFN0YXRpY0NvbnRleHQgc2MpOwotCQotCWFic3RyYWN0IHB1YmxpYyBRTmFtZSBuYW1lKCk7Ci0JCi0JYWJzdHJhY3QgcHVibGljIGJvb2xlYW4gaXNXaWxkKCk7Ci0JCi0JYWJzdHJhY3QgcHVibGljIENsYXNzIGdldFhETUNsYXNzVHlwZSgpOwotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjNhYjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L0xpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogTGl0ZXJhbCBpcyBlaXRoZXIgYSBOdW1lcmljTGl0ZXJhbCBvciBhIFN0cmluZ0xpdGVyYWwKLSAqIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGl0ZXJhbCBleHRlbmRzIFByaW1hcnlFeHByIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L01pbnVzRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTWludXNFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMWUxY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTWludXNFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTWludXMgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBNaW51c0V4cHIgZXh0ZW5kcyBVbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNaW51c0V4cHIKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgTWludXNFeHByKEV4cHIgYXJnKSB7Ci0JCXN1cGVyKGFyZyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTW9kRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTW9kRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmNjNmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L01vZEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBNb2R1bGFyIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE1vZEV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgTW9kRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHIKLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBNb2RFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L011bEV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L011bEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwMDQwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9NdWxFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTXVsdGlwbHkgb3BlcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgTXVsRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNdWxFeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIE11bEV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTmFtZVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L05hbWVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YTc1YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTmFtZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE5hbWUgdGVzdCBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBOYW1lVGVzdCBleHRlbmRzIE5vZGVUZXN0IHsKLQlwcml2YXRlIFFOYW1lIF9uYW1lOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE5hbWVUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZSB0byB0ZXN0LgotCSAqLwotCXB1YmxpYyBOYW1lVGVzdChRTmFtZSBuYW1lKSB7Ci0JCV9uYW1lID0gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bGYgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTm9kZVRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L05vZGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODY4YTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTm9kZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE5vZGUgdGVzdCBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlVGVzdCBleHRlbmRzIFhQYXRoTm9kZSB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9OdW1lcmljTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvTnVtZXJpY0xpdGVyYWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3NjUzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9OdW1lcmljTGl0ZXJhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBOdW1lcmljTGl0ZXJhbCBpcyBhIHZhbHVlIG9mIHR5cHBlIHhzOmludGVnZXIsIHhzOmRlY2ltYWwgb3IgeHM6ZG91YmxlCi0gKiAKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE51bWVyaWNMaXRlcmFsIGV4dGVuZHMgTGl0ZXJhbCB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9PckV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L09yRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmQyODM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L09yRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE9yIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE9yRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBPckV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGxlZnQgZXhwcmVzc2lvbi4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgcmlnaHQgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgT3JFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWxmIG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BJVGVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUElUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMjdmZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI5ODUzNSAtIEF0dHJpYnV0ZSBpbnN0YW5jZSBvZiBpbXByb3ZlbWVudHMgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUElUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbiBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgUElUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgU3RyaW5nIF9hcmc7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUElUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGluc3RydWN0aW9uIGFyZ3VtZW50LgotCSAqLwotCXB1YmxpYyBQSVRlc3QoU3RyaW5nIGFyZykgewotCQlfYXJnID0gYXJnOwotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIFBJVGVzdC4KLQkgKi8KLQlwdWJsaWMgUElUZXN0KCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFN0cmluZyBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgU3RyaW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGFyZygpIHsKLQkJcmV0dXJuIF9hcmc7Ci0JfQotCi0JcHVibGljIEFueVR5cGUgY3JlYXRlVGVzdFR5cGUoUmVzdWx0U2VxdWVuY2UgcnMsIFN0YXRpY0NvbnRleHQgc2MpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgUU5hbWUgbmFtZSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQlyZXR1cm4gUElUeXBlLmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGFyRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGFyRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWRhNDNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BhckV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHBhcmV0aGVzaXplZCBleHByZXNzaW9ucyBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgUGFyRXhwciBleHRlbmRzIFByaW1hcnlFeHByIHsKLQlwcml2YXRlIENvbGxlY3Rpb24gX2V4cHJzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhckV4cHIuCi0JICogCi0JICogQHBhcmFtIGV4cHJzCi0JICogICAgICAgICAgICBFeHByZXNzaW9ucy4KLQkgKi8KLQlwdWJsaWMgUGFyRXhwcihDb2xsZWN0aW9uIGV4cHJzKSB7Ci0JCV9leHBycyA9IGV4cHJzOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEl0ZXJhdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBJdGVyYXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gX2V4cHJzLml0ZXJhdG9yKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGlwZUV4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BpcGVFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMWJjMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGlwZUV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBQaXBlZCBleHByZXNzaW9ucyBzdXBwb3J0LgotICovCi1wdWJsaWMgY2xhc3MgUGlwZUV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGlwZUV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIExlZnQgZXhwcmVzc2lvbi4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgUmlnaHQgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgUGlwZUV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGx1c0V4cHIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1BsdXNFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZDU3YjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUGx1c0V4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIENsYXNzIGZvciBQbHVzIGV4cHJlc3Npb24gc3VwcG9ydC4KLSAqLwotcHVibGljIGNsYXNzIFBsdXNFeHByIGV4dGVuZHMgVW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGx1c0V4cHIuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgQXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBQbHVzRXhwcihFeHByIGFyZykgewotCQlzdXBlcihhcmcpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ByaW1hcnlFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9QcmltYXJ5RXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTFiZGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1ByaW1hcnlFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIEJhc2ljIHByaW1pdGl2ZSBsYW5ndWFnZS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFByaW1hcnlFeHByIGV4dGVuZHMgWFBhdGhOb2RlIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1F1YW50aWZpZWRFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9RdWFudGlmaWVkRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjBjMzQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1F1YW50aWZpZWRFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLy8gbWl0ZSB3YW5uYSBkbyB0d28gc2VwYXJhdGUgY2xhc3NlcyBhdCB0aGUgZW5kCi0vKioKLSAqIFN1cHBvcnQgZm9yIFF1YW50aWZpZWQgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBRdWFudGlmaWVkRXhwciBleHRlbmRzIEV4cHIgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU09NRS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT01FID0gMDsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFMTC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTEwgPSAxOwotCi0JcHJpdmF0ZSBDb2xsZWN0aW9uIF92YXJfZXhwcl9wYWlyczsKLQlwcml2YXRlIEV4cHIgX3JldHVybjsKLQlwcml2YXRlIGludCBfdHlwZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBRdWFudGlmaWVkRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVHlwZSAoMCBmb3IgU09NRSwgMSBmb3IgQUxMKS4KLQkgKiBAcGFyYW0gdmFyZXhwCi0JICogICAgICAgICAgICBFeHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gcmV0Ci0JICogICAgICAgICAgICBSZXR1cm5lZCBleHByZXNzaW9uLgotCSAqLwotCXB1YmxpYyBRdWFudGlmaWVkRXhwcihpbnQgdHlwZSwgQ29sbGVjdGlvbiB2YXJleHAsIEV4cHIgcmV0KSB7Ci0JCV90eXBlID0gdHlwZTsKLQkJX3Zhcl9leHByX3BhaXJzID0gdmFyZXhwOwotCQlfcmV0dXJuID0gcmV0OwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEludGVnZXIgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEludCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCB0eXBlKCkgewotCQlyZXR1cm4gX3R5cGU7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZWZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgSXRlcmF0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpIHsKLQkJcmV0dXJuIF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIFNldCBuZXh0IGV4cHJlc3Npb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIEV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2V4cHIoRXhwciBlKSB7Ci0JCV9yZXR1cm4gPSBlOwotCX0KLQotCS8vIHVzZWQgZm9yIG5vcm1hbGl6YXRpb24uLi4gYmFzaWNhbGx5IGp1c3Qga2VlcCBhICJzaW1wbGUgZm9yIi4uLiBubwotCS8vIHBhaXJzLi4uIGNvbGxlY3Rpb24gd2lsbCBhbHdheXMgaGF2ZSAxIGVsZW1lbnQKLQkvKioKLQkgKiBOb3JtYWxpemF0aW9uIG9mIGV4cHJlc3Npb24gcGFpcnMuCi0JICovCi0JcHVibGljIHZvaWQgdHJ1bmNhdGVfcGFpcnMoKSB7Ci0JCWJvb2xlYW4gZmlyc3QgPSB0cnVlOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IF92YXJfZXhwcl9wYWlycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWkubmV4dCgpOwotCQkJaWYgKCFmaXJzdCkKLQkJCQlpLnJlbW92ZSgpOwotCi0JCQlmaXJzdCA9IGZhbHNlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQ29sbGVjdGlvbiBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBFeHByZXNzaW9uIHBhaXJzLgotCSAqLwotCXB1YmxpYyBDb2xsZWN0aW9uIHZlX3BhaXJzKCkgewotCQlyZXR1cm4gX3Zhcl9leHByX3BhaXJzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1JhbmdlRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmFuZ2VFeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZmVhZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvUmFuZ2VFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBSYW5nZSBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIFJhbmdlRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBSYW5nZUV4cHIuCi0JICogCi0JICogQHBhcmFtIGwKLQkgKiAgICAgICAgICAgIGxlZnQgZXhwcmVzc2lvbi4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgcmlnaHQgZXhwcmVzc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmFuZ2VFeHByKEV4cHIgbCwgRXhwciByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1JldmVyc2VTdGVwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9SZXZlcnNlU3RlcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWEzM2UwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1JldmVyc2VTdGVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuKjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgUmV2ZXJzZSBzdGVwcGluZyBzdXBwb3J0IGZvciBTdGVwIG9wZXJhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXZlcnNlU3RlcCBleHRlbmRzIFN0ZXAgewotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUEFSRU5ULgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUkVOVCA9IDA7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBBTkNFU1RPUi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTkNFU1RPUiA9IDE7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkdfU0lCTElORy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVDRURJTkdfU0lCTElORyA9IDI7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBQUkVDRURJTkcuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJFQ0VESU5HID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIEFOQ0VTVE9SX09SX1NFTEYuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5DRVNUT1JfT1JfU0VMRiA9IDQ7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBET1RET1QuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9URE9UID0gNTsKLQotCXByaXZhdGUgaW50IF9heGlzOwotCXByaXZhdGUgUmV2ZXJzZUF4aXMgX2l0ZXJhdG9yOwotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZV9pdGVyYXRvcigpIHsKLQkJc3dpdGNoIChfYXhpcykgewotCQljYXNlIFBBUkVOVDoKLQkJCV9pdGVyYXRvciA9IG5ldyBQYXJlbnRBeGlzKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBTkNFU1RPUjoKLQkJCV9pdGVyYXRvciA9IG5ldyBBbmNlc3RvckF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFJFQ0VESU5HX1NJQkxJTkc6Ci0JCQlfaXRlcmF0b3IgPSBuZXcgUHJlY2VkaW5nU2libGluZ0F4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUFJFQ0VESU5HOgotCQkJX2l0ZXJhdG9yID0gbmV3IFByZWNlZGluZ0F4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQU5DRVNUT1JfT1JfU0VMRjoKLQkJCV9pdGVyYXRvciA9IG5ldyBBbmNlc3Rvck9yU2VsZkF4aXMoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRE9URE9UOgotCQkJX2l0ZXJhdG9yID0gbnVsbDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUmV2ZXJzZVN0ZXAuCi0JICogCi0JICogQHBhcmFtIGF4aXMKLQkgKiAgICAgICAgICAgIEF4aXMgbnVtYmVyLgotCSAqIEBwYXJhbSBub2RlX3Rlc3QKLQkgKiAgICAgICAgICAgIE5vZGUgdGVzdC4KLQkgKi8KLQlwdWJsaWMgUmV2ZXJzZVN0ZXAoaW50IGF4aXMsIE5vZGVUZXN0IG5vZGVfdGVzdCkgewotCQlzdXBlcihub2RlX3Rlc3QpOwotCi0JCV9heGlzID0gYXhpczsKLQkJdXBkYXRlX2l0ZXJhdG9yKCk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgQXhpcyBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgQXhpcyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIGludCBheGlzKCkgewotCQlyZXR1cm4gX2F4aXM7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlcmF0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZXJhdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmV2ZXJzZUF4aXMgaXRlcmF0b3IoKSB7Ci0JCXJldHVybiBfaXRlcmF0b3I7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2NoZW1hQXR0clRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUF0dHJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NjkwOWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU2NoZW1hQXR0clRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFNjaGVtYSBBdHRyaWJ1dGUgdGVzdC4KLSAqLwotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCXByaXZhdGUgUU5hbWUgX2FyZzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTY2hlbWFBdHRyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBRTmFtZSBhcmd1bWVudC4KLQkgKi8KLQlwdWJsaWMgU2NoZW1hQXR0clRlc3QoUU5hbWUgYXJnKSB7Ci0JCV9hcmcgPSBhcmc7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgYXJnKCkgewotCQlyZXR1cm4gX2FyZzsKLQl9Ci0KLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycywgU3RhdGljQ29udGV4dCBzYykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX2FyZzsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUVsZW1UZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TY2hlbWFFbGVtVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzIyNjEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NjaGVtYUVsZW1UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuKjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBTY2hlbWEgRWxlbWVudCBUZXN0LgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hRWxlbVRlc3QgZXh0ZW5kcyBLaW5kVGVzdCB7Ci0JcHJpdmF0ZSBRTmFtZSBfYXJnOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNjaGVtYUVsZW1UZXN0LgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFFOYW1lIGFyZ3VtZW50LgotCSAqLwotCXB1YmxpYyBTY2hlbWFFbGVtVGVzdChRTmFtZSBhcmcpIHsKLQkJX2FyZyA9IGFyZzsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX2FyZzsKLQl9Ci0KLQlwdWJsaWMgQW55VHlwZSBjcmVhdGVUZXN0VHlwZShSZXN1bHRTZXF1ZW5jZSBycywgU3RhdGljQ29udGV4dCBzYykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV2lsZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBDbGFzcyBnZXRYRE1DbGFzc1R5cGUoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TZXF1ZW5jZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NlcXVlbmNlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWQxZmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NlcXVlbmNlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMzEyMTkxIC0gaW5zdGFuY2Ugb2YgdGVzdCBmYWlscyB3aXRoIHBhcnRpYWwgbWF0Y2hlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgU2VxdWVuY2UgdHlwZS4KLSAqLwotcHVibGljIGNsYXNzIFNlcXVlbmNlVHlwZSBleHRlbmRzIFhQYXRoTm9kZSB7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBFTVBUWS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTVBUWSA9IDA7Ci0JLyoqCi0JICogU2V0IGludGVybmFsIHZhbHVlIGZvciBOT05FLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAxOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgUVVFU1RJT04uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFU1RJT04gPSAyOwotCS8qKgotCSAqIFNldCBpbnRlcm5hbCB2YWx1ZSBmb3IgU1RBUi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFSID0gMzsKLQkvKioKLQkgKiBTZXQgaW50ZXJuYWwgdmFsdWUgZm9yIFBMVVMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExVUyA9IDQ7Ci0KLQlwcml2YXRlIGludCBfb2NjOwotCXByaXZhdGUgSXRlbVR5cGUgX2l0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNlcXVlbmNlVHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gb2NjCi0JICogICAgICAgICAgICBPY2N1cmVuY2UuCi0JICogQHBhcmFtIGl0Ci0JICogICAgICAgICAgICBJdGVtIHR5cGUuCi0JICovCi0JcHVibGljIFNlcXVlbmNlVHlwZShpbnQgb2NjLCBJdGVtVHlwZSBpdCkgewotCQlfb2NjID0gb2NjOwotCQlfaXQgPSBpdDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgb2NjdXJlbmNlIG9mIGl0ZW0uCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgZnJvbSBJbnQgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBpbnQgb2NjdXJyZW5jZSgpIHsKLQkJcmV0dXJuIF9vY2M7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgSXRlbVR5cGUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEl0ZW1UeXBlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgSXRlbVR5cGUgaXRlbV90eXBlKCkgewotCQlyZXR1cm4gX2l0OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0xlbmd0aFZhbGlkKGludCBsZW5ndGgpIHsKLQkJc3dpdGNoIChvY2N1cnJlbmNlKCkpIHsKLQkJY2FzZSBFTVBUWTogcmV0dXJuIGxlbmd0aCA9PSAwOwotCQljYXNlIE5PTkU6IHJldHVybiBsZW5ndGggPT0gMTsKLQkJY2FzZSBRVUVTVElPTjogcmV0dXJuIGxlbmd0aCA8PSAxOwotCQljYXNlIFNUQVI6IHJldHVybiB0cnVlOwotCQljYXNlIFBMVVM6IHJldHVybiBsZW5ndGggPj0gMTsKLQkJZGVmYXVsdDoKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NpbmdsZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1NpbmdsZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk1OTJjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TaW5nbGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFNpbmdsZSB0eXBlcy4KLSAqLwotcHVibGljIGNsYXNzIFNpbmdsZVR5cGUgZXh0ZW5kcyBYUGF0aE5vZGUgewotCi0JcHJpdmF0ZSBRTmFtZSBfdHlwZTsKLQlwcml2YXRlIGJvb2xlYW4gX3FtYXJrOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNpbmdsZVR5cGUuCi0JICogCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIFFOYW1lIHR5cGUuCi0JICogQHBhcmFtIHFtYXJrCi0JICogICAgICAgICAgICBvcHRpb25hbCB0eXBlPyAodHJ1ZS9mYWxzZSkuCi0JICovCi0JcHVibGljIFNpbmdsZVR5cGUoUU5hbWUgdHlwZSwgYm9vbGVhbiBxbWFyaykgewotCQlfdHlwZSA9IHR5cGU7Ci0JCV9xbWFyayA9IHFtYXJrOwotCX0KLQotCS8qKgotCSAqIERlZmF1bHQgQ29uc3RydWN0b3IgZm9yIFNpbmdsZVR5cGUuCi0JICovCi0JcHVibGljIFNpbmdsZVR5cGUoUU5hbWUgdHlwZSkgewotCQl0aGlzKHR5cGUsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgb3B0aW9uYWwgdHlwZS4KLQkgKiAKLQkgKiBAcmV0dXJuIG9wdGlvbmFsIHR5cGUgdmFsdWUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gcW1hcmsoKSB7Ci0JCXJldHVybiBfcW1hcms7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUU5hbWUgdHlwZSgpIHsKLQkJcmV0dXJuIF90eXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNjNmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFN0ZXAgb3BlcmF0aW9ucy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFN0ZXAgZXh0ZW5kcyBYUGF0aE5vZGUgewotCi0JcHJpdmF0ZSBOb2RlVGVzdCBfbm9kZV90ZXN0OwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFN0ZXAuCi0JICogCi0JICogQHBhcmFtIG5vZGVfdGVzdAotCSAqICAgICAgICAgICAgTm9kZXMgZm9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgU3RlcChOb2RlVGVzdCBub2RlX3Rlc3QpIHsKLQkJX25vZGVfdGVzdCA9IG5vZGVfdGVzdDsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBOb2RlVGVzdCBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgTm9kZVRlc3Qgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBOb2RlVGVzdCBub2RlX3Rlc3QoKSB7Ci0JCXJldHVybiBfbm9kZV90ZXN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXBFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9TdGVwRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmRiMDVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0ZXBFeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFN0ZXAgZXhwcmVzc2lvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGVwRXhwciBleHRlbmRzIEV4cHIgewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3RyaW5nTGl0ZXJhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3RyaW5nTGl0ZXJhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2U0MjA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N0cmluZ0xpdGVyYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogVGhlIHZhbHVlIG9mIGEgc3RyaW5nIGxpdGVyYWwgaXMgYW4gYXRvbWljIHZhbHVlIHdob3NlIHR5cGUgaXMgeHM6c3RyaW5nIGFuZAotICogd2hvc2UgdmFsdWUgaXMgdGhlIHN0cmluZyBkZW5vdGVkIGJ5IHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGRlbGltaXRpbmcKLSAqIGFwb3N0cm9waGVzIG9yIHF1b3RhdGlvbiBtYXJrcy4gSWYgdGhlIGxpdGVyYWwgaXMgZGVsaW1pdGVkIGJ5IGFwb3N0cm9waGVzLAotICogdHdvIGFkamFjZW50IGFwb3N0cm9waGVzIHdpdGhpbiB0aGUgbGl0ZXJhbCBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUKLSAqIGFwb3N0cm9waGUuIFNpbWlsYXJseSwgaWYgdGhlIGxpdGVyYWwgaXMgZGVsaW1pdGVkIGJ5IHF1b3RhdGlvbiBtYXJrcywgdHdvCi0gKiBhZGphY2VudCBxdW90YXRpb24gbWFya3Mgd2l0aGluIHRoZSBsaXRlcmFsIGFyZSBpbnRlcnByZXRlZCBhcyBvbmUgcXVvdGF0aW9uCi0gKiBtYXJrCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFN0cmluZ0xpdGVyYWwgZXh0ZW5kcyBMaXRlcmFsIHsKLQlwcml2YXRlIFhTU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdHJpbmdMaXRlcmFsCi0JICogCi0JICogQHBhcmFtIHZhbHVlCi0JICogICAgICAgICAgICBzdHJpbmcgdmFsdWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nTGl0ZXJhbChTdHJpbmcgdmFsdWUpIHsKLQkJX3ZhbHVlID0gbmV3IFhTU3RyaW5nKHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHN0cmluZyB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nKCkgewotCQlyZXR1cm4gX3ZhbHVlLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB4czpzdHJpbmcgdmFsdWUKLQkgKi8KLQlwdWJsaWMgWFNTdHJpbmcgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3ViRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvU3ViRXhwci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTZhNTExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1N1YkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFN1YnRyYWN0aW9uIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFN1YkV4cHIgZXh0ZW5kcyBCaW5FeHByIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3ViRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgbGVmdCBpbnB1dC4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgcmlnaHQgaW5wdXQuCi0JICovCi0JcHVibGljIFN1YkV4cHIoRXhwciBsLCBFeHByIHIpIHsKLQkJc3VwZXIobCwgcik7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgVmlzaXRvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpIHsKLQkJcmV0dXJuIHYudmlzaXQodGhpcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVGV4dFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1RleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZWRlNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVGV4dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk4NTM1IC0gQXR0cmlidXRlIGluc3RhbmNlIG9mIGltcHJvdmVtZW50cyAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuVGV4dFR5cGU7Ci0KLS8qKgotICogQ2xhc3MgdG8gbWF0Y2ggYW55IHRleHQgbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIFRleHRUZXN0IGV4dGVuZHMgS2luZFRlc3QgewotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCXB1YmxpYyBBbnlUeXBlIGNyZWF0ZVRlc3RUeXBlKFJlc3VsdFNlcXVlbmNlIHJzLCBTdGF0aWNDb250ZXh0IHNjKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1dpbGQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3MgZ2V0WERNQ2xhc3NUeXBlKCkgewotCQlyZXR1cm4gVGV4dFR5cGUuY2xhc3M7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UcmVhdEFzRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVHJlYXRBc0V4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4Yzg3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9UcmVhdEFzRXhwci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgVHJlYXQgb3BlcmF0aW9uLiBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQsCi0gKiByYXRoZXIgaXQgZW5zdWVzIHRoZSBvcGVyYW5kIGhhcyBhIGNvcnJlY3QgdHlwZSBhdCBldmFsdWF0aW9uIHRpbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmVhdEFzRXhwciBleHRlbmRzIEJpbkV4cHIgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUcmVhdEFzRXhwci4KLQkgKiAKLQkgKiBAcGFyYW0gbAotCSAqICAgICAgICAgICAgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgU2VxdWVuY2VUeXBlIHRvIHRyZWF0IGFzLgotCSAqLwotCXB1YmxpYyBUcmVhdEFzRXhwcihFeHByIGwsIFNlcXVlbmNlVHlwZSByKSB7Ci0JCXN1cGVyKGwsIHIpOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvYXN0L1VuRXhwci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5FeHByLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2Q4ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5FeHByLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFVuYXJ5IGV4cHJlc3Npb25zLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVW5FeHByIGV4dGVuZHMgRXhwciB7Ci0JcHJpdmF0ZSBFeHByIF9hcmc7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVW5FeHByLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFVuRXhwcihFeHByIGFyZykgewotCQlfYXJnID0gYXJnOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIEV4cHJlc3Npb24gaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEV4cHIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBFeHByIGFyZygpIHsKLQkJcmV0dXJuIF9hcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVW5pb25FeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbmlvbkV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViMDk0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9VbmlvbkV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi0vKioKLSAqIFRoZSB1bmlvbiBjbGFzcyB0YWtlcyB0d28gbm9kZSBzZXF1ZW5jZXMgYXMgb3BlcmFuZHMgYW5kIHJldHVybiBhIHNlcXVlbmNlCi0gKiBjb250YWluaW5nIGFsbCB0aGUgbm9kZXMgdGhhdCBvY2N1ciBpbiBlaXRoZXIgb2YgdGhlIG9wZXJhbmRzLgotICovCi1wdWJsaWMgY2xhc3MgVW5pb25FeHByIGV4dGVuZHMgQmluRXhwciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVW5pb25FeHByLgotCSAqIAotCSAqIEBwYXJhbSBsCi0JICogICAgICAgICAgICBpbnB1dDEgeHBhdGggZXhwcmVzc2lvbi92YXJpYWJsZS4KLQkgKiBAcGFyYW0gcgotCSAqICAgICAgICAgICAgdW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICovCi0JcHVibGljIFVuaW9uRXhwcihFeHByIGwsIEV4cHIgcikgewotCQlzdXBlcihsLCByKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9WYXJFeHByUGFpci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVmFyRXhwclBhaXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlYjMzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9WYXJFeHByUGFpci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy4qOwotCi0vKioKLSAqIENsYXNzIGZvciBWYXJpYWJsZSBFeHByZXNzaW9uIFBhaXJzLgotICovCi1wdWJsaWMgY2xhc3MgVmFyRXhwclBhaXIgewotCXByaXZhdGUgUU5hbWUgX3ZhcjsKLQlwcml2YXRlIEV4cHIgX2V4cHI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVmFyRXhwclBhaXIuCi0JICogCi0JICogQHBhcmFtIHZhcgotCSAqICAgICAgICAgICAgUU5hbWUgdmFyaWFibGUuCi0JICogQHBhcmFtIGV4cHIKLQkgKiAgICAgICAgICAgIEV4cHJlc3Npb24uCi0JICovCi0JcHVibGljIFZhckV4cHJQYWlyKFFOYW1lIHZhciwgRXhwciBleHByKSB7Ci0JCV92YXIgPSB2YXI7Ci0JCV9leHByID0gZXhwcjsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSB2YXJuYW1lKCkgewotCQlyZXR1cm4gX3ZhcjsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBFeHByZXNzaW9uIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBFeHByIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgRXhwciBleHByKCkgewotCQlyZXR1cm4gX2V4cHI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvVmFyUmVmLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9WYXJSZWYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjNjhjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9WYXJSZWYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLio7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgVmFyaWFibGUgUmVmZXJlbmNlLiBBIFFOYW1lIHByZWNlZGVkIGJ5IGEgJC1zaWduIGlzIGEgdmFyaWFibGUKLSAqIHJlZmVyZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIFZhclJlZiBleHRlbmRzIFByaW1hcnlFeHByIHsKLQlwcml2YXRlIFFOYW1lIF92YXJuYW1lOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFZhclJlZi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICovCi0JcHVibGljIFZhclJlZihRTmFtZSBuYW1lKSB7Ci0JCV92YXJuYW1lID0gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBWaXNpdG9yIGludGVyZmFjZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBWaXNpdG9yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGFjY2VwdChYUGF0aFZpc2l0b3IgdikgewotCQlyZXR1cm4gdi52aXNpdCh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX3Zhcm5hbWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhFeHByLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aEV4cHIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI0YmI5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aEV4cHIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmFzdDsKLQotLyoqCi0gKiBQYXRoIGV4cHJlc3Npb24gd2Fsa3MgdHJpZXMgdG8gd2FsayB0aGUgcGF0aCBzcGVjaWZpZWQgaW4gaXRzIGFyZ3VtZW50Ci0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aEV4cHIgZXh0ZW5kcyBFeHByIHsKLQlwcml2YXRlIGludCBfc2xhc2hlczsKLQlwcml2YXRlIFN0ZXBFeHByIF9leHByOwotCi0JLy8gc2luZ2xlIGxpbmtlZCBsaXN0Ci0JcHJpdmF0ZSBYUGF0aEV4cHIgX25leHQ7Ci0KLQkvKioKLQkgKiBAcGFyYW0gc2xhc2hlcwotCSAqICAgICAgICAgICAgaXMgY29waWVkIHRvIF9zbGFzaGVzCi0JICogQHBhcmFtIGV4cHIKLQkgKiAgICAgICAgICAgIGlzIGNvcGllZCB0byBfZXhwciBfbmV4dCBpcyBtYWRlIG51bGwgYXMgYSByZXN1bHQuCi0JICovCi0JcHVibGljIFhQYXRoRXhwcihpbnQgc2xhc2hlcywgU3RlcEV4cHIgZXhwcikgewotCQlfc2xhc2hlcyA9IHNsYXNoZXM7Ci0JCV9leHByID0gZXhwcjsKLQkJX25leHQgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFZpc2l0b3IgaW50ZXJmYWNlLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIFZpc2l0b3Igb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBPYmplY3QgYWNjZXB0KFhQYXRoVmlzaXRvciB2KSB7Ci0JCXJldHVybiB2LnZpc2l0KHRoaXMpOwotCX0KLQotCS8qKgotCSAqIEFkZCB0byB0YWlsIG9mIHBhdGgKLQkgKi8KLQkvLyBYWFg6IGtlZXAgcmVmIHRvIGxhc3QKLQlwdWJsaWMgdm9pZCBhZGRfdGFpbChpbnQgc2xhc2hlcywgU3RlcEV4cHIgZXhwcikgewotCQlYUGF0aEV4cHIgbGFzdCA9IHRoaXM7Ci0JCVhQYXRoRXhwciBuZXh0ID0gX25leHQ7Ci0KLQkJd2hpbGUgKG5leHQgIT0gbnVsbCkgewotCQkJbGFzdCA9IG5leHQ7Ci0JCQluZXh0ID0gbGFzdC5uZXh0KCk7Ci0JCX0KLQotCQlYUGF0aEV4cHIgaXRlbSA9IG5ldyBYUGF0aEV4cHIoc2xhc2hlcywgZXhwcik7Ci0JCWxhc3Quc2V0X25leHQoaXRlbSk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY291bnQKLQkgKiAgICAgICAgICAgIGlzIGNvcGllZCB0byBfc2xhc2hlcwotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9zbGFzaGVzKGludCBjb3VudCkgewotCQlfc2xhc2hlcyA9IGNvdW50OwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gWFBhdGggZXhwcmVzc2lvbiBfbmV4dAotCSAqLwotCXB1YmxpYyBYUGF0aEV4cHIgbmV4dCgpIHsKLQkJcmV0dXJuIF9uZXh0OwotCX0KLQotCS8qKgotCSAqIGFuIFhQYXRoIGV4cHJlc3Npb24sIG4gaXMgY29waWVkIHRvIF9uZXh0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0X25leHQoWFBhdGhFeHByIG4pIHsKLQkJX25leHQgPSBuOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gU3RlcCBleHByZXNzaW9uIF9leHByCi0JICovCi0JcHVibGljIFN0ZXBFeHByIGV4cHIoKSB7Ci0JCXJldHVybiBfZXhwcjsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIGludCBfc2xhc2hlcwotCSAqLwotCXB1YmxpYyBpbnQgc2xhc2hlcygpIHsKLQkJcmV0dXJuIF9zbGFzaGVzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aE5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMWFmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5hc3Q7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGEgWFBhdGhOb2RlIG9iamVjdC4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhQYXRoTm9kZSB7Ci0JLyoqCi0JICogU3VwcG9ydCBmb3IgVmlzaXRvciBpbnRlcmZhY2UuCi0JICovCi0JcHVibGljIGFic3RyYWN0IE9iamVjdCBhY2NlcHQoWFBhdGhWaXNpdG9yIHYpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9hc3QvWFBhdGhWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxM2M2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2FzdC9YUGF0aFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuYXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmFzdC5YUGF0aDsKLQotLyoqCi0gKiBWaXNpdG9yIGNsYXNzIGZvciBYUGF0aCBleHByZXNzaW9ucy4KLSAqLwotcHVibGljIGludGVyZmFjZSBYUGF0aFZpc2l0b3IgewotCS8qKgotCSAqIFZpc2l0IFhQYXRoLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoWFBhdGggeHApOwotCi0JLyoqCi0JICogVmlzaXQgRm9yRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvckV4cHIgZmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IFF1YW50aWZpZWRFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUXVhbnRpZmllZEV4cHIgcWV4KTsKLQotCS8qKgotCSAqIFZpc2l0IElmRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KElmRXhwciBpZmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IE9yRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE9yRXhwciBvcmV4KTsKLQotCS8qKgotCSAqIFZpc2l0IEFuZEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBbmRFeHByIGFuZGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IENtcEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDbXBFeHByIGNtcGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IFJhbmdlRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFJhbmdlRXhwciByZXgpOwotCi0JLyoqCi0JICogVmlzaXQgQWRkRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEFkZEV4cHIgYWRkZXgpOwotCi0JLyoqCi0JICogVmlzaXQgU3ViRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFN1YkV4cHIgc3ViZXgpOwotCi0JLyoqCi0JICogVmlzaXQgTXVsRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE11bEV4cHIgbXVsZXgpOwotCi0JLyoqCi0JICogVmlzaXQgRGl2RXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KERpdkV4cHIgbXVsZXgpOwotCi0JLyoqCi0JICogVmlzaXQgSURpdkV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJRGl2RXhwciBtdWxleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBNb2RFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTW9kRXhwciBtdWxleCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBVbmlvbkV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChVbmlvbkV4cHIgdW5leCk7Ci0KLQkvKioKLQkgKiBWaXNpdCBQaXBlRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBpcGVFeHByIHBpcGV4KTsKLQotCS8qKgotCSAqIFZpc2l0IEludGVyc2VjdEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnRlcnNlY3RFeHByIGlleHByKTsKLQotCS8qKgotCSAqIFZpc2l0IEV4Y2VwdEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChFeGNlcHRFeHByIGVleHByKTsKLQotCS8qKgotCSAqIFZpc2l0IEluc3RPZkV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJbnN0T2ZFeHByIGlvZXhwKTsKLQotCS8qKgotCSAqIFZpc2l0IFRyZWF0QXNFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoVHJlYXRBc0V4cHIgdGFleHApOwotCi0JLyoqCi0JICogVmlzaXQgQ2FzdGFibGVFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQ2FzdGFibGVFeHByIGNleHApOwotCi0JLyoqCi0JICogVmlzaXQgQ2FzdEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDYXN0RXhwciBjZXhwKTsKLQotCS8qKgotCSAqIFZpc2l0IE1pbnVzRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KE1pbnVzRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFBsdXNFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGx1c0V4cHIgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBYUGF0aEV4cHIuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChYUGF0aEV4cHIgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBGb3J3YXJkU3RlcC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZvcndhcmRTdGVwIGUpOwotCi0JLyoqCi0JICogVmlzaXQgUmV2ZXJzZVN0ZXAuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChSZXZlcnNlU3RlcCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IE5hbWVUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoTmFtZVRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBWYXJSZWYuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChWYXJSZWYgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTdHJpbmdMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU3RyaW5nTGl0ZXJhbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEludGVnZXJMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoSW50ZWdlckxpdGVyYWwgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBEb3VibGVMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRG91YmxlTGl0ZXJhbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IERlY2ltYWxMaXRlcmFsLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRGVjaW1hbExpdGVyYWwgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBQYXJFeHByLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoUGFyRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IENudHhJdGVtRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KENudHhJdGVtRXhwciBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEZ1bmN0aW9uQ2FsbC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZ1bmN0aW9uQ2FsbCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFNpbmdsZVR5cGUuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTaW5nbGVUeXBlIGUpOwotCi0JLyoqCi0JICogVmlzaXQgU2VxdWVuY2VUeXBlLgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2VxdWVuY2VUeXBlIGUpOwotCi0JLyoqCi0JICogVmlzaXQgSXRlbVR5cGUuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChJdGVtVHlwZSBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEFueUtpbmRUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoQW55S2luZFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBEb2N1bWVudFRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChEb2N1bWVudFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBUZXh0VGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFRleHRUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgQ29tbWVudFRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChDb21tZW50VGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IFBJVGVzdC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KFBJVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEF0dHJpYnV0ZVRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChBdHRyaWJ1dGVUZXN0IGUpOwotCi0JLyoqCi0JICogVmlzaXQgU2NoZW1hQXR0clRlc3QuCi0JICovCi0JcHVibGljIE9iamVjdCB2aXNpdChTY2hlbWFBdHRyVGVzdCBlKTsKLQotCS8qKgotCSAqIFZpc2l0IEVsZW1lbnRUZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoRWxlbWVudFRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBTY2hlbUVsZW1UZXN0LgotCSAqLwotCXB1YmxpYyBPYmplY3QgdmlzaXQoU2NoZW1hRWxlbVRlc3QgZSk7Ci0KLQkvKioKLQkgKiBWaXNpdCBBeGlzU3RlcC4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEF4aXNTdGVwIGUpOwotCi0JLyoqCi0JICogVmlzaXQgRmlsdGVyRXhwci4KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IHZpc2l0KEZpbHRlckV4cHIgZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9BYnN0cmFjdENvbGxhdGlvbkVxdWFsRnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBhNjkxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyOTY4ODIgLSBmaXhlZCBmdW5jdGlvbiB0aGF0IHdvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnR5cGVkQXRvbWljOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCi0JcHVibGljIEFic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgYXJpdHkpOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLQlwdWJsaWMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBtaW5fYXJpdHksCi0JCQlpbnQgbWF4X2FyaXR5KSB7Ci0JCXN1cGVyKG5hbWUsIG1pbl9hcml0eSwgbWF4X2FyaXR5KTsKLQl9Ci0KLQotCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBoYXNWYWx1ZShBbnlUeXBlIGl0ZW1hLCBBbnlUeXBlIGl0ZW1iLCBEeW5hbWljQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY29sbGF0aW9uVVJJKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNTdHJpbmcgaXRlbVN0ciA9IG5ldyBYU1N0cmluZyhpdGVtYS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJaWYgKGlzQm9vbGVhbihpdGVtYSwgaXRlbWIpKSB7Ci0JCQlYU0Jvb2xlYW4gYm9vbGF0ID0gKFhTQm9vbGVhbikgaXRlbWE7Ci0JCQlpZiAoYm9vbGF0LmVxKGl0ZW1iLCBjb250ZXh0KSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJaWYgKGlzTnVtZXJpYyhpdGVtYSwgaXRlbWIpKSB7Ci0JCQlOdW1lcmljVHlwZSBudW1lcmljYXQgPSAoTnVtZXJpY1R5cGUpIGl0ZW1hOwotCQkJaWYgKG51bWVyaWNhdC5lcShpdGVtYiwgY29udGV4dCkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCWlmIChpc0R1cmF0aW9uKGl0ZW1hLCBpdGVtYikpIHsKLQkJCVhTRHVyYXRpb24gZHVyYXQgPSAoWFNEdXJhdGlvbikgaXRlbWE7Ci0JCQlpZiAoZHVyYXQuZXEoaXRlbWIsIGNvbnRleHQpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobmVlZHNTdHJpbmdDb21wYXJpc29uKGl0ZW1hLCBpdGVtYikpIHsKLQkJCVhTU3RyaW5nIHhzdHIxID0gbmV3IFhTU3RyaW5nKGl0ZW1hLmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJaWYgKEZuQ29tcGFyZS5jb21wYXJlX3N0cmluZyhjb2xsYXRpb25VUkksIHhzdHIxLCBpdGVtU3RyLAotCQkJCQljb250ZXh0KS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGhhc1ZhbHVlKFJlc3VsdEJ1ZmZlciBycywgQW55QXRvbWljVHlwZSBpdGVtLAotCQkJRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTU3RyaW5nIGl0ZW1TdHIgPSBuZXcgWFNTdHJpbmcoaXRlbS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmICghKGF0IGluc3RhbmNlb2YgQ21wRXEpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoaXNCb29sZWFuKGl0ZW0sIGF0KSkgewotCQkJCVhTQm9vbGVhbiBib29sYXQgPSAoWFNCb29sZWFuKSBhdDsKLQkJCQlpZiAoYm9vbGF0LmVxKGl0ZW0sIGNvbnRleHQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGlzTnVtZXJpYyhpdGVtLCBhdCkpIHsKLQkJCQlOdW1lcmljVHlwZSBudW1lcmljYXQgPSAoTnVtZXJpY1R5cGUpIGF0OwotCQkJCWlmIChudW1lcmljYXQuZXEoaXRlbSwgY29udGV4dCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaXNEdXJhdGlvbihpdGVtLCBhdCkpIHsKLQkJCQlYU0R1cmF0aW9uIGR1cmF0ID0gKFhTRHVyYXRpb24pIGF0OwotCQkJCWlmIChkdXJhdC5lcShpdGVtLCBjb250ZXh0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChuZWVkc1N0cmluZ0NvbXBhcmlzb24oaXRlbSwgYXQpKSB7Ci0JCQkJWFNTdHJpbmcgeHN0cjEgPSBuZXcgWFNTdHJpbmcoYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJaWYgKEZuQ29tcGFyZS5jb21wYXJlX3N0cmluZyhjb2xsYXRpb25VUkksIHhzdHIxLCBpdGVtU3RyLAotCQkJCQkJY29udGV4dCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNEdXJhdGlvbihBbnlBdG9taWNUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiAmJiBpdGVtIGluc3RhbmNlb2YgWFNEdXJhdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNCb29sZWFuKEFueUF0b21pY1R5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gJiYgaXRlbSBpbnN0YW5jZW9mIFhTQm9vbGVhbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNOdW1lcmljKEFueUF0b21pY1R5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSAmJiBpdGVtIGluc3RhbmNlb2YgTnVtZXJpY1R5cGU7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIG5lZWRzU3RyaW5nQ29tcGFyaXNvbihBbnlBdG9taWNUeXBlIGl0ZW0sCi0JCQlBbnlUeXBlIGF0KSB7Ci0JCUFueVR5cGUgYW55SXRlbSA9IChBbnlUeXBlKSBpdGVtOwotCQlyZXR1cm4gbmVlZHNTdHJpbmdDb21wYXJpc29uKGFueUl0ZW0sIGF0KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNEdXJhdGlvbihBbnlUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiAmJiBpdGVtIGluc3RhbmNlb2YgWFNEdXJhdGlvbjsKLQl9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRGF0ZShBbnlUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJcmV0dXJuIGF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSAmJiBpdGVtIGluc3RhbmNlb2YgWFNEYXRlVGltZTsKLQl9Ci0JCi0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNCb29sZWFuKEFueVR5cGUgY21wdHlwZSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gJiYgY21wdHlwZSBpbnN0YW5jZW9mIFhTQm9vbGVhbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNOdW1lcmljKEFueVR5cGUgaXRlbSwgQW55VHlwZSBhdCkgewotCQlyZXR1cm4gYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSAmJiBpdGVtIGluc3RhbmNlb2YgTnVtZXJpY1R5cGU7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIG5lZWRzU3RyaW5nQ29tcGFyaXNvbihBbnlUeXBlIGl0ZW0sIEFueVR5cGUgYXQpIHsKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJaWYgKGF0IGluc3RhbmNlb2YgWFNGbG9hdCkgewotCQkJCVhTRmxvYXQgZiA9IChYU0Zsb2F0KSBhdDsKLQkJCQlpZiAoZi5uYW4oKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCWlmIChhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSB7Ci0JCQkJWFNEb3VibGUgZCA9IChYU0RvdWJsZSkgYXQ7Ci0JCQkJaWYgKGQubmFuKCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNTdHJpbmcpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RSZWdFeEZ1bmN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0UmVnRXhGdW5jdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzEyYzlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RSZWdFeEZ1bmN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI2Mjc2NSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVnRXhGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyB2YWxpZGZsYWdzID0gInNtaXgiOwotCi0JcHVibGljIEFic3RyYWN0UmVnRXhGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgYXJpdHkpOwotCX0KLQkKLQlwdWJsaWMgQWJzdHJhY3RSZWdFeEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBtaW5fYXJpdHksIGludCBtYXhfYXJpdHkpIHsKLQkJc3VwZXIobmFtZSwgbWluX2FyaXR5LCBtYXhfYXJpdHkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgcGF0dGVybiwgU3RyaW5nIGZsYWdzLCBTdHJpbmcgc3JjKSB7Ci0JCWJvb2xlYW4gZm5kID0gZmFsc2U7Ci0JCWlmIChwYXR0ZXJuLmluZGV4T2YoIi1bIikgIT0gLTEpIHsKLQkJCXBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2VBbGwoIlxcLVxcWyIsICImJlteIik7Ci0JCX0KLQkJTWF0Y2hlciBtID0gY29tcGlsZUFuZEV4ZWN1dGUocGF0dGVybiwgZmxhZ3MsIHNyYyk7Ci0JCXdoaWxlIChtLmZpbmQoKSkgewotCQkJZm5kID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZm5kOwotCX0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIE1hdGNoZXIgcmVnZXgoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBmbGFncywgU3RyaW5nIHNyYykgewotCQlNYXRjaGVyIG1hdGNoZXIgPSBjb21waWxlQW5kRXhlY3V0ZShwYXR0ZXJuLCBmbGFncywgc3JjKTsKLQkJcmV0dXJuIG1hdGNoZXI7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIE1hdGNoZXIgY29tcGlsZUFuZEV4ZWN1dGUoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBmbGFncywgU3RyaW5nIHNyYykgewotCQlpbnQgZmxhZyA9IFBhdHRlcm4uVU5JWF9MSU5FUzsKLQkJaWYgKGZsYWdzICE9IG51bGwpIHsKLQkJCWlmIChmbGFncy5pbmRleE9mKCJtIikgPj0gMCkgewotCQkJCWZsYWcgPSBmbGFnIHwgUGF0dGVybi5NVUxUSUxJTkU7Ci0JCQl9Ci0JCQlpZiAoZmxhZ3MuaW5kZXhPZigicyIpID49IDApIHsKLQkJCQlmbGFnID0gZmxhZyB8IFBhdHRlcm4uRE9UQUxMOwotCQkJfQotCQkJaWYgKGZsYWdzLmluZGV4T2YoImkiKSA+PSAwKSB7Ci0JCQkJZmxhZyA9IGZsYWcgfCBQYXR0ZXJuLkNBU0VfSU5TRU5TSVRJVkU7Ci0JCQl9Ci0JCQkKLQkJCWlmIChmbGFncy5pbmRleE9mKCJ4IikgPj0gMCkgewotCQkJCWZsYWcgPSBmbGFnIHwgUGF0dGVybi5DT01NRU5UUzsKLQkJCX0KLQkJfQotCQkKLQkJUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKHBhdHRlcm4sIGZsYWcpOwotCQlyZXR1cm4gcC5tYXRjaGVyKHNyYyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Fic3RyYWN0VVJJRnVuY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RVUklGdW5jdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTBiNTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQWJzdHJhY3RVUklGdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gcmVuYW1lZCB0byBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MzE5IC0gZml4IFVURi04IGVzY2FwaW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVUklGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIENoYXJzZXQgVVRGXzggPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0JCi0Jc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIG5lZWRzX2VzY2FwZShieXRlIHgsIGJvb2xlYW4gZXNjYXBlX2RlbGltaXRlcnMsIGJvb2xlYW4gZXNjYXBlX3NwYWNlKSB7Ci0JCQotCQkvLyBUaGVzZSBhcmUgaWRlbnRpZmllZCBhcyAidW5yZXNlcnZlZCIgYnkgW1JGQyAzOTg2XTogCi0JCWlmICgnQScgPD0geCAmJiB4IDw9ICdaJykKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKCdhJyA8PSB4ICYmIHggPD0gJ3onKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoJzAnIDw9IHggJiYgeCA8PSAnOScpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCQotCQlzd2l0Y2ggKHgpIHsKLQkJLy8gVGhlc2UgYXJlIGlkZW50aWZpZWQgYXMgInVucmVzZXJ2ZWQiIGJ5IFtSRkMgMzk4Nl06IAotCQljYXNlICctJzoKLQkJY2FzZSAnXyc6Ci0JCWNhc2UgJy4nOgotCQljYXNlICd+JzoKLQkJCXJldHVybiBmYWxzZTsKLQkKLQkJLy8gVGhlc2UgYXJlIFVSSS9JUkkgZGVsaW1pdGVycyAJCi0JCWNhc2UgJygnOgotCQljYXNlICcpJzoKLQkJY2FzZSAnXCcnOgotCQljYXNlICcqJzoKLQkJY2FzZSAnISc6Ci0JCWNhc2UgJyMnOgotCQljYXNlICclJzoKLQkJY2FzZSAnOyc6Ci0JCWNhc2UgJy8nOgotCQljYXNlICc/JzoKLQkJY2FzZSAnOic6Ci0JCWNhc2UgJ0AnOgotCQljYXNlICcmJzoKLQkJY2FzZSAnPSc6Ci0JCWNhc2UgJysnOgotCQljYXNlICckJzoKLQkJY2FzZSAnLCc6Ci0JCWNhc2UgJ1snOgotCQljYXNlICddJzoKLQkJCXJldHVybiBlc2NhcGVfZGVsaW1pdGVyczsKLQotCQljYXNlICcgJzoKLQkJCXJldHVybiBlc2NhcGVfc3BhY2U7Ci0KLQkJCS8vIFRoZSByZXN0IHNob3VsZCBhbHdheXMgYmUgZXNjYXBlZDogPCA+ICIgc3BhY2UgfCBeIC0gYW5kIGFsbCB0aGUgVVRGLTggYnl0ZXMKLQkJZGVmYXVsdDoKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXBwbHkgdGhlIFVSSSBlc2NhcGluZyBydWxlcyB0byB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBoYXZlIHRoZSBVUkkgZXNjYXBpbmcgcnVsZXMgYXBwbGllZCB0byB0aGVtLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIFVSSSBlc2NhcGluZyBydWxlcyB0byB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZXNjYXBlX3VyaShDb2xsZWN0aW9uIGFyZ3MsIGJvb2xlYW4gZXNjYXBlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVzY2FwZV91cmkoYXJncywgZXNjYXBlLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiBBcHBseSB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzIHRvIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGhhdmUgdGhlIFVSSSBlc2NhcGluZyBydWxlcyBhcHBsaWVkIHRvIHRoZW0uCi0JICogQHBhcmFtIGVzY2FwZV9zcGFjZSBUT0RPCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJJIGVzY2FwaW5nIHJ1bGVzIHRvIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBlc2NhcGVfdXJpKENvbGxlY3Rpb24gYXJncywgYm9vbGVhbiBlc2NhcGVfZGVsaW1pdGVycywgYm9vbGVhbiBlc2NhcGVfc3BhY2UpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQkKLQkJSXRlcmF0b3IgYXJnaSA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKCIiKTsKLQkJfQotCQkJCQotCQlBbnlUeXBlIGFhdCA9IChBbnlUeXBlKSBhcmcxLml0ZW0oMCk7Ci0JCVN0cmluZyBzdHIgPSBhYXQuZ2V0U3RyaW5nVmFsdWUoKTsKLQotCQlCeXRlQnVmZmVyIGJ1ZmZlciA9IFVURl84LmVuY29kZShzdHIpOwotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyLmxpbWl0KCk7IGkrKykgewotCQkJYnl0ZSB4ID0gYnVmZmVyLmdldChpKTsKLQkKLQkJCWlmIChuZWVkc19lc2NhcGUoeCwgZXNjYXBlX2RlbGltaXRlcnMsIGVzY2FwZV9zcGFjZSkpIHsKLQkJCQlzYi5hcHBlbmQoIiUiKTsKLQkJCQlzYi5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyh4ICYgMHhGRikudG9VcHBlckNhc2UoKSk7Ci0JCQl9IGVsc2UKLQkJCQlzYi5hcHBlbmQoKGNoYXIpeCk7Ci0JCX0KLQkKLQkJcmV0dXJuIG5ldyBYU1N0cmluZyhzYi50b1N0cmluZygpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQkKLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQotCXB1YmxpYyBBYnN0cmFjdFVSSUZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlzdXBlcihuYW1lLCBhcml0eSk7Ci0JfQotCi0JcHVibGljIEFic3RyYWN0VVJJRnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IG1pbl9hcml0eSwgaW50IG1heF9hcml0eSkgewotCQlzdXBlcihuYW1lLCBtaW5fYXJpdHksIG1heF9hcml0eSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEVxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEVxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OGYzZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBFcS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGNvbXBhcmUgZm9yIGVxdWFsIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENtcEVxIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ21wRXEuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgYXJndW1lbnQgb2YgYW55IHR5cGUuCi0JICogQHBhcmFtIGNvbnRleHQgVE9ETwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24sIHRydWUvZmFsc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEd0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NtcEd0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZDA1MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBHdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGNvbXBhcmUgZm9yIGdyZWF0ZXIgdGhhbiBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ21wR3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDbXBHdAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IG9mIGFueSB0eXBlLgotCSAqIEBwYXJhbSBjb250ZXh0IFRPRE8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLCB0cnVlL2ZhbHNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGd0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBMdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9DbXBMdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWFhZWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vQ21wTHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotCi0vKioKLSAqIENsYXNzIGZvciBjb21wYXJlIGZvciBsZXNzIHRoYW4gb3BlcmF0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENtcEx0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ21wTHQuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgYXJndW1lbnQgb2YgYW55IHR5cGUuCi0JICogQHBhcmFtIGNvbnRleHQgVE9ETwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24sIHRydWUvZmFsc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NvbnN0cnVjdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NvbnN0cnVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzhmYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Db25zdHJ1Y3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnMjc0Nzg0IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmJvb2xlYW4gZGF0YSB0eXBlIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ29uc3RydWN0b3IgY2xhc3MgZm9yIGZ1bmN0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgQ3RyVHlwZSBfYXRvbWljX3R5cGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ29uc3RydWN0b3IgY2xhc3MuCi0JICogCi0JICogQHBhcmFtIGFhdAotCSAqICAgICAgICAgICAgaW5wdXQgb2YgYW55IGF0b21pYyB0eXBlLgotCSAqLwotCXB1YmxpYyBDb25zdHJ1Y3RvcihDdHJUeXBlIGFhdCkgewotCQlzdXBlcihuZXcgUU5hbWUoYWF0LnR5cGVfbmFtZSgpKSwgMSk7Ci0KLQkJX2F0b21pY190eXBlID0gYWF0OwotCX0KLQotCS8vIFhYWCBJTiBHRU5SQUwsIEkgVEhJVU5LIFdFIE5FRUQgVE8gUFVMTCBTQU5JVFkgQ0hFQ0tJTkcgT1VUU0lERSEKLQkvLyBQTFVTIEkgQU0gTk9UIEFUT01JWklORy9FVEMgRVRDIEhFUkUhISEgQkFEIENPREUKLQkvLyBCVUcgWFhYIEhBQ0sgREVBVEgKLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCS8vIHNhbml0eSBjaGVja3MKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcuc2l6ZSgpID4gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJLy8gZG8gaXQKLQkJcmV0dXJuIF9hdG9taWNfdHlwZS5jb25zdHJ1Y3RvcihhcmcpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Db25zdHJ1Y3RvckZMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NvbnN0cnVjdG9yRkwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjNTczYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0NvbnN0cnVjdG9yRkwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ29uc3RydWN0b3IgY2xhc3MgZm9yIHRoZSBmdW5jdGlvbnMgbGlicmFyeS4KLSAqLwotcHVibGljIGNsYXNzIENvbnN0cnVjdG9yRkwgZXh0ZW5kcyBGdW5jdGlvbkxpYnJhcnkgewotCi0JcHJpdmF0ZSBIYXNodGFibGUgX3R5cGVzOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENvbnN0cnVjdG9yRkwuCi0JICogCi0JICogQHBhcmFtIG5zCi0JICogICAgICAgICAgICBpbnB1dCBzdHJpbmcuCi0JICovCi0JcHVibGljIENvbnN0cnVjdG9yRkwoU3RyaW5nIG5zKSB7Ci0JCXN1cGVyKG5zKTsKLQotCQlfdHlwZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JfQotCi0JLyoqCi0JICogQWRkcyBhIHR5cGUgaW50byB0aGUgZnVuY3Rpb25zIGxpYnJhcnkuCi0JICogCi0JICogQHBhcmFtIGF0Ci0JICogICAgICAgICAgICBpbnB1dCBvZiBhbnkgYXRvbWljIHR5cGUuCi0JICovCi0JcHVibGljIHZvaWQgYWRkX3R5cGUoQ3RyVHlwZSBhdCkgewotCQlRTmFtZSBuYW1lID0gbmV3IFFOYW1lKGF0LnR5cGVfbmFtZSgpKTsKLQkJbmFtZS5zZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSgpKTsKLQotCQlfdHlwZXMucHV0KG5hbWUsIGF0KTsKLQotCQlhZGRfZnVuY3Rpb24obmV3IENvbnN0cnVjdG9yKGF0KSk7Ci0JfQotCi0JLyoqCi0JICogQWRkcyBhIHR5cGUgaW50byB0aGUgZnVuY3Rpb25zIGxpYnJhcnkgYXMgYW4gYWJzdHJhY3QgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIGlucHV0IG9mIGFueSBhdG9taWMgdHlwZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRfYWJzdHJhY3RfdHlwZShTdHJpbmcgbG9jYWxOYW1lLCBBbnlBdG9taWNUeXBlIGF0KSB7Ci0JCVFOYW1lIG5hbWUgPSBuZXcgUU5hbWUobG9jYWxOYW1lKTsKLQkJbmFtZS5zZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSgpKTsKLQotCQlfdHlwZXMucHV0KG5hbWUsIGF0KTsKLQl9Ci0JCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgUU5hbWUgaW50ZXJmYWNlLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICB2YXJpYWJsZSBuYW1lLgotCSAqIEByZXR1cm4gdHlwZSBvZiBpbnB1dCB2YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgQW55QXRvbWljVHlwZSBhdG9taWNfdHlwZShRTmFtZSBuYW1lKSB7Ci0JCXJldHVybiAoQW55QXRvbWljVHlwZSkgX3R5cGVzLmdldChuYW1lKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWJzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Y2FmNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFicy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTEgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0OwotCi0vKioKLSAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgbmVnYXRpdmUgcmV0dXJucyAtJGFyZwotICogb3RoZXJ3aXNlIHJldHVybnMgJGFyZy4gSWYgdHlwZSBvZiAkYXJnIGlzIG9uZSBvZiB0aGUgZm91ciBudW1lcmljIHR5cGVzCi0gKiB4czpmbG9hdCwgeHM6ZG91YmxlLCB4czpkZWNpbWFsIG9yIHhzOmludGVnZXIgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUKLSAqIHNhbWUgYXMgdGhlIHR5cGUgb2YgJGFyZy4gSWYgdGhlIHR5cGUgb2YgJGFyZyBpcyBhIHR5cGUgZGVyaXZlZCBmcm9tIG9uZSBvZgotICogdGhlIG51bWVyaWMgdHlwZXMsIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gaXMgdGhlIGJhc2UgbnVtZXJpYyB0eXBlLiBGb3IKLSAqIHhzOmZsb2F0IGFuZCB4czpkb3VibGUgYXJndW1lbnRzLCBpZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUgemVybyAoKzApIG9yCi0gKiBuZWdhdGl2ZSB6ZXJvICgtMCksIHRoZW4gcG9zaXRpdmUgemVybyAoKzApIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMKLSAqIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBpbmZpbml0eSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuQWJzIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkFicy4KLQkgKi8KLQlwdWJsaWMgRm5BYnMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYWJzIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQkJLy8gMSBhcmd1bWVudCBvbmx5IQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJcmV0dXJuIGZuX2Ficyhhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogQWJzb2x1dGUgdmFsdWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjphYnMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fYWJzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIHNhbml0eSBjaGV4Ci0JCU51bWVyaWNUeXBlIG50ID0gZ2V0X3NpbmdsZV9udW1lcmljX2FyZyhhcmcpOwotCi0JCS8vIGVtcHR5IGFyZwotCQlpZiAobnQgPT0gbnVsbCkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCQotCQlpZiAobnQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgewotCQkJWFNEb3VibGUgZGF0ID0gKFhTRG91YmxlKSBudDsKLQkJCWlmIChkYXQuemVybygpIHx8IGRhdC5uZWdhdGl2ZVplcm8oKSkgewotCQkJCXJldHVybiBuZXcgWFNEb3VibGUoIjAiKTsKLQkJCX0KLQkJCWlmIChkYXQuaW5maW5pdGUoKSkgewotCQkJCXJldHVybiBuZXcgWFNEb3VibGUoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKTsKLQkJCX0KLQkJfQotCi0JCWlmIChudCBpbnN0YW5jZW9mIFhTRmxvYXQpIHsKLQkJCVhTRmxvYXQgZGF0ID0gKFhTRmxvYXQpIG50OwotCQkJaWYgKGRhdC56ZXJvKCkgfHwgZGF0Lm5lZ2F0aXZlWmVybygpKSB7Ci0JCQkJcmV0dXJuIG5ldyBYU0Zsb2F0KChuZXcgRmxvYXQoMCkpLmZsb2F0VmFsdWUoKSk7Ci0JCQl9Ci0JCQlpZiAoZGF0LmluZmluaXRlKCkpIHsKLQkJCQlyZXR1cm4gbmV3IFhTRmxvYXQoRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkpOwotCQkJfQotCQl9Ci0KLQotCQlyZXR1cm4gbnQuYWJzKCk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIG51bWVyaWMgdmFsdWUgZnJvbSBleHByZXNzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGV4cHJlc3Npb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0aW5nIG51bWVyaWMgdHlwZSBmcm9tIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBOdW1lcmljVHlwZSBnZXRfc2luZ2xlX251bWVyaWNfYXJnKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgc2l6ZSA9IGFyZy5zaXplKCk7Ci0JCWlmIChzaXplID4gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJaWYgKHNpemUgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgYXJnLml0ZW0oMCk7Ci0KLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJCQkKLQkJcmV0dXJuIChOdW1lcmljVHlwZSkgYXQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRpbWVUb1RpbWVab25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRpbWVUb1RpbWVab25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YzQxNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdERhdGVUaW1lVG9UaW1lWm9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLlhNTEdyZWdvcmlhbkNhbGVuZGFyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkNhbGVuZGFyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotCi0vKioKLSAqIEFkanVzdHMgYW4geHM6ZGF0ZVRpbWUgdmFsdWUgdG8gYSBzcGVjaWZpYyB0aW1lem9uZSwgb3IgdG8gbm8gdGltZXpvbmUgYXQKLSAqIGFsbC4gSWYgPGNvZGU+JHRpbWV6b25lPC9jb2RlPiBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGVUaW1lPC9jb2RlPiB3aXRob3V0IHRpbWV6b25lLiBPdGhlcndpc2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGVUaW1lPC9jb2RlPiB3aXRoIGEgdGltZXpvbmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkFkanVzdERhdGVUaW1lVG9UaW1lWm9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtaW5EdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCB0cnVlKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtYXhEdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCBmYWxzZSk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5BZGp1c3REYXRlVGltZVRvVGltZVpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYWRqdXN0LWRhdGVUaW1lLXRvLXRpbWV6b25lIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQkJcmV0dXJuIGFkanVzdGRhdGVUaW1lKGFyZ3MsIGVjLmdldER5bmFtaWNDb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiB1c2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgZm46ZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYWRqdXN0ZGF0ZVRpbWUoQ29sbGVjdGlvbiBhcmdzLAotCQkJb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRBcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gbnVsbDsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJfQotCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFyZzEuaXRlbSgwKTsKLQkJWFNEYXlUaW1lRHVyYXRpb24gdGltZXpvbmUgPSBudWxsOwotCQkKLQkJaWYgKGFyZzIgIT0gbnVsbCAmJiBhcmcyLmVtcHR5KCkpIHsKLQkJCWlmIChkYXRlVGltZS50aW1lem9uZWQoKSkgewotCQkJCUNhbGVuZGFyVHlwZSBsb2NhbGl6ZWQgPSBuZXcgWFNEYXRlVGltZShkYXRlVGltZS5jYWxlbmRhcigpLCBudWxsKTsKLQkJCQlyZXR1cm4gbG9jYWxpemVkOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gYXJnMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChhcmcyID09IG51bGwpIHsKLQkJCUNhbGVuZGFyVHlwZSBsb2NhbGl6ZWQgPSBuZXcgWFNEYXRlVGltZShkYXRlVGltZS5ub3JtYWxpemVDYWxlbmRhcihkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKSwgbnVsbCk7Ci0JCQlyZXR1cm4gbG9jYWxpemVkOwotCQl9Ci0KLQkJdGltZXpvbmUgPSAoWFNEYXlUaW1lRHVyYXRpb24pIGFyZzIuaXRlbSgwKTsKLQkJaWYgKHRpbWV6b25lLmx0KG1pbkR1cmF0aW9uLCBkeW5hbWljQ29udGV4dCkgfHwgdGltZXpvbmUuZ3QobWF4RHVyYXRpb24sIGR5bmFtaWNDb250ZXh0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0JCQotCQlpZiAoZGF0ZVRpbWUudHooKSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgdGltZXpvbmUpOwotCQl9Ci0JCQotCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWxlbmRhciA9IF9kYXRhdHlwZUZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWRhdGVUaW1lLm5vcm1hbGl6ZUNhbGVuZGFyKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpKTsKLQkJCi0JCUR1cmF0aW9uIGR1cmF0aW9uID0gX2RhdGF0eXBlRmFjdG9yeS5uZXdEdXJhdGlvbih0aW1lem9uZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJeG1sQ2FsZW5kYXIuYWRkKGR1cmF0aW9uKTsKLQotCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoeG1sQ2FsZW5kYXIudG9HcmVnb3JpYW5DYWxlbmRhcigpLCB0aW1lem9uZSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRBcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdERhdGVUb1RpbWVab25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRvVGltZVpvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ5N2I0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0RGF0ZVRvVGltZVpvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbi4gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5YTUxHcmVnb3JpYW5DYWxlbmRhcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXlUaW1lRHVyYXRpb247Ci0KLS8qKgotICogQWRqdXN0cyBhbiB4czpkYXRlIHZhbHVlIHRvIGEgc3BlY2lmaWMgdGltZXpvbmUsIG9yIHRvIG5vIHRpbWV6b25lIGF0Ci0gKiBhbGwuIElmIDxjb2RlPiR0aW1lem9uZTwvY29kZT4gaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIGFuCi0gKiA8Y29kZT54czpkYXRlPC9jb2RlPiB3aXRob3V0IHRpbWV6b25lLiBPdGhlcndpc2UsIHJldHVybnMgYW4KLSAqIDxjb2RlPnhzOmRhdGU8L2NvZGU+IHdpdGggYSB0aW1lem9uZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQWRqdXN0RGF0ZVRvVGltZVpvbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNEYXlUaW1lRHVyYXRpb24gbWluRHVyYXRpb24gPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oCi0JCQkwLCAxNCwgMCwgMCwgdHJ1ZSk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgWFNEYXlUaW1lRHVyYXRpb24gbWF4RHVyYXRpb24gPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oCi0JCQkwLCAxNCwgMCwgMCwgZmFsc2UpOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuQWRqdXN0RGF0ZVRvVGltZVpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYWRqdXN0LWRhdGUtdG8tdGltZXpvbmUiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQlyZXR1cm4gYWRqdXN0RGF0ZShhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgZnVuY3Rpb24gdXNpbmcgdGhlIGFyZ3VtZW50cyBwYXNzZWQuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIGZuOmRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGFkanVzdERhdGUoQ29sbGVjdGlvbiBhcmdzLAotCQkJRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZEFyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCX0KLQkJCi0JCVhTRGF0ZSBkYXRlID0gKFhTRGF0ZSkgYXJnMS5pdGVtKDApOwotCQlYU0RheVRpbWVEdXJhdGlvbiB0aW1lem9uZSA9IG51bGw7Ci0KLQkJaWYgKGFyZzIuZW1wdHkoKSkgewotCQkJaWYgKGRhdGUudGltZXpvbmVkKCkpIHsKLQkJCQlYU0RhdGUgbG9jYWxpemVkID0gbmV3IFhTRGF0ZShkYXRlLmNhbGVuZGFyKCksIG51bGwpOwotCQkJCXJldHVybiBsb2NhbGl6ZWQ7Ci0JCQl9Ci0JCQlyZXR1cm4gYXJnMTsKLQkJfQotCQkKLQkJdGltZXpvbmUgPSAoWFNEYXlUaW1lRHVyYXRpb24pIGFyZzIuaXRlbSgwKTsKLQkJaWYgKHRpbWV6b25lLmx0KG1pbkR1cmF0aW9uLCBkYykgfHwgdGltZXpvbmUuZ3QobWF4RHVyYXRpb24sIGRjKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUaW1lem9uZSgpOwotCQl9Ci0JCQotCQlpZiAoZGF0ZS50eigpID09IG51bGwpIHsKLQkJCXJldHVybiBuZXcgWFNEYXRlKGRhdGUuY2FsZW5kYXIoKSwgdGltZXpvbmUpOwotCQl9Ci0JCQotCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWxlbmRhciA9IF9kYXRhdHlwZUZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWRhdGUubm9ybWFsaXplQ2FsZW5kYXIoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpKTsKLQkJCi0JCUR1cmF0aW9uIGR1cmF0aW9uID0gX2RhdGF0eXBlRmFjdG9yeS5uZXdEdXJhdGlvbih0aW1lem9uZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJeG1sQ2FsZW5kYXIuYWRkKGR1cmF0aW9uKTsKLQkJCi0JCXJldHVybiBuZXcgWFNEYXRlKHhtbENhbGVuZGFyLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgdGltZXpvbmUpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkQXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkFkanVzdFRpbWVUb1RpbWVab25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0VGltZVRvVGltZVpvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4OTdlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQWRqdXN0VGltZVRvVGltZVpvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbi4gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5YTUxHcmVnb3JpYW5DYWxlbmRhcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1RpbWU7Ci0KLS8qKgotICogQWRqdXN0cyBhbiB4czpkYXRlVGltZSB2YWx1ZSB0byBhIHNwZWNpZmljIHRpbWV6b25lLCBvciB0byBubyB0aW1lem9uZSBhdAotICogYWxsLiBJZiA8Y29kZT4kdGltZXpvbmU8L2NvZGU+IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZVRpbWU8L2NvZGU+IHdpdGhvdXQgdGltZXpvbmUuIE90aGVyd2lzZSwgcmV0dXJucyBhbgotICogPGNvZGU+eHM6ZGF0ZVRpbWU8L2NvZGU+IHdpdGggYSB0aW1lem9uZS4KLSAqLwotcHVibGljIGNsYXNzIEZuQWRqdXN0VGltZVRvVGltZVpvbmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtaW5EdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCB0cnVlKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBYU0RheVRpbWVEdXJhdGlvbiBtYXhEdXJhdGlvbiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigKLQkJCTAsIDE0LCAwLCAwLCBmYWxzZSk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5BZGp1c3RUaW1lVG9UaW1lWm9uZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJhZGp1c3QtdGltZS10by10aW1lem9uZSIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB7Ci0JCXJldHVybiBhZGp1c3RUaW1lKGFyZ3MsIGVjLmdldER5bmFtaWNDb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBmdW5jdGlvbiB1c2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgZm46ZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYWRqdXN0VGltZShDb2xsZWN0aW9uIGFyZ3MsCi0JCQlEeW5hbWljQ29udGV4dCBkYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkQXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJaWYgKGFyZ2l0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJfQotCQlYU1RpbWUgdGltZSA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQkJWFNEYXlUaW1lRHVyYXRpb24gdGltZXpvbmUgPSBudWxsOwotCQkKLQkJaWYgKGFyZzIuZW1wdHkoKSkgewotCQkJaWYgKHRpbWUudGltZXpvbmVkKCkpIHsKLQkJCQlYU1RpbWUgbG9jYWxpemVkID0gbmV3IFhTVGltZSh0aW1lLmNhbGVuZGFyKCksIG51bGwpOwotCQkJCXJldHVybiBsb2NhbGl6ZWQ7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBhcmcxOwotCQkJfQotCQl9Ci0KLQotCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWxlbmRhciA9IG51bGw7Ci0JCQotCQlpZiAodGltZS50eigpICE9IG51bGwpIHsKLQkJCXhtbENhbGVuZGFyID0gX2RhdGF0eXBlRmFjdG9yeS5uZXdYTUxHcmVnb3JpYW5DYWxlbmRhcigoR3JlZ29yaWFuQ2FsZW5kYXIpdGltZS5ub3JtYWxpemVDYWxlbmRhcih0aW1lLmNhbGVuZGFyKCksIHRpbWUudHooKSkpOwotCQl9IGVsc2UgewotCQkJeG1sQ2FsZW5kYXIgPSBfZGF0YXR5cGVGYWN0b3J5Lm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyVGltZSh0aW1lLmhvdXIoKSwgdGltZS5taW51dGUoKSwgKGludCl0aW1lLnNlY29uZCgpLCAwKTsKLQkJfQotCi0JCXRpbWV6b25lID0gKFhTRGF5VGltZUR1cmF0aW9uKSBhcmcyLmZpcnN0KCk7Ci0JCWlmICh0aW1lem9uZS5sdChtaW5EdXJhdGlvbiwgZGMpIHx8IHRpbWV6b25lLmd0KG1heER1cmF0aW9uLCBkYykpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVGltZXpvbmUoKTsKLQkJfQotCQkKLQkJaWYgKHRpbWUudHooKSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbmV3IFhTVGltZSh0aW1lLmNhbGVuZGFyKCksIHRpbWV6b25lKTsKLQkJfQotCQkKLQkJRHVyYXRpb24gZHVyYXRpb24gPSBfZGF0YXR5cGVGYWN0b3J5Lm5ld0R1cmF0aW9uKHRpbWV6b25lLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl4bWxDYWxlbmRhci5hZGQoZHVyYXRpb24pOwotCi0JCXJldHVybiBuZXcgWFNUaW1lKHhtbENhbGVuZGFyLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgdGltZXpvbmUpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkQXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF5VGltZUR1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkF2Zy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkF2Zy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmRiMmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5BdmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMgCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI2Mjc2NSAtIGZpeCBpc3N1ZSB3aXRoIGNhc3RpbmcgaXRlbXMgdG8gWFNEb3VibGUgY2FzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgdG8gY2FzdCB0byBOdW1lcmljIHNvIHRoYXQgZXZhbHVhdGlvbnMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZvcm1hdHRpbmcgb2NjdXIgY29ycmVjdGx5LgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBmaXggZm46YXZnIGNhc3RpbmcgaXNzdWVzIGFuZCBkaXZpZGUgYnkgemVybyBpc3N1ZXMuCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBmaXggcHJvbW90aW9uIHJ1bGVzIGZvciBmbjphdmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU2NhbGFyVHlwZVByb21vdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXI7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgYXZlcmFnZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBpbnB1dCBzZXF1ZW5jZSAkYXJnLCB0aGF0IGlzLCB0aGUKLSAqIHN1bSBvZiB0aGUgdmFsdWVzIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiB2YWx1ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkF2ZyBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5BdmcuCi0JICovCi0JcHVibGljIEZuQXZnKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImF2ZyIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBhdmcoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQXZlcmFnZSB2YWx1ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjphdmcgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYXZnKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKWFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0KLQkJaW50IGVsZW1zID0gMDsKLQotCQlNYXRoUGx1cyB0b3RhbCA9IG51bGw7Ci0KLQkJVHlwZVByb21vdGVyIHRwID0gbmV3IFNjYWxhclR5cGVQcm9tb3RlcigpOwotCQl0cC5jb25zaWRlclNlcXVlbmNlKGFyZyk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gYXJnLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJKytlbGVtczsKLQkJCUFueUF0b21pY1R5cGUgY29udiA9IHRwLnByb21vdGUoKEFueVR5cGUpIGkubmV4dCgpKTsKLQkJCQotCQkJaWYgKGNvbnYgaW5zdGFuY2VvZiBYU0RvdWJsZSAmJiAoKFhTRG91YmxlKWNvbnYpLm5hbigpIHx8IGNvbnYgaW5zdGFuY2VvZiBYU0Zsb2F0ICYmICgoWFNGbG9hdCljb252KS5uYW4oKSkgewotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh0cC5wcm9tb3RlKG5ldyBYU0Zsb2F0KEZsb2F0Lk5hTikpKTsKLQkJCX0KLQkJCWlmICh0b3RhbCA9PSBudWxsKSB7Ci0JCQkJdG90YWwgPSAoTWF0aFBsdXMpY29udjsgCi0JCQl9IGVsc2UgewotCQkJCXRvdGFsID0gKE1hdGhQbHVzKXRvdGFsLnBsdXMoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoY29udikpLmZpcnN0KCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoISh0b3RhbCBpbnN0YW5jZW9mIE1hdGhEaXYpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlyZXR1cm4gKChNYXRoRGl2KXRvdGFsKS5kaXYoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoZWxlbXMpKSkpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0UmVzdWx0VHlwZSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gc3VwZXIuZ2V0UmVzdWx0VHlwZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5CYXNlVXJpLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQmFzZVVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjI4ZTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5CYXNlVXJpLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZzI3NDcyNSAtIGltcGxlbWVudGF0aW9uIG9mIGJhc2UtdXJpIGZ1bmN0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYmFzZS11cmkgcHJvcGVydHkgZm9yICRhcmcgYXMgZGVmaW5lZCBieSB0aGUKLSAqIGFjY2Vzc29yIGZ1bmN0aW9uIGRtOmJhc2UtdXJpKCkgZm9yIHRoYXQga2luZCBvZiBub2RlIGluIFNlY3Rpb24gNS4xIGJhc2UtdXJpCi0gKiBBY2Nlc3NvciBvZiB0aGUgc3BlY2lmaWNhdGlvbi4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBlbXB0eQotICogc2VxdWVuY2UgaXMgcmV0dXJuZWQuIERvY3VtZW50LCBlbGVtZW50IGFuZCBwcm9jZXNzaW5nLWluc3RydWN0aW9uIG5vZGVzIGhhdmUKLSAqIGEgYmFzZS11cmkgcHJvcGVydHkgd2hpY2ggbWF5IGJlIGVtcHR5LiBUaGUgYmFzZS11cmkgcHJvcGVydHkgb2YgYWxsIG90aGVyCi0gKiBub2RlIHR5cGVzIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gVGhlIHZhbHVlIG9mIHRoZSBiYXNlLXVyaSBwcm9wZXJ0eSBpcwotICogcmV0dXJuZWQgaWYgaXQgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuIE90aGVyd2lzZSwgaWYgdGhlIG5vZGUgaGFzIGEgcGFyZW50LAotICogdGhlIHZhbHVlIG9mIGRtOmJhc2UtdXJpKCkgYXBwbGllZCB0byBpdHMgcGFyZW50IGlzIHJldHVybmVkLCByZWN1cnNpdmVseS4gSWYKLSAqIHRoZSBub2RlIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQsIG9yIGlmIHRoZSByZWN1cnNpdmUgYXNjZW50IHVwIHRoZSBhbmNlc3RvcgotICogY2hhaW4gZW5jb3VudGVycyBhIG5vZGUgd2hvc2UgYmFzZS11cmkgcHJvcGVydHkgaXMgZW1wdHkgYW5kIGl0IGRvZXMgbm90IGhhdmUKLSAqIGEgcGFyZW50LCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkJhc2VVcmkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5CYXNlVXJpLgotCSAqLwotCXB1YmxpYyBGbkJhc2VVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiYmFzZS11cmkiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBiYXNlX3VyaShhcmdzLCBlYyk7Ci0JfQotCi0JLyoqCi0JICogQmFzZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZF9jb250ZXh0Ci0JICogCQkJICBEeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46YmFzZS11cmkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgYmFzZV91cmkoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgCi0JICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IG51bGw7Ci0JCQotCQlpZiAoY2FyZ3Muc2l6ZSgpID09IDApIHsKLQkJICAvLyBzdXBwb3J0IGZvciBhcml0eSAwCi0JCSAgLy8gZ2V0IGJhc2UtdXJpIGZyb20gdGhlIGNvbnRleHQgaXRlbS4KLQkJICBJdGVtIGNvbnRleHRJdGVtID0gZWMuZ2V0Q29udGV4dEl0ZW0oKTsKLQkJICBpZiAoY29udGV4dEl0ZW0gIT0gbnVsbCkgewotCQkJcnMgPSBnZXRCYXNlVXJpKGNvbnRleHRJdGVtKTsKLQkJICB9Ci0JCSAgZWxzZSB7Ci0JCSAgICB0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkgIH0KLQkJfQotCQllbHNlIGlmIChjYXJncy5zaXplKCkgPT0gMSkgewotCSAgICAgIC8vIHN1cHBvcnQgZm9yIGFyaXR5IDEKLQkJICBSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJICBJdGVtIGF0dCA9IGFyZzEuZW1wdHkoKSA/IG51bGwgOiBhcmcxLmZpcnN0KCk7Ci0KLQkJICBycyA9IGdldEJhc2VVcmkoYXR0KTsKLQkJfQotCQllbHNlIHsKLQkJICAvLyBhcml0eSBvdGhlciB0aGFuIDAgb3IgMSBpcyBub3QgYWxsb3dlZAotCQkgIHRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7CQotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCS8qCi0JICogSGVscGVyIGZ1bmN0aW9uIGZvciBiYXNlLXVyaSBzdXBwb3J0Ci0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBnZXRCYXNlVXJpKEl0ZW0gYXR0KSB7Ci0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJWFNBbnlVUkkgYmFzZVVyaSA9IG51bGw7Ci0JCSAgLy8gZGVwZW5kaW5nIG9uIHRoZSBub2RlIHR5cGUsIHdlIGdldCB0aGUgYmFzZS11cmkgZm9yIHRoZSBub2RlLgotCQkgIC8vIGlmIGJhc2UtdXJpIHByb3BlcnR5IGluIERPTSBpcyBudWxsLCB3ZSBzZXQgdGhlIGJhc2UtdXJpIGFzIHN0cmluZyAibnVsbCIuIFRoaXMKLQkJICAvLyBhdm9pZHMgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiB3aGlsZSBjb21wYXJpbmcgeHM6YW55VVJJIHZhbHVlcy4KLQkJCi0JCSAgaWYgKGF0dCBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQkgIE5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGF0dDsKLQkJCSAgTm9kZSBkb21Ob2RlID0gbm9kZS5ub2RlX3ZhbHVlKCk7Ci0JCQkgIFN0cmluZyBidXJpID0gZG9tTm9kZS5nZXRCYXNlVVJJKCk7Ci0JCQkgIGlmIChidXJpICE9IG51bGwpIHsKLQkJCQkgIGJhc2VVcmkgPSBuZXcgWFNBbnlVUkkoYnVyaSk7Ci0JCQkgIH0gZWxzZSB7Ci0JCQkJICBiYXNlVXJpID0gbmV3IFhTQW55VVJJKCJudWxsIik7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgCSAgICAgICAgCi0JICAgICAgaWYgKGJhc2VVcmkgIT0gbnVsbCkgewotCSAgICAgICAgcnMuYWRkKGJhc2VVcmkpOwkKLQkgICAgICB9Ci0JICAgICAgCi0JICAgICAgcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkJvb2xlYW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Cb29sZWFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMWY4ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkJvb2xlYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyNjI3NjUgLSB1c2UgY29ycmVjdCAnZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUnCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXggY2hlY2tpbmcgb2YgZGF0YSB0eXBlcy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5DYWxlbmRhclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWM7Ci0KLS8qKgotICogQ29tcHV0ZXMgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIG9mIHRoZSBzZXF1ZW5jZSAkYXJnLiBJZiAkYXJnIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgZmFsc2UuIElmICRhcmcgY29udGFpbnMgYSBzaW5nbGUgYXRvbWljIHZhbHVlLCB0aGVuCi0gKiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBpZiAkYXJnIGlzOiAtIFRoZSBzaW5nbGV0b24geHM6Ym9vbGVhbiB2YWx1ZQotICogZmFsc2UuIC0gVGhlIHNpbmdsZXRvbiB2YWx1ZSAiIiAoemVyby1sZW5ndGggc3RyaW5nKSBvZiB0eXBlIHhzOnN0cmluZyBvcgotICogeGR0OnVudHlwZWRBdG9taWMuIC0gQSBzaW5nbGV0b24gbnVtZXJpYyB2YWx1ZSB0aGF0IGlzIG51bWVyaWNhbGx5IGVxdWFsIHRvCi0gKiB6ZXJvLiAtIFRoZSBzaW5nbGV0b24geHM6ZmxvYXQgb3IgeHM6ZG91YmxlIHZhbHVlIE5hTi4gSW4gYWxsIG90aGVyIGNhc2VzLAotICogcmV0dXJucyB0cnVlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Cb29sZWFuIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkJvb2xlYW4uCi0JICovCi0JcHVibGljIEZuQm9vbGVhbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJib29sZWFuIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbi8qPFJlc3VsdFNlcXVlbmNlPiovIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhmbl9ib29sZWFuKGFyZ3VtZW50KSk7Ci0JfQotCi0JLyoqCi0JICogQm9vbGVhbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Ym9vbGVhbiBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IgCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0Jvb2xlYW4gZm5fYm9vbGVhbihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCi0JCUl0ZW0gYXQgPSBhcmcuaXRlbSgwKTsKLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCQkKLQkJaWYgKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpCi0JCQlyZXR1cm4gWFNCb29sZWFuLlRSVUU7Ci0JCQotCQlpZiAoYXJnLnNpemUoKSA+IDEpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCS8vIFhYWCA/PwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKQotCQkJcmV0dXJuIFhTQm9vbGVhbi5UUlVFOwotCi0JCS8vIG9rIHdlIGdvdCAxIHNpbmdsZSBhdG9taWMgdHlwZSBlbGVtZW50Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNCb29sZWFuKSB7Ci0JCQlpZiAoISgoWFNCb29sZWFuKSBhdCkudmFsdWUoKSkKLQkJCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCQl9Ci0KLQkJaWYgKChhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSB8fCAoYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpKSB7Ci0JCQlpZiAoKChBbnlUeXBlKWF0KS5nZXRTdHJpbmdWYWx1ZSgpLmVxdWFscygiIikpCi0JCQkJcmV0dXJuIFhTQm9vbGVhbi5GQUxTRTsKLQkJfQotCi0JCWlmIChhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSB7Ci0JCQlpZiAoKChOdW1lcmljVHlwZSkgYXQpLnplcm8oKSkKLQkJCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCQl9Ci0KLQkJaWYgKChhdCBpbnN0YW5jZW9mIFhTRmxvYXQpICYmICgoKFhTRmxvYXQpIGF0KS5uYW4oKSkpCi0JCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCi0JCWlmICgoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkgJiYgKCgoWFNEb3VibGUpIGF0KS5uYW4oKSkpCi0JCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCQkKLQotCQlyZXR1cm4gWFNCb29sZWFuLlRSVUU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ2VpbGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNlaWxpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiZjkyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ2VpbGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc21hbGxlc3QgKGNsb3Nlc3QgdG8gbmVnYXRpdmUgaW5maW5pdHkpIG51bWJlciB3aXRoIG5vIGZyYWN0aW9uYWwKLSAqIHBhcnQgdGhhdCBpcyBub3QgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiAkYXJnLiBJZiB0eXBlIG9mICRhcmcgaXMgb25lIG9mIHRoZQotICogZm91ciBudW1lcmljIHR5cGVzIHhzOmZsb2F0LCB4czpkb3VibGUsIHhzOmRlY2ltYWwgb3IgeHM6aW50ZWdlciB0aGUgdHlwZSBvZgotICogdGhlIHJldHVybiBpcyB0aGUgc2FtZSBhcyB0aGUgdHlwZSBvZiAkYXJnLiBJZiB0aGUgdHlwZSBvZiAkYXJnIGlzIGEgdHlwZQotICogZGVyaXZlZCBmcm9tIG9uZSBvZiB0aGUgbnVtZXJpYyB0eXBlcywgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUgYmFzZQotICogbnVtZXJpYyB0eXBlLiBGb3IgeHM6ZmxvYXQgYW5kIHhzOmRvdWJsZSBhcmd1bWVudHMsIGlmIHRoZSBhcmd1bWVudCBpcwotICogcG9zaXRpdmUgemVybyAoKzApLCB0aGVuIHBvc2l0aXZlIHplcm8gKCswKSBpcyByZXR1cm5lZC4gSWYgdGhlIGFyZ3VtZW50IGlzCi0gKiBuZWdhdGl2ZSB6ZXJvICgtMCksIHRoZW4gbmVnYXRpdmUgemVybyAoLTApIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMKLSAqIGxlc3MgdGhhbiB6ZXJvICgwKSwgbmVnYXRpdmUgemVybyAoLTApIGlzIHJldHVybmVkLgotICovCi1wdWJsaWMgY2xhc3MgRm5DZWlsaW5nIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNlaWxpbmcuCi0JICovCi0JcHVibGljIEZuQ2VpbGluZygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjZWlsaW5nIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gMSBhcmd1bWVudCBvbmx5IQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJcmV0dXJuIGZuX2NlaWxpbmcoYXJndW1lbnQpOwotCX0KLQotCS8qKgotCSAqIENlaWxpbmcgdmFsdWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjZWlsaW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX2NlaWxpbmcoUmVzdWx0U2VxdWVuY2UgYXJnKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJTnVtZXJpY1R5cGUgbnQgPSBGbkFicy5nZXRfc2luZ2xlX251bWVyaWNfYXJnKGFyZyk7Ci0KLQkJLy8gZW1wdHkgYXJnCi0JCWlmIChudCA9PSBudWxsKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlyZXR1cm4gbnQuY2VpbGluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRFcXVhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvZGVwb2ludEVxdWFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMmNhOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvZGVwb2ludEVxdWFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuQ29sbGF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiAKLSAqIDxwPgotICogU3RyaW5nIGNvbXBhcmlzb24gZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOmNvZGVwb2ludC1lcXVhbCgkY29tcGFyYW5kMSBhcyB4czpzdHJpbmc/LAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFyYW5kMiBhcyB4czpzdHJpbmc/KSBhcyB4czpib29sZWFuPwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFJldHVybnMgdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdmFsdWUgb2YgJGNvbXBhcmFuZDEgaXMgZXF1YWwKLSAqIHRvIHRoZSB2YWx1ZSBvZiAkY29tcGFyYW5kMiwgYWNjb3JkaW5nIHRvIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQgY29sbGF0aW9uCi0gKiAoaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMvY29sbGF0aW9uL2NvZGVwb2ludCkuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgZWl0aGVyIGFyZ3VtZW50IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHJlc3VsdCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKiA8L3A+Ci0gKiAKLSAqLwotcHVibGljIGNsYXNzIEZuQ29kZXBvaW50RXF1YWwgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBvZiBGbkNvZGVwb2ludEVxdWFsLgotCSAqLwotCXB1YmxpYyBGbkNvZGVwb2ludEVxdWFsKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvZGVwb2ludC1lcXVhbCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb2RlcG9pbnRfZXF1YWxzKGFyZ3MsIGVjLmdldER5bmFtaWNDb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmUgdGhlIGFyZ3VtZW50cyBhcyBjb2RlcG9pbnRzCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBjb21wYXJlZC4KLQkgKiBAcGFyYW0gZHluYW1pY0NvbnRleHQKLQkgKiAgICAgICAgICAgIFRoZSBjdXJyZW50IGR5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvZGVwb2ludF9lcXVhbHMoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVhTU3RyaW5nIHhzdHIxID0gYXJnMS5lbXB0eSgpID8gbnVsbCA6IChYU1N0cmluZykgYXJnMS5maXJzdCgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlYU1N0cmluZyB4c3RyMiA9IGFyZzIuZW1wdHkoKSA/IG51bGwgOiAoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKTsKLQotCQkvLyBUaGlzIGRlbGVnYXRlcyB0byBGbkNvbXBhcmUKLQkJQmlnSW50ZWdlciByZXN1bHQgPSBGbkNvbXBhcmUuY29tcGFyZV9zdHJpbmcoQ29sbGF0aW9uUHJvdmlkZXIuQ09ERVBPSU5UX0NPTExBVElPTiwgeHN0cjEsIHhzdHIyLCBkeW5hbWljQ29udGV4dCk7Ci0JCWlmIChyZXN1bHQgIT0gbnVsbCkgcnMuYWRkKG5ldyBYU0Jvb2xlYW4oQmlnSW50ZWdlci5aRVJPLmVxdWFscyhyZXN1bHQpKSk7Ci0JCQotCQlyZXR1cm4gcnMuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRzVG9TdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2RlcG9pbnRzVG9TdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcwNzkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29kZXBvaW50c1RvU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MDU1MyAtIGZ1cnRoZXIgY2hlY2tzIG9mIGxlZ2FsIFVuaWNvZGUgY29kZXBvaW50cy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7Ci0KLS8qKgotICogQ3JlYXRlcyBhbiB4czpzdHJpbmcgZnJvbSBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzLiBSZXR1cm5zIHRoZSB6ZXJvLWxlbmd0aAotICogc3RyaW5nIGlmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLiBJZiBhbnkgb2YgdGhlIGNvZGUgcG9pbnRzIGluICRhcmcgaXMKLSAqIG5vdCBhIGxlZ2FsIFhNTCBjaGFyYWN0ZXIsIGFuIGVycm9yIGlzIHJhaXNlZCBbZXJyOkZPQ0gwMDAxXS4KLSAqLwotcHVibGljIGNsYXNzIEZuQ29kZXBvaW50c1RvU3RyaW5nIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCQotICAgIC8qKgotICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgVW5pY29kZSBjb2RlIHBvaW50LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTl9MRUdBTF9DT0RFUE9JTlQgPSAweDE7Ci0KLQotICAgIC8qKgotICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgVW5pY29kZSBjb2RlIHBvaW50LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9MRUdBTF9DT0RFUE9JTlQgPSAweDEwZmZmZjsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNvZGVwb2ludHNUb1N0cmluZy4KLQkgKi8KLQlwdWJsaWMgRm5Db2RlcG9pbnRzVG9TdHJpbmcoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29kZXBvaW50cy10by1zdHJpbmciKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29kZXBvaW50c190b19zdHJpbmcoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29kZXBvaW50cyB0byBzdHJpbmcgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y29kZXBvaW50cy10by1zdHJpbmcgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29kZXBvaW50c190b19zdHJpbmcoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKCIiKTsKLQkJfQotCi0JCWludFtdIGNvZGVQb2ludEFycmF5ID0gbmV3IGludFthcmcxLnNpemUoKV07Ci0JCWludCBjb2RlUG9pbnRJbmRleCA9IDA7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZzEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlYU0ludGVnZXIgY29kZSA9IChYU0ludGVnZXIpIGkubmV4dCgpOwotCQkJCi0JCQlpbnQgY29kZXBvaW50ID0gY29kZS5pbnRfdmFsdWUoKS5pbnRWYWx1ZSgpOwotCQkJaWYgKGNvZGVwb2ludCA8IE1JTl9MRUdBTF9DT0RFUE9JTlQgfHwgY29kZXBvaW50ID4gTUFYX0xFR0FMX0NPREVQT0lOVCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci51bnN1cHBvcnRlZF9jb2RlcG9pbnQoIlUrIiArIEludGVnZXIudG9TdHJpbmcoY29kZXBvaW50LCAxNikudG9VcHBlckNhc2UoKSk7Ci0JCQl9Ci0KLQkJCWNvZGVQb2ludEFycmF5W2NvZGVQb2ludEluZGV4XSA9IGNvZGVwb2ludDsJCQkKLQkJCWNvZGVQb2ludEluZGV4Kys7Ci0JCX0KLQotCQl0cnkgewotCQkJU3RyaW5nIHN0ciA9IFVURjE2Lm5ld1N0cmluZyhjb2RlUG9pbnRBcnJheSwgMCwgY29kZVBvaW50QXJyYXkubGVuZ3RoKTsKLQkJCXJldHVybiBuZXcgWFNTdHJpbmcoc3RyKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgewotCQkJLy8gVGhpcyBzaG91bGQgYmUgZHVvYmxlIGNoZWNrZWQgYWJvdmUsIGJ1dCByYXRoZXIgc2FmZSB0aGFuIHNvcnJ5Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudW5zdXBwb3J0ZWRfY29kZXBvaW50KGlhZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0ludGVnZXIoKSwgU2VxVHlwZS5PQ0NfU1RBUikpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2xsZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29sbGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzRmMjBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db2xsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogU3VtbWFyeTogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiB4czpzdHJpbmcgYXMgYXJndW1lbnQgYW5kIHJldHVybnMgYSBzZXF1ZW5jZQotICogb2Ygbm9kZXMgb2J0YWluZWQgYnkgaW50ZXJwcmV0aW5nICRhcmcgYXMgYW4geHM6YW55VVJJIGFuZCByZXNvbHZpbmcgaXQKLSAqIGFjY29yZGluZyB0byB0aGUgbWFwcGluZyBzcGVjaWZpZWQgaW4gQXZhaWxhYmxlIGNvbGxlY3Rpb25zIGRlc2NyaWJlZCBpbgotICogU2VjdGlvbiBDLjIgRHluYW1pYyBDb250ZXh0IENvbXBvbmVudHMuIElmIEF2YWlsYWJsZSBjb2xsZWN0aW9ucyBwcm92aWRlcyBhCi0gKiBtYXBwaW5nIGZyb20gdGhpcyBzdHJpbmcgdG8gYSBzZXF1ZW5jZSBvZiBub2RlcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhhdAotICogc2VxdWVuY2UuIElmIEF2YWlsYWJsZSBjb2xsZWN0aW9ucyBtYXBzIHRoZSBzdHJpbmcgdG8gYW4gZW1wdHkgc2VxdWVuY2UsIAotICogdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzZXF1ZW5jZS4gSWYgQXZhaWxhYmxlIGNvbGxlY3Rpb25zCi0gKiBwcm92aWRlcyBubyBtYXBwaW5nIGZvciB0aGUgc3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0RDMDAwNF0uIElmCi0gKiAkYXJnIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzZXF1ZW5jZSBvZiB0aGUgbm9kZXMgaW4gdGhlCi0gKiBkZWZhdWx0IGNvbGxlY3Rpb24gaW4gdGhlIGR5bmFtaWMgY29udGV4dC4gU2VlIFNlY3Rpb24gQy4yIER5bmFtaWMgQ29udGV4dAotICogQ29tcG9uZW50c1hQLiBJZiB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiBpcyB1bmRlZmluZWQgYW4gZXJyb3IKLSAqIGlzIHJhaXNlZCBbZXJyOkZPREMwMDAyXS4KLSAqCi0gKiBJZiB0aGUgJGFyZyBpcyBhIHJlbGF0aXZlIHhzOmFueVVSSSwgaXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmFsdWUgb2YgdGhlCi0gKiBiYXNlLVVSSSBwcm9wZXJ0eSBmcm9tIHRoZSBzdGF0aWMgY29udGV4dC4gSWYgJGFyZyBpcyBub3QgYSB2YWxpZCB4czphbnlVUkksCi0gKiBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0RDMDAwNF0uCi0gKgotICogSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBmdW5jdGlvbiBiZWhhdmVzIGFzIGlmIGl0IGhhZCBiZWVuIGNhbGxlZAotICogd2l0aG91dCBhbiBhcmd1bWVudC4gU2VlIGFib3ZlLgotICoKLSAqIEJ5IGRlZmF1bHQsIHRoaXMgZnVuY3Rpb24gaXMgwrdzdGFibGXCty4gVGhpcyBtZWFucyB0aGF0IHJlcGVhdGVkIGNhbGxzIG9uIHRoZQotICogZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBhcmd1bWVudCB3aWxsIHJldHVybiB0aGUgc2FtZSByZXN1bHQuIEhvd2V2ZXIsIGZvcgotICogcGVyZm9ybWFuY2UgcmVhc29ucywgaW1wbGVtZW50YXRpb25zIG1heSBwcm92aWRlIGEgdXNlciBvcHRpb24gdG8gZXZhbHVhdGUKLSAqIHRoZSBmdW5jdGlvbiB3aXRob3V0IGEgZ3VhcmFudGVlIG9mIHN0YWJpbGl0eS4gVGhlIG1hbm5lciBpbiB3aGljaCBhbnkgc3VjaAotICogb3B0aW9uIGlzIHByb3ZpZGVkIGlzIMK3aW1wbGVtZW50YXRpb24tZGVmaW5lZMK3LiBJZiB0aGUgdXNlciBoYXMgbm90IHNlbGVjdGVkCi0gKiBzdWNoIGFuIG9wdGlvbiwgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXIgcmV0dXJuIGEgc3RhYmxlIHJlc3VsdCBvcgotICogbXVzdCByYWlzZSBhbiBlcnJvcjogW2VycjpGT0RDMDAwM10uCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvbGxlY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT0xMRUNUSU9OX1VSSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucy9jb2xsZWN0aW9uL2RlZmF1bHQiOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRG9jLgotCSAqLwotCXB1YmxpYyBGbkNvbGxlY3Rpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29sbGVjdGlvbiIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGNvbGxlY3Rpb24oYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIERvYyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRvYyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb2xsZWN0aW9uKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgYXJnaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCQkKLQkJU3RyaW5nIHVyaSA9IERFRkFVTFRfQ09MTEVDVElPTl9VUkk7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQl1cmkgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQkJCi0JCXRyeSB7Ci0JCQluZXcgVVJJKHVyaSk7Ci0JCX0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBleCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmRvY19ub3RfZm91bmQobnVsbCk7Ci0JCX0KLQkJCi0JCWlmICh1cmkuaW5kZXhPZigiOiIpIDwgMCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRDb2xsZWN0aW9uQXJndW1lbnQoKTsKLQkJfQotCQkKLQotCQlVUkkgcmVzb2x2ZWQgPSBlYy5nZXREeW5hbWljQ29udGV4dCgpLnJlc29sdmVVcmkodXJpKTsKLQkJaWYgKHJlc29sdmVkID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZF9kb2MobnVsbCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBnZXRDb2xsZWN0aW9uKHVyaSwgZWMpOwotCQlpZiAocnMuZW1wdHkoKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kb2Nfbm90X2ZvdW5kKG51bGwpOwotCi0JCXJldHVybiByczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZ2V0Q29sbGVjdGlvbihTdHJpbmcgdXJpLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCU1hcC8qPFN0cmluZywgTGlzdDxEb2N1bWVudD4+Ki8gY29sbGVjdGlvbk1hcCA9IGVjLmdldER5bmFtaWNDb250ZXh0KCkuZ2V0Q29sbGVjdGlvbnMoKTsKLQkJTGlzdC8qPERvY3VtZW50PiovIGRvY0xpc3QgPSAoTGlzdCkgY29sbGVjdGlvbk1hcC5nZXQodXJpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkb2NMaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQlEb2N1bWVudCBkb2MgPSAoRG9jdW1lbnQpIGRvY0xpc3QuZ2V0KGkpOwotCQkJcnMuYWRkKG5ldyBEb2NUeXBlKGRvYywgZWMuZ2V0U3RhdGljQ29udGV4dCgpLmdldFR5cGVNb2RlbCgpKSk7Ci0JCX0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JCQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db21wYXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29tcGFyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2MzYmY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db21wYXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiAKLSAqIDxwPgotICogU3RyaW5nIGNvbXBhcmlzb24gZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOmNvbXBhcmUoJGNvbXBhcmFuZDEgYXMgeHM6c3RyaW5nPywgJGNvbXBhcmFuZDIgYXMgeHM6c3RyaW5nPykgYXMKLSAqIHhzOmludGVnZXI/Ci0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIC0xLCAwLCBvciAxLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdmFsdWUgb2YgJGNvbXBhcmFuZDEKLSAqIGlzIHJlc3BlY3RpdmVseSBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mCi0gKiAkY29tcGFyYW5kMi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJGNvbXBhcmFuZDIgYmVnaW5zIHdpdGggYSBzdHJpbmcgdGhhdCBpcyBlcXVhbCB0byB0aGUgdmFsdWUKLSAqIG9mICRjb21wYXJhbmQxIChhY2NvcmRpbmcgdG8gdGhlIGNvbGxhdGlvbiB0aGF0IGlzIHVzZWQpIGFuZCBoYXMgYWRkaXRpb25hbAotICogY29kZSBwb2ludHMgZm9sbG93aW5nIHRoYXQgYmVnaW5uaW5nIHN0cmluZywgdGhlbiB0aGUgcmVzdWx0IGlzIC0xLiBJZiB0aGUKLSAqIHZhbHVlIG9mICRjb21wYXJhbmQxIGJlZ2lucyB3aXRoIGEgc3RyaW5nIHRoYXQgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mCi0gKiAkY29tcGFyYW5kMiBhbmQgaGFzIGFkZGl0aW9uYWwgY29kZSBwb2ludHMgZm9sbG93aW5nIHRoYXQgYmVnaW5uaW5nIHN0cmluZywKLSAqIHRoZW4gdGhlIHJlc3VsdCBpcyAxLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIGVpdGhlciBhcmd1bWVudCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSByZXN1bHQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5Db21wYXJlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3Igb2YgRm5Db21wYXJlLgotCSAqLwotCXB1YmxpYyBGbkNvbXBhcmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29tcGFyZSIpLCAyLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQlyZXR1cm4gY29tcGFyZShhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBjb21wYXJlZCAob3B0aW9uYWwgM3JkIGFyZ3VtZW50IGlzIHRoZSBjb2xsYXRpb24pCi0JICogQHBhcmFtIGR5bmFtaWNDb250ZXh0Ci0JICogCSAgICAgICBDdXJyZW50IGR5bmFtaWMgY29udGV4dCAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb21wYXJlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJU3RyaW5nIGNvbGxhdGlvblVyaSA9IGNvbnRleHQuZ2V0Q29sbGF0aW9uUHJvdmlkZXIoKS5nZXREZWZhdWx0Q29sbGF0aW9uKCk7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgY29sbEFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQljb2xsYXRpb25VcmkgPSBjb2xsQXJnLmZpcnN0KCkuZ2V0U3RyaW5nVmFsdWUoKTsKLQkJfQotCi0JCVhTU3RyaW5nIHhzdHIxID0gYXJnMS5lbXB0eSgpID8gbnVsbCA6IChYU1N0cmluZykgYXJnMS5maXJzdCgpOwotCQlYU1N0cmluZyB4c3RyMiA9IGFyZzIuZW1wdHkoKSA/IG51bGwgOiAoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKTsKLQotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IGNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVyaSwgeHN0cjEsIHhzdHIyLCBjb250ZXh0KTsKLQkJaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihyZXN1bHQpKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwkJCQotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBCaWdJbnRlZ2VyIGNvbXBhcmVfc3RyaW5nKFN0cmluZyBjb2xsYXRpb25VcmksIFhTU3RyaW5nIHhzdHIxLAotCQkJWFNTdHJpbmcgeHN0cjIsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb21wYXJhdG9yIGNvbGxhdG9yID0gY29udGV4dC5nZXRDb2xsYXRpb25Qcm92aWRlcigpLmdldENvbGxhdGlvbihjb2xsYXRpb25VcmkpOwotCQlpZiAoY29sbGF0b3IgPT0gbnVsbCkgdGhyb3cgRHluYW1pY0Vycm9yLnVuc3VwcG9ydGVkX2NvbGxhdGlvbihjb2xsYXRpb25VcmkpOwotCi0JCWlmICh4c3RyMSA9PSBudWxsIHx8IHhzdHIyID09IG51bGwpIHJldHVybiBudWxsOwotCQkKLQkJaW50IHJldCA9IGNvbGxhdG9yLmNvbXBhcmUoeHN0cjEudmFsdWUoKSwgeHN0cjIudmFsdWUoKSk7Ci0KLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0dXJuIEJpZ0ludGVnZXIuWkVSTzsKLQkJZWxzZSBpZiAocmV0IDwgMCkKLQkJCXJldHVybiBCaWdJbnRlZ2VyLnZhbHVlT2YoLTEpOwotCQllbHNlCi0JCQlyZXR1cm4gQmlnSW50ZWdlci5PTkU7Ci0JfQotCi0JLyoqCi0JICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db25jYXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db25jYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwZWNkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ29uY2F0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIDxwPgotICogU2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46Y29uY2F0KCRhcmcxIGFzIHhkdDphbnlBdG9taWNUeXBlPywgJGFyZzIgYXMgeGR0OmFueUF0b21pY1R5cGU/LAotICogLi4uICkgYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyBhY2NlcHRzIHR3byBvciBtb3JlIHhkdDphbnlBdG9taWNUeXBlIGFyZ3VtZW50cyBhbmQgY29udmVydHMgdGhlbQotICogdG8geHM6c3RyaW5nLiBJdCB0aGVuIHJldHVybnMgdGhlIHhzOnN0cmluZyB0aGF0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQotICogdmFsdWVzIG9mIGl0cyBhcmd1bWVudHMgYWZ0ZXIgY29udmVyc2lvbi4gSWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSwgdGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgdGhlIHplcm8tbGVuZ3RoIHN0cmluZy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGUgY29uY2F0KCkgZnVuY3Rpb24gaXMgc3BlY2lmaWVkIHRvIGFsbG93IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYXJndW1lbnRzCi0gKiB0aGF0IGFyZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGbkNvbmNhdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNvbmNhdC4KLQkgKi8KLQlwdWJsaWMgRm5Db25jYXQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY29uY2F0IiksIDIsIEludGVnZXIuTUFYX1ZBTFVFKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpcyBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gY29uY2F0KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbmNhdGVuYXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBjb25jYXRlbmF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgY29uY2F0KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gc2FuaXR5IGNoZWNrCi0JCWlmIChhcmdzLnNpemUoKSA8IDIpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQotCQlTdHJpbmcgcmVzdWx0ID0gIiI7Ci0KLQkJLy8gZ28gdGhyb3VnaCBhcmdzCi0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoSXRlcmF0b3IgYXJnaSA9IGFyZ3MuaXRlcmF0b3IoKTsgYXJnaS5oYXNOZXh0KCk7KSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCi0JCQlpbnQgc2l6ZSA9IGFyZy5zaXplKCk7Ci0KLQkJCS8vIHNhbml0eSBjaGVjawotCQkJaWYgKHNpemUgPiAxKQotCQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJCWlmIChzaXplID09IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJSXRlbSBhdCA9IGFyZy5maXJzdCgpOwotCQkJCi0JCQlidWYuYXBwZW5kKGF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCX0KLQkJcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0JCQotCQlycy5hZGQobmV3IFhTU3RyaW5nKHJlc3VsdCkpOwotCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db250YWlucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbnRhaW5zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZTdlNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkNvbnRhaW5zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNjI3NjUgLSBjaGVjayBmb3IgZW1wdHkgc3RyaW5nIGluIHNlY29uZCBhcmcgYmVmb3JlIGZpcnN0LiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgb2YgJGFyZzEgY29udGFpbnMKLSAqIChhdCB0aGUgYmVnaW5uaW5nLCBhdCB0aGUgZW5kLCBvciBhbnl3aGVyZSB3aXRoaW4pIGF0IGxlYXN0IG9uZSBzZXF1ZW5jZSBvZgotICogY29sbGF0aW9uIHVuaXRzIHRoYXQgcHJvdmlkZXMgYSBtaW5pbWFsIG1hdGNoIHRvIHRoZSBjb2xsYXRpb24gdW5pdHMgaW4gdGhlCi0gKiB2YWx1ZSBvZiAkYXJnMiwgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdCBpcyB1c2VkLgotICovCi1wdWJsaWMgY2xhc3MgRm5Db250YWlucyBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkNvbnRhaW5zLgotCSAqLwotCXB1YmxpYyBGbkNvbnRhaW5zKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvbnRhaW5zIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGNvbnRhaW5zKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbnRhaW5zIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmNvbnRhaW5zIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGNvbnRhaW5zKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoIWFyZzIuZW1wdHkoKSkKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJaW50IHN0cjFsZW4gPSBzdHIxLmxlbmd0aCgpOwotCQlpbnQgc3RyMmxlbiA9IHN0cjIubGVuZ3RoKCk7Ci0KLQkJaWYgKHN0cjJsZW4gPT0gMCkgewotCQkJcmV0dXJuIFhTQm9vbGVhbi5UUlVFOwotCQl9Ci0JCQotCQlpZiAoc3RyMWxlbiA9PSAwKSB7Ci0JCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCQl9Ci0KLQkJcmV0dXJuIFhTQm9vbGVhbi52YWx1ZU9mKHN0cjEuaW5kZXhPZihzdHIyKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ291bnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db3VudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDVlYmQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Db3VudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB2YWx1ZSBvZiAkYXJnLiBSZXR1cm5zIDAgaWYgJGFyZyBpcyB0aGUKLSAqIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Db3VudCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Db3VudC4KLQkgKi8KLQlwdWJsaWMgRm5Db3VudCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjb3VudCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb3VudChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb3VudCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjb3VudCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb3VudChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoYXJnLnNpemUoKSkpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudERhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50RGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ0ZTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50RGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODY0NTIgLSBhbHdheXMgcmV0dXJuIHRoZSBzdGFibGUgZGF0ZS90aW1lIGZyb20gZHluYW1pYyBjb250ZXh0Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotCi0vKioKLSAqIFJldHVybnMgeHM6ZGF0ZShmbjpjdXJyZW50LWRhdGVUaW1lKCkpLiBUaGlzIGlzIGEgeHM6ZGF0ZSAod2l0aCB0aW1lem9uZSkKLSAqIHRoYXQgaXMgY3VycmVudCBhdCBzb21lIHRpbWUgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIGEgcXVlcnkgb3IKLSAqIHRyYW5zZm9ybWF0aW9uIGluIHdoaWNoIGZuOmN1cnJlbnQtZGF0ZSgpIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uIGlzCi0gKiBzdGFibGUuIFRoZSBwcmVjaXNlIGkgaW5zdGFudCBkdXJpbmcgdGhlIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIHJlcHJlc2VudGVkCi0gKiBieSB0aGUgdmFsdWUgb2YgZm46Y3VycmVudC1kYXRlKCkgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5DdXJyZW50RGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5DdXJyZW50RGF0ZS4KLQkgKi8KLQlwdWJsaWMgRm5DdXJyZW50RGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjdXJyZW50LWRhdGUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjdXJyZW50X2RhdGUoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ3VycmVudC1EYXRlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y3VycmVudC1kYXRlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGN1cnJlbnRfZGF0ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCi0JCVhTRGF5VGltZUR1cmF0aW9uIHR6ID0gbmV3IFhTRGF5VGltZUR1cmF0aW9uKGRjLmdldFRpbWV6b25lT2Zmc2V0KCkpOwotCQlBbnlUeXBlIHJlcyA9IG5ldyBYU0RhdGUoZGMuZ2V0Q3VycmVudERhdGVUaW1lKCksIHR6KTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudERhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuQ3VycmVudERhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OTVmZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnREYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODY0NTIgLSBhbHdheXMgcmV0dXJuIHRoZSBzdGFibGUgZGF0ZS90aW1lIGZyb20gZHluYW1pYyBjb250ZXh0Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RheVRpbWVEdXJhdGlvbjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB4czpkYXRlVGltZSAod2l0aCB0aW1lem9uZSkgZnJvbSB0aGUgZHluYW1pYyBjb250ZXh0LiAoU2VlCi0gKiBTZWN0aW9uIEMuMiBEeW5hbWljIENvbnRleHQgQ29tcG9uZW50c1hQLikgVGhpcyBpcyBhIHhzOmRhdGVUaW1lIHRoYXQgaXMKLSAqIGN1cnJlbnQgYXQgc29tZSB0aW1lIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiBhIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIGluCi0gKiB3aGljaCBmbjpjdXJyZW50LWRhdGVUaW1lKCkgaXMgZXhlY3V0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgc3RhYmxlLiBUaGUgcHJlY2lzZQotICogaW5zdGFudCBkdXJpbmcgdGhlIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSB2YWx1ZSBvZgotICogZm46Y3VycmVudC1kYXRlVGltZSgpIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuQ3VycmVudERhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkN1cnJlbnREYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5DdXJyZW50RGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiY3VycmVudC1kYXRlVGltZSIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGN1cnJlbnRfZGF0ZVRpbWUoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ3VycmVudC1EYXRlLVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpjdXJyZW50LWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGN1cnJlbnRfZGF0ZVRpbWUoQ29sbGVjdGlvbiBhcmdzLAotCQkJRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlEdXJhdGlvbiBkID0gZGMuZ2V0VGltZXpvbmVPZmZzZXQoKTsKLQkJWFNEYXlUaW1lRHVyYXRpb24gdHogPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oMCwgZC5nZXRIb3VycygpLCBkLmdldE1pbnV0ZXMoKSwgMC4wLCBkLmdldFNpZ24oKSA9PSAtMSk7Ci0KLQkJQW55VHlwZSByZXMgPSBuZXcgWFNEYXRlVGltZShkYy5nZXRDdXJyZW50RGF0ZVRpbWUoKSwgdHopOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5DdXJyZW50VGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnRUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYjBhOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkN1cnJlbnRUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4NjQ1MiAtIGFsd2F5cyByZXR1cm4gdGhlIHN0YWJsZSBkYXRlL3RpbWUgZnJvbSBkeW5hbWljIGNvbnRleHQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1RpbWU7Ci0KLS8qKgotICogUmV0dXJucyB4czp0aW1lKGZuOmN1cnJlbnQtZGF0ZVRpbWUoKSkuIFRoaXMgaXMgYSB4czp0aW1lICh3aXRoIHRpbWV6b25lKSB0aGF0Ci0gKiBpcyBjdXJyZW50IGF0IHNvbWUgdGltZSBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgYSBxdWVyeSBvciB0cmFuc2Zvcm1hdGlvbiBpbgotICogd2hpY2ggZm46Y3VycmVudC10aW1lKCkgaXMgZXhlY3V0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgc3RhYmxlLiBUaGUgcHJlY2lzZQotICogaW5zdGFudCBkdXJpbmcgdGhlIHF1ZXJ5IG9yIHRyYW5zZm9ybWF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSB2YWx1ZSBvZgotICogZm46Y3VycmVudC10aW1lKCkgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5DdXJyZW50VGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5DdXJyZW50VGltZS4KLQkgKi8KLQlwdWJsaWMgRm5DdXJyZW50VGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJjdXJyZW50LXRpbWUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjdXJyZW50X3RpbWUoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ3VycmVudC1UaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46Y3VycmVudC10aW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGN1cnJlbnRfdGltZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAwOwotCi0JCUR1cmF0aW9uIGQgPSBkYy5nZXRUaW1lem9uZU9mZnNldCgpOwotCQlYU0RheVRpbWVEdXJhdGlvbiB0eiA9IG5ldyBYU0RheVRpbWVEdXJhdGlvbigwLCBkLmdldEhvdXJzKCksIGQuZ2V0TWludXRlcygpLCAwLjAsIGQuZ2V0U2lnbigpID09IC0xKTsKLQotCQlBbnlUeXBlIHJlcyA9IG5ldyBYU1RpbWUoZGMuZ2V0Q3VycmVudERhdGVUaW1lKCksIHR6KTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0YS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMwMDBiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogZm46ZGF0YSB0YWtlcyBhIHNlcXVlbmNlIG9mIGl0ZW1zIGFuZCByZXR1cm5zIGEgc2VxdWVuY2Ugb2YgYXRvbWljIHZhbHVlcy4KLSAqIFRoZSByZXN1bHQgb2YgZm46ZGF0YSBpcyB0aGUgc2VxdWVuY2Ugb2YgYXRvbWljIHZhbHVlcyBwcm9kdWNlZCBieSBhcHBseWluZwotICogdGhlIGZvbGxvd2luZyBydWxlcyB0byBlYWNoIGl0ZW0gaW4gJGFyZzogLSBJZiB0aGUgaXRlbSBpcyBhbiBhdG9taWMgdmFsdWUsCi0gKiBpdCBpcyByZXR1cm5lZC4gLSBJZiB0aGUgaXRlbSBpcyBhIG5vZGUsIGZuOmRhdGEoKSByZXR1cm5zIHRoZSB0eXBlZCB2YWx1ZSBvZgotICogdGhlIG5vZGUgYXMgZGVmaW5lZCBieSB0aGUgYWNjZXNzb3IgZnVuY3Rpb24gZG06dHlwZWQtdmFsdWUgaW4gU2VjdGlvbiA1LjYKLSAqIHR5cGVkLXZhbHVlIEFjY2Vzc29yIGluIHRoZSBzcGVjaWZpY2F0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXRhIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRhdGEuCi0JICovCi0JcHVibGljIEZuRGF0YSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkYXRhIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQkvLyAxIGFyZ3VtZW50IG9ubHkhCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gYXRvbWl6ZShhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogQXRvbWl6ZSBhIFJlc3VsdFNlcXVuY2UgYXJndW1lbnQgZXhwcmVzc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGF0b21pemUoUmVzdWx0U2VxdWVuY2UgYXJnKSB7Ci0KLQkJUmVzdWx0QnVmZmVyIHJzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpIHsKLQkJCQlycy5hZGQoYXQpOwotCQkJfQotCQkJZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJCU5vZGVUeXBlIG50ID0gKE5vZGVUeXBlKSBhdDsKLQkJCQlycy5jb25jYXQobnQudHlwZWRfdmFsdWUoKSk7Ci0JCQl9IGVsc2UgewotCQkJCWFzc2VydCBmYWxzZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQotCS8qKgotCSAqIEF0b21pemUgYXJndW1lbnQgZXhwcmVzc2lvbiBvZiBhbnkgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBleHByZXNzaW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFueVR5cGUgYXRvbWl6ZShJdGVtIGFyZykgewotCQlpZiAoYXJnIGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkKLQkJCXJldHVybiAoQW55QXRvbWljVHlwZSlhcmc7Ci0JCWVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIE5vZGVUeXBlKSB7Ci0JCQlOb2RlVHlwZSBudCA9IChOb2RlVHlwZSkgYXJnOwotCi0JCQlyZXR1cm4gKEFueVR5cGUpIG50LnR5cGVkX3ZhbHVlKCkuZmlyc3QoKTsKLQkJfSBlbHNlIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3MWMwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MTgyMiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEdXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lOwotCi0vKioKLSAgKiBBIHNwZWNpYWwgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGNvbnN0cnVjdGluZyBhIHhzOmRhdGVUaW1lIHZhbHVlIGZyb20gYSB4czpkYXRlCi0gICogdmFsdWUgYW5kIGEgeHM6dGltZSB2YWx1ZS4KLSAgKiByZWY6IFNlY3Rpb24gNS4yIG9mIHRoZSBGJk8gc3BlYywgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZnVuY3Rpb25zLy4KLSAqLwotcHVibGljIGNsYXNzIEZuRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkYXRlVGltZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRhdGVUaW1lKGFyZ3MsIGVjLmdldFN0YXRpY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGZ1bmN0aW9uIHVzaW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gc2MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBzdGF0aWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBmbjpkYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkYXRlVGltZShDb2xsZWN0aW9uIGFyZ3MsIFN0YXRpY0NvbnRleHQgc2MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCi0JCS8vIGlmIGVpdGhlciBvZiB0aGUgcGFyYW1ldGVyIGlzIGFuIGVtcHR5IHNlcXVlbmNlLCB0aGUgcmVzdWx0Ci0JCS8vIGlzIGFuIGVtcHR5IHNlcXVlbmNlCi0JCWlmIChhcmcxLmVtcHR5KCkgfHwgYXJnMi5lbXB0eSgpKSB7Ci0JCQkgIHJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7CQotCQl9Ci0JCVhTRGF0ZSBwYXJhbTEgPSAoWFNEYXRlKWFyZzEuZmlyc3QoKTsKLQkJWFNUaW1lIHBhcmFtMiA9IChYU1RpbWUpYXJnMi5maXJzdCgpOwotCQkKLQkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJY2FsLnNldChwYXJhbTEueWVhcigpLCBwYXJhbTEubW9udGgoKSAtIDEsIHBhcmFtMS5kYXkoKSk7Ci0JCWNhbC5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIHBhcmFtMi5ob3VyKCkpOwotCQljYWwuc2V0KENhbGVuZGFyLk1JTlVURSwgcGFyYW0yLm1pbnV0ZSgpKTsKLQkJY2FsLnNldChDYWxlbmRhci5TRUNPTkQsIChuZXcgRG91YmxlKE1hdGguZmxvb3IocGFyYW0yLnNlY29uZCgpKSkuaW50VmFsdWUoKSkpOwotCQljYWwuc2V0KENhbGVuZGFyLk1JTExJU0VDT05ELCAwKTsKLQkJCi0JCVhTRHVyYXRpb24gZGF0ZVRpbWVab25lID0gcGFyYW0xLnR6KCk7Ci0JCVhTRHVyYXRpb24gdGltZVRpbWVab25lID0gcGFyYW0yLnR6KCk7Ci0JCWlmICgoZGF0ZVRpbWVab25lICE9IG51bGwgJiYgdGltZVRpbWVab25lICE9IG51bGwpICYmCi0JCSAgICAgIWRhdGVUaW1lWm9uZS5nZXRTdHJpbmdWYWx1ZSgpLmVxdWFscyh0aW1lVGltZVpvbmUuZ2V0U3RyaW5nVmFsdWUoKSkpIHsKLQkJICAvLyBpdCdzIGFuIGVycm9yLCBpZiB0aGUgYXJndW1lbnRzIGhhdmUgZGlmZmVyZW50IHRpbWV6b25lcwotCQkgIHRocm93IER5bmFtaWNFcnJvci5pbmNvbnNpc3RlbnRUaW1lWm9uZSgpOwotCQl9IGVsc2UgaWYgKGRhdGVUaW1lWm9uZSA9PSBudWxsICYmIHRpbWVUaW1lWm9uZSAhPSBudWxsKSB7Ci0gICAgICAgICAgIHJldHVybiBuZXcgWFNEYXRlVGltZShjYWwsIHRpbWVUaW1lWm9uZSk7Ci0JCX0gZWxzZSBpZiAoZGF0ZVRpbWVab25lICE9IG51bGwgJiYgdGltZVRpbWVab25lID09IG51bGwpIHsKLQkJICAgcmV0dXJuIG5ldyBYU0RhdGVUaW1lKGNhbCwgZGF0ZVRpbWVab25lKTsKLQkJfQotCQllbHNlIGlmICgoZGF0ZVRpbWVab25lICE9IG51bGwgJiYgdGltZVRpbWVab25lICE9IG51bGwpICYmCi0JCQkgICAgIGRhdGVUaW1lWm9uZS5nZXRTdHJpbmdWYWx1ZSgpLmVxdWFscyh0aW1lVGltZVpvbmUuZ2V0U3RyaW5nVmFsdWUoKSkpIHsKLQkJICAgcmV0dXJuIG5ldyBYU0RhdGVUaW1lKGNhbCwgZGF0ZVRpbWVab25lKTsKLQkJfQotCQllbHNlIHsKLQkJICAgcmV0dXJuIG5ldyBYU0RhdGVUaW1lKGNhbCwgbnVsbCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlGcm9tRGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZmY5MTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAxIGFuZCAzMSwgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUgZGF5Ci0gKiBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwKLSAqIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXlGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRheUZyb21EYXRlLgotCSAqLwotCXB1YmxpYyBGbkRheUZyb21EYXRlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRheS1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZGF5X2Zyb21fZGF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBEYXktRnJvbS1EYXRlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRheS1mcm9tLWRhdGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGF5X2Zyb21fZGF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTRGF0ZSBkdCA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQuZGF5KCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheUZyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjk1ODM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EYXlGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAxIGFuZCAzMSwgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUgZGF5Ci0gKiBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwKLSAqIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5EYXlGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EYXlGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuRGF5RnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRheS1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGRheV9mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBEYXktRnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkYXktZnJvbS1kYXRldGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkYXlfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQuZGF5KCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5c0Zyb21EdXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRheXNGcm9tRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViNTg3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGF5c0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbi4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGV4cGVjdGVkIHhzOmR1cmF0aW9uIGFyZ3VtZW50LiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBkYXlzIGNvbXBvbmVudCBpbiB0aGUgY2Fub25pY2FsCi0gKiBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiAkYXJnLiBUaGUgcmVzdWx0IG1heSBiZSBuZWdhdGl2ZS4gSWYKLSAqICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuRGF5c0Zyb21EdXJhdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkRheXNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuRGF5c0Zyb21EdXJhdGlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkYXlzLWZyb20tZHVyYXRpb24iKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZGF5c19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIERheXMtRnJvbS1EdXJhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkYXlzLWZyb20tZHVyYXRpb24gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGF5c19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiBkdGQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdGQuZGF5cygpOwotCi0JCWlmIChkdGQubmVnYXRpdmUoKSkKLQkJCXJlcyAqPSAtMTsKLQotCQlyZXR1cm4gbmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRlZXBFcXVhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRlZXBFcXVhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzU3MmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EZWVwRXF1YWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhlIGZ1bmN0aW9uIGFzc2Vzc2VzIHdoZXRoZXIgdHdvIHNlcXVlbmNlcyBhcmUgZGVlcC1lcXVhbCB0byBlYWNoIG90aGVyLiBUbwotICogYmUgZGVlcC1lcXVhbCwgdGhleSBtdXN0IGNvbnRhaW4gaXRlbXMgdGhhdCBhcmUgcGFpcndpc2UgZGVlcC1lcXVhbDsgYW5kIGZvcgotICogdHdvIGl0ZW1zIHRvIGJlIGRlZXAtZXF1YWwsIHRoZXkgbXVzdCBlaXRoZXIgYnkgYXRvbWljIHZhbHVlcyB0aGF0IGNvbXBhcmUKLSAqIGVxdWFsLCBvciBub2RlcyBvZiB0aGUgc2FtZSBraW5kLCB3aXRoIHRoZSBzYW1lIG5hbWUsIHdob3NlIGNoaWxkcmVuIGFyZQotICogZGVlcC1lcXVhbC4gVGhpcyBpcyBkZWZpbmVkIGluIG1vcmUgZGV0YWlsIGJlbG93LiBUaGUgJGNvbGxhdGlvbiBhcmd1bWVudAotICogaWRlbnRpZmllcyBhIGNvbGxhdGlvbiB3aGljaCBpcyB1c2VkIGF0IGFsbCBsZXZlbHMgb2YgcmVjdXJzaW9uIHdoZW4gc3RyaW5ncwotICogYXJlIGNvbXBhcmVkIChidXQgbm90IHdoZW4gbmFtZXMgYXJlIGNvbXBhcmVkKSwgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBpbgotICogNy4zLjEgQ29sbGF0aW9ucyBpbiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZuRGVlcEVxdWFsIGV4dGVuZHMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EZWVwRXF1YWwuCi0JICovCi0JcHVibGljIEZuRGVlcEVxdWFsKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRlZXAtZXF1YWwiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkZWVwX2VxdWFsKGFyZ3MsIGVjKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWVwLUVxdWFsIGV4cHJlc3Npb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gY29udGV4dAotCSAqICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRlZXAtZXF1YWwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZGVlcF9lcXVhbChDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGNvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzMgPSBudWxsOwotCQlTdHJpbmcgY29sbGF0aW9uVVJJID0gY29udGV4dC5nZXRTdGF0aWNDb250ZXh0KCkuZ2V0Q29sbGF0aW9uUHJvdmlkZXIoKS5nZXREZWZhdWx0Q29sbGF0aW9uKCk7Ci0JCWlmIChjaXRlci5oYXNOZXh0KCkpIHsKLQkJCWFyZzMgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJCWlmICghYXJnMy5lbXB0eSgpKSB7Ci0JCQkJY29sbGF0aW9uVVJJID0gYXJnMy5maXJzdCgpLmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQl9Ci0JCX0KLQotCQlib29sZWFuIHJlc3VsdCA9IGRlZXBfZXF1YWwoYXJnMSwgYXJnMiwgY29udGV4dCwgY29sbGF0aW9uVVJJKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWVwLUVxdWFsIGJvb2xlYW4gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSB0d28KLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSBjb250ZXh0Ci0JICogICAgICAgICAgICBDdXJyZW50IGR5bmFtaWMgY29udGV4dCAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkZWVwLWVxdWFsIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVlcF9lcXVhbChSZXN1bHRTZXF1ZW5jZSBvbmUsIFJlc3VsdFNlcXVlbmNlIHR3bywgRXZhbHVhdGlvbkNvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgewotCQlpZiAob25lLmVtcHR5KCkgJiYgdHdvLmVtcHR5KCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlpZiAob25lLnNpemUoKSAhPSB0d28uc2l6ZSgpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCUl0ZXJhdG9yIG9uZWkgPSBvbmUuaXRlcmF0b3IoKTsKLQkJSXRlcmF0b3IgdHdvaSA9IHR3by5pdGVyYXRvcigpOwotCi0JCXdoaWxlIChvbmVpLmhhc05leHQoKSkgewotCQkJQW55VHlwZSBhID0gKEFueVR5cGUpIG9uZWkubmV4dCgpOwotCQkJQW55VHlwZSBiID0gKEFueVR5cGUpIHR3b2kubmV4dCgpOwotCi0JCQlpZiAoIWRlZXBfZXF1YWwoYSwgYiwgY29udGV4dCwgY29sbGF0aW9uVVJJKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoqCi0JICogRGVlcC1FcXVhbCBib29sZWFuIG9wZXJhdGlvbiBmb3IgaW5wdXRzIG9mIGFueSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSB0d28KLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSBjb250ZXh0IAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRlZXAtZXF1YWwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWVwX2VxdWFsKEFueVR5cGUgb25lLCBBbnlUeXBlIHR3bywgRXZhbHVhdGlvbkNvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgewotCQlpZiAoKG9uZSBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpICYmICh0d28gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCXJldHVybiBkZWVwX2VxdWFsX2F0b21pYygoQW55QXRvbWljVHlwZSkgb25lLCAoQW55QXRvbWljVHlwZSkgdHdvLCBjb250ZXh0LmdldER5bmFtaWNDb250ZXh0KCksIGNvbGxhdGlvblVSSSk7Ci0KLQkJZWxzZSBpZiAoKChvbmUgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSAmJiAodHdvIGluc3RhbmNlb2YgTm9kZVR5cGUpKQotCQkJCXx8ICgob25lIGluc3RhbmNlb2YgTm9kZVR5cGUpICYmICh0d28gaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWVsc2UgaWYgKChvbmUgaW5zdGFuY2VvZiBOb2RlVHlwZSkgJiYgKHR3byBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXJldHVybiBkZWVwX2VxdWFsX25vZGUoKE5vZGVUeXBlKSBvbmUsIChOb2RlVHlwZSkgdHdvLCBjb250ZXh0KTsKLQkJZWxzZSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEZWVwLUVxdWFsIGJvb2xlYW4gb3BlcmF0aW9uIGZvciBpbnB1dHMgb2YgYW55IGF0b21pYyB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEBwYXJhbSB0d28KLQkgKiAgICAgICAgICAgIGlucHV0MiB4cGF0aCBleHByZXNzaW9uL3ZhcmlhYmxlLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRlZXAtZXF1YWwgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWVwX2VxdWFsX2F0b21pYyhBbnlBdG9taWNUeXBlIG9uZSwgQW55QXRvbWljVHlwZSB0d28sIER5bmFtaWNDb250ZXh0IGNvbnRleHQsIFN0cmluZyBjb2xsYXRpb25VUkkpIHsKLQkJaWYgKCEob25lIGluc3RhbmNlb2YgQ21wRXEpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoISh0d28gaW5zdGFuY2VvZiBDbXBFcSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJQ21wRXEgYSA9IChDbXBFcSkgb25lOwotCi0JCXRyeSB7Ci0JCQlpZiAoaXNOdW1lcmljKG9uZSwgdHdvKSkgewotCQkJCU51bWVyaWNUeXBlIG51bWVyaWMgPSAoTnVtZXJpY1R5cGUpIG9uZTsKLQkJCQlpZiAobnVtZXJpYy5lcSh0d28sIGNvbnRleHQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVhTU3RyaW5nIHZhbHVlMSA9IG5ldyBYU1N0cmluZyhvbmUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJCWlmICh2YWx1ZTEuZXEodHdvLCBjb250ZXh0KSkgewotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChhLmVxKHR3bywgY29udGV4dCkpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCQkKLQkJCWlmIChuZWVkc1N0cmluZ0NvbXBhcmlzb24ob25lLCB0d28pKSB7Ci0JCQkJWFNTdHJpbmcgeHN0cjEgPSBuZXcgWFNTdHJpbmcob25lLmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCVhTU3RyaW5nIHhzdHIyID0gbmV3IFhTU3RyaW5nKHR3by5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQlpZiAoRm5Db21wYXJlLmNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVSSSwgeHN0cjEsIHhzdHIyLAotCQkJCQkJY29udGV4dCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGZhbHNlOwotCQl9IGNhdGNoIChEeW5hbWljRXJyb3IgZXJyKSB7Ci0JCQlyZXR1cm4gZmFsc2U7IC8vIFhYWCA/Pz8KLQkJfQotCX0KLQotCS8qKgotCSAqIERlZXAtRXF1YWwgYm9vbGVhbiBvcGVyYXRpb24gZm9yIGlucHV0cyBvZiBub2RlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIG9uZQotCSAqICAgICAgICAgICAgaW5wdXQxIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHBhcmFtIHR3bwotCSAqICAgICAgICAgICAgaW5wdXQyIHhwYXRoIGV4cHJlc3Npb24vdmFyaWFibGUuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZGVlcC1lcXVhbCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGRlZXBfZXF1YWxfbm9kZShOb2RlVHlwZSBvbmUsIE5vZGVUeXBlIHR3bywgRXZhbHVhdGlvbkNvbnRleHQgY29udGV4dCkgewotCQlOb2RlIGEgPSBvbmUubm9kZV92YWx1ZSgpOwotCQlOb2RlIGIgPSB0d28ubm9kZV92YWx1ZSgpOwotCQkKLQkJaWYgKGEuaXNFcXVhbE5vZGUoYikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EZWZhdWx0Q29sbGF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGVmYXVsdENvbGxhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2UxYWUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5EZWZhdWx0Q29sbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIDxwPgotICogU3VtbWFyeTogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29sbGF0aW9uIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYwotICogY29udGV4dC4gQ29tcG9uZW50cyBvZiB0aGUgc3RhdGljIGNvbnRleHQgYXJlIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEMuMSBTdGF0aWMKLSAqIENvbnRleHQgQ29tcG9uZW50cy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBOb3RlOgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoZSBkZWZhdWx0IGNvbGxhdGlvbiBwcm9wZXJ0eSBjYW4gbmV2ZXIgYmUgdW5kZWZpbmVkLiBJZiBpdCBpcyBub3QKLSAqIGV4cGxpY2l0bHkgZGVmaW5lZCwgYSBzeXN0ZW0gZGVmaW5lZCBkZWZhdWx0IGNhbiBiZSBpbnZva2VkLiBJZiB0aGlzIGlzIG5vdAotICogcHJvdmlkZWQsIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQgY29sbGF0aW9uCi0gKiAoaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMvY29sbGF0aW9uL2NvZGVwb2ludCkgaXMgdXNlZC4KLSAqIDwvcD4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRlZmF1bHRDb2xsYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQlwdWJsaWMgRm5EZWZhdWx0Q29sbGF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRlZmF1bHQtY29sbGF0aW9uIiksIDApOwotCX0KLQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKGVjLmdldER5bmFtaWNDb250ZXh0KCkuZ2V0Q29sbGF0aW9uUHJvdmlkZXIoKS5nZXREZWZhdWx0Q29sbGF0aW9uKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRpc3RpbmN0VmFsdWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGlzdGluY3RWYWx1ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2YWRlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRGlzdGluY3RWYWx1ZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBkaXN0aW5jdC12YWx1ZXMgY29tcGFyaXNvbiBsb2dpYy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgcHJvYmFibHkgYW4gZWFzaWVyIHdheSB0byBkbyB0aGUgY29tcGFyaXNvbi4KLTw8PDw8PDwgRm5EaXN0aW5jdFZhbHVlcy5qYXZhCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotPT09PT09PQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM5MDI1IC0gZml4ZXMgdG8gZm46ZGlzdGluY3QtdmFsdWVzIGZ1bmN0aW9uLiBhYmlsaXR5IHRvIGZpbmQgZGlzdGluY3QgdmFsdWVzIG9uIG5vZGUgaXRlbXMuCi0+Pj4+Pj4+IDEuNgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc2VxdWVuY2UgdGhhdCByZXN1bHRzIGZyb20gcmVtb3ZpbmcgZnJvbSAkYXJnIGFsbCBidXQgb25lIG9mIGEKLSAqIHNldCBvZiB2YWx1ZXMgdGhhdCBhcmUgZXEgdG8gb25lIG90aGVyLiBWYWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQsIGkuZS4KLSAqIHRoZSBlcSBvcGVyYXRvciBpcyBub3QgZGVmaW5lZCBmb3IgdGhlaXIgdHlwZXMsIGFyZSBjb25zaWRlcmVkIHRvIGJlCi0gKiBkaXN0aW5jdC4gVmFsdWVzIG9mIHR5cGUgeGR0OnVudHlwZWRBdG9taWMgYXJlIGNvbXBhcmVkIGFzIGlmIHRoZXkgd2VyZSBvZgotICogdHlwZSB4czpzdHJpbmcuIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIGlzIHJldHVybmVkIGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkRpc3RpbmN0VmFsdWVzIGV4dGVuZHMgQWJzdHJhY3RDb2xsYXRpb25FcXVhbEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5EaXN0aW5jdFZhbHVlcy4KLQkgKi8KLQlwdWJsaWMgRm5EaXN0aW5jdFZhbHVlcygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkaXN0aW5jdC12YWx1ZXMiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkaXN0aW5jdF92YWx1ZXMoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogRGlzdGluY3QtdmFsdWVzIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRpc3RpbmN0LXZhbHVlcyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkaXN0aW5jdF92YWx1ZXMoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJaWYgKGNpdGVyLmhhc05leHQoKSkgewotCQkJYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQl9Ci0JCQotCQlTdHJpbmcgY29sbGF0aW9uVVJJID0gY29udGV4dC5nZXRDb2xsYXRpb25Qcm92aWRlcigpLmdldERlZmF1bHRDb2xsYXRpb24oKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpIHsKLQkJCVhTU3RyaW5nIGNvbGxhdGlvbiA9IChYU1N0cmluZykgYXJnMi5pdGVtKDApOwotCQkJY29sbGF0aW9uVVJJID0gY29sbGF0aW9uLmdldFN0cmluZ1ZhbHVlKCk7Ci0JCX0KLQotCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBhcmcxLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJQW55QXRvbWljVHlwZSBhdG9taXplZEl0ZW0gPSAoQW55QXRvbWljVHlwZSkgRm5EYXRhLmF0b21pemUoKEl0ZW0pIGl0ZXIubmV4dCgpKTsKLQkJCWlmICghY29udGFpbnMocnMsIGF0b21pemVkSXRlbSwgY29udGV4dCwgY29sbGF0aW9uVVJJKSkKLQkJCQlycy5hZGQoYXRvbWl6ZWRJdGVtKTsKLQkJfQotCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQkKLQkvKioKLQkgKiBTdXBwb3J0IGZvciBDb250YWlucyBpbnRlcmZhY2UuCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBpbnB1dDEgZXhwcmVzc2lvbiBzZXF1ZW5jZS4KLQkgKiBAcGFyYW0gaXRlbQotCSAqICAgICAgICAgICAgaW5wdXQyIGV4cHJlc3Npb24gb2YgYW55IGF0b21pYyB0eXBlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKFJlc3VsdEJ1ZmZlciBycywgQW55QXRvbWljVHlwZSBpdGVtLAotCQkJRHluYW1pY0NvbnRleHQgY29udGV4dCwgU3RyaW5nIGNvbGxhdGlvblVSSSkgIHsKLQkJaWYgKCEoaXRlbSBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gaGFzVmFsdWUocnMsIGl0ZW0sIGNvbnRleHQsIGNvbGxhdGlvblVSSSk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRvYy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkRvYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU1ZmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODExNTkgLSBmaXggZG9jdW1lbnQgbG9hZGluZyBhbmQgcmVzb2x2aW5nIFVSSXMgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogUmV0cmlldmVzIGEgZG9jdW1lbnQgdXNpbmcgYW4geHM6YW55VVJJIHN1cHBsaWVkIGFzIGFuIHhzOnN0cmluZy4gSWYgJHVyaSBpcwotICogbm90IGEgdmFsaWQgeHM6YW55VVJJLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT0RDMDAwNV0uIElmIGl0IGlzIGEgcmVsYXRpdmUKLSAqIFVSSSBSZWZlcmVuY2UsIGl0IGlzIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSB2YWx1ZSBvZiB0aGUgYmFzZSBVUkkgcHJvcGVydHkKLSAqIGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LiBUaGUgcmVzdWx0aW5nIGFic29sdXRlIFVSSSBSZWZlcmVuY2UgaXMgY2FzdCB0byBhbgotICogeHM6c3RyaW5nLiBJZiB0aGUgQXZhaWxhYmxlIGRvY3VtZW50cyBkaXNjdXNzZWQgaW4gU2VjdGlvbiAyLjEuMiBEeW5hbWljCi0gKiBDb250ZXh0WFAgcHJvdmlkZXMgYSBtYXBwaW5nIGZyb20gdGhpcyBzdHJpbmcgdG8gYSBkb2N1bWVudCBub2RlLCB0aGUKLSAqIGZ1bmN0aW9uIHJldHVybnMgdGhhdCBkb2N1bWVudCBub2RlLiBJZiB0aGUgQXZhaWxhYmxlIGRvY3VtZW50cyBtYXBzIHRoZQotICogc3RyaW5nIHRvIGFuIGVtcHR5IHNlcXVlbmNlLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IHNlcXVlbmNlLiBJZgotICogdGhlIEF2YWlsYWJsZSBkb2N1bWVudHMgcHJvdmlkZXMgbm8gbWFwcGluZyBmb3IgdGhlIHN0cmluZywgYW4gZXJyb3IgaXMKLSAqIHJhaXNlZCBbZXJyOkZPREMwMDA1XS4KLSAqLwotcHVibGljIGNsYXNzIEZuRG9jIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRG9jLgotCSAqLwotCXB1YmxpYyBGbkRvYygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkb2MiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkb2MoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIERvYyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmRvYyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkb2MoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCVN0cmluZyB1cmkgPSAoKFhTU3RyaW5nKSBhcmcxLml0ZW0oMCkpLnZhbHVlKCk7Ci0KLQkJRHluYW1pY0NvbnRleHQgZGMgPSBlYy5nZXREeW5hbWljQ29udGV4dCgpOwotCQlVUkkgcmVzb2x2ZWQgPSBkYy5yZXNvbHZlVXJpKHVyaSk7Ci0JCWlmIChyZXNvbHZlZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRfZG9jKG51bGwpOwotCi0JCURvY3VtZW50IGRvYyA9IGRjLmdldERvY3VtZW50KHJlc29sdmVkKTsKLQkJaWYgKGRvYyA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmRvY19ub3RfZm91bmQobnVsbCk7Ci0KLQkJcmV0dXJuIG5ldyBEb2NUeXBlKGRvYywgZWMuZ2V0U3RhdGljQ29udGV4dCgpLmdldFR5cGVNb2RlbCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRG9jdW1lbnRVcmkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2N1bWVudFVyaS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjY2NWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Eb2N1bWVudFVyaS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcyNzQ3MzEgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjpkb2N1bWVudC11cmkgZnVuY3Rpb24KLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgxMTU5IC0gZml4IGRvY3VtZW50IGxvYWRpbmcgYW5kIHJlc29sdmluZyBVUklzIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Eb2NUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkb2N1bWVudC11cmkgcHJvcGVydHkgZm9yICRhcmcgYXMgZGVmaW5lZCBieSB0aGUKLSAqIGRtOmRvY3VtZW50LXVyaSBhY2Nlc3NvciBmdW5jdGlvbiBkZWZpbmVkIGluIFNlY3Rpb24gNi4xLjIgQWNjZXNzb3JzRE0uIElmCi0gKiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBSZXR1cm5zIHRoZSBlbXB0eQotICogc2VxdWVuY2UgaWYgdGhlIG5vZGUgaXMgbm90IGEgZG9jdW1lbnQgbm9kZSBvciBpZiBpdHMgZG9jdW1lbnQtdXJpIHByb3BlcnR5Ci0gKiBpcyBhIHJlbGF0aXZlIFVSSS4gT3RoZXJ3aXNlLCByZXR1cm5zIGFuIGFic29sdXRlIFVSSSBleHByZXNzZWQgYXMgYW4KLSAqIHhzOnN0cmluZy4KLSAqLwotcHVibGljIGNsYXNzIEZuRG9jdW1lbnRVcmkgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Eb2N1bWVudFVyaS4KLQkgKi8KLQlwdWJsaWMgRm5Eb2N1bWVudFVyaSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJkb2N1bWVudC11cmkiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZG9jdW1lbnRfdXJpKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIERvY3VtZW50LVVyaSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpkb2N1bWVudC11cmkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZG9jdW1lbnRfdXJpKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkgIHJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpZiAoIShudCBpbnN0YW5jZW9mIERvY1R5cGUpKQotCQkgIHJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJRG9jVHlwZSBkdCA9IChEb2NUeXBlKSBudDsKLQkJU3RyaW5nIGRvY3VtZW50VVJJID0gZHQudmFsdWUoKS5nZXREb2N1bWVudFVSSSgpOwotCQkKLQkJaWYgKGRvY3VtZW50VVJJICE9IG51bGwpIHsKLQkJCVhTQW55VVJJIGRvY1VyaSA9IG5ldyBYU0FueVVSSShkb2N1bWVudFVSSSk7Ci0JCQlyZXR1cm4gZG9jVXJpOwotCQl9Ci0JCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVtcHR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW1wdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkYWI4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW1wdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotCi0vKioKLSAqIElmIHRoZSB2YWx1ZSBvZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZTsKLSAqIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkVtcHR5IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkVtcHR5LgotCSAqLwotCXB1YmxpYyBGbkVtcHR5KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImVtcHR5IiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVtcHR5KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEVtcHR5IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmVtcHR5IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVtcHR5KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQlyZXR1cm4gWFNCb29sZWFuLnZhbHVlT2YoYXJnMS5lbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5jb2RlRm9yVVJJLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5jb2RlRm9yVVJJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYzhmMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVuY29kZUZvclVSSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBDYXJ2ZXIsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjg1MzIxIC0gaW5pdGlhbCBhcGkgYW5kIGltcGxlbWVudGF0aW9uIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTMxOSAtIGZpeCBVVEYtOCBlc2NhcGluZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIGFwcGx5IFVSSSBlc2NhcGluZyBydWxlcy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46ZW5jb2RlLWZvci11cmkoJHVyaS1wYXJ0IGFzIHhzOnN0cmluZz8pCi0gKiBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGFwcGxpZXMgdGhlIFVSSSBlc2NhcGluZyBydWxlcyAod2l0aCBvbmUgZXhjZXB0aW9uKSwgdG8gdGhlIHN0cmluZwotICogc3VwcGxpZWQgYXMgJHVyaS1wYXJ0LCB3aGljaCB0eXBpY2FsbHkgcmVwcmVzZW50cyBhbGwgb3IgcGFydCBvZiBhIFVSSS4gVGhlCi0gKiBlZmZlY3Qgb2YgdGhlIGZ1bmN0aW9uIGlzIHRvIGVzY2FwZSBhIHNldCBvZiBpZGVudGlmaWVkIGNoYXJhY3RlcnMgaW4gdGhlCi0gKiBzdHJpbmcuIEVhY2ggc3VjaCBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgaW4gdGhlIHN0cmluZyBieSBhbiBlc2NhcGUgc2VxdWVuY2UsCi0gKiB3aGljaCBpcyBmb3JtZWQgYnkgZW5jb2RpbmcgdGhlIGNoYXJhY3RlciBhcyBhIHNlcXVlbmNlIG9mIG9jdGV0cyBpbiBVVEYtOCwKLSAqIGFuZCB0aGVuIHJlcHJlc2VudGluZyBlYWNoIG9mIHRoZXNlIG9jdGV0cyBpbiB0aGUgZm9ybSAlSEgsIHdoZXJlIEhIIGlzIHRoZQotICogaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0LgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmICR1cmktcGFydCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIHplcm8tbGVuZ3RoIHN0cmluZy4KLSAqIDwvcD4KLSAqIAotICogCi0gKiA8cD4KLSAqIFRvIGVuc3VyZSB0aGF0IGVzY2FwZWQgVVJJcyBjYW4gYmUgY29tcGFyZWQgdXNpbmcgc3RyaW5nIGNvbXBhcmlzb24KLSAqIGZ1bmN0aW9ucywgdGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyBnZW5lcmF0ZSBoZXhhZGVjaW1hbCB2YWx1ZXMgdXNpbmcgdGhlCi0gKiB1cHBlci1jYXNlIGxldHRlcnMgQS1GLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5FbmNvZGVGb3JVUkkgZXh0ZW5kcyBBYnN0cmFjdFVSSUZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Fc2NhcGUtZm9yLVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5FbmNvZGVGb3JVUkkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZW5jb2RlLWZvci11cmkiKSwgMSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgYXJndW1lbnRzIGFmdGVyIGFwcGxpY2F0aW9uIG9mIHRoZSBVUkkKLQkgKiAgICAgICAgIGVzY2FwaW5nIHJ1bGVzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGVzY2FwZV91cmkoYXJncywgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVuZHNXaXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5kc1dpdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2N2U1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRW5kc1dpdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIG9mICRhcmcxIGVuZHMgd2l0aAotICogYSBzZXF1ZW5jZSBvZiBjb2xsYXRpb24gdW5pdHMgdGhhdCBwcm92aWRlcyBhIG1pbmltYWwgbWF0Y2ggdG8gdGhlIGNvbGxhdGlvbgotICogdW5pdHMgb2YgTSRhcmcyIGFjY29yZGluZyB0byB0aGUgY29sbGF0aW9uIHRoYXQgaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuRW5kc1dpdGggZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5FbmRzV2l0aC4KLQkgKi8KLQlwdWJsaWMgRm5FbmRzV2l0aCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJlbmRzLXdpdGgiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZW5kc193aXRoKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEVuZHMtd2l0aCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjplbmRzLXdpdGggb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZW5kc193aXRoKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlpZiAoIWFyZzIuZW1wdHkoKSkKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0KLQkJaW50IHN0cjFsZW4gPSBzdHIxLmxlbmd0aCgpOwotCQlpbnQgc3RyMmxlbiA9IHN0cjIubGVuZ3RoKCk7Ci0KLQkJaWYgKHN0cjFsZW4gPT0gMCAmJiBzdHIybGVuICE9IDApIHsKLQkJCXJldHVybiBYU0Jvb2xlYW4uRkFMU0U7Ci0JCX0KLQkJaWYgKHN0cjJsZW4gPT0gMCkgewotCQkJcmV0dXJuIFhTQm9vbGVhbi5UUlVFOwotCQl9Ci0KLQkJcmV0dXJuIFhTQm9vbGVhbi52YWx1ZU9mKHN0cjEuZW5kc1dpdGgoc3RyMikpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwMzY0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgxNDkgLSBhZGQgcmVtYWluaW5nIGZuOmVycm9yIGZ1bmN0aW9uYWxpdHkKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogVGhlIGZuOmVycm9yIGZ1bmN0aW9uIGNhdXNlcyB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgb3V0ZXJtb3N0IFhRdWVyeSBvcgotICogdHJhbnNmb3JtYXRpb24gdG8gc3RvcC4gV2hpbGUgdGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zIGEgdmFsdWUsIGFuIGVycm9yLAotICogaWYgaXQgb2NjdXJzLCBpcyByZXR1cm5lZCB0byB0aGUgZXh0ZXJuYWwgcHJvY2Vzc2luZyBlbnZpcm9ubWVudCBhcyBhbgotICogeHM6YW55VVJJIG9yIGFuIHhzOlFOYW1lLiBUaGUgZXJyb3IgeHM6YW55VVJJIGlzIGRlcml2ZWQgZnJvbSB0aGUgZXJyb3IKLSAqIHhzOlFOYW1lLiBBbiBlcnJvciB4czpRTmFtZSB3aXRoIG5hbWVzcGFjZSBVUkkgTlMgYW5kIGxvY2FsIHBhcnQgTFAgd2lsbCBiZQotICogcmV0dXJuZWQgYXMgdGhlIHhzOmFueVVSSSBOUyNMUC4gVGhlIG1ldGhvZCBieSB3aGljaCB0aGUgeHM6YW55VVJJIG9yCi0gKiB4czpRTmFtZSBpcyByZXR1cm5lZCB0byB0aGUgZXh0ZXJuYWwgcHJvY2Vzc2luZyBlbnZpcm9ubWVudCBpcyBpbXBsZW1lbnRhdGlvbgotICogZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5FcnJvciBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdCBfZXhwZWN0ZWRfYXJnczsKLQlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3QgX2V4cGVjdGVkX2FyZ3MxOwotCi0JLy8gWFhYIG92ZXJsb2FkZWQuLi4KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5FcnJvci4KLQkgKi8KLQlwdWJsaWMgRm5FcnJvcigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJlcnJvciIpLCAwLCAzKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIERpZmZlcmVudGlhdGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUgaXMgb25lIChyZXF1aXJlZCkgYXJndW1lbnQgb3Igd2hhdGV2ZXIuCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBhcmdzLnNpemUoKSA9PSAxID8gZXhwZWN0ZWRfYXJnczEoKSA6IGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUU5hbWUgY29kZSA9IG51bGw7Ci0JCVJlc3VsdFNlcXVlbmNlIGl0ZW1zID0gbnVsbDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKLQkJCi0JCS8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJncwotCQlJdGVyYXRvciBpdCA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCWlmIChpdC5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIHJzUU5hbWUgPSAoUmVzdWx0U2VxdWVuY2UpaXQubmV4dCgpOwotCQkJLy8gZm9yIGFyaXR5IDIgYW5kIDMsIHRoZSBjb2RlIGlzIG5vdCBtYW5kYXRvcnksIGFzIGluIGZuOmNvZGUoKCksICJkZXNjcmlwdGlvbikuIEhhbmRsZSB0aGlzOgotCQkJaWYgKCEgcnNRTmFtZS5lbXB0eSgpKSBjb2RlID0gKFFOYW1lKXJzUU5hbWUuZmlyc3QoKTsKLQkJfQotCQkvLyBOZXh0IGFyZyAoaWYgcHJlc2VudCkgaXMgdGhlIGRlc2NyaXB0aW9uCi0JCWlmIChpdC5oYXNOZXh0KCkpIHsKLQkJCVJlc3VsdFNlcXVlbmNlIHJzRGVzY3JpcHRpb24gPSAoUmVzdWx0U2VxdWVuY2UpaXQubmV4dCgpOwotCQkJZGVzY3JpcHRpb24gPSAoKFhTU3RyaW5nKXJzRGVzY3JpcHRpb24uZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCQkvLyBGaW5hbCBhcmcgKGlmIHByZXNlbnQpIGlzIHRoZSBsaXN0IG9mIGl0ZW1zCi0JCWlmIChpdC5oYXNOZXh0KCkpIHsKLQkJCWl0ZW1zID0gKFJlc3VsdFNlcXVlbmNlKWl0Lm5leHQoKTsKLQkJfQotCQotCQkvLyBIYW5kbGUgdGhlIGNvZGUgaWYgbWlzc2luZwotCQlpZiAoY29kZSA9PSBudWxsKSBjb2RlID0gbmV3IFFOYW1lKCJlcnIiLCAiRk9FUjAwMDAiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNS94cXQtZXJyb3JzIik7Ci0JCQotCQlyZXR1cm4gZXJyb3IoY29kZSwgZGVzY3JpcHRpb24sIGl0ZW1zKTsKLQl9Ci0KLQkvKioKLQkgKiBFcnJvciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjplcnJvciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBlcnJvcihRTmFtZSBlcnJvciwgU3RyaW5nIGRlc2NyaXB0aW9uLCBSZXN1bHRTZXF1ZW5jZSBpdGVtcykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJdGhyb3cgRHluYW1pY0Vycm9yLnVzZXJfZXJyb3IoZXJyb3IubmFtZXNwYWNlKCksIGVycm9yLmxvY2FsKCksIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShBbnlUeXBlLmNsYXNzLCBTZXFUeXBlLk9DQ19TVEFSKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJnczEoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJnczEgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MxID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MxLmFkZChuZXcgU2VxVHlwZShuZXcgUU5hbWUoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzMTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXNjYXBlSFRNTFVyaS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkVzY2FwZUhUTUxVcmkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjZGI0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXNjYXBlSFRNTFVyaS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjYyNzY1IC0gcmVuYW1lZCB0byBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MzE5IC0gZml4IFVURi04IGVzY2FwaW5nLCBhbmQgZml4IGFyaXR5IGJ1ZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIGFwcGx5IFVSSSBlc2NhcGluZyBydWxlcy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46ZXNjYXBlLWh0bWwtdXJpKCR1cmktcGFydCBhcyB4czpzdHJpbmc/LCAkZXNjYXBlLXJlc2VydmVkIGFzIHhzOmJvb2xlYW4pCi0gKiBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGFwcGxpZXMgdGhlIFVSSSBlc2NhcGluZyBydWxlcyAod2l0aCBvbmUgZXhjZXB0aW9uKSwgdG8gdGhlIHN0cmluZwotICogc3VwcGxpZWQgYXMgJHVyaS1wYXJ0LCB3aGljaCB0eXBpY2FsbHkgcmVwcmVzZW50cyBhbGwgb3IgcGFydCBvZiBhIFVSSS4gVGhlCi0gKiBlZmZlY3Qgb2YgdGhlIGZ1bmN0aW9uIGlzIHRvIGVzY2FwZSBhIHNldCBvZiBpZGVudGlmaWVkIGNoYXJhY3RlcnMgaW4gdGhlCi0gKiBzdHJpbmcuIEVhY2ggc3VjaCBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgaW4gdGhlIHN0cmluZyBieSBhbiBlc2NhcGUgc2VxdWVuY2UsCi0gKiB3aGljaCBpcyBmb3JtZWQgYnkgZW5jb2RpbmcgdGhlIGNoYXJhY3RlciBhcyBhIHNlcXVlbmNlIG9mIG9jdGV0cyBpbiBVVEYtOCwKLSAqIGFuZCB0aGVuIHJlcHJlc2VudGluZyBlYWNoIG9mIHRoZXNlIG9jdGV0cyBpbiB0aGUgZm9ybSAlSEgsIHdoZXJlIEhIIGlzIHRoZQotICogaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0LgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgdGhlIGJvb2xlYW4KLSAqIGFyZ3VtZW50ICRlc2NhcGUtcmVzZXJ2ZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgJHVyaS1wYXJ0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgemVyby1sZW5ndGggc3RyaW5nLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmICRlc2NhcGUtcmVzZXJ2ZWQgaXMgdHJ1ZSwgYWxsIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgb3RoZXIgdGhhbiB0aGUgbG93ZXIKLSAqIGNhc2UgbGV0dGVycyBhLXosIHRoZSB1cHBlciBjYXNlIGxldHRlcnMgQS1aLCB0aGUgZGlnaXRzIDAtOSwgdGhlIFBFUkNFTlQKLSAqIFNJR04gIiUiIGFuZCB0aGUgTlVNQkVSIFNJR04gIiMiLCBhcyB3ZWxsIGFzIGNlcnRhaW4gb3RoZXIgY2hhcmFjdGVyczoKLSAqIHNwZWNpZmljYWxseSwgSFlQSEVOLU1JTlVTICgiLSIpLCBMT1cgTElORSAoIl8iKSwgRlVMTCBTVE9QICIuIiwgRVhDTEFNQVRJT04KLSAqIE1BUksgIiEiLCBUSUxERSAifiIsIEFTVEVSSVNLICIqIiwgQVBPU1RST1BIRSAiJyIsIExFRlQgUEFSRU5USEVTSVMgIigiLCBhbmQKLSAqIFJJR0hUIFBBUkVOVEhFU0lTICIpIi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiAkZXNjYXBlLXJlc2VydmVkIGlzIGZhbHNlLCBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mCi0gKiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBlc2NhcGVkLiBUaGVzZSBhcmUgdGhlIGZvbGxvd2luZzogU0VNSUNPTE9OICI7IiwKLSAqIFNPTElEVVMgIi8iLCBRVUVTVElPTiBNQVJLICI/IiwgQ09MT04gIjoiLCBDT01NRVJDSUFMIEFUICJAIiwgQU1QRVJTQU5EICImIiwKLSAqIEVRVUFMUyBTSUdOICI9IiwgUExVUyBTSUdOICIrIiwgRE9MTEFSIFNJR04gIiQiLCBDT01NQSAiLCIsIExFRlQgU1FVQVJFCi0gKiBCUkFDS0VUICJbIiBhbmQgUklHSFQgU1FVQVJFIEJSQUNLRVQgIl0iLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRvIGVuc3VyZSB0aGF0IGVzY2FwZWQgVVJJcyBjYW4gYmUgY29tcGFyZWQgdXNpbmcgc3RyaW5nIGNvbXBhcmlzb24KLSAqIGZ1bmN0aW9ucywgdGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyBnZW5lcmF0ZSBoZXhhZGVjaW1hbCB2YWx1ZXMgdXNpbmcgdGhlCi0gKiB1cHBlci1jYXNlIGxldHRlcnMgQS1GLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIEdlbmVyYWxseSwgJGVzY2FwZS1yZXNlcnZlZCBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiBlc2NhcGluZyBhIHN0cmluZyB0aGF0Ci0gKiBpcyB0byBmb3JtIGEgc2luZ2xlIHBhcnQgb2YgYSBVUkksIGFuZCB0byBmYWxzZSB3aGVuIGVzY2FwaW5nIGFuIGVudGlyZSBVUkkKLSAqIG9yIFVSSSByZWZlcmVuY2UuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogU2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBlc2NhcGUgdGhlIFBFUkNFTlQgU0lHTiAiJSIgYW5kIHRoaXMgY2hhcmFjdGVyCi0gKiBpcyBub3QgYWxsb3dlZCBpbiBhIFVSSSwgdXNlcnMgd2lzaGluZyB0byBjb252ZXJ0IGNoYXJhY3RlciBzdHJpbmdzLCBzdWNoIGFzCi0gKiBmaWxlIG5hbWVzLCB0aGF0IGluY2x1ZGUgIiUiIHRvIGEgVVJJIHNob3VsZCBtYW51YWxseSBlc2NhcGUgIiUiIGJ5IHJlcGxhY2luZwotICogaXQgd2l0aCAiJTI1Ii4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuRXNjYXBlSFRNTFVyaSBleHRlbmRzIEFic3RyYWN0VVJJRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkVzY2FwZS1odG1sLVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5Fc2NhcGVIVE1MVXJpKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImVzY2FwZS1odG1sLXVyaSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudHMgYWZ0ZXIgYXBwbGljYXRpb24gb2YgdGhlIFVSSQotCSAqICAgICAgICAgZXNjYXBpbmcgcnVsZXMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZXNjYXBlX3VyaShhcmdzLCBmYWxzZSwgZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FeGFjdGx5T25lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRXhhY3RseU9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTk4ZjI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FeGFjdGx5T25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIFJldHVybnMgJGFyZyBpZiBpdCBjb250YWlucyBleGFjdGx5IG9uZSBpdGVtLiBPdGhlcndpc2UsIHJhaXNlcyBhbiBlcnJvcgotICogW2VycjpGT1JHMDAwNV0uIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiAkYXJnLgotICovCi1wdWJsaWMgY2xhc3MgRm5FeGFjdGx5T25lIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkV4YWN0bHlPbmUuCi0JICovCi0JcHVibGljIEZuRXhhY3RseU9uZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJleGFjdGx5LW9uZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBleGFjdGx5X29uZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBFeGFjdGx5LW9uZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpleGFjdGx5LW9uZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBleGFjdGx5X29uZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5ub3Rfb25lKG51bGwpOwotCi0JCXJldHVybiBhcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4aXN0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkV4aXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDZlOGY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5FeGlzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLQotLyoqCi0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyBub3QgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlOwotICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KLSAqLwotcHVibGljIGNsYXNzIEZuRXhpc3RzIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkV4aXN0cy4KLQkgKi8KLQlwdWJsaWMgRm5FeGlzdHMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXhpc3RzIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGV4aXN0cyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBFeGlzdHMgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZXhpc3RzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGV4aXN0cyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA9PSAxOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGNpdGVyID0gYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJcmV0dXJuIFhTQm9vbGVhbi52YWx1ZU9mKCEgYXJnMS5lbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRmFsc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GYWxzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjhlN2MzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GYWxzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB4czpib29sZWFuIHZhbHVlIGZhbHNlLiBFcXVpdmFsZW50IHRvIHhzOmJvb2xlYW4oIjAiKS4KLSAqLwotcHVibGljIGNsYXNzIEZuRmFsc2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuRmFsc2UuCi0JICovCi0JcHVibGljIEZuRmFsc2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZmFsc2UiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZm5fZmFsc2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogRmFsc2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46ZmFsc2Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fZmFsc2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuRmxvb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GbG9vci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDIzZmMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5GbG9vci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbGFyZ2VzdCAoY2xvc2VzdCB0byBwb3NpdGl2ZSBpbmZpbml0eSkgbnVtYmVyIHdpdGggbm8gZnJhY3Rpb25hbAotICogcGFydCB0aGF0IGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mICRhcmcuIElmIHR5cGUgb2YgJGFyZyBpcyBvbmUgb2YKLSAqIHRoZSBmb3VyIG51bWVyaWMgdHlwZXMgeHM6ZmxvYXQsIHhzOmRvdWJsZSwgeHM6ZGVjaW1hbCBvciB4czppbnRlZ2VyIHRoZSB0eXBlCi0gKiBvZiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mICRhcmcuIElmIHRoZSB0eXBlIG9mICRhcmcgaXMgYSB0eXBlCi0gKiBkZXJpdmVkIGZyb20gb25lIG9mIHRoZSBudW1lcmljIHR5cGVzLCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBiYXNlCi0gKiBudW1lcmljIHR5cGUuIEZvciBmbG9hdCBhbmQgZG91YmxlIGFyZ3VtZW50cywgaWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlCi0gKiB6ZXJvICgrMCksIHRoZW4gcG9zaXRpdmUgemVybyAoKzApIGlzIHJldHVybmVkLiBJZiB0aGUgYXJndW1lbnQgaXMgbmVnYXRpdmUKLSAqIHplcm8gKC0wKSwgdGhlbiBuZWdhdGl2ZSB6ZXJvICgtMCkgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkZsb29yIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkZsb29yLgotCSAqLwotCXB1YmxpYyBGbkZsb29yKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImZsb29yIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gMSBhcmd1bWVudCBvbmx5IQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJcmV0dXJuIGZuX2Zsb29yKGFyZ3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBGbG9vciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmZsb29yIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX2Zsb29yKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCU51bWVyaWNUeXBlIG50ID0gRm5BYnMuZ2V0X3NpbmdsZV9udW1lcmljX2FyZyhhcmcpOwotCi0JCS8vIGVtcHR5IGFyZwotCQlpZiAobnQgPT0gbnVsbCkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJcmV0dXJuIG50LmZsb29yKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbURhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcwMTRhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAwIGFuZCAyMywgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUKLSAqIGhvdXJzIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkhvdXJzRnJvbURhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSG91cnNGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuSG91cnNGcm9tRGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaG91cnMtZnJvbS1kYXRlVGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBob3Vyc19mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBIb3Vycy1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmhvdXJzLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaG91cnNfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQuaG91cigpOwotCi0JCXJldHVybiBuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkhvdXJzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyZGZlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGV4cGVjdGVkIHhzOmR1cmF0aW9uIGFyZ3VtZW50LiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBob3VycyBjb21wb25lbnQgaW4gdGhlIGNhbm9uaWNhbAotICogbGV4aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgJGFyZy4gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUuIElmCi0gKiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkhvdXJzRnJvbUR1cmF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSG91cnNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuSG91cnNGcm9tRHVyYXRpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaG91cnMtZnJvbS1kdXJhdGlvbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBob3Vyc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEhvdXJzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46aG91cnMtZnJvbS1kdXJhdGlvbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBob3Vyc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiBkdGQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdGQuaG91cnMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEdXJhdGlvbigpLAotCQkJCQlTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21UaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSG91cnNGcm9tVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmE0MjgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ib3Vyc0Zyb21UaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgYmV0d2VlbiAwIGFuZCAyMywgYm90aCBpbmNsdXNpdmUsIHJlcHJlc2VudGluZyB0aGUKLSAqIHZhbHVlIG9mIHRoZSBob3VycyBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Ib3Vyc0Zyb21UaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSG91cnNGcm9tVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5Ib3Vyc0Zyb21UaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImhvdXJzLWZyb20tdGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBob3Vyc19mcm9tX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogSG91cnMtZnJvbS1UaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmhvdXJzLWZyb20tdGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBob3Vyc19mcm9tX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQotCQlYU1RpbWUgZHQgPSAoWFNUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0LmhvdXIoKTsKLQotCQlyZXR1cm4gbmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSUQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2QyM2NlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgU3RhbmRhcmQgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogCSAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgxMTY4IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyICAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkF0dHJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5FbGVtZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0lEUkVGOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudCBub2RlcyB0aGF0IGhhdmUgYW4gSUQgdmFsdWUgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIG9uZQotICogb3IgbW9yZSBvZiB0aGUgSURSRUYgdmFsdWVzIHN1cHBsaWVkIGluICRhcmcgLgotICovCi1wdWJsaWMgY2xhc3MgRm5JRCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbnNlcnRCZWZvcmUuCi0JICovCi0JcHVibGljIEZuSUQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaWQiKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpZChhcmdzLCBlYyk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0LUJlZm9yZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjppbnNlcnQtYmVmb3JlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGlkKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJCi0JCUl0ZXJhdG9yIGFyZ0l0ID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgaWRyZWZSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQlTdHJpbmdbXSBpZHJlZnN0ID0gaWRyZWZSUy5maXJzdCgpLmdldFN0cmluZ1ZhbHVlKCkuc3BsaXQoIiAiKTsKLQotCQlBcnJheUxpc3QgaWRyZWZzID0gY3JlYXRlSURSZWZzKGlkcmVmc3QpOwotCQlSZXN1bHRTZXF1ZW5jZSBub2RlQXJnID0gbnVsbDsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSBudWxsOwotCQlpZiAoYXJnSXQuaGFzTmV4dCgpKSB7Ci0JCQlub2RlQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCQlub2RlVHlwZSA9IChOb2RlVHlwZSlub2RlQXJnLmZpcnN0KCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY29udGV4dC5nZXRDb250ZXh0SXRlbSgpID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJfQotCQkJaWYgKCEoY29udGV4dC5nZXRDb250ZXh0SXRlbSgpIGluc3RhbmNlb2YgTm9kZVR5cGUpKSB7Ci0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCX0KLQkJCW5vZGVUeXBlID0gKE5vZGVUeXBlKSBjb250ZXh0LmdldENvbnRleHRJdGVtKCk7Ci0JCQlpZiAobm9kZVR5cGUubm9kZV92YWx1ZSgpLmdldE93bmVyRG9jdW1lbnQoKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJfQotCQkKLQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQlpZiAobm9kZS5nZXRPd25lckRvY3VtZW50KCkgPT0gbnVsbCkgewotCQkJLy8gVzNDIFRlc3Qgc3VpdGUgc2VlbXMgdG8gd2FudCBYUERZMDAwMgotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCS8vdGhyb3cgRHluYW1pY0Vycm9yLm5vQ29udGV4dERvYygpOwotCQl9Ci0JCQotCQlpZiAoaGFzSURSRUYoaWRyZWZzLCBub2RlKSkgewotCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCkgbm9kZSwgY29udGV4dC5nZXRTdGF0aWNDb250ZXh0KCkuZ2V0VHlwZU1vZGVsKCkpOwotCQkJcnMuYWRkKGVsZW1lbnQpOwotCQl9Ci0JCQotCQlwcm9jZXNzQXR0cmlidXRlcyhub2RlLCBpZHJlZnMsIHJzLCBjb250ZXh0KTsKLQkJcHJvY2Vzc0NoaWxkTm9kZXMobm9kZSwgaWRyZWZzLCBycywgY29udGV4dCk7Ci0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdCBjcmVhdGVJRFJlZnMoU3RyaW5nW10gaWRSZWZ0b2tlbnMpIHsKLQkJQXJyYXlMaXN0IHhzaWRSZWYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaWRSZWZ0b2tlbnMubGVuZ3RoOyBpKyspIHsKLQkJCVhTSURSRUYgaWRyZWYgPSBuZXcgWFNJRFJFRihpZFJlZnRva2Vuc1tpXSk7Ci0JCQl4c2lkUmVmLmFkZChpZHJlZik7Ci0JCX0KLQkJcmV0dXJuIHhzaWRSZWY7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJvY2Vzc0NoaWxkTm9kZXMoTm9kZSBub2RlLCBMaXN0IGlkcmVmcywgUmVzdWx0QnVmZmVyIHJzLCBFdmFsdWF0aW9uQ29udGV4dCBjb250ZXh0KSB7Ci0JCWlmICghbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJTm9kZUxpc3Qgbm9kZUxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkJZm9yIChpbnQgbm9kZWNudCA9IDA7IG5vZGVjbnQgPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgbm9kZWNudCsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IG5vZGVMaXN0Lml0ZW0obm9kZWNudCk7Ci0JCQlpZiAoY2hpbGROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUgJiYgIWlzRHVwbGljYXRlKGNoaWxkTm9kZSwgcnMpKSB7Ci0JCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCljaGlsZE5vZGUsIGNvbnRleHQuZ2V0U3RhdGljQ29udGV4dCgpLmdldFR5cGVNb2RlbCgpKTsKLQkJCQlpZiAoZWxlbWVudC5pc0lEKCkpIHsKLQkJCQkJaWYgKGhhc0lEUkVGKGlkcmVmcywgY2hpbGROb2RlKSkgewotCQkJCQkJcnMuYWRkKGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJfSAKLQkJCQlwcm9jZXNzQXR0cmlidXRlcyhjaGlsZE5vZGUsIGlkcmVmcywgcnMsIGNvbnRleHQpOwotCQkJCXByb2Nlc3NDaGlsZE5vZGVzKGNoaWxkTm9kZSwgaWRyZWZzLCBycywgY29udGV4dCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3NBdHRyaWJ1dGVzKE5vZGUgbm9kZSwgTGlzdCBpZHJlZnMsIFJlc3VsdEJ1ZmZlciBycywgRXZhbHVhdGlvbkNvbnRleHQgY29udGV4dCkgewotCQlpZiAoIW5vZGUuaGFzQXR0cmlidXRlcygpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVMaXN0ID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWZvciAoaW50IGF0c3ViID0gMDsgYXRzdWIgPCBhdHRyaWJ1dGVMaXN0LmdldExlbmd0aCgpOyBhdHN1YisrKSB7Ci0JCQlBdHRyIGF0Tm9kZSA9IChBdHRyKSBhdHRyaWJ1dGVMaXN0Lml0ZW0oYXRzdWIpOwotCQkJTm9kZVR5cGUgYXRUeXBlID0gbmV3IEF0dHJUeXBlKGF0Tm9kZSwgY29udGV4dC5nZXRTdGF0aWNDb250ZXh0KCkuZ2V0VHlwZU1vZGVsKCkpOwotCQkJaWYgKGF0VHlwZS5pc0lEKCkpIHsKLQkJCQlpZiAoaGFzSURSRUYoaWRyZWZzLCBhdE5vZGUpKSB7Ci0JCQkJCWlmICghaXNEdXBsaWNhdGUobm9kZSwgcnMpKSB7Ci0JCQkJCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KW5vZGUsIGNvbnRleHQuZ2V0U3RhdGljQ29udGV4dCgpLmdldFR5cGVNb2RlbCgpKTsKLQkJCQkJCXJzLmFkZChlbGVtZW50KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc0lEUkVGKExpc3QgaWRyZWZzLCBOb2RlIG5vZGUpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpZHJlZnMuc2l6ZSgpOyBpKyspIHsKLQkJCVhTSURSRUYgaWRyZWYgPSAoWFNJRFJFRikgaWRyZWZzLmdldChpKTsKLQkJCWlmIChpZHJlZi5nZXRTdHJpbmdWYWx1ZSgpLmVxdWFscyhub2RlLmdldE5vZGVWYWx1ZSgpKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0R1cGxpY2F0ZShOb2RlIG5vZGUsIFJlc3VsdEJ1ZmZlciBycykgewotCQlJdGVyYXRvciBpdCA9IHJzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWlmIChpdC5uZXh0KCkuZXF1YWxzKG5vZGUpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1NUQVIpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JRFJFRi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklEUkVGLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OWMwYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklEUkVGLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBTdGFuZGFyZCBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAJICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODExNjggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gYnVnIDI4MTE4NiAtIGltcGxlbWVudGF0aW9uIG9mIGZuOmlkIGFuZCBmbjppZHJlZgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQXR0clR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSUQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEZuSURSRUYgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW5zZXJ0QmVmb3JlLgotCSAqLwotCXB1YmxpYyBGbklEUkVGKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImlkcmVmIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gaWRyZWYoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIEluc2VydC1CZWZvcmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmluc2VydC1iZWZvcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaWRyZWYoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJCi0JCUl0ZXJhdG9yIGFyZ0l0ID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgaWRyZWZSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQlTdHJpbmdbXSBpZHN0ID0gaWRyZWZSUy5maXJzdCgpLmdldFN0cmluZ1ZhbHVlKCkuc3BsaXQoIiAiKTsKLQotCQlBcnJheUxpc3QgaWRzID0gY3JlYXRlSURzKGlkc3QpOwotCQlSZXN1bHRTZXF1ZW5jZSBub2RlQXJnID0gbnVsbDsKLQkJTm9kZVR5cGUgbm9kZVR5cGUgPSBudWxsOwotCQlpZiAoYXJnSXQuaGFzTmV4dCgpKSB7Ci0JCQlub2RlQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdJdC5uZXh0KCk7Ci0JCQlub2RlVHlwZSA9IChOb2RlVHlwZSlub2RlQXJnLmZpcnN0KCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZWMuZ2V0Q29udGV4dEl0ZW0oKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJCWlmICghKGVjLmdldENvbnRleHRJdGVtKCkgaW5zdGFuY2VvZiBOb2RlVHlwZSkpIHsKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJfQotCQkJbm9kZVR5cGUgPSAoTm9kZVR5cGUpIGVjLmdldENvbnRleHRJdGVtKCk7Ci0JCQlpZiAobm9kZVR5cGUubm9kZV92YWx1ZSgpLmdldE93bmVyRG9jdW1lbnQoKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJfQotCQkKLQkJTm9kZSBub2RlID0gbm9kZVR5cGUubm9kZV92YWx1ZSgpOwotCQlpZiAobm9kZS5nZXRPd25lckRvY3VtZW50KCkgPT0gbnVsbCkgewotCQkJLy8gVzNDIHRlc3Qgc3VpdGUgc2VlbXMgdG8gd2FudCBYUERZMDAwMiBoZXJlCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJLy90aHJvdyBEeW5hbWljRXJyb3Iubm9Db250ZXh0RG9jKCk7Ci0JCX0KLQkJCi0JCWlmIChoYXNJRChpZHMsIG5vZGUpKSB7Ci0JCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gbmV3IEVsZW1lbnRUeXBlKChFbGVtZW50KSBub2RlLCBlYy5nZXRTdGF0aWNDb250ZXh0KCkuZ2V0VHlwZU1vZGVsKCkpOwotCQkJcnMuYWRkKGVsZW1lbnQpOwotCQl9Ci0JCQotCQlycyA9IHByb2Nlc3NBdHRyaWJ1dGVzKG5vZGUsIGlkcywgcnMsIGVjKTsKLQkJcnMgPSBwcm9jZXNzQ2hpbGROb2Rlcyhub2RlLCBpZHMsIHJzLCBlYyk7Ci0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdCBjcmVhdGVJRHMoU3RyaW5nW10gaWR0b2tlbnMpIHsKLQkJQXJyYXlMaXN0IHhzaWQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaWR0b2tlbnMubGVuZ3RoOyBpKyspIHsKLQkJCVhTSUQgaWQgPSBuZXcgWFNJRChpZHRva2Vuc1tpXSk7Ci0JCQl4c2lkLmFkZChpZCk7Ci0JCX0KLQkJcmV0dXJuIHhzaWQ7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFJlc3VsdEJ1ZmZlciBwcm9jZXNzQ2hpbGROb2RlcyhOb2RlIG5vZGUsIExpc3QgaWRzLCBSZXN1bHRCdWZmZXIgcnMsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB7Ci0JCWlmICghbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCXJldHVybiByczsKLQkJfQotCQkKLQkJTm9kZUxpc3Qgbm9kZUxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkJZm9yIChpbnQgbm9kZWNudCA9IDA7IG5vZGVjbnQgPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgbm9kZWNudCsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IG5vZGVMaXN0Lml0ZW0obm9kZWNudCk7Ci0JCQlpZiAoY2hpbGROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUgJiYgIWlzRHVwbGljYXRlKGNoaWxkTm9kZSwgcnMpKSB7Ci0JCQkJRWxlbWVudFR5cGUgZWxlbWVudCA9IG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCljaGlsZE5vZGUsIGVjLmdldFN0YXRpY0NvbnRleHQoKS5nZXRUeXBlTW9kZWwoKSk7Ci0JCQkJaWYgKGVsZW1lbnQuaXNJRFJFRigpKSB7Ci0JCQkJCWlmIChoYXNJRChpZHMsIGNoaWxkTm9kZSkpIHsKLQkJCQkJCXJzLmFkZChlbGVtZW50KTsKLQkJCQkJfQotCQkJCX0gCi0JCQkJcnMgPSBwcm9jZXNzQXR0cmlidXRlcyhjaGlsZE5vZGUsIGlkcywgcnMsIGVjKTsKLQkJCQlycyA9IHByb2Nlc3NDaGlsZE5vZGVzKGNoaWxkTm9kZSwgaWRzLCBycywgZWMpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcnM7Ci0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUmVzdWx0QnVmZmVyIHByb2Nlc3NBdHRyaWJ1dGVzKE5vZGUgbm9kZSwgTGlzdCBpZHJlZnMsIFJlc3VsdEJ1ZmZlciBycywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQkJaWYgKCFub2RlLmhhc0F0dHJpYnV0ZXMoKSkgewotCQkJcmV0dXJuIHJzOwotCQl9Ci0JCQotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlTGlzdCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlmb3IgKGludCBhdHN1YiA9IDA7IGF0c3ViIDwgYXR0cmlidXRlTGlzdC5nZXRMZW5ndGgoKTsgYXRzdWIrKykgewotCQkJQXR0ciBhdE5vZGUgPSAoQXR0cikgYXR0cmlidXRlTGlzdC5pdGVtKGF0c3ViKTsKLQkJCU5vZGVUeXBlIGF0VHlwZSA9IG5ldyBBdHRyVHlwZShhdE5vZGUsIGVjLmdldFN0YXRpY0NvbnRleHQoKS5nZXRUeXBlTW9kZWwoKSk7Ci0JCQlpZiAoYXRUeXBlLmlzSUQoKSkgewotCQkJCWlmIChoYXNJRChpZHJlZnMsIGF0Tm9kZSkpIHsKLQkJCQkJaWYgKCFpc0R1cGxpY2F0ZShub2RlLCBycykpIHsKLQkJCQkJCUVsZW1lbnRUeXBlIGVsZW1lbnQgPSBuZXcgRWxlbWVudFR5cGUoKEVsZW1lbnQpbm9kZSwgZWMuZ2V0U3RhdGljQ29udGV4dCgpLmdldFR5cGVNb2RlbCgpKTsKLQkJCQkJCXJzLmFkZChlbGVtZW50KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzSUQoTGlzdCBpZHMsIE5vZGUgbm9kZSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGlkcy5zaXplKCk7IGkrKykgewotCQkJWFNJRCBpZHJlZiA9IChYU0lEKSBpZHMuZ2V0KGkpOwotCQkJaWYgKGlkcmVmLmdldFN0cmluZ1ZhbHVlKCkuZXF1YWxzKG5vZGUuZ2V0Tm9kZVZhbHVlKCkpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRHVwbGljYXRlKE5vZGUgbm9kZSwgUmVzdWx0QnVmZmVyIHJzKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJaWYgKGl0Lm5leHQoKS5lcXVhbHMobm9kZSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfU1RBUik7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkltcGxpY2l0VGltZXpvbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbXBsaWNpdFRpbWV6b25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YWIwODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkltcGxpY2l0VGltZXpvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbXBsaWNpdCB0aW1lem9uZSBwcm9wZXJ0eSBmcm9tIHRoZSBkeW5hbWljIGNvbnRleHQuCi0gKiBDb21wb25lbnRzIG9mIHRoZSBkeW5hbWljIGNvbnRleHQgYXJlIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEMuMiBEeW5hbWljCi0gKiBDb250ZXh0IENvbXBvbmVudHMKLSAqLwotcHVibGljIGNsYXNzIEZuSW1wbGljaXRUaW1lem9uZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbXBsaWNpdFRpbWV6b25lLgotCSAqLwotCXB1YmxpYyBGbkltcGxpY2l0VGltZXpvbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW1wbGljaXQtdGltZXpvbmUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpbXBsaWNpdF90aW1lem9uZShhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBJbXBsaWNpdC1UaW1lem9uZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIGR5bmFtaWMgY29udGV4dCBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmltcGxpY2l0LXRpbWV6b25lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGltcGxpY2l0X3RpbWV6b25lKENvbGxlY3Rpb24gYXJncywKLQkJCUR5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDA7Ci0KLQkJQW55VHlwZSByZXMgPSBuZXcgWFNEYXlUaW1lRHVyYXRpb24oZGMuZ2V0VGltZXpvbmVPZmZzZXQoKSk7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluU2NvcGVQcmVmaXhlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkluU2NvcGVQcmVmaXhlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWNkZjYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JblNjb3BlUHJlZml4ZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFJldHVybnMgdGhlIGluLXNjb3BlLXByZWZpeGVzIGZvciB0aGUgZWxlbWVudCBhbmQgYW55IG9mIGl0J3MgYW5jZXN0b3JzLgotICovCi1wdWJsaWMgY2xhc3MgRm5JblNjb3BlUHJlZml4ZXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5QcmVmaXhGcm9tUU5hbWUKLQkgKi8KLQlwdWJsaWMgRm5JblNjb3BlUHJlZml4ZXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiaW4tc2NvcGUtcHJlZml4ZXMiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBpblNjb3BlUHJlZml4ZXMoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUHJlZml4LWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cHJlZml4LWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaW5TY29wZVByZWZpeGVzKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0vLwkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBhcmdzOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCSAgcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCQotCQlJdGVtIGFueXR5cGUgPSBhcmcxLml0ZW0oMCk7Ci0JCWlmICghKGFueXR5cGUgaW5zdGFuY2VvZiBFbGVtZW50VHlwZSkpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0JCX0KLQotCQlFbGVtZW50VHlwZSBlbGVtZW50ID0gKEVsZW1lbnRUeXBlKSBhbnl0eXBlOwotCQlMaXN0IHByZWZpeExpc3QgPSBsb29rdXBQcmVmaXhlcyhlbGVtZW50KTsKLQkJY3JlYXRlUHJlZml4UmVzdWx0U2V0KHJzLCBwcmVmaXhMaXN0KTsKLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcmVmaXhSZXN1bHRTZXQoUmVzdWx0QnVmZmVyIHJzLCBMaXN0IHByZWZpeExpc3QpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcmVmaXhMaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgcHJlZml4TGlzdC5nZXQoaSk7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKHByZWZpeCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBsb29rdXBQcmVmaXhlcyhFbGVtZW50VHlwZSBlbGVtZW50KSB7Ci0JCUVsZW1lbnQgZG9tRWxtID0gKEVsZW1lbnQpIGVsZW1lbnQubm9kZV92YWx1ZSgpOwotCQkKLQkJTGlzdCBwcmVmaXhMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlOb2RlIG5vZGUgPSBkb21FbG07Ci0JCQotCQl3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkRPQ1VNRU5UX05PREUpIHsKLQkJCU5hbWVkTm9kZU1hcCBhdHRycyA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cnMuaXRlbShpKTsKLQkJCQlTdHJpbmcgcHJlZml4ID0gbnVsbDsKLQkJCQlpZiAoYXR0ci5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsICYmCi0JCQkJCWF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFhNTENvbnN0YW50cy5YTUxOU19BVFRSSUJVVEVfTlNfVVJJKSkgewotCQkJCQkvLyBEZWZhdWx0IE5hbWVzcGFjZQotCQkJCQlpZiAoYXR0ci5nZXROb2RlTmFtZSgpLmVxdWFscyhYTUxDb25zdGFudHMuWE1MTlNfQVRUUklCVVRFKSkgewotCQkJCQkJcHJlZml4ID0gIiI7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvLyBTaG91bGQgd2UgY2hlY2sgdGhlIG5hbWVzcGFjZSBpbiB0aGUgRHluYW1pYyBDb250ZXh0IGFuZCByZXR1cm4gdGhhdD8/PwotCQkJCQkJcHJlZml4ID0gYXR0ci5nZXRMb2NhbE5hbWUoKTsKLQkJCQkJfQotCQkJCQlpZiAocHJlZml4ICE9IG51bGwpIHsKLQkJCQkJCWlmICghcHJlZml4TGlzdC5jb250YWlucyhwcmVmaXgpKSB7Ci0JCQkJCQkJcHJlZml4TGlzdC5hZGQocHJlZml4KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQkJbm9kZSA9IG5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotCQl9Ci0JCXJldHVybiBwcmVmaXhMaXN0OwotCX0KLQkKLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBFbGVtZW50VHlwZSgpLCBTZXFUeXBlLk9DQ19QTFVTKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbmRleE9mLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5kZXhPZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhkNDZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbmRleE9mLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgY29sbGF0aW9uIGFuZCBjb21wYXJpc29uIGlzc3Vlcy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIFJldHVybnMgYSBzZXF1ZW5jZSBvZiBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZpbmcgdGhlIHBvc2l0aW9ucyB3aXRoaW4gdGhlCi0gKiBzZXF1ZW5jZSAkc2VxUGFyYW0gb2YgaXRlbXMgdGhhdCBhcmUgZXF1YWwgdG8gJHNyY2hQYXJhbS4KLSAqLwotcHVibGljIGNsYXNzIEZuSW5kZXhPZiBleHRlbmRzIEFic3RyYWN0Q29sbGF0aW9uRXF1YWxGdW5jdGlvbiB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuSW5kZXhPZi4KLQkgKi8KLQlwdWJsaWMgRm5JbmRleE9mKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImluZGV4LW9mIiksIDIsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQkJcmV0dXJuIGluZGV4X29mKGFyZ3MsIGVjLmdldER5bmFtaWNDb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGNvbXBhcmFibGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIGV4cHJlc3Npb24gb2YgYW55IHR5cGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBDbXBFcSBnZXRfY29tcGFyYWJsZShBbnlUeXBlIGF0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCVhTU3RyaW5nIG5vZGVTdHJpbmcgPSBuZXcgWFNTdHJpbmcoYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQlyZXR1cm4gbm9kZVN0cmluZzsKLQkJfQotCQkKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5ub3RfY21wKG51bGwpOwotCi0JCXJldHVybiAoQ21wRXEpIGF0OwotCX0KLQotCS8qKgotCSAqIEluZGV4LU9mIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGR5bmFtaWNDb250ZXh0IAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjppbmRleC1vZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBpbmRleF9vZihDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCUZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQkKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCS8vIHNhbml0eSBjaGV4Ci0JCWlmIChhcmcyLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCi0JCVN0cmluZyBjb2xsYXRpb25VcmkgPSBkYy5nZXRDb2xsYXRpb25Qcm92aWRlcigpLmdldERlZmF1bHRDb2xsYXRpb24oKTsKLQkJaWYgKGNpdGVyLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgYXJnMyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQkJaWYgKCFhcmczLmVtcHR5KCkpIHsKLQkJCQlYU1N0cmluZyBjb2xsYXRpb24gPSAoWFNTdHJpbmcpIGFyZzMuZmlyc3QoKTsKLQkJCQljb2xsYXRpb25VcmkgPSBjb2xsYXRpb24uZ2V0U3RyaW5nVmFsdWUoKTsKLQkJCX0KLQkJfQotCi0JCVJlc3VsdEJ1ZmZlciByYiA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJQW55QXRvbWljVHlwZSBhdCA9IChBbnlBdG9taWNUeXBlKWFyZzIuZmlyc3QoKTsKLQotCQlnZXRfY29tcGFyYWJsZShhdCk7Ci0KLQkJaW50IGluZGV4ID0gMTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQW55VHlwZSBjbXB0eXBlID0gKEFueVR5cGUpIGkubmV4dCgpOwotCQkJZ2V0X2NvbXBhcmFibGUoY21wdHlwZSk7Ci0KLQkJCWlmICghKGF0IGluc3RhbmNlb2YgQ21wRXEpKQotCQkJCWNvbnRpbnVlOwotCQkJCi0JCQlpZiAoaXNCb29sZWFuKGNtcHR5cGUsIGF0KSkgewotCQkJCVhTQm9vbGVhbiBib29sYXQgPSAoWFNCb29sZWFuKSBjbXB0eXBlOwotCQkJCWlmIChib29sYXQuZXEoYXQsIGRjKSkgewotIAkJCQkgICByYi5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoaW5kZXgpKSk7Ci0JCQkJfQotCQkJfSBlbHNlIAotCQkJCi0JCQlpZiAoaXNOdW1lcmljKGNtcHR5cGUsIGF0KSkgewotCQkJCU51bWVyaWNUeXBlIG51bWVyaWNhdCA9IChOdW1lcmljVHlwZSkgYXQ7Ci0JCQkJaWYgKG51bWVyaWNhdC5lcShjbXB0eXBlLCBkYykpIHsKLQkJCQkJcmIuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGluZGV4KSkpOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCi0JCQlpZiAoaXNEdXJhdGlvbihjbXB0eXBlLCBhdCkpIHsKLQkJCQlYU0R1cmF0aW9uIGR1cmF0ID0gKFhTRHVyYXRpb24pIGF0OwotCQkJCWlmIChkdXJhdC5lcShjbXB0eXBlLCBkYykpIHsKLQkJCQkJcmIuYWRkKG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGluZGV4KSkpOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCi0JCQlpZiAobmVlZHNTdHJpbmdDb21wYXJpc29uKGNtcHR5cGUsIGF0KSkgewotCQkJCVhTU3RyaW5nIHhzdHIxID0gbmV3IFhTU3RyaW5nKGNtcHR5cGUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJWFNTdHJpbmcgaXRlbVN0ciA9IG5ldyBYU1N0cmluZyhhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQlpZiAoRm5Db21wYXJlLmNvbXBhcmVfc3RyaW5nKGNvbGxhdGlvblVyaSwgeHN0cjEsIGl0ZW1TdHIsIGRjKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgewotCQkJCQlyYi5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoaW5kZXgpKSk7Ci0JCQkJfQotCQkJfSAKLQkJCQotCQkJaW5kZXgrKzsKLQkJfQotCi0JCXJldHVybiByYi5nZXRTZXF1ZW5jZSgpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUoQW55VHlwZS5jbGFzcywgU2VxVHlwZS5PQ0NfU1RBUik7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShBbnlBdG9taWNUeXBlLmNsYXNzLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbnNlcnRCZWZvcmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JbnNlcnRCZWZvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQxNTkwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuSW5zZXJ0QmVmb3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGEgbmV3IHNlcXVlbmNlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHZhbHVlIG9mICR0YXJnZXQgd2l0aCB0aGUgdmFsdWUKLSAqIG9mICRpbnNlcnRzIGluc2VydGVkIGF0IHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIG9mICRwb3NpdGlvbi4KLSAqIChUaGUgdmFsdWUgb2YgJHRhcmdldCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHNlcXVlbmNlIGNvbnN0cnVjdGlvbi4pCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkluc2VydEJlZm9yZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5JbnNlcnRCZWZvcmUuCi0JICovCi0JcHVibGljIEZuSW5zZXJ0QmVmb3JlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImluc2VydC1iZWZvcmUiKSwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQlyZXR1cm4gaW5zZXJ0X2JlZm9yZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQtQmVmb3JlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmluc2VydC1iZWZvcmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgaW5zZXJ0X2JlZm9yZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMzsKLQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHRhcmdldCA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGluc2VydHMgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQotCQkvLyBzYW5pdHkgY2hleAotCQlpZiAoYXJnMi5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlbSBhdCA9IGFyZzIuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0ludGVnZXIpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkvLyBYWFggY2xvbmluZyEKLQkJaWYgKHRhcmdldC5lbXB0eSgpKQotCQkJcmV0dXJuIGluc2VydHM7Ci0JCWlmIChpbnNlcnRzLmVtcHR5KCkpCi0JCQlyZXR1cm4gdGFyZ2V0OwotCi0JCWludCBwb3NpdGlvbiA9ICgoWFNJbnRlZ2VyKSBhdCkuaW50X3ZhbHVlKCkuaW50VmFsdWUoKTsKLQotCQlpZiAocG9zaXRpb24gPCAxKQotCQkJcG9zaXRpb24gPSAxOwotCQlpbnQgdGFyZ2V0X3NpemUgPSB0YXJnZXQuc2l6ZSgpOwotCi0JCWlmIChwb3NpdGlvbiA+IHRhcmdldF9zaXplKQotCQkJcG9zaXRpb24gPSB0YXJnZXRfc2l6ZSArIDE7Ci0KLQkJaW50IGN1cnBvcyA9IDE7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gdGFyZ2V0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJYXQgPSAoQW55VHlwZSkgaS5uZXh0KCk7Ci0KLQkJCWlmIChjdXJwb3MgPT0gcG9zaXRpb24pCi0JCQkJcnMuY29uY2F0KGluc2VydHMpOwotCi0JCQlycy5hZGQoYXQpOwotCi0JCQljdXJwb3MrKzsKLQkJfQotCQlpZiAoY3VycG9zID09IHBvc2l0aW9uKQotCQkJcnMuY29uY2F0KGluc2VydHMpOwotCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5JcmlUb1VSSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklyaVRvVVJJLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNDNmYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbklyaVRvVVJJLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIHJlbmFtZWQgdG8gY29ycmVjdCBmdW5jdGlvbiBuYW1lLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTMxOSAtIGZpeCBVVEYtOCBlc2NhcGluZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotcHVibGljIGNsYXNzIEZuSXJpVG9VUkkgZXh0ZW5kcyBBYnN0cmFjdFVSSUZ1bmN0aW9uIHsKLQotCXB1YmxpYyBGbklyaVRvVVJJKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImlyaS10by11cmkiKSwgMSk7Ci0JfQotCQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBhZnRlciBhcHBsaWNhdGlvbiBvZiB0aGUgVVJJCi0JICogICAgICAgICBlc2NhcGluZyBydWxlcy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBlc2NhcGVfdXJpKGFyZ3MsIGZhbHNlLCB0cnVlKTsKLQl9CQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFuZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxhbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk1Nzc4Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTGFuZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgwOTcyIC0gZml4IGZuOmxhbmcgaW1wbGVtZW50YXRpb24gc28gaXQgbWF0Y2hlcyBzcGVjLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gY29ycmVjdCBpbnZhbGlkVHlwZSB0byB0aHJvdyBYUFRZMDAwNCBpbnN0ZWFkIG9mIEZPUkcwMDA2Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgbGFuZ3VhZ2Ugb2YgJG5vZGUsIG9yIHRoZSBjb250ZXh0IG5vZGUgaWYgdGhlCi0gKiBzZWNvbmQgYXJndW1lbnQgaXMgb21pdHRlZCwgYXMgc3BlY2lmaWVkIGJ5IHhtbDpsYW5nIGF0dHJpYnV0ZXMgaXMgdGhlIHNhbWUKLSAqIGFzLCBvciBpcyBhIHN1Ymxhbmd1YWdlIG9mLCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5ICR0ZXN0bGFuZy4gVGhlIGxhbmd1YWdlCi0gKiBvZiB0aGUgYXJndW1lbnQgbm9kZSwgb3IgdGhlIGNvbnRleHQgbm9kZSBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9taXR0ZWQsCi0gKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgeG1sOmxhbmcgYXR0cmlidXRlIG9uIHRoZSBub2RlLCBvciwgaWYgdGhlCi0gKiBub2RlIGhhcyBubyBzdWNoIGF0dHJpYnV0ZSwgYnkgdGhlIHZhbHVlIG9mIHRoZSB4bWw6bGFuZyBhdHRyaWJ1dGUgb24gdGhlCi0gKiBuZWFyZXN0IGFuY2VzdG9yIG9mIHRoZSBub2RlIHRoYXQgaGFzIGFuIHhtbDpsYW5nIGF0dHJpYnV0ZS4gSWYgdGhlcmUgaXMgbm8KLSAqIHN1Y2ggYW5jZXN0b3IsIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbkxhbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5MYW5nLgotCSAqLwotCXB1YmxpYyBGbkxhbmcoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibGFuZyIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGxhbmcoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIExhbmd1YWdlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmxhbmcgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbGFuZyhDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJnCi0JCUl0ZXJhdG9yIGNpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gbnVsbDsKLQkJaWYgKGNhcmdzLnNpemUoKSA9PSAxKSB7Ci0JCQlpZiAoZWMuZ2V0Q29udGV4dEl0ZW0oKSA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCX0KLQkJCWFyZzIgPSAoQW55VHlwZSkgZWMuZ2V0Q29udGV4dEl0ZW0oKTsKLQkJfSBlbHNlIHsKLQkJCWFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJfQotCQkKLQkJU3RyaW5nIGxhbmcgPSAiIjsKLQotCQlpZiAoIWFyZzEuZW1wdHkoKSkgewotCQkJbGFuZyA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJfQotCi0JCQotCQlpZiAoIShhcmcyLmZpcnN0KCkgaW5zdGFuY2VvZiBOb2RlVHlwZSkgKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJTm9kZVR5cGUgYW4gPSAoTm9kZVR5cGUpIGFyZzIuZmlyc3QoKTsKLQotCQlyZXR1cm4gbmV3IFhTQm9vbGVhbih0ZXN0X2xhbmcoYW4ubm9kZV92YWx1ZSgpLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogTGFuZ3VhZ2UgdGVzdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIE5vZGUgdG8gdGVzdC4KLQkgKiBAcGFyYW0gbGFuZwotCSAqICAgICAgICAgICAgTGFuZ3VhZ2UgdG8gdGVzdCBmb3IuCi0JICogQHJldHVybiBCb29sZWFuIHJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB0ZXN0X2xhbmcoTm9kZSBub2RlLCBTdHJpbmcgbGFuZykgewotCQlOYW1lZE5vZGVNYXAgYXR0cnMgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQotCQlpZiAoYXR0cnMgIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJzLml0ZW0oaSk7Ci0KLQkJCQlpZiAoISJ4bWw6bGFuZyIuZXF1YWxzKGF0dHIuZ2V0TmFtZSgpKSkKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJU3RyaW5nIHhtbGxhbmdWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKTsKLQkJCQlpbnQgaHlwaGVuSW5kZXggPSB4bWxsYW5nVmFsdWUuaW5kZXhPZignLScpOwotCQkJCQotCQkJCWlmIChoeXBoZW5JbmRleCA+IC0xKSB7Ci0JCQkJCXhtbGxhbmdWYWx1ZSA9IHhtbGxhbmdWYWx1ZS5zdWJzdHJpbmcoMCwgaHlwaGVuSW5kZXgpOwotCQkJCX0KLQotCQkJCQotCQkJCVN0cmluZyBsYW5nTGFuZ3VhZ2UgPSBsYW5nOwotCQkJCWlmIChsYW5nLmxlbmd0aCgpID4gMikgewotCQkJCQlsYW5nTGFuZ3VhZ2UgPSBsYW5nLnN1YnN0cmluZygwLCAyKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcmV0dXJuIHhtbGxhbmdWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGxhbmdMYW5ndWFnZSk7Ci0JCQl9Ci0JCX0KLQotCQlOb2RlIHBhcmVudCA9IG5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotCQlpZiAocGFyZW50ID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJcmV0dXJuIHRlc3RfbGFuZyhwYXJlbnQsIGxhbmcpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci0JCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxhc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5MYXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOGFkMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxhc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIG9mIGl0ZW1zCi0gKiBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBJZiB0aGUgY29udGV4dCBpdGVtIGlzIHVuZGVmaW5lZCwgYW4gZXJyb3IgaXMKLSAqIHJhaXNlZCBbZXJyOkZPTkMwMDAxXS4KLSAqLwotcHVibGljIGNsYXNzIEZuTGFzdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5MYXN0LgotCSAqLwotCXB1YmxpYyBGbkxhc3QoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibGFzdCIpLCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGxhc3QoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIExhc3Qgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpsYXN0IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxhc3QoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQkJCi0JCWlmIChlYy5nZXRDb250ZXh0SXRlbSgpID09IG51bGwpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jb250ZXh0VW5kZWZpbmVkKCk7Ci0JCX0KLQotCQlpbnQgbGFzdCA9IGVjLmdldExhc3RQb3NpdGlvbigpOwotCi0JCWFzc2VydCBsYXN0ICE9IDA7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKGxhc3QpKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDczYzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Mb2NhbE5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGltcGxlbWVudGF0aW9uIG9mIGZuOmxvY2FsLW5hbWUgYWNjb3JkaW5nIHRvIHNwZWMuICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbG9jYWwgcGFydCBvZiB0aGUgbmFtZSBvZiAkYXJnIGFzIGFuIHhzOnN0cmluZyB0aGF0IHdpbGwgZWl0aGVyCi0gKiBiZSB0aGUgemVyby1sZW5ndGggc3RyaW5nIG9yIHdpbGwgaGF2ZSB0aGUgbGV4aWNhbCBmb3JtIG9mIGFuIHhzOk5DTmFtZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTG9jYWxOYW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTG9jYWxOYW1lLgotCSAqLwotCXB1YmxpYyBGbkxvY2FsTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsb2NhbC1uYW1lIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbG9jYWxfbmFtZShhcmdzLCBlYyk7Ci0JfQotCi0JLyoqCi0JICogTG9jYWwtTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpsb2NhbC1uYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxvY2FsX25hbWUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBjb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gbnVsbDsKLQkJCi0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWlmIChjb250ZXh0LmdldENvbnRleHRJdGVtKCkgPT0gbnVsbCkKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJZWxzZSB7Ci0JCQkJYXJnMSA9IChBbnlUeXBlKSBjb250ZXh0LmdldENvbnRleHRJdGVtKCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQl9Ci0JCQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKCIiKTsKLQkJfQotCi0JCU5vZGVUeXBlIGFuID0gKE5vZGVUeXBlKSBhcmcxLmZpcnN0KCk7Ci0JCQotCi0JCVFOYW1lIG5hbWUgPSBhbi5ub2RlX25hbWUoKTsKLQotCQlTdHJpbmcgc25hbWUgPSAiIjsKLQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJCXNuYW1lID0gbmFtZS5sb2NhbCgpOwotCi0JCXJldHVybiBuZXcgWFNTdHJpbmcoc25hbWUpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZUZyb21RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GbkxvY2FsTmFtZUZyb21RTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUwMmVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Mb2NhbE5hbWVGcm9tUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTkNOYW1lOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6TkNOQU1FIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgcGFydCBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZQotICogZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Mb2NhbE5hbWVGcm9tUU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Mb2NhbE5hbWVGcm9tUU5hbWUuCi0JICovCi0JcHVibGljIEZuTG9jYWxOYW1lRnJvbVFOYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImxvY2FsLW5hbWUtZnJvbS1RTmFtZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBsb2NhbF9uYW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIExvY2FsLU5hbWUtZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpsb2NhbC1uYW1lLWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbG9jYWxfbmFtZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJnCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCVFOYW1lIHFuYW1lID0gKFFOYW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJcmV0dXJuIG5ldyBYU05DTmFtZShxbmFtZS5sb2NhbCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBRTmFtZSgpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG93ZXJDYXNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTG93ZXJDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3M2IwNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbkxvd2VyQ2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiA8cD4KLSAqIENvbnZlcnNpb24gdG8gbG93ZXItY2FzZSBmdW5jdGlvbi4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46bG93ZXItY2FzZSgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyBhZnRlciB0cmFuc2xhdGluZyBldmVyeSBjaGFyYWN0ZXIgdG8gaXRzCi0gKiBsb3dlci1jYXNlIGNvcnJlc3BvbmRlbnQuIEV2ZXJ5IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGhhdmUgYW4gbG93ZXItY2FzZQotICogY29ycmVzcG9uZGVudCBpcyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW4gaXRzIG9yaWdpbmFsIGZvcm0uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nIGlzCi0gKiByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuTG93ZXJDYXNlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTG93ZXJDYXNlLgotCSAqLwotCXB1YmxpYyBGbkxvd2VyQ2FzZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsb3dlci1jYXNlIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBiZWluZyBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZS4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbG93ZXJfY2FzZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IGFyZ3VtZW50cyB0byBsb3dlciBjYXNlLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBhcmd1bWVudHMgdG8gbG93ZXIgY2FzZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGxvd2VyX2Nhc2UoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBuZXcgWFNTdHJpbmcoIiIpOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHN0ci50b0xvd2VyQ2FzZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1hdGNoZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODRiNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMDk2IC0gaW1wcm92ZW1lbnRzIGZvciBzdXJyb2dhdGUgaGFuZGxpbmcKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gaW1wcm92ZW1lbnRzIHRvIFJlZ3VsYXIgRXhwcmVzc2lvbiAgIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm5TeW50YXhFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiAkaW5wdXQgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIHN1cHBsaWVkCi0gKiBhcyAkcGF0dGVybiBhcyBpbmZsdWVuY2VkIGJ5IHRoZSB2YWx1ZSBvZiAkZmxhZ3MsIGlmIHByZXNlbnQ7IG90aGVyd2lzZSwgaXQKLSAqIHJldHVybnMgZmFsc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1hdGNoZXMgZXh0ZW5kcyBBYnN0cmFjdFJlZ0V4RnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWF0Y2hlcy4KLQkgKi8KLQlwdWJsaWMgRm5NYXRjaGVzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1hdGNoZXMiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbWF0Y2hlcyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRjaGVzIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1hdGNoZXMgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWF0Y2hlcyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKSB7Ci0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBwYXR0ZXJuID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCQlTdHJpbmcgZmxhZ3MgPSBudWxsOwotCi0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgZmxhZ1JTID0gbnVsbDsKLQkJCWZsYWdSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQlmbGFncyA9IGZsYWdSUy5maXJzdCgpLmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQlpZiAodmFsaWRmbGFncy5pbmRleE9mKGZsYWdzKSA9PSAtMSAmJiBmbGFncy5sZW5ndGgoKSA+IDAgKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2ZsYWdzX2Vycm9yKG51bGwpOwotCQkJfQotCQl9Ci0KLQkJdHJ5IHsKLQkJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCQlyZXN1bHQgPSBtYXRjaGVzKHBhdHRlcm4sIGZsYWdzLCBzdHIxKTsKLQkJCXJldHVybiBYU0Jvb2xlYW4udmFsdWVPZihyZXN1bHQpOwotCQl9IGNhdGNoIChQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIHBleCkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2Vycm9yKHBleC5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NYXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxZDg1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWF4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgcHJvbW90aW9uIGlzc3VlCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBmaXggcHJvbW90aW9uIHJ1bGVzIGZvciBmbjptYXgKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29tcGFyYWJsZVR5cGVQcm9tb3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuVHlwZVByb21vdGVyOwotCi0vKioKLSAqIFNlbGVjdHMgYW4gaXRlbSBmcm9tIHRoZSBpbnB1dCBzZXF1ZW5jZSAkYXJnIHdob3NlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvcgotICogZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGV2ZXJ5IG90aGVyIGl0ZW0gaW4gdGhlIGlucHV0IHNlcXVlbmNlLiBJZiB0aGVyZSBhcmUKLSAqIHR3byBvciBtb3JlIHN1Y2ggaXRlbXMsIHRoZW4gdGhlIHNwZWNpZmljIGl0ZW0gd2hvc2UgdmFsdWUgaXMgcmV0dXJuZWQgaXMKLSAqIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KLSAqLwotcHVibGljIGNsYXNzIEZuTWF4IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1heC4KLQkgKi8KLQlwdWJsaWMgRm5NYXgoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWF4IiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQkJcmV0dXJuIG1heChhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXggb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gY29udGV4dCAKLQkgKiAgICAgICAgICAgIFJlbGV2YW50IGR5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptYXggb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWF4KENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IGdldF9hcmcoYXJncywgQ21wR3QuY2xhc3MpOwotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQotCQlDbXBHdCBtYXggPSBudWxsOwotCi0JCVR5cGVQcm9tb3RlciB0cCA9IG5ldyBDb21wYXJhYmxlVHlwZVByb21vdGVyKCk7Ci0JCXRwLmNvbnNpZGVyU2VxdWVuY2UoYXJnKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlBbnlBdG9taWNUeXBlIGNvbnYgPSB0cC5wcm9tb3RlKChBbnlUeXBlKSBpLm5leHQoKSk7Ci0JCQkKLQkJCWlmIChjb252IGluc3RhbmNlb2YgWFNEb3VibGUgJiYgKChYU0RvdWJsZSljb252KS5uYW4oKSB8fCBjb252IGluc3RhbmNlb2YgWFNGbG9hdCAmJiAoKFhTRmxvYXQpY29udikubmFuKCkpIHsKLQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcodHAucHJvbW90ZShuZXcgWFNGbG9hdChGbG9hdC5OYU4pKSk7Ci0JCQl9Ci0JCQlpZiAobWF4ID09IG51bGwgfHwgKChDbXBHdCljb252KS5ndCgoQW55VHlwZSltYXgsIGR5bmFtaWNDb250ZXh0KSkgewotCQkJCW1heCA9IChDbXBHdCljb252OwotCQkJfQotCQl9Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygoQW55VHlwZSkgbWF4KTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBleHByZXNzaW9ucy4KLQkgKiBAcGFyYW0gb3AKLQkgKiAgICAgICAgICAgIGlucHV0IGNsYXNzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBnZXRfYXJnKENvbGxlY3Rpb24gYXJncywgQ2xhc3Mgb3ApCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBhcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGIxNGEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIHByb21vdGlvbiBpc3N1ZSAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MTAyOCAtIGZpeCBwcm9tb3Rpb24gcnVsZXMgZm9yIGZuOm1pbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5Db21wYXJhYmxlVHlwZVByb21vdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXI7Ci0KLS8qKgotICogc2VsZWN0cyBhbiBpdGVtIGZyb20gdGhlIGlucHV0IHNlcXVlbmNlICRhcmcgd2hvc2UgdmFsdWUgaXMgbGVzcyB0aGFuIG9yCi0gKiBlcXVhbCB0byB0aGUgdmFsdWUgb2YgZXZlcnkgb3RoZXIgaXRlbSBpbiB0aGUgaW5wdXQgc2VxdWVuY2UuIElmIHRoZXJlIGFyZQotICogdHdvIG9yIG1vcmUgc3VjaCBpdGVtcywgdGhlbiB0aGUgc3BlY2lmaWMgaXRlbSB3aG9zZSB2YWx1ZSBpcyByZXR1cm5lZCBpcwotICogaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1pbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5NaW4uCi0JICovCi0JcHVibGljIEZuTWluKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1pbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1pbihhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNaW4gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZHluYW1pYyAKLQkgKiAgICAgICAgICAgIER5bmFtaWMgY29udGV4dAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptaW4gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbWluKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gRm5NYXguZ2V0X2FyZyhhcmdzLCBDbXBMdC5jbGFzcyk7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCi0JCUNtcEx0IG1heCA9IG51bGw7Ci0KLQkJVHlwZVByb21vdGVyIHRwID0gbmV3IENvbXBhcmFibGVUeXBlUHJvbW90ZXIoKTsKLQkJdHAuY29uc2lkZXJTZXF1ZW5jZShhcmcpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueUF0b21pY1R5cGUgY29udiA9IHRwLnByb21vdGUoKEFueVR5cGUpIGkubmV4dCgpKTsKLQkJCQotCQkJaWYgKGNvbnYgaW5zdGFuY2VvZiBYU0RvdWJsZSAmJiAoKFhTRG91YmxlKWNvbnYpLm5hbigpIHx8IGNvbnYgaW5zdGFuY2VvZiBYU0Zsb2F0ICYmICgoWFNGbG9hdCljb252KS5uYW4oKSkgewotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh0cC5wcm9tb3RlKG5ldyBYU0Zsb2F0KEZsb2F0Lk5hTikpKTsKLQkJCX0KLQkJCWlmIChtYXggPT0gbnVsbCB8fCAoKENtcEx0KWNvbnYpLmx0KChBbnlUeXBlKW1heCwgY29udGV4dCkpIHsKLQkJCQltYXggPSAoQ21wTHQpY29udjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKEFueVR5cGUpIG1heCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tRGF0ZVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlMWM0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21EYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDU5LCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nCi0gKiB0aGUgbWludXRlIGNvbXBvbmVudCBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mICRhcmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1pbnV0ZXNGcm9tRGF0ZVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5NaW51dGVzRnJvbURhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGbk1pbnV0ZXNGcm9tRGF0ZVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWludXRlcy1mcm9tLWRhdGVUaW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1pbnV0ZXNfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTWludXRlcy1mcm9tLURhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1pbnV0ZXMtZnJvbS1kYXRlVGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtaW51dGVzX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0Lm1pbnV0ZSgpOwotCi0JCXJldHVybiBuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tRHVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OTViNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1pbnV0ZXNGcm9tRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBleHBlY3RlZCBhcmdzIGZvciBmbk1pbnV0ZXNGcm9tRHVyYXRpb24gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbWludXRlcyBjb21wb25lbnQgaW4gdGhlIGNhbm9uaWNhbAotICogbGV4aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgJGFyZy4gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUuIElmCi0gKiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk1pbnV0ZXNGcm9tRHVyYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5NaW51dGVzRnJvbUR1cmF0aW9uLgotCSAqLwotCXB1YmxpYyBGbk1pbnV0ZXNGcm9tRHVyYXRpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWludXRlcy1mcm9tLWR1cmF0aW9uIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1pbnV0ZXNfZnJvbV9kdXJhdGlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNaW51dGVzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bWludXRlcy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1pbnV0ZXNfZnJvbV9kdXJhdGlvbihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTRHVyYXRpb24gZHRkID0gKFhTRHVyYXRpb24pIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHRkLm1pbnV0ZXMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEdXJhdGlvbigpLAotCQkJCQlTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5NaW51dGVzRnJvbVRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxYjNiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTWludXRlc0Zyb21UaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgdmFsdWUgYmV0d2VlbiAwIHRvIDU5LCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogdmFsdWUgb2YgdGhlIG1pbnV0ZXMgY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUKLSAqIGVtcHR5IHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTWludXRlc0Zyb21UaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTWludXRlc0Zyb21UaW1lLgotCSAqLwotCXB1YmxpYyBGbk1pbnV0ZXNGcm9tVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtaW51dGVzLWZyb20tdGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBtaW51dGVzX2Zyb21fdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBNaW51dGVzLWZyb20tVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptaW51dGVzLWZyb20tdGltZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBtaW51dGVzX2Zyb21fdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTVGltZSBkdCA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQubWludXRlKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aEZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MjQ2MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEyLCBib3RoIGluY2x1c2l2ZSwgcmVwcmVzZW50aW5nIHRoZQotICogbW9udGggY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUgb2YgJGFyZy4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuTW9udGhGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1vbnRoRnJvbURhdGUuCi0JICovCi0JcHVibGljIEZuTW9udGhGcm9tRGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJtb250aC1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbW9udGhfZnJvbV9kYXRlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE1vbnRoLWZyb20tRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptb250aC1mcm9tLWRhdGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgbW9udGhfZnJvbV9kYXRlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEYXRlIGR0ID0gKFhTRGF0ZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC5tb250aCgpOwotCi0JCXJldHVybiBuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Nb250aEZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNDljMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTIsIGJvdGggaW5jbHVzaXZlLCByZXByZXNlbnRpbmcgdGhlCi0gKiBtb250aCBjb21wb25lbnQgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Nb250aEZyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk1vbnRoRnJvbURhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGbk1vbnRoRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1vbnRoLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbW9udGhfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTW9udGgtZnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjptb250aC1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1vbnRoX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaW50IHJlcyA9IGR0Lm1vbnRoKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhzRnJvbUR1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTW9udGhzRnJvbUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjBlODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk1vbnRoc0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24uIAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZXhwZWN0ZWQgeHM6ZHVyYXRpb24gYXJndW1lbnQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBtb250aHMgY29tcG9uZW50IGluIHRoZSBjYW5vbmljYWwKLSAqIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZgotICogJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Nb250aHNGcm9tRHVyYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Nb250aHNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuTW9udGhzRnJvbUR1cmF0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1vbnRocy1mcm9tLWR1cmF0aW9uIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG1vbnRoc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE1vbnRocy1mcm9tLUR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm1vbnRocy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG1vbnRoc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiB5bWQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSB5bWQubW9udGgoKTsKLQotCQlpZiAoeW1kLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEdXJhdGlvbigpLAotCQkJCQlTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzM2ZDk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNjI3NjUgLSBGaXhlZCBhcmd1bWVudHMgZm9yIE5hbWUgZnVuY3Rpb24uIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMwMTUzOSAtIGZpeGVkICJjb250ZXh0IHVuZGVmaW5lZCIgYnVnIGluIGNhc2Ugb2YgemVybwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcml0eS4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIG5vZGUsIGFzIGFuIHhzOnN0cmluZyB0aGF0IGlzIGVpdGhlciB0aGUgemVyby1sZW5ndGgKLSAqIHN0cmluZywgb3IgaGFzIHRoZSBsZXhpY2FsIGZvcm0gb2YgYW4geHM6UU5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5OYW1lLgotCSAqLwotCXB1YmxpYyBGbk5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmFtZSIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5hbWUoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIE5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gY29udGV4dAotCSAqICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpuYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5hbWUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gbnVsbDsKLQkJCi0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWlmIChlYy5nZXRDb250ZXh0SXRlbSgpID09IG51bGwpCi0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNvbnRleHRVbmRlZmluZWQoKTsKLQkJCWVsc2UgewotCQkJCWFyZzEgPSBSZXN1bHRCdWZmZXIud3JhcChlYy5nZXRDb250ZXh0SXRlbSgpKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQl9Ci0JCQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCSAgIHJldHVybiBuZXcgWFNTdHJpbmcoIiIpOwotCQl9Ci0KLQkJTm9kZVR5cGUgYW4gPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQkJCi0JCVFOYW1lIG5hbWUgPSBhbi5ub2RlX25hbWUoKTsKLQotCQlTdHJpbmcgc25hbWUgPSAiIjsKLQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJICBzbmFtZSA9IG5hbWUuZ2V0U3RyaW5nVmFsdWUoKTsKLQotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHNuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OYW1lc3BhY2VVcmkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMyZWQ4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZXNwYWNlVXJpLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI2Mjc2NSAtIGNvcnJlY3RlZCBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gc3BlYy4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJOwotCi0vKioKLSAqIFJldHVybnMgdGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIHhzOlFOYW1lIG9mICRhcmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5hbWVzcGFjZVVyaSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5hbWVzcGFjZVVyaS4KLQkgKi8KLQlwdWJsaWMgRm5OYW1lc3BhY2VVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmFtZXNwYWNlLXVyaSIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5hbWVzcGFjZV91cmkoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIE5hbWVzcGFjZS1Vcmkgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bmFtZXNwYWNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuYW1lc3BhY2VfdXJpKENvbGxlY3Rpb24gYXJncywKLQkJCUV2YWx1YXRpb25Db250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCQlpZiAoY2FyZ3MuaXNFbXB0eSgpKSB7Ci0JCQlpZiAoY29udGV4dC5nZXRDb250ZXh0SXRlbSgpID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJfQotCQkJYXJnMSA9IChBbnlUeXBlKSBjb250ZXh0LmdldENvbnRleHRJdGVtKCk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBnZXQgYXJnCi0JCQlhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJfQotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBuZXcgWFNBbnlVUkkoIiIpOwotCQl9Ci0KLQkJTm9kZVR5cGUgYW4gPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQotCQlRTmFtZSBuYW1lID0gYW4ubm9kZV9uYW1lKCk7Ci0KLQkJU3RyaW5nIHNuYW1lID0gIiI7Ci0JCWlmIChuYW1lICE9IG51bGwpCi0JCQlzbmFtZSA9IG5hbWUubmFtZXNwYWNlKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0FueVVSSShzbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZXNwYWNlVXJpRnJvbVFOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmFtZXNwYWNlVXJpRnJvbVFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMThmNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5hbWVzcGFjZVVyaUZyb21RTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIFVSSSBmb3IgJGFyZyBhcyBhbiB4czpzdHJpbmcuIElmICRhcmcgaXMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBJZiAkYXJnIGlzIGluIG5vIG5hbWVzcGFjZSwgdGhlCi0gKiB6ZXJvLWxlbmd0aCBzdHJpbmcgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5hbWVzcGFjZVVyaUZyb21RTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5hbWVzcGFjZVVyaUZyb21RTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5OYW1lc3BhY2VVcmlGcm9tUU5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5hbWVzcGFjZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBOYW1lc3BhY2UtdXJpLWZyb20tUU5hbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5hbWVzcGFjZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmcKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJUU5hbWUgcW5hbWUgPSAoUU5hbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlTdHJpbmcgbnMgPSBxbmFtZS5uYW1lc3BhY2UoKTsKLQotCQlpZiAobnMgPT0gbnVsbCkKLQkJCW5zID0gIiI7Ci0JCXJldHVybiBuZXcgWFNBbnlVUkkobnMpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OaWxsZWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OaWxsZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmNDQyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTmlsbGVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhcmd1bWVudCBub2RlIGlzICJuaWxsZWQiLiBJZgotICogdGhlIGFyZ3VtZW50IGlzIG5vdCBhbiBlbGVtZW50IG5vZGUsIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5OaWxsZWQgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5OaWxsZWQuCi0JICovCi0JcHVibGljIEZuTmlsbGVkKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5pbGxlZCIpLCAwLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBuaWxsZWQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogTmlsbGVkIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOm5pbGxlZCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuaWxsZWQoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIGFyZzE7Ci0JCX0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFyZzEuZmlyc3QoKTsKLQkJCi0JCXJldHVybiBudC5uaWxsZWQoKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9kZU5hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob2RlTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDUwY2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob2RlTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogUmV0dXJucyBhbiBleHBhbmRlZC1RTmFtZSBmb3Igbm9kZSBraW5kcyB0aGF0IGNhbiBoYXZlIG5hbWVzLiBGb3Igb3RoZXIga2luZHMKLSAqIG9mIG5vZGVzIGl0IHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlCi0gKiBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuTm9kZU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ob2RlTmFtZS4KLQkgKi8KLQlwdWJsaWMgRm5Ob2RlTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJub2RlLW5hbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gbm9kZV9uYW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIE5vZGUtTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpub2RlLW5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugbm9kZV9uYW1lKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlOb2RlVHlwZSBudCA9IChOb2RlVHlwZSkgYXJnMS5maXJzdCgpOwotCi0JCVFOYW1lIG5vZGVuYW1lID0gbnQubm9kZV9uYW1lKCk7Ci0JCWlmIChub2RlbmFtZSA9PSBudWxsKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlyZXR1cm4gbm9kZW5hbWU7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vcm1hbGl6ZVNwYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplU3BhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwYTk1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm9ybWFsaXplU3BhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0NDcxIC0gaW1wcm92ZW1lbnRzIHRvIG5vcm1hbGl6ZS1zcGFjZSBmdW5jdGlvbiAoc3VwcG9ydCBmb3IgYXJpdHkgMCkKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gdG8gY29ycmVjdGx5IGdldCBjb250ZXh0IG5vZGUgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAyODE5MzggLSBoYW5kbGUgY29udGV4dCBhbmQgZW1wdHkgc2VxdWVuY2VzIGNvcnJlY3RseQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIG5vcm1hbGl6ZSB3aGl0ZXNwYWNlLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjpub3JtYWxpemUtc3BhY2UoJGFyZyBhcyB4czpzdHJpbmc/KSBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgdGhlIHZhbHVlIG9mICRhcmcgd2l0aCB3aGl0ZXNwYWNlIG5vcm1hbGl6ZWQgYnkgc3RyaXBwaW5nCi0gKiBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNpbmcgc2VxdWVuY2VzIG9mIG9uZSBvciBtb3JlIHRoYW4KLSAqIG9uZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciB3aXRoIGEgc2luZ2xlIHNwYWNlLCAjeDIwLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGRlZmluZWQgYXMgVEFCICgjeDkpLCBMSU5FIEZFRUQgKCN4QSksIENBUlJJQUdFCi0gKiBSRVRVUk4gKCN4RCkgYW5kIFNQQUNFICgjeDIwKS4gSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLAotICogdGhlIGNsYXNzIHJldHVybnMgdGhlIHplcm8tbGVuZ3RoIHN0cmluZy4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuTm9ybWFsaXplU3BhY2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Ob3JtYWxpemVTcGFjZS4KLQkgKi8KLQlwdWJsaWMgRm5Ob3JtYWxpemVTcGFjZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJub3JtYWxpemUtc3BhY2UiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgc3BhY2UgaW4gdGhlIGFyZ3VtZW50cyBiZWluZyBub3JtYWxpemVkLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5vcm1hbGl6ZV9zcGFjZShhcmdzLCBlYyk7Ci0JfQotCi0JLyoqCi0JICogTm9ybWFsaXplIHNwYWNlIGluIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSB1c2VkIHRvIG9idGFpbiBzcGFjZSBmcm9tLCBpbiBvcmRlciB0byBiZSBub3JtYWxpemVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHNwYWNlIGluIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBub3JtYWxpemVfc3BhY2UoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gbnVsbDsKLQkJCi0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJICAvLyBzdXBwb3J0IGZvciBhcml0eSA9IDAKLQkJICBhcmcxID0gZ2V0UmVzdWx0U2V0Rm9yQXJpdHlaZXJvKGVjKTsKLQkJfQotCQllbHNlIHsKLQkJICBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJfQotCi0JCVN0cmluZyBzdHIgPSAiIjsKLQkJaWYgKCEgYXJnMS5lbXB0eSgpKSB7Ci0JCQlzdHIgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0gCi0JCXJldHVybiBuZXcgWFNTdHJpbmcobm9ybWFsaXplKHN0cikpOwotCX0KLQotCS8qKgotCSAqIFRoZSBub3JtYWxpemluZyBwcm9jZXNzLgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIGlzIHRoZSBzdHJpbmcgdGhhdCBzcGFjZSB3aWxsIGJlIG5vcm1hbGl6ZWQgaW4uCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBub3JtYWxpemluZyBvcGVyYXRpb24uCi0JICovCi0JLy8gWFhYIGZpeCB0aGlzCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBzdHIpIHsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWludCBzdGF0ZSA9IDA7IC8vIDAgYmVnaW4KLQkJLy8gMSBtaWRkbGUKLQkJLy8gMiBlbmQKLQkJLy8gMyBza2lwcGluZwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspIHsKLQkJCWNoYXIgeCA9IHN0ci5jaGFyQXQoaSk7Ci0KLQkJCWJvb2xlYW4gd2hpdGUgPSBpc193aGl0ZXNwYWNlKHgpOwotCi0JCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCQkvLyBkb2luZyB0aGUgYmVnaW5uaW5nCi0JCQljYXNlIDA6Ci0JCQkJaWYgKHdoaXRlKQotCQkJCQljb250aW51ZTsKLQkJCQllbHNlIHsKLQkJCQkJc2IuYXBwZW5kKHgpOwotCQkJCQlzdGF0ZSA9IDE7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQkvLyBkb2luZyB0aGUgbWlkZGxlCi0JCQljYXNlIDE6Ci0JCQkJaWYgKHdoaXRlKSB7Ci0JCQkJCXN0YXRlID0gMzsKLQkJCQkJc2IuYXBwZW5kKCcgJyk7Ci0JCQkJfSBlbHNlCi0JCQkJCXNiLmFwcGVuZCh4KTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAzOgotCQkJCWlmICghd2hpdGUpIHsKLQkJCQkJc3RhdGUgPSAxOwotCQkJCQlzYi5hcHBlbmQoeCk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCWFzc2VydCBmYWxzZTsKLQkJCX0KLQkJfQotCi0JCS8vIG5vdyBiYXNpY2FsbHkgd2UgY2FuIG9ubHkgaGF2ZSBhIHdoaXRlc3BhY2UgYXQgdGhlIGVuZC4uLgotCQlTdHJpbmcgcmVzdWx0ID0gc2IudG9TdHJpbmcoKTsKLQkJaW50IGxlbiA9IHJlc3VsdC5sZW5ndGgoKTsKLQotCQlpZiAobGVuID09IDApCi0JCQlyZXR1cm4gcmVzdWx0OwotCQlpZiAocmVzdWx0LmNoYXJBdChsZW4gLSAxKSA9PSAnICcpCi0JCQlyZXR1cm4gcmVzdWx0LnN1YnN0cmluZygwLCBsZW4gLSAxKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIHdoaXRlc3BhY2Ugb3Igbm90LgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBpcyB0aGUgY2hhcmFjdGVyIHRoaXMgb3BlcmF0aW9uIHdpbGwgdGFrZSBwbGFjZSBvbi4KLQkgKiBAcmV0dXJuIFdoZXRoZXIgb3Igbm90IHRoZSBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNfd2hpdGVzcGFjZShjaGFyIHgpIHsKLQkJc3dpdGNoICh4KSB7Ci0JCWNhc2UgJyAnOgotCQljYXNlICdccic6Ci0JCWNhc2UgJ1x0JzoKLQkJY2FzZSAnXG4nOgotCQkJcmV0dXJuIHRydWU7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vcm1hbGl6ZVVuaWNvZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ob3JtYWxpemVVbmljb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzI2ZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vcm1hbGl6ZVVuaWNvZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEplc3BlciBTdGVlbiBNb2VsbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNTIgLSBpbXBsZW1lbnQgZm46bm9ybWFsaXplLXVuaWNvY2RlCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjkwMzM3IC0gUmV2aXNpdCB1c2Ugb2YgSUNVCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplcjsKLQotLyoqCi0gKiA8cD4KLSAqIEZ1bmN0aW9uIHRvIG5vcm1hbGl6ZSB1bmljb2RlLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjpub3JtYWxpemUtdW5pY29kZSgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOnN0cmluZwotICogb3IgZm46bm9ybWFsaXplLXVuaWNvZGUoJGFyZyBhcyB4czpzdHJpbmc/LCAkbm9ybWFsaXphdGlvbi1mb3JtIGFzIHhzOnN0cmluZykgYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBpbiB0aGUgbm9ybWFsaXphdGlvbiBmb3JtIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50LgotICogPC9wPgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGbk5vcm1hbGl6ZVVuaWNvZGUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgVzNDTm9ybWFsaXplciBub3JtYWxpemVyID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk5vcm1hbGl6ZVVuaWNvZGUKLQkgKi8KLQlwdWJsaWMgRm5Ob3JtYWxpemVVbmljb2RlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm5vcm1hbGl6ZS11bmljb2RlIiksIDEsIDIpOwotCX0KLQotCS8qKgotCSAqIFRoZSBjb21tb24gaW50ZXJmYWNlIHdoaWNoIG5vcm1hbGl6ZXJzIG11c3QgYWRoZXJlIHRvCi0JICovCi0JcHVibGljIGludGVyZmFjZSBXM0NOb3JtYWxpemVyIHsKLQkJU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgYXJndW1lbnQsIFN0cmluZyBub3JtYWxpemF0aW9uRm9ybSkgdGhyb3dzIER5bmFtaWNFcnJvcjsKLQl9OwotCQotCS8qKgotCSAqIFczQyBub3JtYWxpemVyIGltcGxlbWVudGVkIHZpYSBJQk0ncyBJQ1UKLQkgKi8KLQlzdGF0aWMgY2xhc3MgSUNVTm9ybWFsaXplciBpbXBsZW1lbnRzIFczQ05vcm1hbGl6ZXIgewotCQkKLQkJcHJpdmF0ZSBNYXAgbW9kZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCXsKLQkJCS8vIENhbid0IGhhbmRsZSAiRlVMTFktTk9STUFMSVpFRCIgeWV0Ci0JCQkKLQkJCW1vZGVNYXAucHV0KCJORkMiLCBOb3JtYWxpemVyLk5GQyk7Ci0JCQltb2RlTWFwLnB1dCgiTkZEIiwgTm9ybWFsaXplci5ORkQpOwotCQkJbW9kZU1hcC5wdXQoIk5GS0MiLCBOb3JtYWxpemVyLk5GS0MpOwotCQkJbW9kZU1hcC5wdXQoIk5GS0QiLCBOb3JtYWxpemVyLk5GS0QpOwotCQl9Ci0JCQotCQlwdWJsaWMgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgYXJndW1lbnQsIFN0cmluZyBub3JtYWxpemF0aW9uRm9ybSkKLQkJCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCU5vcm1hbGl6ZXIuTW9kZSBtb2RlID0gKE5vcm1hbGl6ZXIuTW9kZSltb2RlTWFwLmdldChub3JtYWxpemF0aW9uRm9ybSk7Ci0JCQlpZiAobW9kZSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIE5vcm1hbGl6ZXIubm9ybWFsaXplKGFyZ3VtZW50LCBtb2RlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnVuc3VwcG9ydGVkX25vcm1hbGl6YXRpb25fZm9ybShub3JtYWxpemF0aW9uRm9ybSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKgotCXN0YXRpYyBjbGFzcyBKREs2Tm9ybWFsaXplciBpbXBsZW1lbnRzIFczQ05vcm1hbGl6ZXIgewotCQlwcml2YXRlIE1ldGhvZCBub3JtYWxpemVNZXRob2Q7Ci0JCXByaXZhdGUgTWFwIGZvcm1NYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0JCXB1YmxpYyBKREs2Tm9ybWFsaXplcihDbGFzcyBub3JtYWxpemVyQ2xzLCBDbGFzcyBmb3JtQ2xzKSB0aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24sIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiB7Ci0JCQl0aGlzLm5vcm1hbGl6ZU1ldGhvZCA9IG5vcm1hbGl6ZXJDbHMuZ2V0TWV0aG9kKCJub3JtYWxpemUiLCBDaGFyU2VxdWVuY2UuY2xhc3MsIGZvcm1DbHMpOwotCQkJRW51bVtdIGZvcm1Db25zdGFudHMgPSBmb3JtQ2xzLmdldEVudW1Db25zdGFudHMoKTsKLQkJCWZvciAoRW51bSBmb3JtIDogZm9ybUNvbnN0YW50cykgewotCQkJCWZvcm1NYXAucHV0KGZvcm0ubmFtZSgpLCBmb3JtKTsKLQkJCX0KLQkJCS8vIENhbid0IGhhbmRsZSAiRlVMTFktTk9STUFMSVpFRCIgeWV0Ci0JCX0KLQkJCi0JCXB1YmxpYyBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBhcmd1bWVudCwgU3RyaW5nIG5vcm1hbGl6YXRpb25Gb3JtKQotCQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCQkvL2lmIChub3JtYWxpemF0aW9uRm9ybS5lcXVhbHMoIkZVTExZLU5PUk1BTElaRUQiKSkgewotCQkJLy8gICBXZSBjYW4ndCBoYW5kbGUgdGhpcyBvbmUgeWV0Ci0JCQkvLyB9Ci0JCQlFbnVtIGZvcm0gPSBmb3JtTWFwLmdldChub3JtYWxpemF0aW9uRm9ybSk7Ci0JCQlpZiAoZm9ybSAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJcmV0dXJuIChTdHJpbmcpbm9ybWFsaXplTWV0aG9kLmludm9rZShudWxsLCBhcmd1bWVudCwgZm9ybSk7Ci0JCQkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCXRocm93IER5bmFtaWNFcnJvci5ydW50aW1lX2Vycm9yKCJqYXZhLnRleHQuTm9ybWFsaXplci5ub3JtYWxpemUoLi4uLCBcIiIgKyBub3JtYWxpemF0aW9uRm9ybSArICJcIikiLCBlKTsKLQkJCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJ1bnRpbWVfZXJyb3IoImphdmEudGV4dC5Ob3JtYWxpemVyLm5vcm1hbGl6ZSguLi4sIFwiIiArIG5vcm1hbGl6YXRpb25Gb3JtICsgIlwiKSIsIGUpOwotCQkJCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJCQl0aHJvdyBEeW5hbWljRXJyb3IucnVudGltZV9lcnJvcigiamF2YS50ZXh0Lk5vcm1hbGl6ZXIubm9ybWFsaXplKC4uLiwgXCIiICsgbm9ybWFsaXphdGlvbkZvcm0gKyAiXCIpIiwgZSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IudW5zdXBwb3J0ZWRfbm9ybWFsaXphdGlvbl9mb3JtKG5vcm1hbGl6YXRpb25Gb3JtKTsKLQkJCX0JCQkKLQkJfQotCX0KLQkqLwotCi0Jc3RhdGljIGNsYXNzIEZhaWxpbmdOb3JtYWxpemVyIGltcGxlbWVudHMgVzNDTm9ybWFsaXplciB7Ci0JCQotCQlwdWJsaWMgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgYXJndW1lbnQsIFN0cmluZyBub3JtYWxpemF0aW9uRm9ybSkKLQkJCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci51bnN1cHBvcnRlZF9ub3JtYWxpemF0aW9uX2Zvcm0oIkNhbid0IG5vcm1hbGl6ZSB0byBmb3JtICIgKyBub3JtYWxpemF0aW9uRm9ybSArICI6IE5vIElDVSBMaWJyYXJ5IG9yIEphdmEgNiBmb3VuZC4gJ25vcm1hbGl6ZS11bmljb2RlJyByZXF1aXJlcyBlaXRoZXIgJ2NvbS5pYm0uaWN1LnRleHQuTm9ybWFsaXplcicgb3IgJ2phdmEudGV4dC5Ob3JtYWxpemVyJyBvbiB0aGUgY2xhc3NwYXRoIik7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgc3BhY2UgaW4gdGhlIGFyZ3VtZW50cyBiZWluZyBub3JtYWxpemVkLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIG5vcm1hbGl6ZV91bmljb2RlKGFyZ3MsIGVjLmdldER5bmFtaWNDb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbGl6ZSB1bmljb2RlIGNvZGVwb2ludHMgaW4gdGhlIGFyZ3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gdGhlIGlucHV0IHN0cmluZyBhbmQgb3B0aW9uYWxseSB0aGUgbm9ybWFsaXphdGlvbiB0eXBlIGZyb20uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBub3JtYWxpemluZyB0aGUgc3BhY2UgaW4gdGhlIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG5vcm1hbGl6ZV91bmljb2RlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZF9jb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSAxICYmIGFyZ3Muc2l6ZSgpIDw9IDI7Ci0KLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCQotCQlJdGVyYXRvciBjYXJnc0l0ZXJhdG9yID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3NJdGVyYXRvci5uZXh0KCk7Ci0KLQotCQlTdHJpbmcgbm9ybWFsaXphdGlvblR5cGUgPSAiTkZDIjsKLQkJaWYgKGNhcmdzSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKWNhcmdzSXRlcmF0b3IubmV4dCgpOwotCQkJLy8gVHJpbSBhbmQgY29udmVydCB0byB1cHBlciBhcyBwZXIgdGhlIHNwZWMKLQkJCWlmIChhcmcyLmVtcHR5KCkpIHsKLQkJCQlub3JtYWxpemF0aW9uVHlwZSA9ICIiOwotCQkJfSBlbHNlIHsKLQkJCQlub3JtYWxpemF0aW9uVHlwZSA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKS50cmltKCkudG9VcHBlckNhc2UoKTsKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nIGFyZ3VtZW50ID0gIiI7Ci0JCWlmICghIGFyZzEuZW1wdHkoKSkgYXJndW1lbnQgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCQkJCi0JCVN0cmluZyBub3JtYWxpemVkID0gbm9ybWFsaXphdGlvblR5cGUuZXF1YWxzKCIiKSA/IGFyZ3VtZW50IDogZ2V0Tm9ybWFsaXplcigpLm5vcm1hbGl6ZShhcmd1bWVudCwgbm9ybWFsaXphdGlvblR5cGUpOwotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKG5vcm1hbGl6ZWQpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFczQ05vcm1hbGl6ZXIgZ2V0Tm9ybWFsaXplcigpIHsKLQkJaWYgKG5vcm1hbGl6ZXIgPT0gbnVsbCkgewotCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotCQkJCi0JCQlub3JtYWxpemVyID0gY3JlYXRlSUNVTm9ybWFsaXplcihjbGFzc0xvYWRlcik7Ci0JCQkvKgotCQkJaWYgKG5vcm1hbGl6ZXIgPT0gbnVsbCkgewotCQkJCW5vcm1hbGl6ZXIgPSBjcmVhdGVKREtOb3JtYWxpemVyKGNsYXNzTG9hZGVyKTsKLQkJCX0KLQkJCSovCi0JCQlpZiAobm9ybWFsaXplciA9PSBudWxsKSB7Ci0JCQkJbm9ybWFsaXplciA9IG5ldyBGYWlsaW5nTm9ybWFsaXplcigpOwotCQkJfQotCQl9Ci0JCXJldHVybiBub3JtYWxpemVyOwotCX0KLQotCS8qCi0JcHJpdmF0ZSBzdGF0aWMgVzNDTm9ybWFsaXplciBjcmVhdGVKREtOb3JtYWxpemVyKENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCS8vIElmIHRoYXQgZmFpbHMsIHdlJ2xsIGNoZWNrIGZvciB0aGUgSmF2YSA2IE5vcm1hbGl6ZXIgY2xhc3MKLQkJdHJ5IHsKLQkJCUNsYXNzIG5vcm1hbGl6ZXJDbGFzcyA9IGNsYXNzTG9hZGVyLmxvYWRDbGFzcygiamF2YS50ZXh0Lk5vcm1hbGl6ZXIiKTsKLQkJCUNsYXNzIGZvcm1DbGFzcyA9IGNsYXNzTG9hZGVyLmxvYWRDbGFzcygiamF2YS50ZXh0Lk5vcm1hbGl6ZXIkRm9ybSIpOwotCQkJCi0JCQlyZXR1cm4gbmV3IEpESzZOb3JtYWxpemVyKG5vcm1hbGl6ZXJDbGFzcywgZm9ybUNsYXNzKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JKi8KLQotCXByaXZhdGUgc3RhdGljIFczQ05vcm1hbGl6ZXIgY3JlYXRlSUNVTm9ybWFsaXplcihDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQkvLyBGaXJzdCBhdHRlbXB0IGlzIHRvIHRyeSB0aGUgSUJNIElDVSBsaWJyYXJ5Ci0JCXRyeSB7Ci0JCQlpZiAoY2xhc3NMb2FkZXIubG9hZENsYXNzKCJjb20uaWJtLmljdS50ZXh0Lk5vcm1hbGl6ZXIiKSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIG5ldyBJQ1VOb3JtYWxpemVyKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm90LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuTm90LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYzcwOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk5vdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjYyNzY1IC0gcHJvcGFnYXRlIHBvc3NpYmxlIGVycm9ycyBmcm9tIHhzOmJvb2xlYW4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW47Ci0KLS8qKgotICogJGFyZyBpcyBmaXJzdCByZWR1Y2VkIHRvIGFuIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIGJ5IGFwcGx5aW5nIHRoZQotICogZm46Ym9vbGVhbigpIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgaWYgdGhlIGVmZmVjdGl2ZSBib29sZWFuIHZhbHVlIGlzIGZhbHNlLAotICogYW5kIGZhbHNlIGlmIHRoZSBlZmZlY3RpdmUgYm9vbGVhbiB2YWx1ZSBpcyB0cnVlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Ob3QgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuTm90LgotCSAqLwotCXB1YmxpYyBGbk5vdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJub3QiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yIAotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9ub3QoYXJndW1lbnQpOwotCX0KLQotCS8qKgotCSAqIE5vdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46bm90ZSBvcGVyYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IgCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9ub3QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNCb29sZWFuIHJldCA9IEZuQm9vbGVhbi5mbl9ib29sZWFuKGFyZyk7Ci0KLQkJYm9vbGVhbiBhbnN3ZXIgPSBmYWxzZTsKLQotCQlpZiAocmV0LnZhbHVlKCkgPT0gZmFsc2UpCi0JCQlhbnN3ZXIgPSB0cnVlOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGFuc3dlcikpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk51bWJlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk51bWJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTZmYjEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5OdW1iZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlcyBmbG9hdCBoYW5kbGluZyBmb3IgZm46bnVtYmVyIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyOTg1MTkgLSBpbXByb3ZlbWVudHMgdG8gZm46bnVtYmVyIGltcGxlbWVudGF0aW9uLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlcmluZyB0byBub2RlIGFyZ3VtZW50cy4gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdDsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBpbmRpY2F0ZWQgYnkgJGFyZyBvciwgaWYgJGFyZyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29udGV4dAotICogaXRlbSBhZnRlciBhdG9taXphdGlvbiwgY29udmVydGVkIHRvIGFuIHhzOmRvdWJsZS4gSWYgJGFyZyBvciB0aGUgY29udGV4dAotICogaXRlbSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGFuIHhzOmRvdWJsZSwgdGhlIHhzOmRvdWJsZSB2YWx1ZSBOYU4gaXMKLSAqIHJldHVybmVkLiBJZiB0aGUgY29udGV4dCBpdGVtIGlzIHVuZGVmaW5lZCBhbiBlcnJvciBpcyByYWlzZWQ6Ci0gKiBbZXJyOkZPTkMwMDAxXS4KLSAqLwotcHVibGljIGNsYXNzIEZuTnVtYmVyIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbk51bWJlci4KLQkgKi8KLQlwdWJsaWMgRm5OdW1iZXIoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibnVtYmVyIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IG51bGw7Ci0JCWlmIChhcmdzLmlzRW1wdHkoKSkgewotCQkJYXJndW1lbnQgPSBnZXRSZXN1bHRTZXRGb3JBcml0eVplcm8oZWMpOwotCQl9IGVsc2UgewotCQkJYXJndW1lbnQgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCX0KLQotCQlyZXR1cm4gZm5fbnVtYmVyKGFyZ3VtZW50LCBlYyk7Ci0JfQotCi0JLyoqCi0JICogTnVtYmVyIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgICAgIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpudW1iZXIgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEb3VibGUgZm5fbnVtYmVyKFJlc3VsdFNlcXVlbmNlIGFyZywgRXZhbHVhdGlvbkNvbnRleHQgZWMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlpZiAoYXJnLnNpemUoKSA+IDEpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZSgiYmFkIGFyZ3VtZW50IHBhc3NlZCB0byBmbjpudW1iZXIoKSIpKTsKLQkJfSBlbHNlIGlmIChhcmcuc2l6ZSgpID09IDEpIHsKLQkJCUl0ZW0gYXQgPSBhcmcuZmlyc3QoKTsKLQotCQkJLyoKLQkJCWlmICghKGF0IGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCSovCi0JCQkKLQkJCWlmIChhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpIHsKLQkJCSAgaWYgKChhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSkgewotCQkJCSByZXR1cm4gKFhTRG91YmxlKWF0OwotCQkJICB9IGVsc2UgaWYgKChhdCBpbnN0YW5jZW9mIFhTRmxvYXQpKSB7Ci0JCQkJICBmbG9hdCB2YWx1ZSA9ICgoWFNGbG9hdClhdCkuZmxvYXRfdmFsdWUoKTsKLQkJCQkgIGlmIChGbG9hdC5pc05hTih2YWx1ZSkpIHsKLQkJCQkJICByZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5OYU4pOwotCQkJCSAgfSBlbHNlIGlmICh2YWx1ZSA9PSBGbG9hdC5ORUdBVElWRV9JTkZJTklUWSkgewotCQkJCQkgIHJldHVybiBuZXcgWFNEb3VibGUoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKTsKLQkJCQkgIH0gZWxzZSBpZiAodmFsdWUgPT0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkpIHsKLQkJCQkJICByZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSk7Ci0JCQkJICB9IGVsc2UgewotCQkJCQkgIHJldHVybiBuZXcgWFNEb3VibGUoKGRvdWJsZSl2YWx1ZSk7IAotCQkJCSAgfQotCQkJICB9IGVsc2UgewotCQkJCSBYU0RvdWJsZSBkID0gWFNEb3VibGUucGFyc2VfZG91YmxlKGF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCSByZXR1cm4gZCAhPSBudWxsID8gZCA6IG5ldyBYU0RvdWJsZShEb3VibGUuTmFOKTsKLQkJCSAgfQotCQkJfQotCQkJZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJCVhTRG91YmxlIGQgPSBYU0RvdWJsZS5wYXJzZV9kb3VibGUoKEZuRGF0YS5hdG9taXplKGF0KSkuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJcmV0dXJuIGQgIT0gbnVsbCA/IGQgOiBuZXcgWFNEb3VibGUoRG91YmxlLk5hTik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gbmV3IFhTRG91YmxlKERvdWJsZS5OYU4pOwotCQl9Ci0JCQotCQkvLyB1bnJlYWNoCi0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk9uZU9yTW9yZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gbk9uZU9yTW9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2MyOWFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5PbmVPck1vcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogUmV0dXJucyAkYXJnIGlmIGl0IGNvbnRhaW5zIG9uZSBvciBtb3JlIGl0ZW1zLiBPdGhlcndpc2UsIHJhaXNlcyBhbiBlcnJvcgotICogW2VycjpGT1JHMDAwNF0uIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiAkYXJnLgotICovCi1wdWJsaWMgY2xhc3MgRm5PbmVPck1vcmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuT25lT3JNb3JlLgotCSAqLwotCXB1YmxpYyBGbk9uZU9yTW9yZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJvbmUtb3ItbW9yZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBvbmVfb3JfbW9yZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPbmUtb3ItTW9yZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpvbmUtb3ItbW9yZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBvbmVfb3JfbW9yZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmVtcHR5X3NlcShudWxsKTsKLQotCQlyZXR1cm4gYXJnOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Qb3NpdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblBvc2l0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjhlMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblBvc2l0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czppbnRlZ2VyIGluZGljYXRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250ZXh0IGl0ZW0gd2l0aGluIHRoZQotICogc2VxdWVuY2Ugb2YgaXRlbXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSWYgdGhlIGNvbnRleHQgaXRlbSBpcwotICogdW5kZWZpbmVkLCBhbiBlcnJvciBpcyByYWlzZWQgW2VycjpGT05DMDAwMV0uCi0gKi8KLXB1YmxpYyBjbGFzcyBGblBvc2l0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblBvc2l0aW9uLgotCSAqLwotCXB1YmxpYyBGblBvc2l0aW9uKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInBvc2l0aW9uIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gcG9zaXRpb24oYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIFBvc2l0aW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cG9zaXRpb24gb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcG9zaXRpb24oQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlpZiAoZWMuZ2V0Q29udGV4dEl0ZW0oKSA9PSBudWxsKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQl9Ci0JCQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoZWMKLQkJCQkuZ2V0Q29udGV4dFBvc2l0aW9uKCkpKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblByZWZpeEZyb21RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblByZWZpeEZyb21RTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOThlMWExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5QcmVmaXhGcm9tUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTkNOYW1lOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6TkNOYW1lIHJlcHJlc2VudGluZyB0aGUgcHJlZml4IGZvciAkYXJnLiBJZiAkYXJnIGlzIHRoZSBlbXB0eQotICogc2VxdWVuY2UsIG9yICRhcmcgaGFzIG5vIHByZWZpeCwgYW4gZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblByZWZpeEZyb21RTmFtZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblByZWZpeEZyb21RTmFtZQotCSAqLwotCXB1YmxpYyBGblByZWZpeEZyb21RTmFtZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJwcmVmaXgtZnJvbS1RTmFtZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB7Ci0JCXJldHVybiBwcmVmaXgoYXJncywgZWMuZ2V0U3RhdGljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmVmaXgtZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpwcmVmaXgtZnJvbS1RTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBwcmVmaXgoQ29sbGVjdGlvbiBhcmdzLCBTdGF0aWNDb250ZXh0IHNjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJnCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpCi0JCSAgcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlRTmFtZSBxbmFtZSA9IChRTmFtZSkgYXJnMS5maXJzdCgpOwotCi0JCVN0cmluZyBwcmVmaXggPSBxbmFtZS5wcmVmaXgoKTsKLQkJCi0JCWlmIChwcmVmaXggIT0gbnVsbCkgewotCQkJaWYgKCEgWE1MQ29uc3RhbnRzLk5VTExfTlNfVVJJLmVxdWFscyhzYy5nZXROYW1lc3BhY2VDb250ZXh0KCkuZ2V0TmFtZXNwYWNlVVJJKHByZWZpeCkpKSB7Ci0JCQkJICByZXR1cm4gbmV3IFhTTkNOYW1lKHByZWZpeCk7Ci0JCQl9IGVsc2UgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkUHJlZml4KCk7Ci0JCQl9Ci0JCX0gCi0JCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JfQotCQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFFOYW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5RTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YzU0ZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblFOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuU3RhdGljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpRTmFtZSB3aXRoIHRoZSBuYW1lc3BhY2UgVVJJIGdpdmVuIGluICRwYXJhbVVSSS4gSWYgJHBhcmFtVVJJCi0gKiBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIHRoZSBlbXB0eSBzZXF1ZW5jZSwgaXQgcmVwcmVzZW50cyAibm8gbmFtZXNwYWNlIi4gVGhlCi0gKiBwcmVmaXggKG9yIGFic2VuY2Ugb2YgYSBwcmVmaXgpIGluICRwYXJhbVFOYW1lIGlzIHJldGFpbmVkIGluIHRoZSByZXR1cm5lZAotICogeHM6UU5hbWUgdmFsdWUuIFRoZSBsb2NhbCBuYW1lIGluIHRoZSByZXN1bHQgaXMgdGFrZW4gZnJvbSB0aGUgbG9jYWwgcGFydCBvZgotICogJHBhcmFtUU5hbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblFOYW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuUU5hbWUuCi0JICovCi0JcHVibGljIEZuUU5hbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiUU5hbWUiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXNvbHZlX1FOYW1lKGFyZ3MsIGVjLmdldFN0YXRpY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUmVzb2x2ZSB0aGUgUU5hbWUgb2YgdGhlIGdpdmVuIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGVoIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgZm46UU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgcmVzb2x2ZV9RTmFtZShDb2xsZWN0aW9uIGFyZ3MsIFN0YXRpY0NvbnRleHQgc2MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0KLQkJU3RyaW5nIG5zID0gbnVsbDsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlucyA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBuYW1lID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVFOYW1lIHFuID0gUU5hbWUucGFyc2VfUU5hbWUobmFtZSk7Ci0JCWlmIChxbiA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmxleGljYWxfZXJyb3IobnVsbCk7Ci0JCXFuLnNldF9uYW1lc3BhY2UobnMpOwotCi0JCXJldHVybiBxbjsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZW1vdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZW1vdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhZjA2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVtb3ZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFJldHVybnMgYSBuZXcgc2VxdWVuY2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdmFsdWUgb2YgJHRhcmdldCB3aXRoIHRoZSBpdGVtIGF0Ci0gKiB0aGUgcG9zaXRpb24gc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSBvZiAkcG9zaXRpb24gcmVtb3ZlZC4gSWYgJHBvc2l0aW9uIGlzCi0gKiBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiAkdGFyZ2V0LCAkdGFyZ2V0IGlzCi0gKiByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uIGNvbnNpc3RzIG9mIGFsbCBpdGVtcwotICogb2YgJHRhcmdldCB3aG9zZSBpbmRleCBpcyBsZXNzIHRoYW4gJHBvc2l0aW9uLCBmb2xsb3dlZCBieSBhbGwgaXRlbXMgb2YKLSAqICR0YXJnZXQgd2hvc2UgaW5kZXggaXMgZ3JlYXRlciB0aGFuICRwb3NpdGlvbi4gSWYgJHRhcmdldCBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJlbW92ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5SZW1vdmUuCi0JICovCi0JcHVibGljIEZuUmVtb3ZlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJlbW92ZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZW1vdmUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnJlbW92ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZW1vdmUoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMjsKLQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHRhcmdldCA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJLy8gc2FuaXR5IGNoZXgKLQkJaWYgKGFyZzIuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUl0ZW0gYXQgPSBhcmcyLmZpcnN0KCk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNJbnRlZ2VyKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJaW50IHBvc2l0aW9uID0gKChYU0ludGVnZXIpIGF0KS5pbnRfdmFsdWUoKS5pbnRWYWx1ZSgpOwotCi0JCWlmIChwb3NpdGlvbiA8IDEpCi0JCQlyZXR1cm4gdGFyZ2V0OwotCi0JCWlmIChwb3NpdGlvbiA+IHRhcmdldC5zaXplKCkpCi0JCQlyZXR1cm4gdGFyZ2V0OwotCi0JCWlmICh0YXJnZXQuZW1wdHkoKSkKLQkJCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCi0JCWludCBjdXJwb3MgPSAxOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IHRhcmdldC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCWF0ID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQlpZiAoY3VycG9zICE9IHBvc2l0aW9uKQotCQkJCXJzLmFkZChhdCk7Ci0KLQkJCWN1cnBvcysrOwotCQl9Ci0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlcGxhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZXBsYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5N2FiMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlcGxhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGFkZGVkIGV4Y2VwdGlvbiBoYW5kbGluZyB0byB0b3NzIGNvcnJlY3QgZXJyb3IgbnVtYmVycy4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVyblN5bnRheEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHhzOnN0cmluZyB0aGF0IGlzIG9idGFpbmVkIGJ5IHJlcGxhY2luZyBlYWNoCi0gKiBub24tb3ZlcmxhcHBpbmcgc3Vic3RyaW5nIG9mICRpbnB1dCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuICRwYXR0ZXJuIHdpdGggYW4KLSAqIG9jY3VycmVuY2Ugb2YgdGhlICRyZXBsYWNlbWVudCBzdHJpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJlcGxhY2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUm5SZXBsYWNlLgotCSAqLwotCXB1YmxpYyBGblJlcGxhY2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicmVwbGFjZSIpLCAzLCA0KTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXBsYWNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFJlcGxhY2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cmVwbGFjZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXBsYWNlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpCi0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmczID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnNCA9IG51bGw7Ci0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJYXJnNCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcgZmxhZ3MgPSBhcmc0LmZpcnN0KCkuZ2V0U3RyaW5nVmFsdWUoKTsKLQkJCQotCQkJaWYgKGZsYWdzLmxlbmd0aCgpID09IDApIHsKLQkJCQlhcmc0ID0gbnVsbDsKLQkJCX0gZWxzZSBpZiAoaXNGbGFnVmFsaWQoZmxhZ3MpID09IGZhbHNlKSB7Ci0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcigiRk9SWDAwMDEiLCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uIGZsYWdzIik7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHBhdHRlcm4gPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCVN0cmluZyByZXBsYWNlbWVudCA9ICgoWFNTdHJpbmcpIGFyZzMuZmlyc3QoKSkudmFsdWUoKTsKLQkJCi0JCXRyeSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHN0cjEucmVwbGFjZUFsbChwYXR0ZXJuLCByZXBsYWNlbWVudCkpOwotCQl9IGNhdGNoIChQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIGVycikgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2Vycm9yKG51bGwpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDA0IiwgImludmFsaWQgcmVnZXguIik7Ci0JCX0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXgpIHsKLQkJCVN0cmluZyBjbGFzc05hbWUgPSBleC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCWlmIChjbGFzc05hbWUuZW5kc1dpdGgoIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iKSkgewotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDA0IiwgInJlc3VsdCBvdXQgb2YgYm91bmRzIik7Ci0JCQl9Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKCJGT1JYMDAwMyIsICJpbnZhbGlkIHJlZ2V4LiIpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIkZPUlgwMDA0IiwgImludmFsaWQgcmVnZXguIik7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0ZsYWdWYWxpZChTdHJpbmcgZmxhZykgewotCQljaGFyIGZsYWdzW10gPSB7J3MnLCAnbScsICdpJywgJ3gnfTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZmxhZ3MubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChmbGFnLmluZGV4T2YoZmxhZ3NbaV0pICE9IC0xKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JCi0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVFOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZjY3MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVRTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4ODg4NiAtIGFkZCB1bml0IHRlc3RzIGFuZCBmaXggZm46cmVzb2x2ZS1xbmFtZSBmdW5jdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOlFOYW1lIHZhbHVlICh0aGF0IGlzLCBhbiBleHBhbmRlZC1RTmFtZSkgYnkgdGFraW5nIGFuIHhzOnN0cmluZwotICogdGhhdCBoYXMgdGhlIGxleGljYWwgZm9ybSBvZiBhbiB4czpRTmFtZSAoYSBzdHJpbmcgaW4gdGhlIGZvcm0KLSAqICJwcmVmaXg6bG9jYWwtbmFtZSIgb3IgImxvY2FsLW5hbWUiKSBhbmQgcmVzb2x2aW5nIGl0IHVzaW5nIHRoZSBpbi1zY29wZQotICogbmFtZXNwYWNlcyBmb3IgYSBnaXZlbiBlbGVtZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5SZXNvbHZlUU5hbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5SZXNvbHZlUU5hbWUuCi0JICovCi0JcHVibGljIEZuUmVzb2x2ZVFOYW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJlc29sdmUtUU5hbWUiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXNvbHZlX1FOYW1lKGFyZ3MsIGVjLmdldFN0YXRpY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogUmVzb2x2ZS1RTmFtZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEBwYXJhbSBzYwotCSAqICAgICAgICAgICAgUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cmVzb2x2ZS1RTmFtZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXNvbHZlX1FOYW1lKENvbGxlY3Rpb24gYXJncywgU3RhdGljQ29udGV4dCBzYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBhcmdzOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0ZXIubmV4dCgpOwotCi0JCVN0cmluZyBuYW1lID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVFOYW1lIHFuID0gUU5hbWUucGFyc2VfUU5hbWUobmFtZSk7Ci0KLQkJaWYgKHFuID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubGV4aWNhbF9lcnJvcihudWxsKTsKLQotCQlFbGVtZW50VHlwZSB4c2VsZW1lbnQgPSAoRWxlbWVudFR5cGUpIGFyZzIuZmlyc3QoKTsKLQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIHhzZWxlbWVudC5ub2RlX3ZhbHVlKCk7Ci0KLQkJaWYgKHFuLnByZWZpeCgpICE9IG51bGwpIHsKLQkJCVN0cmluZyBuYW1lc3BhY2VVUkkgPSBlbGVtZW50Lmxvb2t1cE5hbWVzcGFjZVVSSShxbi5wcmVmaXgoKSk7Ci0JCQkKLQkJCWlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkUHJlZml4KCk7Ci0JCQl9Ci0JCQlxbi5zZXRfbmFtZXNwYWNlKG5hbWVzcGFjZVVSSSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocW4ubG9jYWwoKS5lcXVhbHMoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSkgJiYgZWxlbWVudC5pc0RlZmF1bHROYW1lc3BhY2UoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkpIHsKLQkJCQlxbi5zZXRfbmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQkJfQotCQl9Ci0JCQotCi0JCXJldHVybiBxbjsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IEVsZW1lbnRUeXBlKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVVSSS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJlc29sdmVVUkkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwNTAzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUmVzb2x2ZVVSSS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQW55VVJJOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZW5hYmxlIGEgcmVsYXRpdmUgVVJJIHRvIGJlIHJlc29sdmVkCi0gKiBhZ2FpbnN0IGFuIGFic29sdXRlIFVSSS4gVGhlIGZpcnN0IGZvcm0gb2YgdGhpcyBmdW5jdGlvbiByZXNvbHZlcyAkcmVsYXRpdmUKLSAqIGFnYWluc3QgdGhlIHZhbHVlIG9mIHRoZSBiYXNlLXVyaSBwcm9wZXJ0eSBmcm9tIHRoZSBzdGF0aWMgY29udGV4dC4gSWYgdGhlCi0gKiBiYXNlLXVyaSBwcm9wZXJ0eSBpcyBub3QgaW5pdGlhbGl6ZWQgaW4gdGhlIHN0YXRpYyBjb250ZXh0IGFuIGVycm9yIGlzIHJhaXNlZAotICogW2VycjpGT05TMDAwNV0uCi0gKiAKLSAqIElmICRyZWxhdGl2ZSBpcyBhIHJlbGF0aXZlIFVSSSByZWZlcmVuY2UsIGl0IGlzIHJlc29sdmVkIGFnYWluc3QgJGJhc2UsIG9yCi0gKiB0aGUgYmFzZS11cmkgcHJvcGVydHkgZnJvbSB0aGUgc3RhdGljIGNvbnRleHQsIHVzaW5nIGFuIGFsZ29yaXRobSBzdWNoIGFzIHRoZQotICogb25lcyBkZXNjcmliZWQgaW4gW1JGQyAyMzk2XSBvciBbUkZDIDM5ODZdLCBhbmQgdGhlIHJlc3VsdGluZyBhYnNvbHV0ZSBVUkkKLSAqIHJlZmVyZW5jZSBpcyByZXR1cm5lZC4gQW4gZXJyb3IgbWF5IGJlIHJhaXNlZCBbZXJyOkZPUkcwMDA5XSBpbiB0aGUKLSAqIHJlc29sdXRpb24gcHJvY2Vzcy4gSWYgJHJlbGF0aXZlIGlzIGFuIGFic29sdXRlIFVSSSByZWZlcmVuY2UsIGl0IGlzIHJldHVybmVkCi0gKiB1bmNoYW5nZWQuIElmICRyZWxhdGl2ZSBvciAkYmFzZSBpcyBub3QgYSB2YWxpZCB4czphbnlVUkkgYW4gZXJyb3IgaXMgcmFpc2VkCi0gKiBbZXJyOkZPUkcwMDAyXS4gSWYgJHJlbGF0aXZlIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzCi0gKiByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuUmVzb2x2ZVVSSSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGbkJhc2VVcmkuCi0JICovCi0JcHVibGljIEZuUmVzb2x2ZVVSSSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyZXNvbHZlLXVyaSIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHJlc29sdmVVUkkoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIFJlc29sdmUtVVJJIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRfY29udGV4dAotCSAqICAgICAgICAgICAgRHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnJlc29sdmUtdXJpIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHJlc29sdmVVUkkoQ29sbGVjdGlvbiBhcmdzLAotCQkJRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoZWMuZ2V0U3RhdGljQ29udGV4dCgpLmdldEJhc2VVcmkoKSA9PSBudWxsKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3Iubm9CYXNlVVJJKCk7Ci0JCX0KLQkJCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBhcmdzOwotCQlJdGVyYXRvciBhcmdpdCA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHJlbGF0aXZlUlMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2l0Lm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYmFzZVVyaVJTID0gbnVsbDsKLQkJaWYgKGFyZ2l0Lmhhc05leHQoKSkgewotCQkJYmFzZVVyaVJTID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdC5uZXh0KCk7Ci0JCX0KLQotCQlpZiAocmVsYXRpdmVSUy5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJSXRlbSByZWxhdGl2ZVVSSSA9IHJlbGF0aXZlUlMuZmlyc3QoKTsKLQkJU3RyaW5nIHJlc29sdmVkVVJJID0gbnVsbDsKLQkJCQkKLQkJaWYgKGJhc2VVcmlSUyA9PSBudWxsKSB7Ci0JCQlyZXNvbHZlZFVSSSA9IHJlc29sdmVVUkkoZWMuZ2V0U3RhdGljQ29udGV4dCgpLmdldEJhc2VVcmkoKS50b1N0cmluZygpLCByZWxhdGl2ZVVSSS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJfSBlbHNlIHsKLQkJCUl0ZW0gYmFzZVVSSSA9IGJhc2VVcmlSUy5maXJzdCgpOwotCQkJcmVzb2x2ZWRVUkkgPSByZXNvbHZlVVJJKGJhc2VVUkkuZ2V0U3RyaW5nVmFsdWUoKSwgcmVsYXRpdmVVUkkuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTQW55VVJJKHJlc29sdmVkVVJJKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZSwgU3RyaW5nIHJlbGF0aXZlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJU3RyaW5nIHJlc29sdmVkID0gbnVsbDsKLQkJdHJ5IHsKLQkJCVVSSSBiYXNlVVJJID0gbmV3IFVSSShiYXNlKTsKLQkJCXJlc29sdmVkID0gYmFzZVVSSS5yZXNvbHZlKHJlbGF0aXZlKS50b1N0cmluZygpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5lcnJvclJlc29sdmluZ1VSSSgpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZDsKLQl9Ci0JCi0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUoU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJldmVyc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5SZXZlcnNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZTczNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJldmVyc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiA8cD4KLSAqIFNlcXVlbmNlIHJldmVyc2UgZnVuY3Rpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnJldmVyc2UoJGFyZyBhcyBpdGVtKCkqKSBhcyBpdGVtKCkqCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXZlcnNlcyB0aGUgb3JkZXIgb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLCB0aGUgZW1wdHkgc2VxdWVuY2UgaXMgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblJldmVyc2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5SZXZlcnNlLgotCSAqLwotCXB1YmxpYyBGblJldmVyc2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgicmV2ZXJzZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSByZXZlcnNhbCBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiByZXZlcnNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFJldmVyc2UgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHJldmVyc2VkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgdGhlIHJldmVyc2FsIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSByZXZlcnNlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcuc2l6ZSgpIDw9IDEpCi0JCQlyZXR1cm4gYXJnOwotCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQotCQlmb3IgKGludCBpID0gYXJnLnNpemUoKS0xOyBpID49IDA7IC0taSkKLQkJCXJzLmFkZChhcmcuaXRlbShpKSk7Ci0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NTkxODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI2Mjc2NSAtIGNsZWFuIHVwIGZuOnJvb3QgYWNjb3JkaW5nIHRvIHNwZWMuIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgxMTU5IC0gdGFrIGV4dHJhIGNhcmUgdG8gZmluZCB0aGUgcm9vdCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdG8gd2hpY2ggJGFyZyBiZWxvbmdzLiBUaGlzIHdpbGwgdXN1YWxseSwgYnV0Ci0gKiBub3QgbmVjZXNzYXJpbHksIGJlIGEgZG9jdW1lbnQgbm9kZS4KLSAqLwotcHVibGljIGNsYXNzIEZuUm9vdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblJvb3QuCi0JICovCi0JcHVibGljIEZuUm9vdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyb290IiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJLy9SZXN1bHRTZXF1ZW5jZSBhcmd1bWVudCA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlyZXR1cm4gZm5fcm9vdChhcmdzLCBlYyk7Ci0JfQotCi0JLyoqCi0JICogUm9vdCBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIGRjCi0JICogICAgICAgICAgICBSZXN1bHQgb2YgZHluYW1pYyBjb250ZXh0IG9wZXJhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cm9vdCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9yb290KENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQkJCi0JCWlmIChjYXJncy5zaXplKCkgPiAxKQotCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKG51bGwpKTsKLQkJCi0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IG51bGw7Ci0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJCWlmIChlYy5nZXRDb250ZXh0SXRlbSgpID09IG51bGwpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQkJfQotCQkJYXJnID0gUmVzdWx0QnVmZmVyLndyYXAoZWMuZ2V0Q29udGV4dEl0ZW0oKSk7Ci0JCX0gZWxzZSB7Ci0JCQlhcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwkJCQotCQl9Ci0JCQotCQlpZiAoYXJnLmVtcHR5KCkpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQkJCi0JCUl0ZW0gYWEgPSBhcmcuaXRlbSgwKTsKLQotCQlpZiAoIShhYSBpbnN0YW5jZW9mIE5vZGVUeXBlKSkKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJTm9kZVR5cGUgbnQgPSAoTm9kZVR5cGUpIGFhOwotCi0JCS8vIG9rIHdlIGdvdCBhIHNhbmUgYXJndW1lbnQuLi4gb3duIGl0LgotCQlOb2RlIHJvb3QgPSBudC5ub2RlX3ZhbHVlKCk7Ci0KLQkJd2hpbGUgKHJvb3QgIT0gbnVsbCAmJiAhIChyb290IGluc3RhbmNlb2YgRG9jdW1lbnQpKSB7Ci0JCQlOb2RlIG5ld3Jvb3QgPSByb290LmdldFBhcmVudE5vZGUoKTsKLQkJCWlmIChuZXdyb290ID09IG51bGwgJiYgcm9vdCBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCQluZXdyb290ID0gKChBdHRyKXJvb3QpLmdldE93bmVyRWxlbWVudCgpOwotCQkJfQotCQkJCQotCQkJLy8gZm91bmQgaXQKLQkJCWlmIChuZXdyb290ID09IG51bGwpCi0JCQkJYnJlYWs7Ci0KLQkJCXJvb3QgPSBuZXdyb290OwotCQl9Ci0KLQkJcmV0dXJuIE5vZGVUeXBlLmRvbV90b194cGF0aChyb290LCBlYy5nZXRTdGF0aWNDb250ZXh0KCkuZ2V0VHlwZU1vZGVsKCkpOwotCX0KLQkKLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblJvdW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4MGZkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciB3aXRoIG5vIGZyYWN0aW9uYWwgcGFydCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIGFyZ3VtZW50LgotICogSWYgdGhlcmUgYXJlIHR3byBzdWNoIG51bWJlcnMsIHRoZW4gdGhlIG9uZSB0aGF0IGlzIGNsb3Nlc3QgdG8gcG9zaXRpdmUKLSAqIGluZmluaXR5IGlzIHJldHVybmVkLiBNb3JlIGZvcm1hbGx5LCBmbjpyb3VuZCh4KSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQgYXMKLSAqIGZuOmZsb29yKHgrMC41KS4gSWYgdHlwZSBvZiAkYXJnIGlzIG9uZSBvZiB0aGUgZm91ciBudW1lcmljIHR5cGVzIHhzOmZsb2F0LAotICogeHM6ZG91YmxlLCB4czpkZWNpbWFsIG9yIHhzOmludGVnZXIgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBpcyB0aGUgc2FtZSBhcyB0aGUKLSAqIHR5cGUgb2YgJGFyZy4gSWYgdGhlIHR5cGUgb2YgJGFyZyBpcyBhIHR5cGUgZGVyaXZlZCBmcm9tIG9uZSBvZiB0aGUgbnVtZXJpYwotICogdHlwZXMsIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gaXMgdGhlIGJhc2UgbnVtZXJpYyB0eXBlLgotICovCi1wdWJsaWMgY2xhc3MgRm5Sb3VuZCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Sb3VuZC4KLQkgKi8KLQlwdWJsaWMgRm5Sb3VuZCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJyb3VuZCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIDEgYXJndW1lbnQgb25seSEKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCXJldHVybiBmbl9yb3VuZChhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogUm91bmQgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpyb3VuZCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmbl9yb3VuZChSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBzYW5pdHkgY2hleAotCQlOdW1lcmljVHlwZSBudCA9IEZuQWJzLmdldF9zaW5nbGVfbnVtZXJpY19hcmcoYXJnKTsKLQotCQkvLyBlbXB0eSBhcmcKLQkJaWYgKG50ID09IG51bGwpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCXJldHVybiBudC5yb3VuZCgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb3VuZEhhbGZUb0V2ZW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Sb3VuZEhhbGZUb0V2ZW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFiYTQ1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuUm91bmRIYWxmVG9FdmVuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIG5lYXJlc3QgKHRoYXQgaXMsIG51bWVyaWNhbGx5IGNsb3Nlc3QpIG51bWVyaWMgdG8KLSAqICRhcmcgdGhhdCBpcyBhIG11bHRpcGxlIG9mIHRlbiB0byB0aGUgcG93ZXIgb2YgbWludXMgJHByZWNpc2lvbi4gSWYgdHdvIHN1Y2gKLSAqIHZhbHVlcyBhcmUgZXF1YWxseSBuZWFyIChlLmcuIGlmIHRoZSBmcmFjdGlvbmFsIHBhcnQgaW4gJGFyZyBpcyBleGFjdGx5Ci0gKiAuNTAwLi4uKSwgcmV0dXJucyB0aGUgb25lIHdob3NlIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0IGlzIGV2ZW4uIElmIHR5cGUgb2YKLSAqICRhcmcgaXMgb25lIG9mIHRoZSBmb3VyIG51bWVyaWMgdHlwZXMgeHM6ZmxvYXQsIHhzOmRvdWJsZSwgeHM6ZGVjaW1hbCBvcgotICogeHM6aW50ZWdlciB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mICRhcmcuIElmIHRoZQotICogdHlwZSBvZiAkYXJnIGlzIGEgdHlwZSBkZXJpdmVkIGZyb20gb25lIG9mIHRoZSBudW1lcmljIHR5cGVzLCB0aGUgdHlwZSBvZiB0aGUKLSAqIHJldHVybiBpcyB0aGUgYmFzZSBudW1lcmljIHR5cGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblJvdW5kSGFsZlRvRXZlbiBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Sb3VuZEhhbGZUb0V2ZW4uCi0JICovCi0JcHVibGljIEZuUm91bmRIYWxmVG9FdmVuKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInJvdW5kLWhhbGYtdG8tZXZlbiIpLCAxLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZ3VtZW50ID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCQlpZiAoYXJncy5zaXplKCkgPT0gMikgewotCQkJcmV0dXJuIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihhcmdzKTsKLQkJfQotCQkKLQkJcmV0dXJuIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihhcmd1bWVudCk7Ci0JfQotCi0JLyoqCi0JICogUm91bmQtSGFsZi10by1FdmVuIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46cm91bmQtaGFsZi10by1ldmVuIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihSZXN1bHRTZXF1ZW5jZSBhcmcpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlOdW1lcmljVHlwZSBudCA9IEZuQWJzLmdldF9zaW5nbGVfbnVtZXJpY19hcmcoYXJnKTsKLQotCQkvLyBlbXB0eSBhcmcKLQkJaWYgKG50ID09IG51bGwpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQkKLQkJcmV0dXJuIG50LnJvdW5kX2hhbGZfdG9fZXZlbigpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZuX3JvdW5kX2hhbGZfdG9fZXZlbihDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkKLQkJaWYgKGFyZ3Muc2l6ZSgpID4gMiB8fCBhcmdzLnNpemUoKSA8PSAxKSB7Ci0JCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQl9Ci0JCQotCQlJdGVyYXRvciBhcmdJdCA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgcnNBcmcxID0gIChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSByc1ByZWNpc2lvbiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnSXQubmV4dCgpOwotCQkKLQkJTnVtZXJpY1R5cGUgbnQgPSAoTnVtZXJpY1R5cGUpIHJzQXJnMS5maXJzdCgpOwotCQlOdW1lcmljVHlwZSBudFByZWNpc2lvbiA9IChOdW1lcmljVHlwZSkgcnNQcmVjaXNpb24uZmlyc3QoKTsKLQkJCi0JCXJldHVybiBudC5yb3VuZF9oYWxmX3RvX2V2ZW4oSW50ZWdlci5wYXJzZUludChudFByZWNpc2lvbi5nZXRTdHJpbmdWYWx1ZSgpKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tRGF0ZVRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYzE1MTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tRGF0ZVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNzc3NzQgLSBYU0RFY2ltYWwgcmV0dXJuaW5nIHdyb25nIHZhbHVlcy4gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWw7Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpkZWNpbWFsIHZhbHVlIGJldHdlZW4gMCBhbmQgNjAuOTk5Li4uLCBib3RoIGluY2x1c2l2ZQotICogcmVwcmVzZW50aW5nIHRoZSBzZWNvbmRzIGFuZCBmcmFjdGlvbmFsIHNlY29uZHMgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZgotICogJGFyZy4gTm90ZSB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDYwIHNlY29uZHMgdG8gYWNjb21tb2RhdGUKLSAqIG9jY2FzaW9uYWwgbGVhcCBzZWNvbmRzIHVzZWQgdG8ga2VlcCBodW1hbiB0aW1lIHN5bmNocm9uaXplZCB3aXRoIHRoZQotICogcm90YXRpb24gb2YgdGhlIHBsYW5ldC4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuU2Vjb25kc0Zyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblNlY29uZHNGcm9tRGF0ZVRpbWUuCi0JICovCi0JcHVibGljIEZuU2Vjb25kc0Zyb21EYXRlVGltZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzZWNvbmRzLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc2Vjb25kc19mcm9tX2RhdGVfdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZWNvbmRzLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c2Vjb25kcy1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHNlY29uZHNfZnJvbV9kYXRlX3RpbWUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGNhcmdzLml0ZXJhdG9yKCkubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gKFhTRGF0ZVRpbWUpIGFyZzEuZmlyc3QoKTsKLQkJZG91YmxlIHJlcyA9IGR0LnNlY29uZCgpOwotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChuZXcgQmlnRGVjaW1hbChyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncwotCQkJCQkuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0RhdGVUaW1lKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tRHVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbUR1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YmMyZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjc3Nzc0IC0gWFNEZWNpbWFsIHJldHVybmluZyB3cm9uZyB2YWx1ZXMuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCB4czpkdXJhdGlvbiBleHBlY3RlZCBhcmd1bWVudC4gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci0KLS8qKgotICogUmV0dXJucyBhbiB4czpkZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgc2Vjb25kcyBjb21wb25lbnQgaW4gdGhlIGNhbm9uaWNhbAotICogbGV4aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgJGFyZy4gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUuIElmCi0gKiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblNlY29uZHNGcm9tRHVyYXRpb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TZWNvbmRzRnJvbUR1cmF0aW9uLgotCSAqLwotCXB1YmxpYyBGblNlY29uZHNGcm9tRHVyYXRpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic2Vjb25kcy1mcm9tLWR1cmF0aW9uIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHNlY29uZHNfZnJvbV9kdXJhdGlvbihhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZWNvbmRzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c2Vjb25kcy1mcm9tLWR1cmF0aW9uIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHNlY29uZHNfZnJvbV9kdXJhdGlvbihDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTRHVyYXRpb24gZHRkID0gKFhTRHVyYXRpb24pIGFyZzEuZmlyc3QoKTsKLQotCQlkb3VibGUgcmVzID0gZHRkLnNlY29uZHMoKTsKLQotCQlpZiAoZHRkLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwobmV3IEJpZ0RlY2ltYWwocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU0R1cmF0aW9uKCksCi0JCQkJCVNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblNlY29uZHNGcm9tVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjY4ZWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TZWNvbmRzRnJvbVRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNzc3NzQgLSBYU0RlY2ltYWwgcmV0dXJpbmcgd3JvbmcgdmFsdWVzLiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUaW1lOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6ZGVjaW1hbCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDYwLjk5OS4uLiwgYm90aCBpbmNsdXNpdmUsCi0gKiByZXByZXNlbnRpbmcgdGhlIHNlY29uZHMgYW5kIGZyYWN0aW9uYWwgc2Vjb25kcyBpbiB0aGUgbG9jYWxpemVkIHZhbHVlIG9mCi0gKiAkYXJnLiBOb3RlIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gNjAgc2Vjb25kcyB0byBhY2NvbW1vZGF0ZQotICogb2NjYXNpb25hbCBsZWFwIHNlY29uZHMgdXNlZCB0byBrZWVwIGh1bWFuIHRpbWUgc3luY2hyb25pemVkIHdpdGggdGhlCi0gKiByb3RhdGlvbiBvZiB0aGUgcGxhbmV0LiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkKLSAqIHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5TZWNvbmRzRnJvbVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TZWNvbmRzRnJvbVRpbWUuCi0JICovCi0JcHVibGljIEZuU2Vjb25kc0Zyb21UaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInNlY29uZHMtZnJvbS10aW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHNlY29uZHNfZnJvbV90aW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEJhc2UtVXJpIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOmJhc2UtdXJpIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHNlY29uZHNfZnJvbV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNUaW1lIGR0ID0gKFhTVGltZSkgYXJnMS5maXJzdCgpOwotCi0JCWRvdWJsZSByZXMgPSBkdC5zZWNvbmQoKTsKLQotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChuZXcgQmlnRGVjaW1hbChyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGFydHNXaXRoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RhcnRzV2l0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGViOWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGFydHNXaXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Jvb2xlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6Ym9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBvZiAkYXJnMSBzdGFydHMKLSAqIHdpdGggYSBzZXF1ZW5jZSBvZiBjb2xsYXRpb24gdW5pdHMgdGhhdCBwcm92aWRlcyBhIG1pbmltYWwgbWF0Y2ggdG8gdGhlCi0gKiBjb2xsYXRpb24gdW5pdHMgb2YgJGFyZzIgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdCBpcyB1c2VkLgotICovCi1wdWJsaWMgY2xhc3MgRm5TdGFydHNXaXRoIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3RhcnRzV2l0aC4KLQkgKi8KLQlwdWJsaWMgRm5TdGFydHNXaXRoKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN0YXJ0cy13aXRoIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0YXJ0c193aXRoKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFN0YXJ0cy13aXRoIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN0YXJ0cy13aXRoIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN0YXJ0c193aXRoKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCVN0cmluZyBzdHIyID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKQotCQkJc3RyMSA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpCi0JCQlzdHIyID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCi0JCWludCBzdHIxbGVuID0gc3RyMS5sZW5ndGgoKTsKLQkJaW50IHN0cjJsZW4gPSBzdHIyLmxlbmd0aCgpOwotCi0JCWlmIChzdHIxbGVuID09IDAgJiYgc3RyMmxlbiAhPSAwKSB7Ci0JCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCQl9Ci0JCWlmIChzdHIybGVuID09IDApIHsKLQkJCXJldHVybiBYU0Jvb2xlYW4uVFJVRTsKLQkJfQotCi0JCXJldHVybiBYU0Jvb2xlYW4udmFsdWVPZihzdHIxLnN0YXJ0c1dpdGgoc3RyMikpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXRpY0Jhc2VVcmkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdGF0aWNCYXNlVXJpLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZjFiNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0YXRpY0Jhc2VVcmkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGJhc2UtdXJpIHByb3BlcnR5IGZyb20gdGhlIHN0YXRpYyBjb250ZXh0LiBJZiB0aGUKLSAqIGJhc2UtdXJpIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgdGhlIGVtcHR5IHNlcXVlbmNlIGlzIHJldHVybmVkLiBDb21wb25lbnRzIG9mCi0gKiB0aGUgc3RhdGljIGNvbnRleHQgYXJlIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEMuMSBTdGF0aWMgQ29udGV4dCBDb21wb25lbnRzIGluCi0gKiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RhdGljQmFzZVVyaSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdGF0aWNCYXNlVXJpLgotCSAqLwotCXB1YmxpYyBGblN0YXRpY0Jhc2VVcmkoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3RhdGljLWJhc2UtdXJpIiksIDApOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3RhdGljX2Jhc2VfdXJpKGFyZ3MsIGVjLmdldFN0YXRpY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogU3RhdGljLWJhc2UtVXJpIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHBhcmFtIHNjCi0JICogICAgICAgICAgICBSZXN1bHQgb2Ygc3RhdGljIGNvbnRleHQgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpzdGF0aWMtYmFzZS11cmkgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RhdGljX2Jhc2VfdXJpKENvbGxlY3Rpb24gYXJncywKLQkJCVN0YXRpY0NvbnRleHQgc2MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQkJYXNzZXJ0IHNjICE9IG51bGw7Ci0KLQkJLy8gbWFrZSBhIGNvcHkgcHJvbGx5Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNBbnlVUkkoc2MuZ2V0QmFzZVVyaSgpLnRvU3RyaW5nKCkpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYjAyNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDQ3MSAtIGltcHJvdmVtZW50cyB0byBmbjpzdHJpbmcgZnVuY3Rpb24gKHN1cHBvcnQgZm9yIGFyaXR5IDApIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxOTM4IC0gaGFuZGxlIGNvbnRleHQgYW5kIGVtcHR5IHNlcXVlbmNlcyBjb3JyZWN0bHkKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5UeXBlRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiAkYXJnIHJlcHJlc2VudGVkIGFzIGEgeHM6c3RyaW5nLiBJZiBubyBhcmd1bWVudCBpcwotICogc3VwcGxpZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBjb250ZXh0IGl0ZW0gKC4pLgotICovCi1wdWJsaWMgY2xhc3MgRm5TdHJpbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3RyaW5nLgotCSAqLwotCXB1YmxpYyBGblN0cmluZygpIHsKLQkgIHN1cGVyKG5ldyBRTmFtZSgic3RyaW5nIiksIDAsIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3RyaW5nKGFyZ3MsIGVjKTsKLQl9Ci0KLQkvKioKLQkgKiBTdHJpbmcgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3RyaW5nIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN0cmluZyhDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgKGFyZ3Muc2l6ZSgpID09IDAgfHwgYXJncy5zaXplKCkgPT0gMSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IG51bGw7Ci0JCQkJCi0JCWlmIChhcmdzLmlzRW1wdHkoKSkgewotCQkJLy8gc3VwcG9ydCBmb3IgYXJpdHkgPSAwCi0JCQlyZXR1cm4gZ2V0UmVzdWx0U2V0Rm9yQXJpdHlaZXJvKGVjKTsKLQkJfQotCQllbHNlIHsKLQkJCWFyZzEgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7CQotCQl9Ci0KLQkJLy8gc2FuaXR5IGNoZWNrIGFyZ3MKLQkJaWYgKGFyZzEuc2l6ZSgpID4gMSkKLQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJUmVzdWx0QnVmZmVyIHJzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlycy5hZGQobmV3IFhTU3RyaW5nKCIiKSk7Ci0JCX0gZWxzZSB7Ci0JCQlJdGVtIGF0ID0gYXJnMS5maXJzdCgpOwotCQkJcnMuYWRkKG5ldyBYU1N0cmluZyhhdC5nZXRTdHJpbmdWYWx1ZSgpKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ0pvaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdKb2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNDA0NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ0pvaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gam9pbiBzdHJpbmdzIHRvZ2V0aGVyLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjpzdHJpbmctam9pbigkYXJnMSBhcyB4czpzdHJpbmcqLCAkYXJnMiBhcyB4czpzdHJpbmcpIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyBhIHhzOnN0cmluZyBjcmVhdGVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIG1lbWJlcnMgb2YgdGhlCi0gKiAkYXJnMSBzZXF1ZW5jZSB1c2luZyAkYXJnMiBhcyBhIHNlcGFyYXRvci4gSWYgdGhlIHZhbHVlIG9mICRhcmcyIGlzIHRoZQotICogemVyby1sZW5ndGggc3RyaW5nLCB0aGVuIHRoZSBtZW1iZXJzIG9mICRhcmcxIGFyZSBjb25jYXRlbmF0ZWQgd2l0aG91dCBhCi0gKiBzZXBhcmF0b3IuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcxIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHplcm8tbGVuZ3RoIHN0cmluZyBpcwotICogcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblN0cmluZ0pvaW4gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdHJpbmdKb2luCi0JICovCi0JcHVibGljIEZuU3RyaW5nSm9pbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdHJpbmctam9pbiIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgZXZhbHVhdGVkLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFRoZSBldmFsdWF0aW9uIG9mIHRoZSBqb2luaW5nIG9mIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0cmluZ19qb2luKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEpvaW4gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGpvaW5lZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBhcmd1bWVudHMgYmVpbmcgam9pbmVkIHRvZ2V0aGVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RyaW5nX2pvaW4oQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0KLQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCQlTdHJpbmcgc2VwYXJhdG9yID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCi0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZzEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlYU1N0cmluZyBpdGVtID0gKFhTU3RyaW5nKSBpLm5leHQoKTsKLQkJCWJ1Zi5hcHBlbmQoaXRlbS52YWx1ZSgpKTsKLQkJCQotCQkJaWYgKGkuaGFzTmV4dCgpKQotCQkJCWJ1Zi5hcHBlbmQoc2VwYXJhdG9yKTsKLQkJfQotCQkKLQkJcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0JCXJldHVybiBuZXcgWFNTdHJpbmcocmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1NUQVIpKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdMZW5ndGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdMZW5ndGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQyOTkwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3RyaW5nTGVuZ3RoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDQ3MSAtIGltcHJvdmVtZW50cyB0byBzdHJpbmctbGVuZ3RoIGZ1bmN0aW9uIChzdXBwb3J0IGZvciBhcml0eSAwKQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUgIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjA5NiAtIGltcHJvdmVtZW50cyBmb3Igc3Vycm9nYXRlIGhhbmRsaW5nIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MjA5NiAtIGNsZWFuIHVwIHN0cmluZyBzdG9yYWdlCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjgxOTM4IC0gaGFuZGxlIGNvbnRleHQgYW5kIGVtcHR5IHNlcXVlbmNlcyBjb3JyZWN0bHkKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuVVRGMTY7Ci0KLS8qKgotICogPHA+Ci0gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgc3RyaW5nIGxlbmd0aC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBVc2FnZTogZm46c3RyaW5nLWxlbmd0aCgkYXJnIGFzIHhzOnN0cmluZz8pIGFzIHhzOmludGVnZXIKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgYW4geHM6aW50ZWdlciBlcXVhbCB0byB0aGUgbGVuZ3RoIGluIGNoYXJhY3RlcnMgb2YgdGhlCi0gKiB2YWx1ZSBvZiAkYXJnLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIHRoZSB2YWx1ZSBvZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHhzOmludGVnZXIgMCBpcyByZXR1cm5lZC4KLSAqIDwvcD4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RyaW5nTGVuZ3RoIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3RyaW5nTGVuZ3RoCi0JICovCi0JcHVibGljIEZuU3RyaW5nTGVuZ3RoKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN0cmluZy1sZW5ndGgiKSwgMCwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN0cmluZ19sZW5ndGgoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gdGhlIHN0cmluZyBsZW5ndGguCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgdGhlIHN0cmluZyBsZW5ndGggZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3RyaW5nX2xlbmd0aChDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdFNlcXVlbmNlIGFyZzEgPSBudWxsOwotCi0JCWlmIChjYXJncy5pc0VtcHR5KCkpIHsKLQkJICAvLyBzdXBwb3J0IGZvciBhcml0eSA9IDAKLQkJICByZXR1cm4gZ2V0UmVzdWx0U2V0Rm9yQXJpdHlaZXJvKGVjKTsKLQkJfQotCQllbHNlIHsKLQkJICBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJfQotCi0JCVN0cmluZyBzdHIgPSAiIjsKLQkJaWYgKCEgYXJnMS5lbXB0eSgpKSB7Ci0JCQlzdHIgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKFVURjE2LmNvdW50Q29kZVBvaW50KHN0cikpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ1RvQ29kZXBvaW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN0cmluZ1RvQ29kZXBvaW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmFiMzNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdHJpbmdUb0NvZGVwb2ludHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNTU0IC0gaW1wcm92ZW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UgYW5kIGZpeCBzdXJyb2dhdGUgaGFuZGxpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvZGVQb2ludEl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvcjsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGNvbnN0aXR1dGUgYW4geHM6c3RyaW5nLiBJZiAkYXJnIGlzCi0gKiBhIHplcm8tbGVuZ3RoIHN0cmluZyBvciB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5lZC4KLSAqLwotcHVibGljIGNsYXNzIEZuU3RyaW5nVG9Db2RlcG9pbnRzIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3RyaW5nVG9Db2RlcG9pbnRzLgotCSAqLwotCXB1YmxpYyBGblN0cmluZ1RvQ29kZXBvaW50cygpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdHJpbmctdG8tY29kZXBvaW50cyIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdHJpbmdfdG9fY29kZXBvaW50cyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBCYXNlLVVyaSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpiYXNlLXVyaSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdHJpbmdfdG9fY29kZXBvaW50cyhDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQkJaWYgKGFyZzEuZW1wdHkoKSkKLQkJICAgcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlYU1N0cmluZyB4c3RyID0gKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCk7Ci0KLQkJQ29kZVBvaW50SXRlcmF0b3IgY3BpID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHhzdHIudmFsdWUoKSk7Ci0JCQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0JCWZvciAoaW50IGNvZGVQb2ludCA9IGNwaS5jdXJyZW50KCk7IGNvZGVQb2ludCAhPSBDb2RlUG9pbnRJdGVyYXRvci5ET05FOyBjb2RlUG9pbnQgPSBjcGkubmV4dCgpKSB7Ci0gICAgICAgICAgIAlycy5hZGQobmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoY29kZVBvaW50KSkpOwotCQl9Ci0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic2VxdWVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzZXF1ZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmFkNGNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzZXF1ZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBlYXNlZCByZXN0cmljdGlvbiBvbiBkYXRhIHR5cGUuLi5jb252ZXJ0IG51bWVyaWNzIHRvIFhTRG91YmxlLgotICogICAgIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODU4MDYgLSBmaXhlZCBmbjpzdWJzZXF1ZW5jZSBmb3IgaW5kZXhlcyBzdGFydGluZyBiZWZvcmUgMQotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM4OTk5IC0gaW1wcm92aW5nIGNvbXBsaWFuY2Ugb2YgZnVuY3Rpb24gJ2ZuOnN1YnNlcXVlbmNlJy4gaW1wbGVtZW50aW5nIGZ1bGwgYXJpdHkgc3VwcG9ydC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk51bWVyaWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgY29udGlndW91cyBzZXF1ZW5jZSBvZiBpdGVtcyBpbiB0aGUgdmFsdWUgb2YgJHNvdXJjZVNlcSBiZWdpbm5pbmcKLSAqIGF0IHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mICRzdGFydGluZ0xvYyBhbmQgY29udGludWluZyBmb3IgdGhlCi0gKiBudW1iZXIgb2YgaXRlbXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZiAkbGVuZ3RoLiBNb3JlIHNwZWNpZmljYWxseSwgcmV0dXJucwotICogdGhlIGl0ZW1zIGluICRzb3VyY2VTdHJpbmcgd2hvc2UgcG9zaXRpb24gJHAgb2JleXM6IC0gZm46cm91bmQoJHN0YXJ0aW5nTG9jKQotICogPD0gJHAgPCBmbjpyb3VuZCgkc3RhcnRpbmdMb2MpICsgZm46cm91bmQoJGxlbmd0aCkKLSAqLwotcHVibGljIGNsYXNzIEZuU3Vic2VxdWVuY2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3Vic2VxdWVuY2UuCi0JICovCi0JcHVibGljIEZuU3Vic2VxdWVuY2UoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3Vic2VxdWVuY2UiKSwgMiwgMyk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gc3Vic2VxdWVuY2UoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU3Vic2VxdWVuY2Ugb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3Vic2VxdWVuY2Ugb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3Vic2VxdWVuY2UoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsJCQotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBzZXEgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsJCQotCQlpZiAoc2VxLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQkKLQkJUmVzdWx0U2VxdWVuY2Ugc3RhcnRMb2MgPSAoUmVzdWx0U2VxdWVuY2UpIGNpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgbGVuZ3RoID0gbnVsbDsgCQkKLQkJaWYgKGNpdGVyLmhhc05leHQoKSkgewotCQkJbGVuZ3RoID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7IAotCQl9Ci0KLQkJSXRlbSBhdCA9IHN0YXJ0TG9jLmZpcnN0KCk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpKSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJYXQgPSBuZXcgWFNEb3VibGUoYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0KLQkJaW50IHN0YXJ0ID0gKGludCkgKChYU0RvdWJsZSkgYXQpLmRvdWJsZV92YWx1ZSgpOwotICAgICAgICBpbnQgZWZmZWN0aXZlTm9JdGVtcyA9IDA7IC8vIG5vIG9mIGl0ZW1zIGJleW9uZCBpbmRleCA+PSAxIHRoYXQgYXJlIGFkZGVkIHRvIHRoZSByZXN1bHQKLSAgICAgICAgCi0JICAgIGlmIChsZW5ndGggIT0gbnVsbCkgewotCSAgICAJLy8gdGhlIDNyZCBhcmd1bWVudCBpcyBwcmVzZW50Ci0JCQlpZiAobGVuZ3RoLnNpemUoKSAhPSAxKQotCQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQlhdCA9IGxlbmd0aC5maXJzdCgpOwotCQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpIHsKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJfQotCQkJYXQgPSBuZXcgWFNEb3VibGUoYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQlpbnQgbGVuID0gKGludCkgKChYU0RvdWJsZSkgYXQpLmRvdWJsZV92YWx1ZSgpOwotCQkJaWYgKGxlbiA8IDApIHsKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJCX0KLQotCQkJaWYgKHN0YXJ0IDw9IDApIHsJCQkJCi0JCQkJZWZmZWN0aXZlTm9JdGVtcyA9IHN0YXJ0ICsgbGVuIC0gMTsJCi0JCQkJc3RhcnQgPSAxOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZWZmZWN0aXZlTm9JdGVtcyA9IGxlbjsKLQkJCX0KLQkJfQotCSAgICBlbHNlIHsKLQkgICAgCS8vIDNyZCBhcmd1bWVudCBpcyBhYnNlbnQKLQkgICAgCWlmIChzdGFydCA8PSAwKSB7Ci0JICAgIAkJc3RhcnQgPSAxOwotCSAgICAJCWVmZmVjdGl2ZU5vSXRlbXMgPSBzZXEuc2l6ZSgpOyAKLQkgICAgCX0KLQkgICAgCWVsc2UgewotCSAgICAJCWVmZmVjdGl2ZU5vSXRlbXMgPSBzZXEuc2l6ZSgpIC0gc3RhcnQgKyAxOyAKLQkgICAgCX0KLQkgICAgfQotCQkKLQkJaW50IHBvcyA9IDE7IC8vIGluZGV4IHJ1bm5pbmcgcGFyYWxsZWwgdG8gdGhlIGl0ZXJhdG9yCi0JCWludCBhZGRlZEl0ZW1zID0gMDsKLQkJaWYgKGVmZmVjdGl2ZU5vSXRlbXMgPiAwKSB7Ci0JCQlmb3IgKEl0ZXJhdG9yIHNlcUl0ZXIgPSBzZXEuaXRlcmF0b3IoKTsgc2VxSXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJYXQgPSAoQW55VHlwZSkgc2VxSXRlci5uZXh0KCk7Ci0JCQkJaWYgKHN0YXJ0IDw9IHBvcyAmJiBhZGRlZEl0ZW1zIDwgZWZmZWN0aXZlTm9JdGVtcykgewkJCQkKLQkJCQkJcnMuYWRkKGF0KTsKLQkJCQkJYWRkZWRJdGVtcysrOwotCQkJCX0KLQkJCQlwb3MrKzsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzYmM5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc5NSAtIGltcHJvdmVtZW50cyB0byBmdW5jdGlvbiwgc3Vic3RyaW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMDk2IC0gaW1wcm92ZW1lbnRzIGZvciBzdXJyb2dhdGUgaGFuZGxpbmcgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gcmVpbXBsZW1lbnRlZCB0byBiZSBzdXJyb2dhdGUgc2Vuc2l0aXZlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1N0cmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuQ29kZVBvaW50SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLlN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yOwotCi1pbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOwotCi0vKioKLSAqIDxwPgotICogRnVuY3Rpb24gdG8gb2J0YWluIGEgc3Vic3RyaW5nIGZyb20gYSBzdHJpbmcuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVXNhZ2U6IGZuOnN1YnN0cmluZygkc291cmNlU3RyaW5nIGFzIHhzOnN0cmluZz8sICRzdGFydGluZ0xvYyBhcyB4czpkb3VibGUpCi0gKiBhcyB4czpzdHJpbmcKLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGNsYXNzIHJldHVybnMgdGhlIHBvcnRpb24gb2YgdGhlIHZhbHVlIG9mICRzb3VyY2VTdHJpbmcgYmVnaW5uaW5nIGF0IHRoZQotICogcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZiAkc3RhcnRpbmdMb2MuIFRoZSBjaGFyYWN0ZXJzIHJldHVybmVkIGRvCi0gKiBub3QgZXh0ZW5kIGJleW9uZCAkc291cmNlU3RyaW5nLiBJZiAkc3RhcnRpbmdMb2MgaXMgemVybyBvciBuZWdhdGl2ZSwgb25seQotICogdGhvc2UgY2hhcmFjdGVycyBpbiBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIHplcm8gYXJlIHJldHVybmVkLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIElmIHRoZSB2YWx1ZSBvZiAkc291cmNlU3RyaW5nIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgdGhlIHplcm8tbGVuZ3RoIHN0cmluZwotICogaXMgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHN0cmluZyBpcyBsb2NhdGVkIGF0IHBvc2l0aW9uIDEsIG5vdCBwb3NpdGlvbiAwLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5TdWJzdHJpbmcgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5TdWJzdHJpbmcKLQkgKi8KLQlwdWJsaWMgRm5TdWJzdHJpbmcoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgic3Vic3RyaW5nIiksIDIsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIHN1YnN0cmluZyBvYnRhaW5lZCBmcm9tIHRoZSBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN1YnN0cmluZyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBzdWJzdHJpbmcgZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmUgdXNlZCB0byBvYnRhaW4gYSBzdWJzdHJpbmcuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBzdWJzdHJpbmcgZnJvbSB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugc3Vic3RyaW5nKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKGFyZ3MpKTsKLQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugc3RyaW5nQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugc3RhcnRQb3NBcmcgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBsZW5ndGhBcmcgPSBudWxsOwotCQkKLQkJaWYgKGFyZ2kuaGFzTmV4dCgpKSB7Ci0JCSAgbGVuZ3RoQXJnID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsJCi0JCX0KLQotCQlpZiAoc3RyaW5nQXJnLmVtcHR5KCkpIHsKLQkJCXJldHVybiBlbXB0eVN0cmluZygpOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIHN0cmluZ0FyZy5maXJzdCgpKS52YWx1ZSgpOwotCQlkb3VibGUgZHN0YXJ0ID0gKChYU0RvdWJsZSkgc3RhcnRQb3NBcmcuZmlyc3QoKSkuZG91YmxlX3ZhbHVlKCk7Ci0JCQotCQkvLyBpcyBzdGFydCBpcyBOYU4sIG5vIGNoYXJzIGFyZSByZXR1cm5lZAotCQlpZiAoRG91YmxlLmlzTmFOKGRzdGFydCkgfHwgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZID09IGRzdGFydCkgewotCQkJcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0JCX0KLQkJbG9uZyBpc3RhcnQgPSBNYXRoLnJvdW5kKGRzdGFydCk7Ci0JCQotCQlsb25nIGlsZW5ndGggPSBMb25nLk1BWF9WQUxVRTsKLQkJaWYgKGxlbmd0aEFyZyAhPSBudWxsKSB7Ci0JCQlkb3VibGUgZGxlbmd0aCA9ICgoWFNEb3VibGUpIGxlbmd0aEFyZy5maXJzdCgpKS5kb3VibGVfdmFsdWUoKTsKLQkJCWlmIChEb3VibGUuaXNOYU4oZGxlbmd0aCkpCi0JCQkJcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0JCQkvLyBTd2l0Y2ggdG8gdGhlIHJvdW5kZWQga2luZAotCQkJaWxlbmd0aCA9IE1hdGgucm91bmQoZGxlbmd0aCk7Ci0JCQlpZiAoaWxlbmd0aCA8PSAwKQotCQkJCXJldHVybiBlbXB0eVN0cmluZygpOwotCQl9Ci0JCQotCQkKLQkJLy8gY291bGQgZ3Vlc3MgdG9vIHNob3J0IGluIGNhc2VzIHN1cHBsZW1lbnRhcnkgY2hhcnMgCi0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKGludCkgTWF0aC5taW4oc3RyLmxlbmd0aCgpLCBpbGVuZ3RoKSk7Ci0KLQkJLy8gVGhpcyBsb29rcyBsaWtlIGFuIGluZWZmaWNpZW50IHdheSB0byBpdGVyYXRlLCBidXQgZHVlIHRvIHN1cnJvZ2F0ZSBoYW5kbGluZywKLQkJLy8gc3RyaW5nIGluZGV4ZXMgYXJlIG5vIGdvb2QgaGVyZS4gV2VsY29tZSB0byBVVEYtMTYhCi0JCQotCQlDb2RlUG9pbnRJdGVyYXRvciBzdHJJdGVyID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHN0cik7Ci0JCWZvciAobG9uZyBwID0gMTsgc3RySXRlci5jdXJyZW50KCkgIT0gQ29kZVBvaW50SXRlcmF0b3IuRE9ORTsgKytwLCBzdHJJdGVyLm5leHQoKSkgewotCQkJaWYgKGlzdGFydCA8PSBwICYmIHAgLSBpc3RhcnQgPCBpbGVuZ3RoKQotCQkJICAgc2IuYXBwZW5kKFVDaGFyYWN0ZXIudG9DaGFycyhzdHJJdGVyLmN1cnJlbnQoKSkpOwotCQl9Ci0JCXJldHVybiBuZXcgWFNTdHJpbmcoc2IudG9TdHJpbmcoKSk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGVtcHR5U3RyaW5nKCkgewotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKCIiKTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBleHBlY3RlZCBhcmd1bWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoQ29sbGVjdGlvbiBhY3R1YWxBcmdzKSB7Ci0JCUNvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKSk7Ci0JCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEb3VibGUoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkKLQkJLy8gZm9yIGFyaXR5IDMKLQkJaWYgKGFjdHVhbEFyZ3Muc2l6ZSgpID09IDMpIHsKLQkJICBfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRG91YmxlKCksIFNlcVR5cGUuT0NDX05PTkUpKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nQWZ0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdBZnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWY4ODkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdWJzdHJpbmdBZnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHRoZSB2YWx1ZSBvZiAkYXJnMSB0aGF0IGZvbGxvd3MgaW4gdGhlIHZhbHVlIG9mCi0gKiAkYXJnMSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcXVlbmNlIG9mIGNvbGxhdGlvbiB1bml0cyB0aGF0IHByb3ZpZGVzIGEKLSAqIG1pbmltYWwgbWF0Y2ggdG8gdGhlIGNvbGxhdGlvbiB1bml0cyBvZiAkYXJnMiBhY2NvcmRpbmcgdG8gdGhlIGNvbGxhdGlvbiB0aGF0Ci0gKiBpcyB1c2VkLgotICovCi1wdWJsaWMgY2xhc3MgRm5TdWJzdHJpbmdBZnRlciBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblN1YnN0cmluZ0FmdGVyLgotCSAqLwotCXB1YmxpYyBGblN1YnN0cmluZ0FmdGVyKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInN1YnN0cmluZy1hZnRlciIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBzdWJzdHJpbmdfYWZ0ZXIoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU3Vic3RyaW5nLUFmdGVyIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnN1YnN0cmluZy1hZnRlciBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBzdWJzdHJpbmdfYWZ0ZXIoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpIHsKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpIHsKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlpbnQgc3RyMWxlbiA9IHN0cjEubGVuZ3RoKCk7Ci0JCWludCBzdHIybGVuID0gc3RyMi5sZW5ndGgoKTsKLQotCQlpZiAoc3RyMmxlbiA9PSAwKSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHN0cjEpOwotCQl9Ci0KLQkJaW50IGluZGV4ID0gc3RyMS5pbmRleE9mKHN0cjIpOwotCQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJCXJldHVybiBuZXcgWFNTdHJpbmcoIiIpOwotCQl9Ci0KLQkJU3RyaW5nIHJlc3VsdCA9ICIiOwotCi0JCWlmICgoaW5kZXggKyBzdHIybGVuKSA8IHN0cjFsZW4pIHsKLQkJCWluZGV4ICs9IHN0cjJsZW47Ci0JCQlyZXN1bHQgPSBzdHIxLnN1YnN0cmluZyhpbmRleCwgc3RyMWxlbik7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJU2VxVHlwZSBhcmcgPSBuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nQmVmb3JlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuU3Vic3RyaW5nQmVmb3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNTRjYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1YnN0cmluZ0JlZm9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIwOTYgLSBpbXByb3ZlbWVudHMgZm9yIHN1cnJvZ2F0ZSBoYW5kbGluZyAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHRoZSB2YWx1ZSBvZiAkYXJnMSB0aGF0IHByZWNlZGVzIGluIHRoZSB2YWx1ZSBvZgotICogJGFyZzEgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXF1ZW5jZSBvZiBjb2xsYXRpb24gdW5pdHMgdGhhdCBwcm92aWRlcyBhCi0gKiBtaW5pbWFsIG1hdGNoIHRvIHRoZSBjb2xsYXRpb24gdW5pdHMgb2YgJGFyZzIgYWNjb3JkaW5nIHRvIHRoZSBjb2xsYXRpb24gdGhhdAotICogaXMgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIEZuU3Vic3RyaW5nQmVmb3JlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3Vic3RyaW5nQmVmb3JlLgotCSAqLwotCXB1YmxpYyBGblN1YnN0cmluZ0JlZm9yZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdWJzdHJpbmctYmVmb3JlIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHN1YnN0cmluZ19iZWZvcmUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogU3Vic3RyaW5nLUJlZm9yZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjpzdWJzdHJpbmctYmVmb3JlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN1YnN0cmluZ19iZWZvcmUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmdzCi0JCUl0ZXJhdG9yIGFyZ2l0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJU3RyaW5nIHN0cjEgPSAiIjsKLQkJU3RyaW5nIHN0cjIgPSAiIjsKLQkJaWYgKCFhcmcxLmVtcHR5KCkpIHsKLQkJCXN0cjEgPSAoKFhTU3RyaW5nKSBhcmcxLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcyID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQkJaWYgKCFhcmcyLmVtcHR5KCkpIHsKLQkJCXN0cjIgPSAoKFhTU3RyaW5nKSBhcmcyLmZpcnN0KCkpLnZhbHVlKCk7Ci0JCX0KLQotCQlpbnQgc3RyMmxlbiA9IHN0cjIubGVuZ3RoKCk7Ci0KLQkJaWYgKHN0cjJsZW4gPT0gMCkgewotCQkJcmV0dXJuIG5ldyBYU1N0cmluZygiIik7Ci0JCX0KLQotCQlpbnQgaW5kZXggPSBzdHIxLmluZGV4T2Yoc3RyMik7Ci0JCWlmIChpbmRleCA9PSAtMSkgewotCQkJcmV0dXJuIG5ldyBYU1N0cmluZygiIik7Ci0JCX0KLQotCQkKLQkJcmV0dXJuIG5ldyBYU1N0cmluZyhzdHIxLnN1YnN0cmluZygwLCBpbmRleCkpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCVNlcVR5cGUgYXJnID0gbmV3IFNlcVR5cGUobmV3IFhTU3RyaW5nKCksIFNlcVR5cGUuT0NDX1FNQVJLKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChhcmcpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1bS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblN1bS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGYxNWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5TdW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjgxMDI4IC0gZml4IHByb21vdGlvbiBydWxlcyBmb3IgZm46c3VtCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRmxvYXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHMuU2NhbGFyVHlwZVByb21vdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5UeXBlUHJvbW90ZXI7Ci0KLS8qKgotICogUmV0dXJucyBhIHZhbHVlIG9idGFpbmVkIGJ5IGFkZGluZyB0b2dldGhlciB0aGUgdmFsdWVzIGluICRhcmcuIElmIHRoZQotICogc2luZ2xlLWFyZ3VtZW50IGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIGZvciBhbgotICogZW1wdHkgc2VxdWVuY2UgaXMgdGhlIHhzOmludGVnZXIgdmFsdWUgMC4gSWYgdGhlIHR3by1hcmd1bWVudCBmb3JtIGlzIHVzZWQsCi0gKiB0aGVuIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYW4gZW1wdHkgc2VxdWVuY2UgaXMgdGhlIHZhbHVlIG9mIHRoZSAkemVybwotICogYXJndW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblN1bSBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXN0YXRpYyBwcml2YXRlIFhTSW50ZWdlciBaRVJPID0gbmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuU3VtLgotCSAqLwotCXB1YmxpYyBGblN1bSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJzdW0iKSwgMSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlJdGVyYXRvciBhcmdJdGVyYXRvciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnU2VxdWVuY2UgPSAoUmVzdWx0U2VxdWVuY2UpYXJnSXRlcmF0b3IubmV4dCgpOwotCQlBbnlBdG9taWNUeXBlIHplcm8gPSBaRVJPOwotCQlpZiAoYXJnSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlSZXN1bHRTZXF1ZW5jZSB6ZXJvU2VxdWVuY2UgPSAoUmVzdWx0U2VxdWVuY2UpYXJnSXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKHplcm9TZXF1ZW5jZS5zaXplKCkgIT0gMSkKLQkJCQl0aHJvdyBuZXcgRHluYW1pY0Vycm9yKFR5cGVFcnJvci5pbnZhbGlkX3R5cGUobnVsbCkpOwotCQkJaWYgKCEgKHplcm9TZXF1ZW5jZS5maXJzdCgpIGluc3RhbmNlb2YgQW55QXRvbWljVHlwZSkpCi0JCQkJdGhyb3cgbmV3IER5bmFtaWNFcnJvcihUeXBlRXJyb3IuaW52YWxpZF90eXBlKHplcm9TZXF1ZW5jZS5maXJzdCgpLmdldFN0cmluZ1ZhbHVlKCkpKTsKLQkJCXplcm8gPSAoQW55QXRvbWljVHlwZSl6ZXJvU2VxdWVuY2UuZmlyc3QoKTsKLQkJfQotCQlyZXR1cm4gc3VtKGFyZ1NlcXVlbmNlLCB6ZXJvKTsKLQl9Ci0KLQkvKioKLQkgKiBTdW0gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46c3VtIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHN1bShSZXN1bHRTZXF1ZW5jZSBhcmcsIEFueUF0b21pY1R5cGUgemVybykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoemVybyk7Ci0KLQkJTWF0aFBsdXMgdG90YWwgPSBudWxsOwotCi0JCVR5cGVQcm9tb3RlciB0cCA9IG5ldyBTY2FsYXJUeXBlUHJvbW90ZXIoKTsKLQkJdHAuY29uc2lkZXJTZXF1ZW5jZShhcmcpOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueUF0b21pY1R5cGUgY29udiA9IHRwLnByb21vdGUoKEFueVR5cGUpIGkubmV4dCgpKTsKLQkJCQotCQkJaWYgKGNvbnYgaW5zdGFuY2VvZiBYU0RvdWJsZSAmJiAoKFhTRG91YmxlKWNvbnYpLm5hbigpIHx8IGNvbnYgaW5zdGFuY2VvZiBYU0Zsb2F0ICYmICgoWFNGbG9hdCljb252KS5uYW4oKSkgewotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyh0cC5wcm9tb3RlKG5ldyBYU0Zsb2F0KEZsb2F0Lk5hTikpKTsKLQkJCX0KLQkJCWlmICh0b3RhbCA9PSBudWxsKSB7Ci0JCQkJdG90YWwgPSAoTWF0aFBsdXMpY29udjsgCi0JCQl9IGVsc2UgewotCQkJCXRvdGFsID0gKE1hdGhQbHVzKXRvdGFsLnBsdXMoUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoY29udikpLmZpcnN0KCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KChBbnlUeXBlKSB0b3RhbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzODk2NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBjb21wb25lbnQgb2YgJGFyZyBpZiBhbnkuIElmICRhcmcgaGFzIGEgdGltZXpvbmUKLSAqIGNvbXBvbmVudCwgdGhlbiB0aGUgcmVzdWx0IGlzIGFuIHhkdDpkYXlUaW1lRHVyYXRpb24gdGhhdCBpbmRpY2F0ZXMgZGV2aWF0aW9uCi0gKiBmcm9tIFVUQzsgaXRzIHZhbHVlIG1heSByYW5nZSBmcm9tICsxNDowMCB0byAtMTQ6MDAgaG91cnMsIGJvdGggaW5jbHVzaXZlLgotICogT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIHRoZSBlbXB0eSBzZXF1ZW5jZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsCi0gKiByZXR1cm5zIHRoZSBlbXB0eSBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuVGltZXpvbmVGcm9tRGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRpbWV6b25lRnJvbURhdGUuCi0JICovCi0JcHVibGljIEZuVGltZXpvbmVGcm9tRGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0aW1lem9uZS1mcm9tLWRhdGUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gdGltZXpvbmVfZnJvbV9kYXRlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFRpbWV6b25lLWZyb20tRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0aW1lem9uZS1mcm9tLWRhdGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdGltZXpvbmVfZnJvbV9kYXRlKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEYXRlIGR0ID0gKFhTRGF0ZSkgYXJnMS5maXJzdCgpOwotCi0JCWlmIChkdC50aW1lem9uZWQoKSkgewotCQkJcmV0dXJuIGR0LnR6KCk7Ci0JCX0KLQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21EYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MzI4ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRpbWV6b25lRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGVUaW1lOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHRpbWV6b25lIGNvbXBvbmVudCBvZiAkYXJnIGlmIGFueS4gSWYgJGFyZyBoYXMgYSB0aW1lem9uZQotICogY29tcG9uZW50LCB0aGVuIHRoZSByZXN1bHQgaXMgYW4geGR0OmRheVRpbWVEdXJhdGlvbiB0aGF0IGluZGljYXRlcyBkZXZpYXRpb24KLSAqIGZyb20gVVRDOyBpdHMgdmFsdWUgbWF5IHJhbmdlIGZyb20gKzE0OjAwIHRvIC0xNDowMCBob3VycywgYm90aCBpbmNsdXNpdmUuCi0gKiBPdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwKLSAqIHJldHVybnMgdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5UaW1lem9uZUZyb21EYXRlVGltZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRpbWV6b25lRnJvbURhdGVUaW1lLgotCSAqLwotCXB1YmxpYyBGblRpbWV6b25lRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRpbWV6b25lLWZyb20tZGF0ZVRpbWUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gdGltZXpvbmVfZnJvbV9kYXRlX3RpbWUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVGltZXpvbmUtZnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0aW1lem9uZS1mcm9tLWRhdGVUaW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRpbWV6b25lX2Zyb21fZGF0ZV90aW1lKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IChYU0RhdGVUaW1lKSBhcmcxLmZpcnN0KCk7Ci0KLQkJaWYgKGR0LnRpbWV6b25lZCgpKSB7Ci0JCQlyZXR1cm4gZHQudHooKTsKLQkJfQotCi0JCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MKLQkJCQkJLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEYXRlVGltZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21UaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVGltZXpvbmVGcm9tVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGYwY2JjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UaW1lem9uZUZyb21UaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1RpbWU7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgdGltZXpvbmUgY29tcG9uZW50IG9mICRhcmcgaWYgYW55LiBJZiAkYXJnIGhhcyBhIHRpbWV6b25lCi0gKiBjb21wb25lbnQsIHRoZW4gdGhlIHJlc3VsdCBpcyBhbiB4ZHQ6ZGF5VGltZUR1cmF0aW9uIHRoYXQgaW5kaWNhdGVzIGRldmlhdGlvbgotICogZnJvbSBVVEM7IGl0cyB2YWx1ZSBtYXkgcmFuZ2UgZnJvbSArMTQ6MDAgdG8gLTE0OjAwIGhvdXJzLCBib3RoIGluY2x1c2l2ZS4KLSAqIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB0aGUgZW1wdHkgc2VxdWVuY2UuIElmICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLAotICogcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRpbWV6b25lRnJvbVRpbWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5UaW1lem9uZUZyb21UaW1lLgotCSAqLwotCXB1YmxpYyBGblRpbWV6b25lRnJvbVRpbWUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidGltZXpvbmUtZnJvbS10aW1lIiksIDEpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHRpbWV6b25lX2Zyb21fdGltZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaW1lem9uZS1mcm9tLVRpbWUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46dGltZXpvbmUtZnJvbS10aW1lIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRpbWV6b25lX2Zyb21fdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTVGltZSBkdCA9IChYU1RpbWUpIGFyZzEuZmlyc3QoKTsKLQotCQlpZiAoZHQudGltZXpvbmVkKCkpIHsKLQkJCXJldHVybiBkdC50eigpOwotCQl9Ci0JCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JfQotCi0JLyoqCi0JICogT2J0YWluIGEgbGlzdCBvZiBleHBlY3RlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIENvbGxlY3Rpb24gZXhwZWN0ZWRfYXJncygpIHsKLQkJaWYgKF9leHBlY3RlZF9hcmdzID09IG51bGwpIHsKLQkJCV9leHBlY3RlZF9hcmdzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1RpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVG9rZW5pemUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ub2tlbml6ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2FkMmRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Ub2tlbml6ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBjbGVhbiB1cCBzdHJpbmcgc3RvcmFnZQotICogICAgIEplc3BlciBTIE1vbGxlciAgICAgIC0gQnVnIDI4MTkzOCAtIG5vIG1hdGNoZXMgc2hvdWxkIHJldHVybiBmdWxsIGlucHV0IAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gYnJlYWtzIHRoZSAkaW5wdXQgc3RyaW5nIGludG8gYSBzZXF1ZW5jZSBvZiBzdHJpbmdzLCB0cmVhdGluZwotICogYW55IHN1YnN0cmluZyB0aGF0IG1hdGNoZXMgJHBhdHRlcm4gYXMgYSBzZXBhcmF0b3IuIFRoZSBzZXBhcmF0b3JzIHRoZW1zZWx2ZXMKLSAqIGFyZSBub3QgcmV0dXJuZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRva2VuaXplIGV4dGVuZHMgQWJzdHJhY3RSZWdFeEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRva2VuaXplLgotCSAqLwotCXB1YmxpYyBGblRva2VuaXplKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRva2VuaXplIiksIDIsIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIHRva2VuaXplKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFRva2VuaXplIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnRva2VuaXplIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIHRva2VuaXplKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBhcmdpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBzdHIxID0gIiI7Ci0JCWlmICghYXJnMS5lbXB0eSgpKSB7Ci0JCQlzdHIxID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCQl9Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCVN0cmluZyBwYXR0ZXJuID0gKChYU1N0cmluZykgYXJnMi5maXJzdCgpKS52YWx1ZSgpOwotCQlTdHJpbmcgZmxhZ3MgPSBudWxsOwotCi0JCWlmIChhcmdpdGVyLmhhc05leHQoKSkgewotCQkJUmVzdWx0U2VxdWVuY2UgZmxhZ1JTID0gbnVsbDsKLQkJCWZsYWdSUyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCQlmbGFncyA9IGZsYWdSUy5maXJzdCgpLmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQlpZiAodmFsaWRmbGFncy5pbmRleE9mKGZsYWdzKSA9PSAtMSAmJiBmbGFncy5sZW5ndGgoKSA+IDAgKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2ZsYWdzX2Vycm9yKG51bGwpOwotCQkJfQotCQl9Ci0KLQkJdHJ5IHsKLQkJCUFycmF5TGlzdCByZXQgPSB0b2tlbml6ZShwYXR0ZXJuLCBmbGFncywgc3RyMSk7Ci0KLQkJCWZvciAoSXRlcmF0b3IgcmV0SXRlciA9IHJldC5pdGVyYXRvcigpOyByZXRJdGVyLmhhc05leHQoKTspIHsKLQkJCSAgIHJzLmFkZChuZXcgWFNTdHJpbmcoKFN0cmluZylyZXRJdGVyLm5leHQoKSkpOwkKLQkJCX0KLQkJCQotCQl9IGNhdGNoIChQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIGVycikgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnJlZ2V4X2Vycm9yKG51bGwpOwotCQl9Ci0KLQkJcmV0dXJuIHJzLmdldFNlcXVlbmNlKCk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdCB0b2tlbml6ZShTdHJpbmcgcGF0dGVybiwgU3RyaW5nIGZsYWdzLCBTdHJpbmcgc3JjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJTWF0Y2hlciBtYXRjaGVyID0gcmVnZXgocGF0dGVybiwgZmxhZ3MsIHNyYyk7Ci0JCUFycmF5TGlzdCB0b2tlbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWludCBzdGFydHBvcyA9IDA7Ci0JCWludCBlbmRwb3MgPSBzcmMubGVuZ3RoKCk7Ci0JCXdoaWxlIChtYXRjaGVyLmZpbmQoKSkgewotCQkJU3RyaW5nIGRlbGltID0gbWF0Y2hlci5ncm91cCgpOwotCQkJaWYgKGRlbGltLmxlbmd0aCgpID09IDApIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IucmVnZXhfbWF0Y2hfemVyb19sZW5ndGgobnVsbCk7Ci0JCQl9Ci0JCQlTdHJpbmcgdG9rZW4gPSBzcmMuc3Vic3RyaW5nKHN0YXJ0cG9zLCBtYXRjaGVyLnN0YXJ0KCkpOwotCQkJc3RhcnRwb3MgPSBtYXRjaGVyLmVuZCgpOwotCQkJdG9rZW5zLmFkZCh0b2tlbik7Ci0JCX0KLQkJaWYgKHN0YXJ0cG9zIDwgZW5kcG9zKSB7Ci0JCQlTdHJpbmcgdG9rZW4gPSBzcmMuc3Vic3RyaW5nKHN0YXJ0cG9zLCBlbmRwb3MpOwotCQkJdG9rZW5zLmFkZCh0b2tlbik7Ci0JCX0KLQkJcmV0dXJuIHRva2VuczsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlTZXFUeXBlIGFyZyA9IG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19RTUFSSyk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoYXJnKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJhY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE4NGY4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVHJhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIFRoZSBpbnB1dCAkdmFsdWUgaXMgcmV0dXJuZWQsIHVuY2hhbmdlZCwgYXMgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uIEluCi0gKiBhZGRpdGlvbiwgdGhlIGlucHV0cyAkdmFsdWUsIGNvbnZlcnRlZCB0byBhbiB4czpzdHJpbmcsIGFuZCAkbGFiZWwgbWF5IGJlCi0gKiBkaXJlY3RlZCB0byBhIHRyYWNlIGRhdGEgc2V0LiBUaGUgbG9jYXRpb24gYW5kIGZvcm1hdCBvZiB0aGUgdHJhY2UgZGF0YSBzZXQKLSAqIGFyZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuIFRoZSBvcmRlcmluZyBvZiBvdXRwdXQgZnJvbSBpbnZvY2F0aW9ucyBvZiB0aGUKLSAqIGZuOnRyYWNlKCkgZnVuY3Rpb24gaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgotICovCi1wdWJsaWMgY2xhc3MgRm5UcmFjZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5UcmFjZS4KLQkgKi8KLQlwdWJsaWMgRm5UcmFjZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ0cmFjZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0cmFjZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUcmFjZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp0cmFjZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB0cmFjZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzCi0JCWlmIChhcmdzLnNpemUoKSAhPSAyKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlJdGVyYXRvciBhcmdzaSA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdzaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzIgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ3NpLm5leHQoKTsKLQotCQlpZiAoYXJnMi5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlbSBhdCA9IGFyZzIuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU1N0cmluZykpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCVhTU3RyaW5nIGxhYmVsID0gKFhTU3RyaW5nKSBhdDsKLQotCQlpbnQgaW5kZXggPSAxOwotCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZzEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGluZGV4KyspIHsKLQkJCWF0ID0gKEFueVR5cGUpIGkubmV4dCgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGFiZWwudmFsdWUoKSArICIgWyIgKyBpbmRleCArICJdICIKLQkJCQkJKyAoKEFueVR5cGUpYXQpLnN0cmluZ190eXBlKCkgKyAiOiIgKyBhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQl9Ci0KLQkJcmV0dXJuIGFyZzE7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYW5zbGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRyYW5zbGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDBmZmNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcmFuc2xhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gY2xlYW4gdXAgc3RyaW5nIHN0b3JhZ2UgYW5kIG1ha2UKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgZnVuY3Rpb24gc3Vycm9nYXRlIGF3YXJlCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzLkNvZGVQb2ludEl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlscy5TdHJpbmdDb2RlUG9pbnRJdGVyYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVUNoYXJhY3RlcjsKLQotLyoqCi0gKiA8cD4KLSAqIFRyYW5zbGF0aW9uIGZ1bmN0aW9uLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjp0cmFuc2xhdGUoJGFyZyBhcyB4czpzdHJpbmc/LCAkbWFwU3RyaW5nIGFzIHhzOnN0cmluZywgJHRyYW5zU3RyaW5nCi0gKiBhcyB4czpzdHJpbmcpIGFzIHhzOnN0cmluZwotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFRoaXMgY2xhc3MgcmV0dXJucyB0aGUgdmFsdWUgb2YgJGFyZyBtb2RpZmllZCBzbyB0aGF0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUKLSAqIHZhbHVlIG9mICRhcmcgdGhhdCBvY2N1cnMgYXQgc29tZSBwb3NpdGlvbiBOIGluIHRoZSB2YWx1ZSBvZiAkbWFwU3RyaW5nIGhhcwotICogYmVlbiByZXBsYWNlZCBieSB0aGUgY2hhcmFjdGVyIHRoYXQgb2NjdXJzIGF0IHBvc2l0aW9uIE4gaW4gdGhlIHZhbHVlIG9mCi0gKiAkdHJhbnNTdHJpbmcuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgdGhlIHZhbHVlIG9mICRhcmcgaXMgdGhlIGVtcHR5IHNlcXVlbmNlLCB0aGUgemVyby1sZW5ndGggc3RyaW5nIGlzCi0gKiByZXR1cm5lZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBFdmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHZhbHVlIG9mICRhcmcgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHZhbHVlIG9mCi0gKiAkbWFwU3RyaW5nIGlzIHVuY2hhbmdlZC4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBFdmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHZhbHVlIG9mICRhcmcgdGhhdCBhcHBlYXJzIGF0IHNvbWUgcG9zaXRpb24gTSBpbiB0aGUKLSAqIHZhbHVlIG9mICRtYXBTdHJpbmcsIHdoZXJlIHRoZSB2YWx1ZSBvZiAkdHJhbnNTdHJpbmcgaXMgbGVzcyB0aGFuIE0KLSAqIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBpcyBvbWl0dGVkIGZyb20gdGhlIHJldHVybmVkIHZhbHVlLiBJZiAkbWFwU3RyaW5nIGlzCi0gKiB0aGUgemVyby1sZW5ndGggc3RyaW5nICRhcmcgaXMgcmV0dXJuZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogSWYgYSBjaGFyYWN0ZXIgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGluICRtYXBTdHJpbmcsIHRoZW4gdGhlIGZpcnN0IG9jY3VycmVuY2UKLSAqIGRldGVybWluZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gSWYgJHRyYW5zU3RyaW5nIGlzIGxvbmdlciB0aGFuCi0gKiAkbWFwU3RyaW5nLCB0aGUgZXhjZXNzIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuCi0gKiA8L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBGblRyYW5zbGF0ZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblRyYW5zbGF0ZS4KLQkgKi8KLQlwdWJsaWMgRm5UcmFuc2xhdGUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidHJhbnNsYXRlIiksIDMpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBldmFsdWF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyBiZWluZyB0cmFuc2xhdGVkLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB0cmFuc2xhdGUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNsYXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIHRyYW5zbGF0ZWQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0cmFuc2xhdGluZyB0aGUgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdHJhbnNsYXRlKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCUl0ZXJhdG9yIGFyZ2kgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZzMgPSAoUmVzdWx0U2VxdWVuY2UpIGFyZ2kubmV4dCgpOwotCi0JCWlmIChhcmcxLmVtcHR5KCkpIHsKLQkJCXJldHVybiBuZXcgWFNTdHJpbmcoIiIpOwotCQl9Ci0KLQkJU3RyaW5nIHN0ciA9ICgoWFNTdHJpbmcpIGFyZzEuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIG1hcHN0ciA9ICgoWFNTdHJpbmcpIGFyZzIuZmlyc3QoKSkudmFsdWUoKTsKLQkJU3RyaW5nIHRyYW5zc3RyID0gKChYU1N0cmluZykgYXJnMy5maXJzdCgpKS52YWx1ZSgpOwotCi0JCU1hcCByZXBsYWNlbWVudHMgPSBidWlsZFJlcGxhY2VtZW50TWFwKG1hcHN0ciwgdHJhbnNzdHIpOwotCQkKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihzdHIubGVuZ3RoKCkpOwotCQlDb2RlUG9pbnRJdGVyYXRvciBzdHJJdGVyID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHN0cik7Ci0JCWZvciAoaW50IGlucHV0ID0gc3RySXRlci5jdXJyZW50KCk7IGlucHV0ICE9IENvZGVQb2ludEl0ZXJhdG9yLkRPTkU7IGlucHV0ID0gc3RySXRlci5uZXh0KCkpIHsKLQkJCUludGVnZXIgaW5wdXRDb2RlcG9pbnQgPSBuZXcgSW50ZWdlcihpbnB1dCk7Ci0JCQlpZiAocmVwbGFjZW1lbnRzLmNvbnRhaW5zS2V5KGlucHV0Q29kZXBvaW50KSkgewotCQkJCUludGVnZXIgcmVwbGFjZVdpdGggPSAoSW50ZWdlcilyZXBsYWNlbWVudHMuZ2V0KGlucHV0Q29kZXBvaW50KTsKLQkJCQlpZiAocmVwbGFjZVdpdGggIT0gbnVsbCkgewotCQkJCQlzYi5hcHBlbmQoVUNoYXJhY3Rlci50b0NoYXJzKHJlcGxhY2VXaXRoLmludFZhbHVlKCkpKTsKLQkJCQl9CQkJCQkKLQkJCX0gZWxzZSB7Ci0JCQkJc2IuYXBwZW5kKFVDaGFyYWN0ZXIudG9DaGFycyhpbnB1dCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHNiLnRvU3RyaW5nKCkpOwotCX0KLQotCS8qKgotCSAqIEJ1aWxkIGEgcmVwbGFjZW1lbnQgbWFwIGZyb20gdGhlIG1hcHN0ciBhbmQgdGhlIHRyYW5zc3RyIGZvciB0cmFuc2xhdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBNYXA8SW50ZWdlciwgSW50ZWdlcj4gbWFwcGluZyBlYWNoIGNvZGVwb2ludAotCSAqIG1lbnRpb25lZCBpbiB0aGUgbWFwc3RyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgY29kZXBvaW50IGluIHRyYW5zc3RyLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIG1hcHBpbmcgaW4gdHJhbnNzdHIuCi0JICogCi0JICogQHBhcmFtIG1hcHN0ciBUaGUgIm1hcHBpbmcgZnJvbSIgc3RyaW5nCi0JICogQHBhcmFtIHRyYW5zc3RyIFRoZSAibWFwcGluZyBpbnRvIiBzdHJpbmcKLQkgKiBAcmV0dXJuIEEgbWFwIHdoaWNoIG1hcHMgaW5wdXQgY29kZXBvaW50IHRvIG91dHB1dCBjb2RlcG9pbnQgKG9yIG51bGwpCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgTWFwIGJ1aWxkUmVwbGFjZW1lbnRNYXAoU3RyaW5nIG1hcHN0ciwgU3RyaW5nIHRyYW5zc3RyKSB7Ci0JCS8vIEJ1aWxkIG1hcHBpbmcgKG1hcCBmcm9tIGNvZGVwb2ludCAtPiBjb2RlcG9pbnQpCQkKLQkJTWFwIHJlcGxhY2VtZW50cyA9IG5ldyBIYXNoTWFwKG1hcHN0ci5sZW5ndGgoKSAqIDQpOwotCi0JCUNvZGVQb2ludEl0ZXJhdG9yIG1hcEl0ZXIgPSBuZXcgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IobWFwc3RyKTsKLQkJQ29kZVBvaW50SXRlcmF0b3IgdHJhbnNJdGVyID0gbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yKHRyYW5zc3RyKTsKLQkJLy8gSXRlcmF0ZSB0aHJvdWdoIGJvdGggbWFwSXRlciBhbmQgdHJhbnNJdGVyIGFuZCBwcm9kdWNlIHRoZSBtYXBwaW5nCi0JCWludCBtYXBGcm9tID0gbWFwSXRlci5jdXJyZW50KCk7Ci0JCWludCBtYXBUbyA9IHRyYW5zSXRlci5jdXJyZW50KCk7Ci0JCXdoaWxlIChtYXBGcm9tICE9IENvZGVQb2ludEl0ZXJhdG9yLkRPTkUpIHsKLQkJCUludGVnZXIgY29kZXBvaW50RnJvbSA9IG5ldyBJbnRlZ2VyKG1hcEZyb20pOwotCQkJaWYgKCEgcmVwbGFjZW1lbnRzLmNvbnRhaW5zS2V5KGNvZGVwb2ludEZyb20pKSB7Ci0JCQkJLy8gb25seSBvdmVyd3JpdGUgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5Ci0JCQkJSW50ZWdlciByZXBsYWNlbWVudCA9IG1hcFRvICE9IENvZGVQb2ludEl0ZXJhdG9yLkRPTkUgPyBuZXcgSW50ZWdlcihtYXBUbykgOiBudWxsOwotCQkJCXJlcGxhY2VtZW50cy5wdXQoY29kZXBvaW50RnJvbSwgcmVwbGFjZW1lbnQpOwotCQkJfQotCQkJbWFwRnJvbSA9IG1hcEl0ZXIubmV4dCgpOwotCQkJbWFwVG8gPSB0cmFuc0l0ZXIubmV4dCgpOwkKLQkJfQotCQlyZXR1cm4gcmVwbGFjZW1lbnRzOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfTk9ORSkpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKG5ldyBTZXFUeXBlKG5ldyBYU1N0cmluZygpLCBTZXFUeXBlLk9DQ19OT05FKSk7Ci0JCX0KLQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRydWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5UcnVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1OGI1NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblRydWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotCi0vKioKLSAqIFJldHVybnMgdGhlIHhzOmJvb2xlYW4gdmFsdWUgdHJ1ZS4gRXF1aXZhbGVudCB0byB4czpib29sZWFuKCIxIikuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblRydWUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuVHJ1ZS4KLQkgKi8KLQlwdWJsaWMgRm5UcnVlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRydWUiKSwgMCk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZm5fdHJ1ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBUcnVlIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnRydWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZm5fdHJ1ZShDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMDsKLQotCQlyZXR1cm4gWFNCb29sZWFuLlRSVUU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblVub3JkZXJlZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblVub3JkZXJlZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjFlNjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5Vbm9yZGVyZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBpdGVtcyBvZiAkc291cmNlU2VxIGluIGEgbm9uLWRldGVybWluaXN0aWMgb3JkZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblVub3JkZXJlZCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5Vbm9yZGVyZWQuCi0JICovCi0JcHVibGljIEZuVW5vcmRlcmVkKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInVub3JkZXJlZCIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB1bm9yZGVyZWQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogVW5vcmRlcmVkIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZuOnVub3JkZXJlZCBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB1bm9yZGVyZWQoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMTsKLQotCQkvLyBnZXQgYXJncwotCQlJdGVyYXRvciBjaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnID0gKFJlc3VsdFNlcXVlbmNlKSBjaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQkvLyBYWFggbGFtZQotCQlBcnJheUxpc3QgdG1wID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmcuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJdG1wLmFkZChpLm5leHQoKSk7Ci0KLQkJQ29sbGVjdGlvbnMuc2h1ZmZsZSh0bXApOwotCi0JCVJlc3VsdEJ1ZmZlciByYiA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gdG1wLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJCXJiLmFkZCgoQW55VHlwZSkgaS5uZXh0KCkpOwotCi0JCXJldHVybiByYi5nZXRTZXF1ZW5jZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5VcHBlckNhc2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5VcHBlckNhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNDhhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuVXBwZXJDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotCi0vKioKLSAqIDxwPgotICogQ29udmVyc2lvbiB0byB1cHBlci1jYXNlIGZ1bmN0aW9uLgotICogPC9wPgotICogCi0gKiA8cD4KLSAqIFVzYWdlOiBmbjp1cHBlci1jYXNlKCRhcmcgYXMgeHM6c3RyaW5nPykgYXMgeHM6c3RyaW5nCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogVGhpcyBjbGFzcyByZXR1cm5zIHRoZSB2YWx1ZSBvZiAkYXJnIGFmdGVyIHRyYW5zbGF0aW5nIGV2ZXJ5IGNoYXJhY3RlciB0byBpdHMKLSAqIHVwcGVyLWNhc2UgY29ycmVzcG9uZGVudC4gRXZlcnkgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgaGF2ZSBhbiB1cHBlci1jYXNlCi0gKiBjb3JyZXNwb25kZW50IGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB2YWx1ZSBpbiBpdHMgb3JpZ2luYWwgZm9ybS4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBJZiB0aGUgdmFsdWUgb2YgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHRoZSB6ZXJvLWxlbmd0aCBzdHJpbmcgaXMKLSAqIHJldHVybmVkLgotICogPC9wPgotICovCi1wdWJsaWMgY2xhc3MgRm5VcHBlckNhc2UgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRm5VcHBlckNhc2UuCi0JICovCi0JcHVibGljIEZuVXBwZXJDYXNlKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInVwcGVyLWNhc2UiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJlIGV2YWx1YXRlZC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgZXZhbHVhdGlvbiBvZiB0aGUgYXJndW1lbnRzIGJlaW5nIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB1cHBlcl9jYXNlKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYXJndW1lbnRzIHRvIHVwcGVyIGNhc2UuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlIGFyZ3VtZW50cyB0byB1cHBlciBjYXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgdXBwZXJfY2FzZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIG5ldyBYU1N0cmluZygiIik7Ci0JCX0KLQotCQlTdHJpbmcgc3RyID0gKChYU1N0cmluZykgYXJnMS5maXJzdCgpKS52YWx1ZSgpOwotCi0JCXJldHVybiBuZXcgWFNTdHJpbmcoc3RyLnRvVXBwZXJDYXNlKCkpOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNTdHJpbmcoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZWFmNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GblllYXJGcm9tRGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZSAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHllYXIgaW4gdGhlIGxvY2FsaXplZCB2YWx1ZSBvZiAkYXJnLgotICogVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZS4gSWYgJGFyZyBpcyB0aGUgZW1wdHkgc2VxdWVuY2UsIHJldHVybnMgdGhlIGVtcHR5Ci0gKiBzZXF1ZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIEZuWWVhckZyb21EYXRlIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuWWVhckZyb21EYXRlLgotCSAqLwotCXB1YmxpYyBGblllYXJGcm9tRGF0ZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ5ZWFyLWZyb20tZGF0ZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB5ZWFyX2Zyb21fZGF0ZShhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBZZWFyLWZyb20tRGF0ZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp5ZWFyLWZyb20tZGF0ZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB5ZWFyX2Zyb21fZGF0ZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTRGF0ZSBkdCA9IChYU0RhdGUpIGFyZzEuZmlyc3QoKTsKLQotCQlpbnQgcmVzID0gZHQueWVhcigpOwotCi0JCXJldHVybiBuZXcgWFNJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlfZXhwZWN0ZWRfYXJncy5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZSgpLCBTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyRnJvbURhdGVUaW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhckZyb21EYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTRiMzVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyRnJvbURhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNJbnRlZ2VyOwotCi0vKioKLSAqIFJldHVybnMgYW4geHM6aW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHllYXIgY29tcG9uZW50IGluIHRoZSBsb2NhbGl6ZWQgdmFsdWUKLSAqIG9mICRhcmcuIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLiBJZiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucwotICogdGhlIGVtcHR5IHNlcXVlbmNlLgotICovCi1wdWJsaWMgY2xhc3MgRm5ZZWFyRnJvbURhdGVUaW1lIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuWWVhckZyb21EYXRlVGltZS4KLQkgKi8KLQlwdWJsaWMgRm5ZZWFyRnJvbURhdGVUaW1lKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInllYXItZnJvbS1kYXRlVGltZSIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB5ZWFyX2Zyb21fZGF0ZV90aW1lKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFllYXItZnJvbS1EYXRlVGltZSBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmbjp5ZWFyLWZyb20tZGF0ZVRpbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgeWVhcl9mcm9tX2RhdGVfdGltZShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJUmVzdWx0U2VxdWVuY2UgYXJnMSA9IChSZXN1bHRTZXF1ZW5jZSkgY2FyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzEuZW1wdHkoKSkgewotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSAoWFNEYXRlVGltZSkgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSBkdC55ZWFyKCk7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzCi0JCQkJCS5hZGQobmV3IFNlcVR5cGUobmV3IFhTRGF0ZVRpbWUoKSwgU2VxVHlwZS5PQ0NfUU1BUkspKTsKLQkJfQotCi0JCXJldHVybiBfZXhwZWN0ZWRfYXJnczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWWVhcnNGcm9tRHVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyc0Zyb21EdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRjNzZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5ZZWFyc0Zyb21EdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBleHBlY3RlZCB4czpkdXJhdGlvbiBhcmd1bWVudCAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRHVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBSZXR1cm5zIGFuIHhzOmludGVnZXIgcmVwcmVzZW50aW5nIHRoZSB5ZWFycyBjb21wb25lbnQgaW4gdGhlIGNhbm9uaWNhbAotICogbGV4aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgJGFyZy4gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUuIElmCi0gKiAkYXJnIGlzIHRoZSBlbXB0eSBzZXF1ZW5jZSwgcmV0dXJucyB0aGUgZW1wdHkgc2VxdWVuY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBGblllYXJzRnJvbUR1cmF0aW9uIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZuWWVhcnNGcm9tRHVyYXRpb24uCi0JICovCi0JcHVibGljIEZuWWVhcnNGcm9tRHVyYXRpb24oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgieWVhcnMtZnJvbS1kdXJhdGlvbiIpLCAxKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiB5ZWFyc19mcm9tX2R1cmF0aW9uKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIFllYXJzLWZyb20tRHVyYXRpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46eWVhcnMtZnJvbS1kdXJhdGlvbiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSB5ZWFyc19mcm9tX2R1cmF0aW9uKENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhcmcxID0gKFJlc3VsdFNlcXVlbmNlKSBjYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQlpZiAoYXJnMS5lbXB0eSgpKSB7Ci0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQl9Ci0KLQkJWFNEdXJhdGlvbiB5bWQgPSAoWFNEdXJhdGlvbikgYXJnMS5maXJzdCgpOwotCi0JCWludCByZXMgPSB5bWQueWVhcigpOwotCQlpZiAoeW1kLm5lZ2F0aXZlKCkpCi0JCQlyZXMgKj0gLTE7Ci0KLQkJcmV0dXJuIG5ldyBYU0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChuZXcgU2VxVHlwZShuZXcgWFNEdXJhdGlvbigpLAotCQkJCQlTZXFUeXBlLk9DQ19RTUFSSykpOwotCQl9Ci0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5aZXJvT3JPbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRm5aZXJvT3JPbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkMDMxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZuWmVyb09yT25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIFJldHVybnMgJGFyZyBpZiBpdCBjb250YWlucyB6ZXJvIG9yIG9uZSBpdGVtcy4gT3RoZXJ3aXNlLCByYWlzZXMgYW4gZXJyb3IKLSAqIFtlcnI6Rk9SRzAwMDNdLiBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgJGFyZy4KLSAqLwotcHVibGljIGNsYXNzIEZuWmVyb09yT25lIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGblplcm9Pck9uZS4KLQkgKi8KLQlwdWJsaWMgRm5aZXJvT3JPbmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiemVyby1vci1vbmUiKSwgMSk7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gemVyb19vcl9vbmUoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogWmVyby1vci1PbmUgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZm46emVyby1vci1vbmUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgemVyb19vcl9vbmUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDE7Ci0KLQkJLy8gZ2V0IGFyZ3MKLQkJSXRlcmF0b3IgY2l0ZXIgPSBhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgY2l0ZXIubmV4dCgpOwotCi0JCWlmIChhcmcuc2l6ZSgpID4gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5tb3JlX29uZV9pdGVtKG51bGwpOwotCi0JCXJldHVybiBhcmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0NvbnZlcnRPcGVyYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzQ29udmVydE9wZXJhbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VjZjQ2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzQ29udmVydE9wZXJhbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQ3RyVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RvdWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW50eXBlZEF0b21pYzsKLQotLyoqCi0gKiBGdW5jdGlvbiB0byBjb252ZXJ0IGEgc2VxdWVuY2Ugb2YgaXRlbXMgdG8gYSBzZXF1ZW5jZSBvZiBhdG9taWMgdmFsdWVzLgotICovCi1wdWJsaWMgY2xhc3MgRnNDb252ZXJ0T3BlcmFuZCBleHRlbmRzIEZ1bmN0aW9uIHsKLQotCXB1YmxpYyBGc0NvbnZlcnRPcGVyYW5kKCkgewotCQlzdXBlcihuZXcgUU5hbWUoImNvbnZlcnQtb3BlcmFuZCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBjb252ZXJ0X29wZXJhbmQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydC1PcGVyYW5kIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGZzOiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0X29wZXJhbmQoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID09IDI7Ci0KLQkJSXRlcmF0b3IgaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQlSZXN1bHRTZXF1ZW5jZSBhY3R1YWwgPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCQlSZXN1bHRTZXF1ZW5jZSBleHBlY3RlZCA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0KLQkJaWYgKGV4cGVjdGVkLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlJdGVtIGF0ID0gZXhwZWN0ZWQuZmlyc3QoKTsKLQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlBbnlBdG9taWNUeXBlIGV4cF9hYXQgPSAoQW55QXRvbWljVHlwZSkgYXQ7Ci0KLQkJUmVzdWx0QnVmZmVyIHJlc3VsdCA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQotCQkvLyAxCi0JCWlmIChhY3R1YWwuZW1wdHkoKSkKLQkJCXJldHVybiByZXN1bHQuZ2V0U2VxdWVuY2UoKTsKLQotCQkvLyBjb252ZXJ0IHNlcXVlbmNlCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFjdHVhbC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgaXRlbSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQotCQkJLy8gMgotCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCQkvLyBhCi0JCQkJaWYgKGV4cF9hYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQkJCXJlc3VsdC5hZGQobmV3IFhTU3RyaW5nKGl0ZW0uZ2V0U3RyaW5nVmFsdWUoKSkpOwotCQkJCS8vIGIKLQkJCQllbHNlIGlmIChleHBfYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpCi0JCQkJCXJlc3VsdC5hZGQobmV3IFhTRG91YmxlKGl0ZW0uZ2V0U3RyaW5nVmFsdWUoKSkpOwotCQkJCS8vIGMKLQkJCQllbHNlIHsKLQkJCQkJYXNzZXJ0IGV4cF9hYXQgaW5zdGFuY2VvZiBDdHJUeXBlOwotCQkJCQlDdHJUeXBlIGNvbnMgPSAoQ3RyVHlwZSkgZXhwX2FhdDsKLQkJCQkJcmVzdWx0LmNvbmNhdChjb25zLmNvbnN0cnVjdG9yKG5ldyBYU1N0cmluZyhpdGVtLmdldFN0cmluZ1ZhbHVlKCkpKSk7Ci0JCQkJfQotCQkJfQotCQkJLy8gNAotCQkJZWxzZQotCQkJCXJlc3VsdC5hZGQoaXRlbSk7Ci0KLQkJfQotCi0JCXJldHVybiByZXN1bHQuZ2V0U2VxdWVuY2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRGl2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRGl2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMDhhMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0Rpdi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciB0aGUgRGl2aXNpb24gZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc0RpdiBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNEaXYuCi0JICovCi0JcHVibGljIEZzRGl2KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImRpdiIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfZGl2KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIERpdiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBmczpkaXYgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfZGl2KENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc1BsdXMuZG9fbWF0aF9vcChhcmdzLCBNYXRoRGl2LmNsYXNzLCAiZGl2Iik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0VxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRXEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIzNWJlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzRXEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUvZWxlbWVudCBub2RlcyAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjYyNzY1IC0gZml4ZWQgY29tcGFyaXNvbiBvbiBzZXF1ZW5jZSByYW5nZSB2YWx1ZXMuCi0gKiAgICAgSmVzcGVyIFMgTW9sbGVyIC0gYnVnIDI4MzIxNCAtIGZpeCBlcSBmb3IgdW50eXBlZCBhdG9taWMgdmFsdWVzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuVHlwZUVycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5OdW1lcmljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWM7Ci0KLS8qKgotICogQ2xhc3MgZm9yIHRoZSBFcXVhbGl0eSBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzRXEgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzRXEuCi0JICovCi0JcHVibGljIEZzRXEoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXEiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfZXFfdmFsdWUoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydHMgYXJndW1lbnRzIHRvIHZhbHVlcy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgY29udmVyc2lvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIHZhbHVlX2NvbnZlcnRfYXJncyhDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KGFyZ3Muc2l6ZSgpKTsKLQotCQkvLyBhdG9taXplIGFyZ3VtZW50cwotCQlmb3IgKEl0ZXJhdG9yIGkgPSBhcmdzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSAoUmVzdWx0U2VxdWVuY2UpIGkubmV4dCgpOwotCi0JCQkvL0ZuRGF0YS5mYXN0X2F0b21pemUocnMpOwotCQkJcnMgPSBGbkRhdGEuYXRvbWl6ZShycyk7Ci0KLQkJCWlmIChycy5lbXB0eSgpKQotCQkJCXJldHVybiBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCWlmIChycy5zaXplKCkgPiAxKQotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJCUl0ZW0gYXJnID0gcnMuZmlyc3QoKTsKLQotCQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykKLQkJCQlhcmcgPSBuZXcgWFNTdHJpbmcoYXJnLmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCQlyZXN1bHQuYWRkKGFyZyk7Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIENvbnZlcnNpb24gb3BlcmF0aW9uIGZvciB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIGNvbnZlcnQgdmFsdWUgb3BlcmF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBjb252ZXJzaW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfZXFfdmFsdWUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBkb19jbXBfdmFsdWVfb3AoYXJncywgQ21wRXEuY2xhc3MsICJlcSIsIGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIEEgZmFzdCBFcXVhbGl0eSBvcGVyYXRpb24sIG5vIGNvbnZlcnNpb24gZm9yIHRoZSBpbnB1dHMgcGVyZm9ybWVkLgotCSAqIAotCSAqIEBwYXJhbSBvbmUKLQkgKiAgICAgICAgICAgIGlucHV0MSBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gdHdvCi0JICogICAgICAgICAgICBpbnB1dDIgb2YgYW55IHR5cGUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIEVxdWFsaXR5IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZnNfZXFfZmFzdChBbnlUeXBlIG9uZSwgQW55VHlwZSB0d28sIER5bmFtaWNDb250ZXh0IGNvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlvbmUgPSBGbkRhdGEuYXRvbWl6ZSgoSXRlbSlvbmUpOwotCQl0d28gPSBGbkRhdGEuYXRvbWl6ZSgoSXRlbSl0d28pOwotCi0JCWlmIChvbmUgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQlvbmUgPSBuZXcgWFNTdHJpbmcob25lLmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCWlmICh0d28gaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQl0d28gPSBuZXcgWFNTdHJpbmcodHdvLmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCWlmICghKG9uZSBpbnN0YW5jZW9mIENtcEVxKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJQ21wRXEgY21wb25lID0gKENtcEVxKSBvbmU7Ci0KLQkJcmV0dXJuIGNtcG9uZS5lcSh0d28sIGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIE1ha2luZyBzdXJlIHRoYXQgdGhlIHR5cGVzIGFyZSB0aGUgc2FtZSBiZWZvcmUgY29tcGFyaW5nIHRoZSBpbnB1dHMuCi0JICogCi0JICogQHBhcmFtIGEKLQkgKiAgICAgICAgICAgIGlucHV0MSBvZiBhbnkgdHlwZS4KLQkgKiBAcGFyYW0gYgotCSAqICAgICAgICAgICAgaW5wdXQyIG9mIGFueSB0eXBlLgotCSAqIEBwYXJhbSBkYwotCSAqICAgICAgICAgICAgICBEeW5hbWljIENvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgRXF1YWxpdHkgb3BlcmF0aW9uLgotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9fZ2VuZXJhbF9wYWlyKEFueVR5cGUgYSwgQW55VHlwZSBiLAotCQkJTWV0aG9kIGNvbXBhcmF0b3IsIER5bmFtaWNDb250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBzZWN0aW9uIDMuNS4yCi0KLQkJLy8gcnVsZSBhCi0JCS8vIGlmIG9uZSBpcyB1bnR5cGVkIGFuZCBvdGhlciBpcyBudW1lcmljLCBjYXN0IHVudHlwZWQgdG8KLQkJLy8gZG91YmxlCi0JCWlmICgoYSBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyAmJiBiIGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpCi0JCQkJfHwgKGIgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMgJiYgYSBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSkgewotCQkJaWYgKGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQkJYSA9IG5ldyBYU0RvdWJsZShhLmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJZWxzZQotCQkJCWIgPSBuZXcgWFNEb3VibGUoYi5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQl9Ci0KLQkJLy8gcnVsZSBiCi0JCS8vIGlmIG9uZSBpcyB1bnR5cGVkIGFuZCBvdGhlciBpcyBzdHJpbmcgb3IgdW50eXBlZCwgdGhlbiBjYXN0Ci0JCS8vIHVudHlwZWQgdG8gc3RyaW5nCi0JCWVsc2UgaWYgKChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljCi0JCQkJJiYgKGIgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBiIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB8fCAoYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyAmJiAoYSBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpKSkpIHsKLQotCQkJaWYgKGEgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQkJYSA9IG5ldyBYU1N0cmluZyhhLmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJaWYgKGIgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpCi0JCQkJYiA9IG5ldyBYU1N0cmluZyhiLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl9Ci0KLQkJLy8gcnVsZSBjCi0JCS8vIGlmIG9uZSBpcyB1bnR5cGVkIGFuZCBvdGhlciBpcyBub3Qgc3RyaW5nLHVudHlwZWQsbnVtZXJpYwotCQkvLyBjYXN0IHVudHlwZWQgdG8gZHluYW1pYyB0eXBlIG9mIG90aGVyCi0KLQkJLy8gWFhYPwotCQkvLyBUT0RPOiBUaGlzIG1ha2VzIG5vIHNlbnNlIGFzIGltcGxlbWVudGVkIGJlZm9yZQotCQllbHNlIGlmIChhIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0vLwkJCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGEpOwotLy8JCQlhc3NlcnQgY29udmVydGVkLnNpemUoKSA9PSAxOwotLy8JCQlhID0gY29udmVydGVkLmZpcnN0KCk7Ci0JCX0gZWxzZSBpZiAoYiBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotLy8JCQlSZXN1bHRTZXF1ZW5jZSBjb252ZXJ0ZWQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhiKTsKLS8vCQkJYXNzZXJ0IGNvbnZlcnRlZC5zaXplKCkgPT0gMTsKLS8vCQkJYiA9IGNvbnZlcnRlZC5maXJzdCgpOwotCQl9Ci0KLQkJLy8gcnVsZSBkCi0JCS8vIGlmIHZhbHVlIGNvbXBhcmlzb24gaXMgdHJ1ZSwgcmV0dXJuIHRydWUuCi0KLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYSk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KGIpOwotCi0JCUNvbGxlY3Rpb24gYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJncy5hZGQob25lKTsKLQkJYXJncy5hZGQodHdvKTsKLQotCQlPYmplY3QgbWFyZ3NbXSA9IHsgYXJncywgZWMgfTsKLQotCQlSZXN1bHRTZXF1ZW5jZSByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gKFJlc3VsdFNlcXVlbmNlKSBjb21wYXJhdG9yLmludm9rZShudWxsLCBtYXJncyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXJyKSB7Ci0JCQlUaHJvd2FibGUgZXggPSBlcnIuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0KLQkJCWlmIChleCBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pCi0JCQkJdGhyb3cgKFJ1bnRpbWVFeGNlcHRpb24pIGV4OwotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCQl9Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSByZXN1bHQuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBBIGdlbmVyYWwgZXF1YWxpdHkgZnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMKLQkgKiAgICAgICAgIER5bmFtaWMgY29udGV4dCAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBnZW5lcmFsIGVxdWFsaXR5IG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2VxX2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXsKLQkJcmV0dXJuIGRvX2NtcF9nZW5lcmFsX29wKGFyZ3MsIEZzRXEuY2xhc3MsICJmc19lcV92YWx1ZSIsIGRjKTsKLQl9Ci0KLQkvLyB2b29kb28gMwotCS8qKgotCSAqIEFjdHVhbCBlcXVhbGl0eSBvcGVyYXRpb24gZm9yIGZzX2VxX2dlbmVyYWwuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgdHlwZSBvZiB0aGUgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBtbmFtZQotCSAqICAgICAgICAgICAgTWV0aG9kIG5hbWUgZm9yIHRlbXBsYXRlIHNpbXVsYXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBkb19jbXBfZ2VuZXJhbF9vcChDb2xsZWN0aW9uIGFyZ3MsIENsYXNzIHR5cGUsCi0JCQlTdHJpbmcgbW5hbWUsIER5bmFtaWNDb250ZXh0IGRjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBkbyB0aGUgdm9vZG9vCi0JCU1ldGhvZCBjb21wYXJhdG9yID0gbnVsbDsKLQotCQl0cnkgewotCQkJQ2xhc3MgbWFyZ3NkZWZbXSA9IHsgQ29sbGVjdGlvbi5jbGFzcywgRHluYW1pY0NvbnRleHQuY2xhc3MgfTsKLQotCQkJY29tcGFyYXRvciA9IHR5cGUuZ2V0TWV0aG9kKG1uYW1lLCBtYXJnc2RlZik7Ci0KLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGVycikgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbr8ndCBmaW5kIG1ldGhvZCA6ICIgKyBtbmFtZSwgZXJyKTsKLQkJfQotCi0JCS8vIHNhbml0eSBjaGVjayBhcmdzIGFuZCBnZXQgdGhlbQotCQlpZiAoYXJncy5zaXplKCkgIT0gMikKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlcmF0b3IgYXJnaXRlciA9IGFyZ3MuaXRlcmF0b3IoKTsKLQotCQlvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2Ugb25lID0gKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSkgYXJnaXRlci5uZXh0KCk7Ci0JCW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSB0d28gPSAob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlKSBhcmdpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggPwotCQlpZiAob25lLmVtcHR5KCkgfHwgdHdvLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTQm9vbGVhbihmYWxzZSkpOwotCi0JCS8vIGF0b21pemUKLQkJb25lID0gRm5EYXRhLmF0b21pemUob25lKTsKLQkJdHdvID0gRm5EYXRhLmF0b21pemUodHdvKTsKLQotCQkvLyB3ZSBnb3R0YSBmaW5kIGEgcGFpciB0aGF0IHNhdGlzZmllZCB0aGUgY29uZGl0aW9uCi0JCWZvciAoSXRlcmF0b3IgaSA9IG9uZS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUFueVR5cGUgYSA9IChBbnlUeXBlKSBpLm5leHQoKTsKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHR3by5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlBbnlUeXBlIGIgPSAoQW55VHlwZSkgai5uZXh0KCk7Ci0KLQkJCQlpZiAoZG9fZ2VuZXJhbF9wYWlyKGEsIGIsIGNvbXBhcmF0b3IsIGRjKSkKLQkJCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4odHJ1ZSkpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oZmFsc2UpKTsKLQl9Ci0KLQkvLyB2b29kb28gMgotCS8qKgotCSAqIEFjdHVhbCBlcXVhbGl0eSBvcGVyYXRpb24gZm9yIGZzX2VxX3ZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIHR5cGUgb2YgdGhlIGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gbW5hbWUKLQkgKiAgICAgICAgICAgIE1ldGhvZCBuYW1lIGZvciB0ZW1wbGF0ZSBzaW11bGF0aW9uLgotCSAqIEBwYXJhbSBkeW5hbWljQ29udGV4dCAKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZG9fY21wX3ZhbHVlX29wKENvbGxlY3Rpb24gYXJncywgQ2xhc3MgdHlwZSwKLQkJCVN0cmluZyBtbmFtZSwgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0KLQkJLy8gc2FuaXR5IGNoZWNrIGFyZ3MgKyBjb252ZXJ0IGVtCi0JCWlmIChhcmdzLnNpemUoKSAhPSAyKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlDb2xsZWN0aW9uIGNhcmdzID0gdmFsdWVfY29udmVydF9hcmdzKGFyZ3MpOwotCi0JCWlmIChjYXJncy5zaXplKCkgPT0gMCkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gbWFrZSBzdXJlIGFydWdtZW50cyBhcmUgY29tcGFyYWJsZSBieSBlcXVhbGl0eQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJSXRlbSBhcmcgPSAoKFJlc3VsdFNlcXVlbmNlKSBhcmdpLm5leHQoKSkuZmlyc3QoKTsKLQkJUmVzdWx0U2VxdWVuY2UgYXJnMiA9IChSZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0KLQkJaWYgKGFyZzIuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCWlmICghKHR5cGUuaXNJbnN0YW5jZShhcmcpKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJdHJ5IHsKLQkJCUNsYXNzIG1hcmdzZGVmW10gPSB7IEFueVR5cGUuY2xhc3MsIER5bmFtaWNDb250ZXh0LmNsYXNzIH07Ci0JCQlNZXRob2QgbWV0aG9kID0gbnVsbDsKLQotCQkJbWV0aG9kID0gdHlwZS5nZXRNZXRob2QobW5hbWUsIG1hcmdzZGVmKTsKLQotCQkJT2JqZWN0IG1hcmdzW10gPSB7IGFyZzIuZmlyc3QoKSwgY29udGV4dCB9OwotCQkJQm9vbGVhbiBjbXByZXMgPSAoQm9vbGVhbikgbWV0aG9kLmludm9rZShhcmcsIG1hcmdzKTsKLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Jvb2xlYW4oY21wcmVzCi0JCQkJCS5ib29sZWFuVmFsdWUoKSkpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXJyKSB7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiY2Fubm90IGNvbXBhcmUgdXNpbmcgbWV0aG9kICIgKyBtbmFtZSwgZXJyKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlcnIpIHsKLQkJCWFzc2VydCBmYWxzZTsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYW5ub3QgY29tcGFyZSB1c2luZyBtZXRob2QgIiArIG1uYW1lLCBlcnIpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGVycikgewotCQkJVGhyb3dhYmxlIGV4ID0gZXJyLmdldFRhcmdldEV4Y2VwdGlvbigpOwotCi0JCQlpZiAoZXggaW5zdGFuY2VvZiBEeW5hbWljRXJyb3IpCi0JCQkJdGhyb3cgKER5bmFtaWNFcnJvcikgZXg7Ci0KLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYW5ub3QgY29tcGFyZSB1c2luZyBtZXRob2QgIiArIG1uYW1lLCBleCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNHZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDk1Y2ExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNHZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vb2xsZXIgLSBidWcgMjgwNTU1IC0gQWRkIHBsdWdnYWJsZSBjb2xsYXRpb24gc3VwcG9ydAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCb29sZWFuOwotCi0vKioKLSAqIENsYXNzIGZvciB0aGUgR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNHZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNHZS4KLQkgKi8KLQlwdWJsaWMgRnNHZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJnZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfZ2VfdmFsdWUoYXJncywgZWMuZ2V0RHluYW1pY0NvbnRleHQoKSk7Ci0JfQotCi0JLyoqCi0JICogR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZGMgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19nZV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGdyZWF0ZXIgPSBGc0d0LmZzX2d0X3ZhbHVlKGFyZ3MsIGRjKTsKLQotCQlpZiAoKChYU0Jvb2xlYW4pIGdyZWF0ZXIuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiBncmVhdGVyOwotCi0JCVJlc3VsdFNlcXVlbmNlIGVxdWFsID0gRnNFcS5mc19lcV92YWx1ZShhcmdzLCBkYyk7Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSBlcXVhbC5maXJzdCgpKS52YWx1ZSgpKQotCQkJcmV0dXJuIGVxdWFsOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2dlX2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc0dlLmNsYXNzLCAiZnNfZ2VfdmFsdWUiLCBkYyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0d0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmMzRjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzR3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciB0aGUgR3JlYXRlciB0aGFuIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNHdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNHdC4KLQkgKi8KLQlwdWJsaWMgRnNHdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJndCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19ndF92YWx1ZShhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGR5bmFtaWMKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGNvbnRleGV0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19ndF92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGR5bmFtaWMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX3ZhbHVlX29wKGFyZ3MsIENtcEd0LmNsYXNzLCAiZ3QiLCBkeW5hbWljKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2d0X2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBkYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc0d0LmNsYXNzLCAiZnNfZ3RfdmFsdWUiLCBkYyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzSURpdi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0lEaXYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzNDg2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzSURpdi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIEludGVyZ2VyIGRpdmlzaW9uIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNJRGl2IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc0lEaXYuCi0JICovCi0JcHVibGljIEZzSURpdigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJpZGl2IiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19pZGl2KGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIElEaXYgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2lkaXYoQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzUGx1cy5kb19tYXRoX29wKGFyZ3MsIE1hdGhJRGl2LmNsYXNzLCAiaWRpdiIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNMZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0xlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjN2VmZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0xlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTGVzcyB0aGFuIG9yIGVxdWFsIHRvIGZ1bmN0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRnNMZSBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNMZS4KLQkgKi8KLQlwdWJsaWMgRnNMZSgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJsZSIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIEV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc19sZV92YWx1ZShhcmdzLCBlYy5nZXREeW5hbWljQ29udGV4dCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVyYXRpb24gb24gdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIAotICAgICAqICAgICAgICAgRHluYW1pY0NvbnRleHQgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19sZV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGRjKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGxlc3MgPSBGc0x0LmZzX2x0X3ZhbHVlKGFyZ3MsIGRjKTsKLQotCQlpZiAoKChYU0Jvb2xlYW4pIGxlc3MuZmlyc3QoKSkudmFsdWUoKSkKLQkJCXJldHVybiBsZXNzOwotCi0JCVJlc3VsdFNlcXVlbmNlIGVxdWFsID0gRnNFcS5mc19lcV92YWx1ZShhcmdzLCBkYyk7Ci0KLQkJaWYgKCgoWFNCb29sZWFuKSBlcXVhbC5maXJzdCgpKS52YWx1ZSgpKQotCQkJcmV0dXJuIGVxdWFsOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNCb29sZWFuKGZhbHNlKSk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBkYyAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19sZV9nZW5lcmFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX2dlbmVyYWxfb3AoYXJncywgRnNMZS5jbGFzcywgImZzX2xlX3ZhbHVlIiwgZGMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNMdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0x0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNWQzNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc0x0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBMZXNzIHRoYW4gZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc0x0IGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc0x0LgotCSAqLwotCXB1YmxpYyBGc0x0KCkgewotCQlzdXBlcihuZXcgUU5hbWUoImx0IiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX2x0X3ZhbHVlKGFyZ3MsIGVjLmdldER5bmFtaWNDb250ZXh0KCkpOwotCX0KLQotCS8qKgotCSAqIE9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gY29udGV4dCAKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX2x0X3ZhbHVlKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX3ZhbHVlX29wKGFyZ3MsIENtcEx0LmNsYXNzLCAibHQiLCBkYyk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBkYyAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19sdF9nZW5lcmFsKENvbGxlY3Rpb24gYXJncywgRHluYW1pY0NvbnRleHQgZGMpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZzRXEuZG9fY21wX2dlbmVyYWxfb3AoYXJncywgRnNMdC5jbGFzcywgImZzX2x0X3ZhbHVlIiwgZGMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNNaW51cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01pbnVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOWE3MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01pbnVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDExIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBNaW51cyBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzTWludXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzTWludXMuCi0JICovCi0JcHVibGljIEZzTWludXMoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibWludXMiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX21pbnVzKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX21pbnVzKENvbGxlY3Rpb24gYXJncykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXJldHVybiBGc1BsdXMuZG9fbWF0aF9vcChhcmdzLCBNYXRoTWludXMuY2xhc3MsICJtaW51cyIpOwotCX0KLQotCS8qKgotCSAqIFVuYXJ5IG9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX21pbnVzX3VuYXJ5KENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyBtYWtlIHN1cmUgd2UgZ290IG9ubHkgb25lIGFyZwotCQlpZiAoYXJncy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UpIGFyZ3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0KLQkJLy8gbWFrZSBzdXJlIHdlIGdvdCBvbmx5IG9uZSBudW1lcmljIGF0b20KLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCUl0ZW0gYXQgPSBhcmcuZmlyc3QoKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCU51bWVyaWNUeXBlIG50ID0gKE51bWVyaWNUeXBlKSBhdDsKLQotCQlyZXR1cm4gbnQudW5hcnlfbWludXMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTW9kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzTW9kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYzAzMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc01vZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE1vZHVsYXIgZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc01vZCBleHRlbmRzIEZ1bmN0aW9uIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnNNb2QuCi0JICovCi0JcHVibGljIEZzTW9kKCkgewotCQlzdXBlcihuZXcgUU5hbWUoIm1vZCIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfbW9kKGFyZ3MpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX21vZChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNQbHVzLmRvX21hdGhfb3AoYXJncywgTWF0aE1vZC5jbGFzcywgIm1vZCIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNOZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc05lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZGQ1NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc05lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MDU1NSAtIEFkZCBwbHVnZ2FibGUgY29sbGF0aW9uIHN1cHBvcnQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogQ2xhc3MgZm9yIE5vdCBlcXVhbCBmdW5jdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEZzTmUgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzTmUuCi0JICovCi0JcHVibGljIEZzTmUoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgibmUiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gZnNfbmVfdmFsdWUoYXJncywgZWMpOwotCX0KLQotCS8qKgotCSAqIE9wZXJhdGlvbiBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gY29udGV4dCAKLQkgKiAgICAgICAgICAgICBUaGUgZHluYW1pYyBjb250ZXh0Ci0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc19uZV92YWx1ZShDb2xsZWN0aW9uIGFyZ3MsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIEZuTm90LmZuX25vdChGc0VxLmZzX2VxX3ZhbHVlKGFyZ3MsIGNvbnRleHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIGRjIAotCSAqICAgICAgICAgICAgIFRoZSBkeW5hbWljIGNvbnRleHQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGZzX25lX2dlbmVyYWwoQ29sbGVjdGlvbiBhcmdzLCBEeW5hbWljQ29udGV4dCBlYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNFcS5kb19jbXBfZ2VuZXJhbF9vcChhcmdzLCBGc05lLmNsYXNzLCAiZnNfbmVfdmFsdWUiLCBlYyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzUGx1cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc1BsdXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQxZjkwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0ZzUGx1cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gQnVnIDI4NjA2MiAtIEFkZCB0eXBlIHByb21vdGlvbiBmb3IgbnVtZXJpYyBvcGVyYXRvcnMgIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlR5cGVFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWM7Ci0KLS8qKgotICogQ2xhc3MgZm9yIFBsdXMgZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc1BsdXMgZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZzUGx1cy4KLQkgKi8KLQlwdWJsaWMgRnNQbHVzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInBsdXMiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBFdmFsdWF0aW9uQ29udGV4dCBlYykgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIGZzX3BsdXMoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhbmQgcHJvbW90ZSBhcmd1bWVudHMgZm9yIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEBwYXJhbSBzYyAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgY29udmVyc2lvbi4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIGNvbnZlcnRfYXJncyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkvLyBLZWVwIHRyYWNrIG9mIG51bWVyaWMgdHlwZXMgZm9yIHByb21vdGlvbgotCQlib29sZWFuIGhhc19mbG9hdCA9IGZhbHNlOwotCQlib29sZWFuIGhhc19kb3VibGUgPSBmYWxzZTsKLQkJCi0JCS8vIGF0b21pemUgYXJndW1lbnRzCi0JCWZvciAoSXRlcmF0b3IgaSA9IGFyZ3MuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgcnMgPSBGbkRhdGEuYXRvbWl6ZSgob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKSk7Ci0KLQkJCWlmIChycy5lbXB0eSgpKQotCQkJCXJldHVybiBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCWlmIChycy5zaXplKCkgPiAxKQotCQkJCXRocm93IG5ldyBEeW5hbWljRXJyb3IoVHlwZUVycm9yLmludmFsaWRfdHlwZShudWxsKSk7Ci0KLQkJCUFueVR5cGUgYXJnID0gKEFueVR5cGUpIHJzLml0ZW0oMCk7Ci0KLQkJCWlmIChhcmcgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCQlhcmcgPSBuZXcgWFNEb3VibGUoYXJnLmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJfQotCi0JCQlpZiAoYXJnIGluc3RhbmNlb2YgWFNEb3VibGUpIGhhc19kb3VibGUgPSB0cnVlOwotCQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTRmxvYXQpIGhhc19mbG9hdCA9IHRydWU7Ci0JCQlyZXN1bHQuYWRkKFJlc3VsdEJ1ZmZlci53cmFwKGFyZykpOwotCQl9Ci0KLQkJaWYgKGhhc19kb3VibGUpIGhhc19mbG9hdCA9IGZhbHNlOwotCQkKLQkJaWYgKGhhc19kb3VibGUgfHwgaGFzX2Zsb2F0KSB7Ci0JCQlDb2xsZWN0aW9uIHJlc3VsdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCS8vIHByb21vdGUgYXJndW1lbnRzCi0JCQlmb3IgKEl0ZXJhdG9yIGkgPSByZXN1bHQuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlIHJzID0gKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSkgaS5uZXh0KCk7Ci0JCQkJCQkJCQotCQkJCUl0ZW0gYXJnID0gcnMuaXRlbSgwKTsKLQkJCQkKLQkJCQlpZiAoaGFzX2RvdWJsZSAmJiAoYXJnIGluc3RhbmNlb2YgWFNGbG9hdCkpIHsKLQkJCQkJYXJnID0gbmV3IFhTRG91YmxlKCgoWFNGbG9hdClhcmcpLmZsb2F0X3ZhbHVlKCkpOwotCQkJCX0gZWxzZSBpZiAoaGFzX2RvdWJsZSAmJiAoYXJnIGluc3RhbmNlb2YgWFNEZWNpbWFsKSkgewotCQkJCQlhcmcgPSBuZXcgWFNEb3VibGUoKChYU0RlY2ltYWwpYXJnKS5nZXRWYWx1ZSgpLmRvdWJsZVZhbHVlKCkpOwotCQkJCX0gZWxzZSBpZiAoaGFzX2Zsb2F0ICYmIChhcmcgaW5zdGFuY2VvZiBYU0RlY2ltYWwpKSB7Ci0JCQkJCWFyZyA9IG5ldyBYU0Zsb2F0KCgoWFNEZWNpbWFsKWFyZykuZ2V0VmFsdWUoKS5mbG9hdFZhbHVlKCkpOwotCQkJCX0KLQkJCQlyZXN1bHQyLmFkZChhcmcpOwotCQkJfQotCQkJcmV0dXJuIHJlc3VsdDI7Ci0JCX0KLQkJCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHBhcmFtIHNjIAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfcGx1cyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gZG9fbWF0aF9vcChhcmdzLCBNYXRoUGx1cy5jbGFzcywgInBsdXMiKTsKLQl9Ci0KLQkvKioKLQkgKiBVbmFyeSBvcGVyYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnRzLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2UgZnNfcGx1c191bmFyeShDb2xsZWN0aW9uIGFyZ3MpCi0JCQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBtYWtlIHN1cmUgd2UgZ290IG9ubHkgb25lIGFyZwotCQlpZiAoYXJncy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIGFyZyA9IChSZXN1bHRTZXF1ZW5jZSkgYXJncy5pdGVyYXRvcigpLm5leHQoKTsKLQotCQkvLyBtYWtlIHN1cmUgd2UgZ290IG9ubHkgb25lIG51bWVyaWMgYXRvbQotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJSXRlbSBhdCA9IGFyZy5maXJzdCgpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIE51bWVyaWNUeXBlKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJLy8gbm8tb3AKLQkJcmV0dXJuIGFyZzsKLQl9Ci0KLQkvLyB2b29kb28KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgdHlwZSBvZiBhcmd1bWVudHMuCi0JICogQHBhcmFtIG1uYW1lCi0JICogICAgICAgICAgICBNZXRob2QgbmFtZSBmb3IgdGVtcGxhdGUgc2ltdWxhdGlvbi4KLQkgKiBAcGFyYW0gc2MgCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGRvX21hdGhfb3AoQ29sbGVjdGlvbiBhcmdzLCBDbGFzcyB0eXBlLAotCQkJU3RyaW5nIG1uYW1lKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQkvLyBzYW5pdHkgY2hlY2sgYXJncyArIGNvbnZlcnQgZW0KLQkJaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBjb252ZXJ0X2FyZ3MoYXJncyk7Ci0KLQkJaWYgKGNhcmdzLnNpemUoKSA9PSAwKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQkvLyBtYWtlIHN1cmUgYXJ1Z21lbnRzIGFyZSBnb29kIFthdCBsZWFzdCB0aGUgZmlyc3Qgb25lXQotCQlJdGVyYXRvciBhcmdpID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJSXRlbSBhcmcgPSAoKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCkpLml0ZW0oMCk7Ci0JCW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSBhcmcyID0gKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCk7Ci0KLQkJaWYgKCEodHlwZS5pc0luc3RhbmNlKGFyZykpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQkvLyBoZXJlIGlzIGRhIG93bmFnZQotCQl0cnkgewotCQkJQ2xhc3MgbWFyZ3NkZWZbXSA9IHsgUmVzdWx0U2VxdWVuY2UuY2xhc3MgfTsKLQkJCU1ldGhvZCBtZXRob2QgPSBudWxsOwotCi0JCQltZXRob2QgPSB0eXBlLmdldE1ldGhvZChtbmFtZSwgbWFyZ3NkZWYpOwotCi0JCQlPYmplY3QgbWFyZ3NbXSA9IHsgYXJnMiB9OwotCQkJcmV0dXJuIChSZXN1bHRTZXF1ZW5jZSkgbWV0aG9kLmludm9rZShhcmcsIG1hcmdzKTsKLQotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXJyKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5vU3VjaE1ldGhvZEV4Y2VwdGlvbjogIiArIGVyci5nZXRNZXNzYWdlKCkpOwotCQkJYXNzZXJ0IGZhbHNlOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGVycikgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uOiAiICsgZXJyLmdldE1lc3NhZ2UoKSk7Ci0JCQlhc3NlcnQgZmFsc2U7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXJyKSB7Ci0JCQlUaHJvd2FibGUgZXggPSBlcnIuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0JCQlpZiAoZXggaW5zdGFuY2VvZiBEeW5hbWljRXJyb3IpIHsKLQkJCQl0aHJvdyAoRHluYW1pY0Vycm9yKSBleDsKLQkJCX0gZWxzZSB7Ci0JCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOyAvLyB1bnJlYWNoIQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnNUaW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc1RpbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzFmNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9Gc1RpbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBDbGFzcyBmb3IgTXVsdGlwbGljYXRpb24gZnVuY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBGc1RpbWVzIGV4dGVuZHMgRnVuY3Rpb24gewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGc1RpbWVzLgotCSAqLwotCXB1YmxpYyBGc1RpbWVzKCkgewotCQlzdXBlcihuZXcgUU5hbWUoInRpbWVzIiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBmc190aW1lcyhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIG9wZXJhdGlvbiBvbiB0aGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudHMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBmc190aW1lcyhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlyZXR1cm4gRnNQbHVzLmRvX21hdGhfb3AoYXJncywgTWF0aFRpbWVzLmNsYXNzLCAidGltZXMiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL0Z1bmN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZTUwMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTEgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3MTkgLSBTdHJpbmcgTGVuZ3RoIGRvZXMgbm90IHdvcmsgd2l0aCBFbGVtZW50IGFyZy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzk1IC0gaW1wcm92ZW1lbnRzIHRvIGZ1bmN0aW9uLCBzdWJzdHJpbmcgKGltcGxlbWVudGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24pLiAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4MTE1OSAtIGltcGxlbWVudCB4czphbnlVcmkgLT4geHM6c3RyaW5nIHByb21vdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI4MTkzOCAtIHVuZGVmaW5lZCBjb250ZXh0IHNob3VsZCByYWlzZSBlcnJvcgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDM0MDkzMyAtIE1pZ3JhdGUgdG8gbmV3IFhQYXRoMiBBUEkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55QXRvbWljVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTnVtZXJpY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEb3VibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTU3RyaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1VudHlwZWRBdG9taWM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIGZ1bmN0aW9ucy4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uIGltcGxlbWVudHMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkZ1bmN0aW9uIHsKLQotCXByb3RlY3RlZCBzdGF0aWMgRGF0YXR5cGVGYWN0b3J5IF9kYXRhdHlwZUZhY3Rvcnk7Ci0Jc3RhdGljIHsKLQkJdHJ5IHsKLQkJCV9kYXRhdHlwZUZhY3RvcnkgPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJfQotCQljYXRjaCAoRGF0YXR5cGVDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW5ub3QgaW5pdGlhbGl6ZSBYTUwgZGF0YXR5cGVzIiwgZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgUU5hbWUgX25hbWU7Ci0JLyoqCi0JICogaWYgbmVnYXRpdmUsIG5lZWQgdG8gaGF2ZSAiYXQgbGVhc3QiCi0JICovCi0JcHJvdGVjdGVkIGludCBfbWluX2FyaXR5OyAKLQkKLQkvKioKLQkgKiBJZiAiYXQgbGVhc3QiLCB0aGlzIHNwZWNpLCB1bmxpbWl0ZWQgaWYgLTEKLQkgKi8KLQlwcm90ZWN0ZWQgaW50IF9tYXhfYXJpdHk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnVuY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgdGhlIGFyaXR5IG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24uCi0JICovCi0JcHVibGljIEZ1bmN0aW9uKFFOYW1lIG5hbWUsIGludCBhcml0eSkgewotCQlfbmFtZSA9IG5hbWU7Ci0JCWlmIChhcml0eSA8IDApIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXZSB3YW50IHRvIGF2b2lkIHRoaXMhIik7Ci0JCX0KLQkJX21pbl9hcml0eSA9IGFyaXR5OwotCQlfbWF4X2FyaXR5ID0gYXJpdHk7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICBRTmFtZS4KLQkgKiBAcGFyYW0gYXJpdHkKLQkgKiAgICAgICAgICAgIHRoZSBhcml0eSBvZiBhIHNwZWNpZmljIGZ1bmN0aW9uLgotCSAqLwotCXB1YmxpYyBGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgbWluX2FyaXR5LCBpbnQgbWF4X2FyaXR5KSB7Ci0JCV9uYW1lID0gbmFtZTsKLQkJaWYgKG1pbl9hcml0eSA8IDAgfHwgbWF4X2FyaXR5IDwgMCB8fCBtYXhfYXJpdHkgPCBtaW5fYXJpdHkpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJXZSB3YW50IHRvIGF2b2lkIHRoaXMhIik7Ci0JCX0KLQkJX21pbl9hcml0eSA9IG1pbl9hcml0eTsKLQkJX21heF9hcml0eSA9IG1heF9hcml0eTsKLQl9Ci0KLQkvKioKLQkgKiBTdXBwb3J0IGZvciBRTmFtZSBpbnRlcmZhY2UuCi0JICogCi0JICogQHJldHVybiBSZXN1bHQgb2YgUU5hbWUgb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBRTmFtZSBuYW1lKCkgewotCQlyZXR1cm4gX25hbWU7Ci0JfQotCi0JLyoqCi0JICogTWluaW1hbCBudW1iZXIgb2YgYWxsb3dlZCBhcmd1bWVudHMuCi0JICogCi0JICogQHJldHVybiBUaGUgc21hbGxlc3QgbnVtYmVyIG9mIGVyZ3VtZW50cyBwb3NzaWJsZQotCSAqLwotCXB1YmxpYyBpbnQgbWluX2FyaXR5KCkgewotCQlyZXR1cm4gX21pbl9hcml0eTsKLQl9Ci0KLQkvKioKLQkgKiBNYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBoaWdoZXN0IG51bWJlciBvZiBlcmd1bWVudHMgcG9zc2libGUKLQkgKi8KLQlwdWJsaWMgaW50IG1heF9hcml0eSgpIHsKLQkJcmV0dXJuIF9tYXhfYXJpdHk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFuIHRvIHRoZQotCSAqIAotCSAqIEBwYXJhbSBhY3R1YWxfYXJpdHkKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIGJvb2xlYW4gbWF0Y2hlc19hcml0eShpbnQgYWN0dWFsX2FyaXR5KSB7Ci0JCWlmIChhY3R1YWxfYXJpdHkgPCBtaW5fYXJpdHkoKSkgcmV0dXJuIGZhbHNlOwotCQlpZiAoYWN0dWFsX2FyaXR5ID4gbWF4X2FyaXR5KCkpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCS8qKgotCSAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHNpZ25hdHVyZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFNpZ25hdHVyZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHNpZ25hdHVyZSgpIHsKLQkJcmV0dXJuIHNpZ25hdHVyZSh0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyaXR5IGZyb20gc2lnbmF0dXJlLgotCSAqIAotCSAqIEBwYXJhbSBmCi0JICogICAgICAgICAgICBjdXJyZW50IGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gU2lnbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHNpZ25hdHVyZShGdW5jdGlvbiBmKSB7Ci0JCXJldHVybiBzaWduYXR1cmUoZi5uYW1lKCksIGYuaXNfdmFyYXJnKCkgPyAtMSA6IGYubWluX2FyaXR5KCkpOwotCX0KLQotCS8qKgotCSAqIEFwcGx5IHRoZSBuYW1lIGFuZCBhcml0eSB0byBzaWduYXR1cmUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gU2lnbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHNpZ25hdHVyZShRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJU3RyaW5nIG4gPSBuYW1lLmV4cGFuZGVkX25hbWUoKTsKLQkJaWYgKG4gPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCW4gKz0gIl8iOwotCi0JCWlmIChhcml0eSA8IDApCi0JCQluICs9ICJ4IjsKLQkJZWxzZQotCQkJbiArPSBhcml0eTsKLQotCQlyZXR1cm4gbjsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLQotCS8vIGNvbnZlcnQgYXJndW1lbnQgYWNjb3JkaW5nIHRvIHNlY3Rpb24gMy4xLjUgb2YgeHBhdGggMi4wIHNwZWMKLQkvKioKLQkgKiBDb252ZXJ0IHRoZSBpbnB1dCBhcmd1bWVudCBhY2NvcmRpbmcgdG8gc2VjdGlvbiAzLjEuNSBvZiBzcGVjaWZpY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEBwYXJhbSBleHBlY3RlZAotCSAqICAgICAgICAgICAgRXhwZWN0ZWQgU2VxdWVuY2UgdHlwZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBDb252ZXJ0ZWQgYXJndW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgY29udmVydF9hcmd1bWVudChvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgYXJnLAotCQkJU2VxVHlwZSBleHBlY3RlZCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdEJ1ZmZlciByZXN1bHQgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gWFhYOiBTaG91bGQgdXNlIHR5cGVfY2xhc3MgaW5zdGVhZCBhbmQgdXNlIGl0ZW0uZ2V0Q2xhc3MoKS5pc0Fzc2lnbmFibGVUbyhleHBlY3RlZC50eXBlX2NsYXNzKCkpCi0JCUFueVR5cGUgZXhwZWN0ZWRfdHlwZSA9IGV4cGVjdGVkLnR5cGUoKTsKLQotCQkvLyBleHBlY3RlZCBpcyBhdG9taWMKLQkJaWYgKGV4cGVjdGVkX3R5cGUgaW5zdGFuY2VvZiBBbnlBdG9taWNUeXBlKSB7Ci0JCQlBbnlBdG9taWNUeXBlIGV4cGVjdGVkX2FhdCA9IChBbnlBdG9taWNUeXBlKSBleHBlY3RlZF90eXBlOwotCQkJCi0JCQkvLyBhdG9taXplCi0JCQlvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgcnMgPSBGbkRhdGEuYXRvbWl6ZShhcmcpOwotCi0JCQkvLyBjYXN0IHVudHlwZWQgdG8gZXhwZWN0ZWQgdHlwZQotCQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJQW55VHlwZSBpdGVtID0gKEFueVR5cGUpIGkubmV4dCgpOwotCQkJCQotCQkJCWlmIChpdGVtIGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQkJCS8vIGNyZWF0ZSBhIG5ldyBpdGVtIG9mIHRoZSBleHBlY3RlZAotCQkJCQkvLyB0eXBlIGluaXRpYWxpemVkIHdpdGggZnJvbSB0aGUgc3RyaW5nCi0JCQkJCS8vIHZhbHVlIG9mIHRoZSBpdGVtCi0JCQkJCVJlc3VsdFNlcXVlbmNlIGNvbnZlcnRlZCA9IG51bGw7Ci0JCQkJCWlmIChleHBlY3RlZF9hYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgewotCQkJCQkgICBYU1N0cmluZyBzdHJUeXBlID0gbmV3IFhTU3RyaW5nKGl0ZW0uZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJCSAgIGNvbnZlcnRlZCA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHN0clR5cGUpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkgICBjb252ZXJ0ZWQgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhpdGVtKTsKLQkJCQkJfQotCQkJCQkKLQkJCQkJcmVzdWx0LmNvbmNhdChjb252ZXJ0ZWQpOwotCQkJCX0KLQkJCQkvLyB4czphbnlVUkkgcHJvbW90aW9uIHRvIHhzOnN0cmluZwotCQkJCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0FueVVSSSAmJiBleHBlY3RlZF9hYXQgaW5zdGFuY2VvZiBYU1N0cmluZykgewotCQkJCQlyZXN1bHQuYWRkKG5ldyBYU1N0cmluZyhpdGVtLmdldFN0cmluZ1ZhbHVlKCkpKTsKLQkJCQl9Ci0JCQkJLy8gbnVtZXJpYyB0eXBlIHByb21vdGlvbgotCQkJCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJCQlpZiAoZXhwZWN0ZWRfYWF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCQkJICBYU0RvdWJsZSBkb3VibGVUeXBlID0gbmV3IFhTRG91YmxlKGl0ZW0uZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJCSAgcmVzdWx0LmFkZChkb3VibGVUeXBlKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJICByZXN1bHQuYWRkKGl0ZW0pOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmVzdWx0LmFkZChpdGVtKTsKLQkJCQl9Ci0JCQl9Ci0JCQkvLyBkbyBzZXF1ZW5jZSB0eXBlIG1hdGNoaW5nIG9uIGNvbnZlcnRlZCBhcmd1bWVudHMKLQkJCXJldHVybiBleHBlY3RlZC5tYXRjaChyZXN1bHQuZ2V0U2VxdWVuY2UoKSk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBkbyBzZXF1ZW5jZSB0eXBlIG1hdGNoaW5nIG9uIGNvbnZlcnRlZCBhcmd1bWVudHMKLQkJCXJldHVybiBleHBlY3RlZC5tYXRjaChhcmcpOwotCQl9Ci0JfQotCi0JLy8gY29udmVydCBhcmd1bWVudHMKLQkvLyByZXR1cm5zIGNvbGxlY3Rpb24gb2YgYXJndW1lbnRzCi0JLyoqCi0JICogQ29udmVydCBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gZXhwZWN0ZWQKLQkgKiAgICAgICAgICAgIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBDb252ZXJ0ZWQgYXJndW1lbnRzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbiBjb252ZXJ0X2FyZ3VtZW50cyhDb2xsZWN0aW9uIGFyZ3MsCi0JCQlDb2xsZWN0aW9uIGV4cGVjdGVkKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJQ29sbGVjdGlvbiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpIDw9IGV4cGVjdGVkLnNpemUoKTsKLQotCQlJdGVyYXRvciBhcmdpID0gYXJncy5pdGVyYXRvcigpOwotCQlJdGVyYXRvciBleHBpID0gZXhwZWN0ZWQuaXRlcmF0b3IoKTsKLQotCQkvLyBjb252ZXJ0IGFsbCBhcmd1bWVudHMKLQkJd2hpbGUgKGFyZ2kuaGFzTmV4dCgpKSB7Ci0JCQlyZXN1bHQuYWRkKGNvbnZlcnRfYXJndW1lbnQoKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSkgYXJnaS5uZXh0KCksCi0JCQkJCShTZXFUeXBlKSBleHBpLm5leHQoKSkpOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFJlc3VsdFNlcXVlbmNlIGdldFJlc3VsdFNldEZvckFyaXR5WmVybyhFdmFsdWF0aW9uQ29udGV4dCBlYykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBycyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KCk7Ci0JCQotCQlJdGVtIGNvbnRleHRJdGVtID0gZWMuZ2V0Q29udGV4dEl0ZW0oKTsKLQkJaWYgKGNvbnRleHRJdGVtICE9IG51bGwpIHsKLQkJICAvLyBpZiBjb250ZXh0IGl0ZW0gaXMgZGVmaW5lZCwgdGhlbiB0aGF0IGlzIHRoZSBkZWZhdWx0IGFyZ3VtZW50Ci0JCSAgLy8gdG8gZm46c3RyaW5nIGZ1bmN0aW9uCi0JCSAgcnMuYWRkKG5ldyBYU1N0cmluZyhjb250ZXh0SXRlbS5nZXRTdHJpbmdWYWx1ZSgpKSk7Ci0JCX0gZWxzZSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY29udGV4dFVuZGVmaW5lZCgpOwotCQl9Ci0JCXJldHVybiByczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc192YXJhcmcoKSB7Ci0JCXJldHVybiBfbWluX2FyaXR5ICE9IF9tYXhfYXJpdHk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZSgpLmxvY2FsKCk7Ci0JfQotCi0JcHVibGljIGludCBnZXRNaW5Bcml0eSgpIHsKLQkJcmV0dXJuIG1pbl9hcml0eSgpOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0TWF4QXJpdHkoKSB7Ci0JCXJldHVybiBtYXhfYXJpdHkoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhcmlhYmxlQXJndW1lbnQoKSB7Ci0JCXJldHVybiB0aGlzLmlzX3ZhcmFyZygpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhbk1hdGNoQXJpdHkoaW50IGFjdHVhbEFyaXR5KSB7Ci0JCXJldHVybiBtYXRjaGVzX2FyaXR5KGFjdHVhbEFyaXR5KTsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0UmVzdWx0VHlwZSgpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19VTlRZUEVEOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRBcmd1bWVudFR5cGUoaW50IGluZGV4KSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5UWVBFRDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEFyZ3VtZW50TmFtZUhpbnQoaW50IGluZGV4KSB7Ci0JCXJldHVybiAiYXJndW1lbnRfIiAgKyBpbmRleDsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gY29tcHV0ZVJldHVyblR5cGUoQ29sbGVjdGlvbiBhcmdzLAotCQkJb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlN0YXRpY0NvbnRleHQgc2MpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19VTlRZUEVEOwotCX0KLQotCXB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbi8qPFJlc3VsdFNlcXVlbmNlPiovIGFyZ3MsCi0JCQlFdmFsdWF0aW9uQ29udGV4dCBldmFsdWF0aW9uQ29udGV4dCkgewotCQkKLQkJb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIHJlc3VsdCA9IGV2YWx1YXRlKGFyZ3MpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbkxpYnJhcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnVuY3Rpb25MaWJyYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZTI2NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbkxpYnJhcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDExIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDQ3MSAtIGltcHJvdmVtZW50cyB0byBmbjpzdHJpbmcgZnVuY3Rpb24gKHN1cHBvcnQgZm9yIGFyaXR5IDApCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlN0YXRpY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIENsYXNzIGZvciBGdW5jdGlvbiBMaWJyYXJ5IHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGdW5jdGlvbkxpYnJhcnkgaW1wbGVtZW50cyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRnVuY3Rpb25MaWJyYXJ5IHsKLQlwcml2YXRlIFN0cmluZyBfbmFtZXNwYWNlOwotCXByaXZhdGUgTWFwIF9mdW5jdGlvbnM7Ci0JcHJpdmF0ZSBTdGF0aWNDb250ZXh0IF9zYzsKLQlwcml2YXRlIER5bmFtaWNDb250ZXh0IF9kYzsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBGdW5jdGlvbkxpYnJhcnkuCi0JICogCi0JICogQHBhcmFtIG5zCi0JICogICAgICAgICAgICBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIEZ1bmN0aW9uTGlicmFyeShTdHJpbmcgbnMpIHsKLQkJX25hbWVzcGFjZSA9IG5zOwotCQlfZnVuY3Rpb25zID0gbmV3IEhhc2h0YWJsZSgpOwotCQlfc2MgPSBudWxsOwotCQlfZGMgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBmdW5jdGlvbiB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkX2Z1bmN0aW9uKEZ1bmN0aW9uIHgpIHsKLQkJeC5uYW1lKCkuc2V0X25hbWVzcGFjZShfbmFtZXNwYWNlKTsKLQkJX2Z1bmN0aW9ucy5wdXQoeC5zaWduYXR1cmUoKSwgeCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvciBub3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lIG9mIGZ1bmN0aW9uLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSB0ZXN0LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGZ1bmN0aW9uX2V4aXN0cyhRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJcmV0dXJuIGZ1bmN0aW9uKG5hbWUsIGFyaXR5KSAhPSBudWxsOwotCX0KLQotCS8qKgotCSAqIEZ1bmN0aW9uIHN1cHBvcnQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIFFOYW1lLgotCSAqIEBwYXJhbSBhcml0eQotCSAqICAgICAgICAgICAgYXJpdHkgb2YgdGhlIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4gVGhlIG5ldyBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgRnVuY3Rpb24gZnVuY3Rpb24oUU5hbWUgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCUZ1bmN0aW9uIGYgPSAoRnVuY3Rpb24pIF9mdW5jdGlvbnMuZ2V0KEZ1bmN0aW9uLnNpZ25hdHVyZShuYW1lLCBhcml0eSkpOwotCi0JCWlmIChmICE9IG51bGwgfHwgYXJpdHkgPT0gLTEpCi0JCQlyZXR1cm4gZjsKLQotCQkvLyBzZWUgaWYgd2UgZ290IGEgdmFyZyBvbmUKLQkJZiA9IGZ1bmN0aW9uKG5hbWUsIC0xKTsKLQotCQkvLyBub3BlCi0JCWlmIChmID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCWlmIChmLm1hdGNoZXNfYXJpdHkoYXJpdHkpKQotCQkJcmV0dXJuIGY7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogU3VwcG9ydCBmb3IgbmFtZXNwYWNlLgotCSAqIAotCSAqIEByZXR1cm4gTmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgbmFtZXNwYWNlKCkgewotCQlyZXR1cm4gX25hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgc3RhdGljIGNvbnRleHQgb24gZnVuY3Rpb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0X3N0YXRpY19jb250ZXh0KFN0YXRpY0NvbnRleHQgc2MpIHsKLQkJX3NjID0gc2M7Ci0JfQotCi0JLyoqCi0JICogU2V0IGR5bmFtaWMgY29udGV4dCBvbiBmdW5jdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfZHluYW1pY19jb250ZXh0KER5bmFtaWNDb250ZXh0IGRjKSB7Ci0JCV9kYyA9IGRjOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIFN0YXRpYyBjb250ZXh0LgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIHN0YXRpYyBjb250ZXh0LgotCSAqLwotCXB1YmxpYyBTdGF0aWNDb250ZXh0IHN0YXRpY19jb250ZXh0KCkgewotCQlyZXR1cm4gX3NjOwotCX0KLQotCS8qKgotCSAqIFN1cHBvcnQgZm9yIER5bmFtaWMgY29udGV4dC4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBkeW5hbWljIGNvbnRleHQuCi0JICovCi0JcHVibGljIER5bmFtaWNDb250ZXh0IGR5bmFtaWNfY29udGV4dCgpIHsKLQkJcmV0dXJuIF9kYzsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBmdW5jdGlvbkV4aXN0cyhTdHJpbmcgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCXJldHVybiBmdW5jdGlvbl9leGlzdHMobmV3IFFOYW1lKG51bGwsbmFtZSwgbmFtZXNwYWNlKCkpLCBhcml0eSk7Ci0JfQotCi0JcHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5GdW5jdGlvbiByZXNvbHZlRnVuY3Rpb24oCi0JCQlTdHJpbmcgbG9jYWxOYW1lLCBpbnQgYXJpdHkpIHsKLQotCQlyZXR1cm4gZnVuY3Rpb24obmV3IFFOYW1lKCJmIiwgbG9jYWxOYW1lLCBuYW1lc3BhY2UoKSksIGFyaXR5KTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vRnVuY3Rpb25MaWJyYXJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbkxpYnJhcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYjc0NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9GdW5jdGlvbkxpYnJhcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ0NzEgLSBpbXByb3ZlbWVudHMgdG8gZm46c3RyaW5nIGZ1bmN0aW9uIChzdXBwb3J0IGZvciBhcml0eSAwKQotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRnVuY3Rpb25MaWJyYXJ5OwotCi0vKioKLSAqIENsYXNzIGZvciBGdW5jdGlvbiBMaWJyYXJ5IHN1cHBvcnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBGdW5jdGlvbkxpYnJhcnlJbXBsIGltcGxlbWVudHMgRnVuY3Rpb25MaWJyYXJ5IHsKLQlwcml2YXRlIFN0cmluZyBfbmFtZXNwYWNlOwotCXByaXZhdGUgTWFwIF9mdW5jdGlvbnM7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRnVuY3Rpb25MaWJyYXJ5LgotCSAqIAotCSAqIEBwYXJhbSBucwotCSAqICAgICAgICAgICAgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBGdW5jdGlvbkxpYnJhcnlJbXBsKFN0cmluZyBucykgewotCQlfbmFtZXNwYWNlID0gbnM7Ci0JCV9mdW5jdGlvbnMgPSBuZXcgSGFzaE1hcCgpOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBmdW5jdGlvbiB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkRnVuY3Rpb24oRnVuY3Rpb24geCkgewotCQlfZnVuY3Rpb25zLnB1dChzaWduYXR1cmUoeCksIHgpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJpdHkgZnJvbSBzaWduYXR1cmUuCi0JICogCi0JICogQHBhcmFtIGYKLQkgKiAgICAgICAgICAgIGN1cnJlbnQgZnVuY3Rpb24uCi0JICogQHJldHVybiBTaWduYXR1cmUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNpZ25hdHVyZShGdW5jdGlvbiBmKSB7Ci0JCXJldHVybiBzaWduYXR1cmUoZi5nZXROYW1lKCksIGYuaXNWYXJpYWJsZUFyZ3VtZW50KCkgPyAtMSA6IGYuZ2V0TWluQXJpdHkoKSk7Ci0JfQotCi0JLyoqCi0JICogQXBwbHkgdGhlIG5hbWUgYW5kIGFyaXR5IHRvIHNpZ25hdHVyZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgUU5hbWUuCi0JICogQHBhcmFtIGFyaXR5Ci0JICogICAgICAgICAgICBhcml0eSBvZiB0aGUgZnVuY3Rpb24uCi0JICogQHJldHVybiBTaWduYXR1cmUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNpZ25hdHVyZShTdHJpbmcgbmFtZSwgaW50IGFyaXR5KSB7Ci0JCXJldHVybiBuYW1lICsgIl8iICsgKChhcml0eSA8IDApID8gIngiIDogYXJpdHkpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGZ1bmN0aW9uRXhpc3RzKFN0cmluZyBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJcmV0dXJuIHJlc29sdmVGdW5jdGlvbihuYW1lLCBhcml0eSkgIT0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbigKLQkJCVN0cmluZyBsb2NhbE5hbWUsIGludCBhcml0eSkgewotCi0JCUZ1bmN0aW9uIGYgPSAoRnVuY3Rpb24pIF9mdW5jdGlvbnMuZ2V0KHNpZ25hdHVyZShsb2NhbE5hbWUsIGFyaXR5KSk7Ci0KLQkJaWYgKGYgIT0gbnVsbCB8fCBhcml0eSA9PSAtMSkKLQkJCXJldHVybiBmOwotCi0JCS8vIHNlZSBpZiB3ZSBnb3QgYSB2YXJnIG9uZQotCQlmID0gKEZ1bmN0aW9uKSBfZnVuY3Rpb25zLmdldChzaWduYXR1cmUobG9jYWxOYW1lLCAtMSkpOwotCi0JCS8vIG5vcGUKLQkJaWYgKGYgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJaWYgKGYuY2FuTWF0Y2hBcml0eShhcml0eSkpCi0JCQlyZXR1cm4gZjsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIF9uYW1lc3BhY2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoRGl2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhEaXYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI1ODJmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhEaXYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIE1hdGhlbWF0aWNhbCBkaXZpc2lvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBNYXRoRGl2IHsKLQkvKioKLQkgKiBEaXZpc2lvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aElEaXYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aElEaXYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyZjBmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhJRGl2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBNYXRoZW1hdGljYWwgSW50ZWdlciBEaXZpc2lvbi4KLSAqLwotcHVibGljIGludGVyZmFjZSBNYXRoSURpdiB7Ci0JLyoqCi0JICogSW50ZWdlciBEaXZpc2lvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaWRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3I7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhNaW51cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoTWludXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIwMmE4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhNaW51cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgTWF0aGVtYXRpY2FsIFN1YnRyYWN0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hdGhNaW51cyB7Ci0JLyoqCi0JICogU3VidHJhY3Rpb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIGlucHV0IGFyZ3VtZW50LgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aE1vZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoTW9kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNDVlOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9NYXRoTW9kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBNYXRoZW1hdGljYWwgTW9kdWxhciBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0aE1vZCB7Ci0JLyoqCi0JICogTW9kdWxhciBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbW9kKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aFBsdXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aFBsdXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkxMjNjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhQbHVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBNYXRoZW1hdGljYWwgQWRkaXRpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0aFBsdXMgewotCS8qKgotCSAqIEFkZGl0aW9uIG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBpbnB1dCBhcmd1bWVudC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aFRpbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL01hdGhUaW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjQxYWQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vTWF0aFRpbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBNYXRoZW1hdGljYWwgTXVsdGlwbGljYXRpb24uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0aFRpbWVzIHsKLQkvKioKLQkgKiBNdWx0aXBsaWNhdGlvbiBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgaW5wdXQgYXJndW1lbnQuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEV4Y2VwdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcEV4Y2VwdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzcwMzkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BFeGNlcHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjg1MTQ1IC0gaW1wbGVtZW50IGZ1bGwgYXJpdHkgY2hlY2tpbmcKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLlNlcVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLk5vZGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5RTmFtZTsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBFeGNlcHQgb3BlcmF0aW9uIG9uIG5vZGUgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBPcEV4Y2VwdCBleHRlbmRzIEZ1bmN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uIF9leHBlY3RlZF9hcmdzID0gbnVsbDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBPcEV4Y2VwdC4KLQkgKi8KLQlwdWJsaWMgT3BFeGNlcHQoKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgiZXhjZXB0IiksIDIpOwotCX0KLQotCS8qKgotCSAqIEV2YWx1YXRlIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYXJndW1lbnQgZXhwcmVzc2lvbnMuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIGV2YWx1YXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGV2YWx1YXRlKENvbGxlY3Rpb24gYXJncywgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkV2YWx1YXRpb25Db250ZXh0IGVjKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJYXNzZXJ0IGFyZ3Muc2l6ZSgpID49IG1pbl9hcml0eSgpICYmIGFyZ3Muc2l6ZSgpIDw9IG1heF9hcml0eSgpOwotCi0JCXJldHVybiBvcF9leGNlcHQoYXJncyk7Ci0JfQotCi0JLyoqCi0JICogT3AtRXhjZXB0IG9wZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgUmVzdWx0IGZyb20gdGhlIGV4cHJlc3Npb25zIGV2YWx1YXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBEeW5hbWljIGVycm9yLgotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJlc3VsdFNlcXVlbmNlIG9wX2V4Y2VwdChDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gY29udmVydCBhcmd1bWVudHMKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3VtZW50cwotCQlJdGVyYXRvciBpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggbGFtZQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBvbmUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQotCQkJLy8gZGVhdGgKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHR3by5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlOb2RlVHlwZSBub2RlMiA9IChOb2RlVHlwZSkgai5uZXh0KCk7Ci0KLQkJCQlpZiAobm9kZS5ub2RlX3ZhbHVlKCkgPT0gbm9kZTIubm9kZV92YWx1ZSgpKSB7Ci0JCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0JCQlpZiAoIWZvdW5kKQotCQkJCXJzLmFkZChub2RlKTsKLQkJfQotCQlycyA9IE5vZGVUeXBlLmxpbmFyaXplKHJzKTsKLQotCQlyZXR1cm4gcnMuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCVNlcVR5cGUgc3QgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19TVEFSKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCX0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BGdW5jdGlvbkxpYnJhcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BGdW5jdGlvbkxpYnJhcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmMDIwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wRnVuY3Rpb25MaWJyYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb247Ci0KLS8vIHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgbGliYyA9RAotLyoqCi0gKiBNYWludGFpbnMgYSBsaWJyYXJ5IG9mIGJ1aWx0LWluIG9wZXJhdG9ycyBhcyBmdW5jdGlvbnMuCi0gKiAKLSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGlmIG5vcm1hbGl6YXRpb24gaXMgYmVpbmcgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIE9wRnVuY3Rpb25MaWJyYXJ5IGV4dGVuZHMgRnVuY3Rpb25MaWJyYXJ5SW1wbCB7Ci0KLQkvLyBYWFggc2hvdWxkIGJlIGludGVybmFsCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfT1BfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC14cXVlcnktc2VtYW50aWNzLTIwMDMwNTAyLyI7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3BGdW5jdGlvbkxpYnJhcnkuCi0JICovCi0JcHVibGljIE9wRnVuY3Rpb25MaWJyYXJ5KCkgewotCQlzdXBlcihYUEFUSF9PUF9OUyk7Ci0KLQkJLy8gb3BlcmF0b3JzIGFjY29yZGluZyB0byBmb3JtYWwgc2VtYW50aWNzCi0JCWFkZEZ1bmN0aW9uKG5ldyBGc0RpdigpKTsKLQkJYWRkRnVuY3Rpb24obmV3IEZzRXEoKSk7Ci0JCWFkZEZ1bmN0aW9uKG5ldyBGc0dlKCkpOwotCQlhZGRGdW5jdGlvbihuZXcgRnNHdCgpKTsKLQkJYWRkRnVuY3Rpb24obmV3IEZzSURpdigpKTsKLQkJYWRkRnVuY3Rpb24obmV3IEZzTGUoKSk7Ci0JCWFkZEZ1bmN0aW9uKG5ldyBGc0x0KCkpOwotCQlhZGRGdW5jdGlvbihuZXcgRnNNaW51cygpKTsKLQkJYWRkRnVuY3Rpb24obmV3IEZzTW9kKCkpOwotCQlhZGRGdW5jdGlvbihuZXcgRnNOZSgpKTsKLQkJYWRkRnVuY3Rpb24obmV3IEZzUGx1cygpKTsKLQkJYWRkRnVuY3Rpb24obmV3IEZzVGltZXMoKSk7Ci0KLQkJLy8gdXRpbGl0eSBmdW5jdGlvbnMgaW4gZm9ybWFsIHNlbWFudGljcwotCQlhZGRGdW5jdGlvbihuZXcgRnNDb252ZXJ0T3BlcmFuZCgpKTsKLQotCQkvLyBvcGVyYXRvcnMgYWNjb3JkaW5nIHRvIGZ1bmN0aW9ucyAmIG9wZXJhdG9ycwotCQlhZGRGdW5jdGlvbihuZXcgT3BFeGNlcHQoKSk7Ci0JCWFkZEZ1bmN0aW9uKG5ldyBPcEludGVyc2VjdCgpKTsKLQkJYWRkRnVuY3Rpb24obmV3IE9wVG8oKSk7Ci0JCWFkZEZ1bmN0aW9uKG5ldyBPcFVuaW9uKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BJbnRlcnNlY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvZnVuY3Rpb24vT3BJbnRlcnNlY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxNWI0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wSW50ZXJzZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gYnVnIDI4NTE0NSAtIGltcGxlbWVudCBmdWxsIGFyaXR5IGNoZWNraW5nCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5TZXFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci0KLS8qKgotICogU3VwcG9ydCBmb3IgSW50ZXJzZWN0IG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE9wSW50ZXJzZWN0IGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE9wSW50ZXJzZWN0LgotCSAqLwotCXB1YmxpYyBPcEludGVyc2VjdCgpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJpbnRlcnNlY3QiKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPj0gbWluX2FyaXR5KCkgJiYgYXJncy5zaXplKCkgPD0gbWF4X2FyaXR5KCk7Ci0KLQkJcmV0dXJuIG9wX2ludGVyc2VjdChhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPcC1JbnRlcnNlY3Qgb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb3BfaW50ZXJzZWN0KENvbGxlY3Rpb24gYXJncykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRCdWZmZXIgcnMgPSBuZXcgUmVzdWx0QnVmZmVyKCk7Ci0KLQkJLy8gY29udmVydCBhcmd1bWVudHMKLQkJQ29sbGVjdGlvbiBjYXJncyA9IEZ1bmN0aW9uLmNvbnZlcnRfYXJndW1lbnRzKGFyZ3MsIGV4cGVjdGVkX2FyZ3MoKSk7Ci0KLQkJLy8gZ2V0IGFyZ3VtZW50cwotCQlJdGVyYXRvciBpdGVyID0gY2FyZ3MuaXRlcmF0b3IoKTsKLQkJUmVzdWx0U2VxdWVuY2Ugb25lID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJUmVzdWx0U2VxdWVuY2UgdHdvID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQotCQkvLyBYWFggbGFtZQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBvbmUuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQotCQkJLy8gZGVhdGgKLQkJCWZvciAoSXRlcmF0b3IgaiA9IHR3by5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspIHsKLQkJCQlOb2RlVHlwZSBub2RlMiA9IChOb2RlVHlwZSkgai5uZXh0KCk7Ci0KLQkJCQlpZiAobm9kZS5ub2RlX3ZhbHVlKCkgPT0gbm9kZTIubm9kZV92YWx1ZSgpKSB7Ci0JCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0JCQlpZiAoZm91bmQpCi0JCQkJcnMuYWRkKG5vZGUpOwotCQl9Ci0JCXJzID0gTm9kZVR5cGUubGluYXJpemUocnMpOwotCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCX0KLQotCS8qKgotCSAqIE9idGFpbiBhIGxpc3Qgb2YgZXhwZWN0ZWQgYXJndW1lbnRzLgotCSAqIAotCSAqIEByZXR1cm4gUmVzdWx0IG9mIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBDb2xsZWN0aW9uIGV4cGVjdGVkX2FyZ3MoKSB7Ci0JCWlmIChfZXhwZWN0ZWRfYXJncyA9PSBudWxsKSB7Ci0JCQlfZXhwZWN0ZWRfYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkJU2VxVHlwZSBzdCA9IG5ldyBTZXFUeXBlKFNlcVR5cGUuT0NDX1NUQVIpOwotCi0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoc3QpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJfQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFRvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVG8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyZTYxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVG8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuUmFuZ2VSZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50ZWdlcjsKLQotLyoqCi0gKiBTdXBwb3J0IGZvciBUbyBvcGVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBPcFRvIGV4dGVuZHMgRnVuY3Rpb24gewotCXByaXZhdGUgc3RhdGljIENvbGxlY3Rpb24gX2V4cGVjdGVkX2FyZ3MgPSBudWxsOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE9wVG8uCi0JICovCi0JcHVibGljIE9wVG8oKSB7Ci0JCXN1cGVyKG5ldyBRTmFtZSgidG8iKSwgMik7Ci0JfQotCi0JLyoqCi0JICogRXZhbHVhdGUgYXJndW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhcmd1bWVudCBleHByZXNzaW9ucy4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2YgZXZhbHVhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgZXZhbHVhdGUoQ29sbGVjdGlvbiBhcmdzLCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRXZhbHVhdGlvbkNvbnRleHQgZWMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlhc3NlcnQgYXJncy5zaXplKCkgPT0gMjsKLQotCQkvLyBJdGVyYXRvciBpID0gYXJncy5pdGVyYXRvcigpOwotCi0JCS8vIHJldHVybiBvcF90byggKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKSwgKFJlc3VsdFNlcXVlbmNlKSBpLm5leHQoKSk7Ci0JCXJldHVybiBvcF90byhhcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBPcC1UbyBvcGVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIFJlc3VsdCBmcm9tIHRoZSBleHByZXNzaW9ucyBldmFsdWF0aW9uLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBvcF90byhDb2xsZWN0aW9uIGFyZ3MpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQkvLyBjb252ZXJ0IGFyZ3VtZW50cwotCQlDb2xsZWN0aW9uIGNhcmdzID0gRnVuY3Rpb24uY29udmVydF9hcmd1bWVudHMoYXJncywgZXhwZWN0ZWRfYXJncygpKTsKLQotCQkvLyBnZXQgYXJndW1lbnRzCi0JCUl0ZXJhdG9yIGl0ZXIgPSBjYXJncy5pdGVyYXRvcigpOwotCQlSZXN1bHRTZXF1ZW5jZSByID0gKFJlc3VsdFNlcXVlbmNlKSBpdGVyLm5leHQoKTsKLQkJaW50IG9uZSA9ICgoWFNJbnRlZ2VyKSByLmZpcnN0KCkpLmludF92YWx1ZSgpLmludFZhbHVlKCk7Ci0JCXIgPSAoUmVzdWx0U2VxdWVuY2UpIGl0ZXIubmV4dCgpOwotCQlpZiAoci5maXJzdCgpID09IG51bGwpIHsKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JCX0KLQkJaW50IHR3byA9ICgoWFNJbnRlZ2VyKSByLmZpcnN0KCkpLmludF92YWx1ZSgpLmludFZhbHVlKCk7Ci0KLQkJaWYgKG9uZSA+IHR3bykKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gaW5jbHVzaXZlIGZpcnN0IGFuZCBsYXN0Ci0JCWlmIChvbmUgPT0gdHdvKSB7Ci0JCQlyZXR1cm4gbmV3IFhTSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2Yob25lKSk7Ci0JCX0KLQkJLyoKLQkJICogZm9yKG9uZSsrOyBvbmUgPD0gdHdvOyBvbmUrKykgeyBycy5hZGQobmV3IFhTSW50ZWdlcihvbmUpKTsgfQotCQkgKiAKLQkJICogcmV0dXJuIHJzOwotCQkgKi8KLQkJcmV0dXJuIG5ldyBSYW5nZVJlc3VsdFNlcXVlbmNlKG9uZSwgdHdvKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCVNlcVR5cGUgc3QgPSBuZXcgU2VxVHlwZShuZXcgWFNJbnRlZ2VyKCkpOwotCi0JCQlfZXhwZWN0ZWRfYXJncy5hZGQoc3QpOwotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJfQotCQlyZXR1cm4gX2V4cGVjdGVkX2FyZ3M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC9mdW5jdGlvbi9PcFVuaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVW5pb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2Mzg1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL2Z1bmN0aW9uL09wVW5pb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODUxNDUgLSBpbXBsZW1lbnQgZnVsbCBhcml0eSBjaGVja2luZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuU2VxVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuTm9kZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotCi0vKioKLSAqIFN1cHBvcnQgZm9yIFVuaW9uIG9wZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE9wVW5pb24gZXh0ZW5kcyBGdW5jdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgQ29sbGVjdGlvbiBfZXhwZWN0ZWRfYXJncyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgT3BVbmlvbi4KLQkgKi8KLQlwdWJsaWMgT3BVbmlvbigpIHsKLQkJc3VwZXIobmV3IFFOYW1lKCJ1bmlvbiIpLCAyKTsKLQl9Ci0KLQkvKioKLQkgKiBFdmFsdWF0ZSBhcmd1bWVudHMuCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFyZ3VtZW50IGV4cHJlc3Npb25zLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgRHluYW1pYyBlcnJvci4KLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBldmFsdWF0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBldmFsdWF0ZShDb2xsZWN0aW9uIGFyZ3MsIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5FdmFsdWF0aW9uQ29udGV4dCBlYykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWFzc2VydCBhcmdzLnNpemUoKSA+PSBtaW5fYXJpdHkoKSAmJiBhcmdzLnNpemUoKSA8PSBtYXhfYXJpdHkoKTsKLQotCQlyZXR1cm4gb3BfdW5pb24oYXJncyk7Ci0JfQotCi0JLyoqCi0JICogT3AtVW5pb24gb3BlcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBSZXN1bHQgZnJvbSB0aGUgZXhwcmVzc2lvbnMgZXZhbHVhdGlvbi4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqICAgICAgICAgICAgIER5bmFtaWMgZXJyb3IuCi0JICogQHJldHVybiBSZXN1bHQgb2Ygb3BlcmF0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVzdWx0U2VxdWVuY2Ugb3BfdW5pb24oQ29sbGVjdGlvbiBhcmdzKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0QnVmZmVyIHJzID0gbmV3IFJlc3VsdEJ1ZmZlcigpOwotCi0JCS8vIGNvbnZlcnQgYXJndW1lbnRzCi0JCUNvbGxlY3Rpb24gY2FyZ3MgPSBGdW5jdGlvbi5jb252ZXJ0X2FyZ3VtZW50cyhhcmdzLCBleHBlY3RlZF9hcmdzKCkpOwotCi0JCS8vIGdldCBhcmd1bWVudHMKLQkJSXRlcmF0b3IgaXRlciA9IGNhcmdzLml0ZXJhdG9yKCk7Ci0JCVJlc3VsdFNlcXVlbmNlIG9uZSA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0JCVJlc3VsdFNlcXVlbmNlIHR3byA9IChSZXN1bHRTZXF1ZW5jZSkgaXRlci5uZXh0KCk7Ci0KLQkJLy8gWFhYIGkgZG9uJ3QgZmluayB1J3ZlIGV2ZXIgc2VlbiBhbnl0aGluZyBsYW1lciB0aGFuIHRoaXMKLQkJcnMuY29uY2F0KG9uZSk7Ci0JCXJzLmNvbmNhdCh0d28pOwotCQlycyA9IE5vZGVUeXBlLmxpbmFyaXplKHJzKTsKLQotCQlyZXR1cm4gcnMuZ2V0U2VxdWVuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBPYnRhaW4gYSBsaXN0IG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJlc3VsdCBvZiBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgQ29sbGVjdGlvbiBleHBlY3RlZF9hcmdzKCkgewotCQlpZiAoX2V4cGVjdGVkX2FyZ3MgPT0gbnVsbCkgewotCQkJX2V4cGVjdGVkX2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkJCVNlcVR5cGUgc3QgPSBuZXcgU2VxVHlwZShTZXFUeXBlLk9DQ19TVEFSKTsKLQotCQkJX2V4cGVjdGVkX2FyZ3MuYWRkKHN0KTsKLQkJCV9leHBlY3RlZF9hcmdzLmFkZChzdCk7Ci0JCX0KLQkJcmV0dXJuIF9leHBlY3RlZF9hcmdzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55QXRvbWljVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlBdG9taWNUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYmMwNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlBdG9taWNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLQotLyoqCi0gKiBDb21tb24gYmFzZSBmb3IgZXZlcnkgYXRvbWljIHR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFueUF0b21pY1R5cGUgZXh0ZW5kcyBBbnlTaW1wbGVUeXBlIHsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55U2ltcGxlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlTaW1wbGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYjZjOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BbnlTaW1wbGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLS8qKgotICogQ29tbW9uIGJhc2UgZm9yIGV2ZXJ5IHNpbXBsZSB0eXBlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBbnlTaW1wbGVUeXBlIGV4dGVuZHMgQW55VHlwZSB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0FueVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjMxZDE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQW55VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTEgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLlNpbmdsZUl0ZW1TZXF1ZW5jZTsKLQotLyoqCi0gKiBDb21tb24gYmFzZSBmb3IgZXZlcnkgdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW55VHlwZSBpbXBsZW1lbnRzIFNpbmdsZUl0ZW1TZXF1ZW5jZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGF0eXBlRmFjdG9yeSBfZGF0YXR5cGVGYWN0b3J5OwotCXN0YXRpYyB7Ci0JCXRyeSB7Ci0JCQlfZGF0YXR5cGVGYWN0b3J5ID0gRGF0YXR5cGVGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKERhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IGluaXRpYWxpemUgWE1MIGRhdGF0eXBlcyIsIGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIERhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgc3RyaW5nX3R5cGUoKTsKLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyB0ZXh0IHJlcHJlc2VudGF0aW9uCi0JICogCi0JICogQHJldHVybiBWYWx1ZSBhcyBhIHN0cmluZwotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKTsKLQkKLQlwdWJsaWMgU3RyaW5nIHN0cmluZ192YWx1ZSgpIHsKLQkJcmV0dXJuIGdldFN0cmluZ1ZhbHVlKCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlICJuZXcgc3R5bGUiIG9mIFR5cGVEZWZpbml0aW9uIGZvciB0aGlzIGl0ZW0uCi0JICogCi0JICogQHJldHVybiBUeXBlIGRlZmluaXRpb24gKHBvc3NpYmx5IGJhY2tlZCBieSBhIHNjaGVtYSB0eXBlKQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpOwotCi0JcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIEl0ZXJhdG9yPEl0ZW0+IGl0ZXJhdG9yKCkgewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgoSXRlbSl0aGlzKS5pdGVyYXRvcigpOwotCX0KLQkKLQlwdWJsaWMgSXRlbVR5cGUgZ2V0SXRlbVR5cGUoKSB7Ci0JCXJldHVybiBuZXcgU2ltcGxlQXRvbWljSXRlbVR5cGVJbXBsKGdldFR5cGVEZWZpbml0aW9uKCkpOwotCX0KLQkKLQlhYnN0cmFjdCBwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCk7Ci0JCi0JcHVibGljIGludCBzaXplKCkgewotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwdWJsaWMgSXRlbSBpdGVtKGludCBpbmRleCkgewotCQljaGVja0lPT0IoaW5kZXgpOwotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tJT09CKGludCBpbmRleCkgewotCQlpZiAoaW5kZXggIT0gMCkgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4IG91dCBvZiBib3VuZHMsIGluZGV4ID0gIiArIGluZGV4ICsgIiwgbGVuZ3RoID0gMSIpOwotCX0KLQotCXB1YmxpYyBPYmplY3QgdmFsdWUoaW50IGluZGV4KSB7Ci0JCWNoZWNrSU9PQihpbmRleCk7Ci0JCXJldHVybiBnZXROYXRpdmVWYWx1ZSgpOwotCX0KLQlwdWJsaWMgSXRlbVR5cGUgaXRlbVR5cGUoaW50IGluZGV4KSB7Ci0JCWNoZWNrSU9PQihpbmRleCk7Ci0JCXJldHVybiBnZXRJdGVtVHlwZSgpOwotCX0KLQkKLQlwdWJsaWMgQW55VHlwZSBmaXJzdCgpIHsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JcHVibGljIE9iamVjdCBmaXJzdFZhbHVlKCkgewotCQlyZXR1cm4gdGhpcy5nZXROYXRpdmVWYWx1ZSgpOwotCX0KLQotCXB1YmxpYyBJdGVtVHlwZSBzZXF1ZW5jZVR5cGUoKSB7Ci0JCXJldHVybiBuZXcgU2ltcGxlQXRvbWljSXRlbVR5cGVJbXBsKGdldFR5cGVEZWZpbml0aW9uKCksIEl0ZW1UeXBlLk9DQ1VSUkVOQ0VfT05FKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0F0dHJUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0F0dHJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMDQ0YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9BdHRyVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUvZWxlbWVudCBub2RlcyAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI4MTE1OSAtIHdlIHdlcmUgbWlzc2luZyBvdXQgb24gcXVhbGlmaWVkIGF0dHJpYnV0ZXMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gYnVnIDI4MTE4NiAtIGltcGxlbWVudGF0aW9uIG9mIGZuOmlkIGFuZCBmbjppZHJlZgotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4OTMwNCAtIGZpeGUgc2NoZW1hIGF3YXJuZXNzIG9mIHR5cGVzIG9uIGF0dHJpYnV0ZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKiAgICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMjM5MDAgLSBpbXByb3ZpbmcgY29tcHV0aW5nIHRoZSB0eXBlZCB2YWx1ZSBvZiBlbGVtZW50ICYKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIHNjaGVtYSB0eXBlIG9mIG5vZGVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2ltcGxlLCB3aXRoIHZhcmlldGllcyAnbGlzdCcgYW5kICd1bmlvbicuICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5UeXBlSW5mbzsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBBdHRyaWJ1dGVUeXBlIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBBdHRyVHlwZSBleHRlbmRzIE5vZGVUeXBlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFID0gImF0dHJpYnV0ZSI7Ci0JQXR0ciBfdmFsdWU7Ci0KLQkvLyBjb25zdHJ1Y3RvciBvbmx5IHVzZWZ1bGwgZm9yIHN0cmluZ190eXBlKCkKLQkvLyBYWFggbmVlZHMgdG8gYmUgZml4ZWQgaW4gZnV0dXJlCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBBdHRyVHlwZSgpIHsKLQkJdGhpcyhudWxsLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZSBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBBdHRyVHlwZShBdHRyIHYsIFR5cGVNb2RlbCB0bSkgewotCQlzdXBlcih2LCB0bSk7Ci0JCV92YWx1ZSA9IHY7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJhdHRyaWJ1dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gQVRUUklCVVRFOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgYmVpbmcgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXRWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCVR5cGVEZWZpbml0aW9uIHR5cGVEZWYgPSBnZXRUeXBlKCk7Ci0KLQkJaWYgKHR5cGVEZWYgIT0gbnVsbCkgewotCQkJTGlzdC8qPFNob3J0PiovIHR5cGVzID0gdHlwZURlZi5nZXRTaW1wbGVUeXBlcyhfdmFsdWUpOwotIAkJICAgIHJldHVybiBnZXRYRE1UeXBlZFZhbHVlKHR5cGVEZWYsIHR5cGVzKTsKLQkJfQotCQllbHNlIHsKLQkJICAgcmV0dXJuIG5ldyBYU1VudHlwZWRBdG9taWMoZ2V0U3RyaW5nVmFsdWUoKSk7ICAKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgbm9kZQotCSAqIAotCSAqIEByZXR1cm4gTmFtZSBvZiB0aGUgbm9kZQotCSAqLwotCXB1YmxpYyBRTmFtZSBub2RlX25hbWUoKSB7Ci0JCVFOYW1lIG5hbWUgPSBuZXcgUU5hbWUoX3ZhbHVlLmdldFByZWZpeCgpLCBfdmFsdWUuZ2V0TG9jYWxOYW1lKCksCi0JCQkJX3ZhbHVlLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBvZiB0eXBlIElECi0JICogQHNpbmNlIDEuMTsKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0lEKCkgewotCQlyZXR1cm4gaXNBdHRyVHlwZShTQ0hFTUFfVFlQRV9JRCk7Ci0JfQotCQotCS8qKgotCSAqIAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gaXNBdHRyVHlwZShTQ0hFTUFfVFlQRV9JRFJFRik7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzQXR0clR5cGUoU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCWlmIChfdmFsdWUuZ2V0T3duZXJEb2N1bWVudCgpLmlzU3VwcG9ydGVkKCJDb3JlIiwgIjMuMCIpKSB7Ci0JCQlyZXR1cm4gdHlwZUluZm8odHlwZU5hbWUpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIHR5cGVJbmZvKFN0cmluZyB0eXBlTmFtZSkgewotCQlUeXBlSW5mbyB0eXBlSW5mbyA9IF92YWx1ZS5nZXRTY2hlbWFUeXBlSW5mbygpOwotCQlyZXR1cm4gaXNUeXBlKHR5cGVJbmZvLCB0eXBlTmFtZSk7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1VOVFlQRURBVE9NSUM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9DYWxlbmRhclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ2FsZW5kYXJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMDUxOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9DYWxlbmRhclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMjYyNzY1IC0gZml4IHR5cGUgdGVzdHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLS8vIGNvbW1vbiBiYXNlIGZvciBhbnl0aGluZyB0aGF0IHVzZXMgYSBjYWxlbmRhci4uLiBiYXNpY2FsbHkgc3R1ZmYgZG9pbmcgd2l0aAotLy8gdGltZS4uLiBob3BlZnVsbHkgaW4gdGhlIGZ1dHVyZSB0aGlzIG1heSBiZSBmYWN0b3JlZCBvdXQgaGVyZQotLyoqCi0gKiBDb21tb24gYmFzZSBmb3IgYWxsIENhbGVuZGFyIGJhc2VkIGNsYXNzZXMKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIENhbGVuZGFyVHlwZSBleHRlbmRzIEN0clR5cGUgewotCi0JcHVibGljIGFic3RyYWN0IENhbGVuZGFyIGNhbGVuZGFyKCk7Ci0JCi0JcHVibGljIENhbGVuZGFyIG5vcm1hbGl6ZUNhbGVuZGFyKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0aW1lem9uZSkgewotCQlDYWxlbmRhciBhZGp1c3RlZCA9IChDYWxlbmRhcikgY2FsLmNsb25lKCk7Ci0JCQotCQlpZiAodGltZXpvbmUgIT0gbnVsbCkgewotCQkJaW50IGhvdXJzID0gdGltZXpvbmUuaG91cnMoKTsKLQkJCWludCBtaW51dGVzID0gdGltZXpvbmUubWludXRlcygpOwotCQkJaWYgKCF0aW1lem9uZS5uZWdhdGl2ZSgpKSB7Ci0JCQkJaG91cnMgKj0gLTE7Ci0JCQkJbWludXRlcyAqPSAtMTsKLQkJCX0KLQkJCWFkanVzdGVkLmFkZChDYWxlbmRhci5IT1VSX09GX0RBWSwgaG91cnMpOwotCQkJYWRqdXN0ZWQuYWRkKENhbGVuZGFyLk1JTlVURSwgbWludXRlcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBhZGp1c3RlZDsKLQkJCi0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55VHlwZSBhYXQpIHsKLQkJaWYgKCEgKGFhdCBpbnN0YW5jZW9mIEFueUF0b21pY1R5cGUpKSByZXR1cm4gZmFsc2U7Ci0JCi0JCVN0cmluZyB0eXBlID0gYWF0LnN0cmluZ190eXBlKCk7Ci0JCWlmICh0eXBlLmVxdWFscygieHM6Z01vbnRoRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnTW9udGgiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhck1vbnRoIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROYXRpdmVWYWx1ZSgpIHsKLQkJcmV0dXJuIF9kYXRhdHlwZUZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKWNhbGVuZGFyKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ29tbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ29tbWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODViZDFmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0NvbW1lbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDb21tZW50VHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgQ29tbWVudFR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlQgPSAiY29tbWVudCI7Ci0JcHJpdmF0ZSBDb21tZW50IF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2UgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHYKLQkgKiAgICAgICAgICAgIFRoZSBjb21tZW50IGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIENvbW1lbnRUeXBlKENvbW1lbnQgdiwgVHlwZU1vZGVsIHRtKSB7Ci0JCXN1cGVyKHYsIHRtKTsKLQkJX3ZhbHVlID0gdjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gImNvbW1lbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gQ09NTUVOVDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1lbnQgYmVpbmcgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXROb2RlVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGNvbW1lbnQgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgY29tbWVudCBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCXJldHVybiBuZXcgWFNTdHJpbmcoX3ZhbHVlLmdldERhdGEoKSk7Ci0JfQotCi0JLyoqCi0JICogVW5zdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIG5vZGUuCi0JICogCi0JICogQHJldHVybiBudWxsCi0JICovCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5UWVBFREFUT01JQzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0N0clR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ3RyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNlZGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvQ3RyVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3RyVHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ3RyVHlwZSBleHRlbmRzIEFueUF0b21pY1R5cGUgewotCS8vIHVzZWQgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwotCS8vIGFyZyBpcyBlaXRoZXIgZW1wdHkgc2VxdWVuY2UsIG9yIDEgYW55YXRvbWljdHlwZQotCS8qKgotCSAqIFVzZWQgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIEVpdGhlciBhbiBlbXB0eSBzZXF1ZW5jZSBvciAxIGF0b21pYyB0eXBlCi0JICogQHJldHVybiBUaGUgcmVzdWx0aW5nIFJlc3VsdFNlcXVlbmNlCi0JICovCi0JcHVibGljIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3I7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHR5cGVfbmFtZSgpOwotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBzdHJpbmdfdmFsdWUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL0RvY1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRG9jVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjhjN2M0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRG9jVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERvY3VtZW50VHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgRG9jVHlwZSBleHRlbmRzIE5vZGVUeXBlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVU1FTlQgPSAiZG9jdW1lbnQiOwotCXByaXZhdGUgRG9jdW1lbnQgX3ZhbHVlOwotCXByaXZhdGUgU3RyaW5nIF9zdHJpbmdfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIGRvY3VtZW50IGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIERvY1R5cGUoRG9jdW1lbnQgdiwgVHlwZU1vZGVsIHRtKSB7Ci0JCXN1cGVyKHYsIHRtKTsKLQkJX3ZhbHVlID0gdjsKLQkJX3N0cmluZ192YWx1ZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZG9jdW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEFjdHVhbCBkb2N1bWVudCBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBEb2N1bWVudCB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRvY3VtZW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIERPQ1VNRU5UOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGJlaW5nIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCS8vIFhYWCBjYWNoaW5nCi0JCWlmIChfc3RyaW5nX3ZhbHVlID09IG51bGwpCi0JCQlfc3RyaW5nX3ZhbHVlID0gRWxlbWVudFR5cGUudGV4dG5vZGVfc3RyaW5ncyhfdmFsdWUpOwotCi0JCXJldHVybiBfc3RyaW5nX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG9jdW1lbnQgYmVpbmcgc3RvcmVkCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQkvLyBYWFggbm8gcHN2aQotCQlyZXR1cm4gbmV3IFhTVW50eXBlZEF0b21pYyhnZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICovCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0lEUkVGKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19VTlRZUEVEOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9FbGVtZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9FbGVtZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWI0NzM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvRWxlbWVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc2MTM0IC0gaW1wcm92ZW1lbnRzIHRvIHNjaGVtYSBhd2FyZSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0cmlidXRlL2VsZW1lbnQgbm9kZXMKLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODkzMDQgLSBmaXggc2NoZW1hIGF3YXJuZXNzIG9mIHR5cGVzIG9uIGVsZW1lbnRzCi0gKiAgICAgSmVzcGVyIE1vbGxlciAtIGJ1ZyAyOTc5NTggLSBGaXggZm46bmlsbGVkIGZvciBlbGVtZW50cwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzIzOTAwIC0gaW1wcm92aW5nIGNvbXB1dGluZyB0aGUgdHlwZWQgdmFsdWUgb2YgZWxlbWVudCAmCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIHNjaGVtYSB0eXBlIG9mIG5vZGVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4gCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uUFNWSUVsZW1lbnROU0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLWltcG9ydCBvcmcudzNjLmRvbS5UeXBlSW5mbzsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBFbGVtZW50VHlwZSBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgRWxlbWVudFR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlQgPSAiZWxlbWVudCI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX0lOU1RBTkNFID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTklMX0FUVFJJQlVURSA9ICJuaWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUlVFX1ZBTFVFID0gInRydWUiOwotCi0JcHJpdmF0ZSBFbGVtZW50IF92YWx1ZTsKLQotCXByaXZhdGUgU3RyaW5nIF9zdHJpbmdfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBhIG51bGwgZWxlbWVudAotCSAqLwotCXB1YmxpYyBFbGVtZW50VHlwZSgpIHsKLQkJdGhpcyhudWxsLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gdgotCSAqICAgICAgICAgICAgVGhlIGVsZW1lbnQgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFR5cGUoRWxlbWVudCB2LCBUeXBlTW9kZWwgdG0pIHsKLQkJc3VwZXIodiwgdG0pOwotCQlfdmFsdWUgPSB2OwotCi0JCV9zdHJpbmdfdmFsdWUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGVsZW1lbnQgdmFsdWUgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEFjdHVhbCBlbGVtZW50IHZhbHVlIGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIEVsZW1lbnQgdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJlbGVtZW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIEVMRU1FTlQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGJlaW5nIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGJlaW5nIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCS8vIFhYWCBjYW4gd2UgY2FjaGUgPwotCQlpZiAoX3N0cmluZ192YWx1ZSAhPSBudWxsKQotCQkJcmV0dXJuIF9zdHJpbmdfdmFsdWU7Ci0KLQkJX3N0cmluZ192YWx1ZSA9IHRleHRub2RlX3N0cmluZ3MoX3ZhbHVlKTsKLQotCQlyZXR1cm4gX3N0cmluZ192YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudCBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCQotCQlUeXBlRGVmaW5pdGlvbiB0eXBlRGVmID0gZ2V0VHlwZSgpOwotCi0JCWlmICh0eXBlRGVmICE9IG51bGwpIHsKLQkJCWlmICghaXNOaWxsZWQoX3ZhbHVlKSkgewotCQkJCWlmICh0eXBlRGVmICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIGdldFhETVR5cGVkVmFsdWUodHlwZURlZiwgdHlwZURlZi5nZXRTaW1wbGVUeXBlcyhfdmFsdWUpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCXJldHVybiBuZXcgWFNVbnR5cGVkQXRvbWljKGdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBuZXcgWFNVbnR5cGVkQXRvbWljKGdldFN0cmluZ1ZhbHVlKCkpOwotCQl9Ci0JCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTmlsbGVkKEVsZW1lbnQgX3ZhbHVlMikgewotCQlyZXR1cm4gVFJVRV9WQUxVRS5lcXVhbHMoX3ZhbHVlMi5nZXRBdHRyaWJ1dGVOUyhTQ0hFTUFfSU5TVEFOQ0UsIE5JTF9BVFRSSUJVVEUpKTsKLQl9Ci0KLQkvLyByZWN1cnNpdmVseSBjb25jYXRlbmF0ZSBUZXh0Tm9kZSBzdHJpbmdzCi0JLyoqCi0JICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgVGV4dE5vZGUgc3RyaW5ncwotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICBOb2RlIHRvIHJlY3Vyc2UKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBzdXBwbGllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRleHRub2RlX3N0cmluZ3MoTm9kZSBub2RlKSB7Ci0JCVN0cmluZyByZXN1bHQgPSAiIjsKLQotCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuVEVYVF9OT0RFKSB7Ci0JCQlUZXh0IHRuID0gKFRleHQpIG5vZGU7Ci0JCQlyZXN1bHQgKz0gdG4uZ2V0RGF0YSgpOwotCQl9Ci0KLQkJTm9kZUxpc3QgbmwgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihyZXN1bHQpOwotCQkvLyBjb25jYXRlbmF0ZSBjaGlsZHJlbgotCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCU5vZGUgbiA9IG5sLml0ZW0oaSk7Ci0KLQkJCWJ1Zi5hcHBlbmQodGV4dG5vZGVfc3RyaW5ncyhuKSk7Ci0JCX0KLQotCQlyZXN1bHQgPSBidWYudG9TdHJpbmcoKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICovCi0JcHVibGljIFFOYW1lIG5vZGVfbmFtZSgpIHsKLQkJUU5hbWUgbmFtZSA9IG5ldyBRTmFtZShfdmFsdWUuZ2V0UHJlZml4KCksIF92YWx1ZS5nZXRMb2NhbE5hbWUoKSwgX3ZhbHVlLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbmlsbGVkKCkgewotCi0JCWlmIChfdmFsdWUgaW5zdGFuY2VvZiBQU1ZJRWxlbWVudE5TSW1wbCkgewotCQkJUFNWSUVsZW1lbnROU0ltcGwgcHN2aUVsZW1lbnQgPSAoUFNWSUVsZW1lbnROU0ltcGwpIF92YWx1ZTsKLQkJCXJldHVybiBYU0Jvb2xlYW4udmFsdWVPZihwc3ZpRWxlbWVudC5nZXROaWwoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gWFNCb29sZWFuLkZBTFNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0JCXJldHVybiBpc0VsZW1lbnRUeXBlKFNDSEVNQV9UWVBFX0lEKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGlzRWxlbWVudFR5cGUoU0NIRU1BX1RZUEVfSURSRUYpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGlzRWxlbWVudFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCVR5cGVJbmZvIHR5cGVJbmZvID0gX3ZhbHVlLmdldFNjaGVtYVR5cGVJbmZvKCk7Ci0JCXJldHVybiBpc1R5cGUodHlwZUluZm8sIHR5cGVOYW1lKTsKLQl9Ci0JCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1VOVFlQRUQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Ob2RlSXRlbVR5cGVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL05vZGVJdGVtVHlwZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiMmY3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL05vZGVJdGVtVHlwZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLk5vZGVJdGVtVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIE5vZGVJdGVtVHlwZUltcGwgaW1wbGVtZW50cyBOb2RlSXRlbVR5cGUgewotCi0JcHVibGljIE5vZGVJdGVtVHlwZUltcGwoc2hvcnQgb2NjdXJyZW5jZSwgc2hvcnQgbm9kZVR5cGUpIHsKLQkJdGhpcyhvY2N1cnJlbmNlLCBub2RlVHlwZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIE5vZGVJdGVtVHlwZUltcGwoc2hvcnQgbm9kZVR5cGUpIHsKLQkJdGhpcyhPQ0NVUlJFTkNFX09ORSwgbm9kZVR5cGUsIG51bGwsIG51bGwsIHRydWUpOwotCX0KLQotCXB1YmxpYyBOb2RlSXRlbVR5cGVJbXBsKHNob3J0IG9jY3VycmVuY2UsCi0JCQlzaG9ydCBub2RlVHlwZSwKLQkJCVR5cGVEZWZpbml0aW9uIHR5cGVEZWZpbml0aW9uLCAKLQkJCVFOYW1lIG5hbWUsCi0JCQlib29sZWFuIHdpbGRjYXJkKSB7Ci0JCXRoaXMub2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7Ci0JCXRoaXMudHlwZURlZmluaXRpb24gPSB0eXBlRGVmaW5pdGlvbjsKLQkJdGhpcy5ub2RlVHlwZSA9IG5vZGVUeXBlOwotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLndpbGRjYXJkID0gd2lsZGNhcmQ7Ci0JfQotCi0JcHJpdmF0ZSBmaW5hbCBzaG9ydCBvY2N1cnJlbmNlOwotCXByaXZhdGUgZmluYWwgVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb247Ci0JcHJpdmF0ZSBmaW5hbCBzaG9ydCBub2RlVHlwZTsKLQlwcml2YXRlIGZpbmFsIFFOYW1lIG5hbWU7Ci0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIHdpbGRjYXJkOwotCi0JcHVibGljIHNob3J0IGdldE9jY3VycmVuY2UoKSB7Ci0JCXJldHVybiBvY2N1cnJlbmNlOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIHR5cGVEZWZpbml0aW9uOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV2lsZGNhcmQoKSB7Ci0JCXJldHVybiB3aWxkY2FyZDsKLQl9Ci0KLQlwdWJsaWMgUU5hbWUgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIHNob3J0IGdldE5vZGVUeXBlKCkgewotCQlyZXR1cm4gbm9kZVR5cGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL05vZGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL05vZGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZWM3NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9Ob2RlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTEgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzYxMzQgLSBpbXByb3ZlbWVudHMgdG8gc2NoZW1hIGF3YXJlIHByaW1pdGl2ZSB0eXBlIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZS9lbGVtZW50IG5vZGVzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKS0gYnVnIDI3Nzc3NCAtIFhTRGVjaW1hbCByZXR1cm5pbmcgd3JvbmcgdmFsdWVzLgotICogICAgIEplc3BlciBNb2xsZXIgLSBidWcgMjc1NjEwIC0gQXZvaWQgYmlnIHRpbWUgYW5kIG1lbW9yeSBvdmVyaGVhZCBmb3IgZXh0ZXJuYWxzCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODExODYgLSBpbXBsZW1lbnRhdGlvbiBvZiBmbjppZCBhbmQgZm46aWRyZWYKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4OTMwNCAtIGZpeGVkIHNjaGVtYSBhd2FyZW5lc3Mgb24gZWxlbWVudHMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzE4MzEzIC0gaW1wcm92ZW1lbnRzIHRvIGNvbXB1dGF0aW9uIG9mIHR5cGVkIHZhbHVlcyBvZiBub2RlcywKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB2YWxpZGF0ZWQgYnkgWE1MIFNjaGVtYSBwcmltaXRpdmUgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzIzOTAwIC0gaW1wcm92aW5nIGNvbXB1dGluZyB0aGUgdHlwZWQgdmFsdWUgb2YgZWxlbWVudCAmCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIHNjaGVtYSB0eXBlIG9mIG5vZGVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlByaW1pdGl2ZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5Qc3ljaG9QYXRoVHlwZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVHlwZUluZm87Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiBhIE5vZGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE5vZGVUeXBlIGV4dGVuZHMgQW55VHlwZSB7Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BX1RZUEVfSURSRUYgPSAiSURSRUYiOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV9UWVBFX0lEID0gIklEIjsKLQlwcml2YXRlIE5vZGUgX25vZGU7Ci0JcHJvdGVjdGVkIFR5cGVNb2RlbCBfdHlwZU1vZGVsOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBDb21wYXJhdG9yIE5PREVfQ09NUEFSQVRPUiA9IG5ldyBDb21wYXJhdG9yKCkgewotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCXJldHVybiBjb21wYXJlX25vZGUoKE5vZGVUeXBlKW8xLCAoTm9kZVR5cGUpbzIpOwotCQl9Ci0JfTsKLQkKLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqICAgICAgICAgICAgVGhlIE5vZGUgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKiBAcGFyYW0gZG9jdW1lbnRfb3JkZXIKLQkgKiAgICAgICAgICAgIFRoZSBkb2N1bWVudCBvcmRlcgotCSAqLwotCXB1YmxpYyBOb2RlVHlwZShOb2RlIG5vZGUsIFR5cGVNb2RlbCB0bSkgewotCQlfbm9kZSA9IG5vZGU7Ci0JCV90eXBlTW9kZWwgPSB0bTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkCi0JICogCi0JICogQHJldHVybiBBY3R1YWwgbm9kZSBiZWluZyByZXByZXNlbnRlZAotCSAqLwotCXB1YmxpYyBOb2RlIG5vZGVfdmFsdWUoKSB7Ci0JCXJldHVybiBfbm9kZTsKLQl9Ci0KLQkvLyBBY2Nlc3NvcnMgZGVmaW5lZCBpbiBYUGF0aCBEYXRhIG1vZGVsCi0JLy8gaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgtZGF0YW1vZGVsLwotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG5vZGUgYmVpbmcgcmVwcmVzZW50ZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEFjdHVhbCBub2RlIGJlaW5nIHJlcHJlc2VudGVkCi0JICovCi0JcHVibGljIGFic3RyYWN0IFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBub2RlCi0JICovCi0JcHVibGljIGFic3RyYWN0IFFOYW1lIG5vZGVfbmFtZSgpOyAvLyBtYXkgcmV0dXJuIG51bGwgWyJlbXB0eSBzZXF1ZW5jZSJdCi0KLQkvLyBYWFggZWxlbWVudCBzaG91bGQgb3ZlcnJpZGUKLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbmlsbGVkKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoKTsKLQl9Ci0KLQkvLyBhIGxpdHRsZSBmYWN0b3J5IGZvciBjb252ZXJ0aW5nIGZyb20gRE9NIHRvIG91ciByZXByZXNlbnRhdGlvbgotCXB1YmxpYyBzdGF0aWMgTm9kZVR5cGUgZG9tX3RvX3hwYXRoKE5vZGUgbm9kZSwgVHlwZU1vZGVsIHRtKSB7Ci0JCWFzc2VydCBub2RlICE9IG51bGw7Ci0JCQotCQlzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkgewotCQljYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgotCQkJcmV0dXJuIG5ldyBFbGVtZW50VHlwZSgoRWxlbWVudCkgbm9kZSwgdG0pOwotCi0JCWNhc2UgTm9kZS5DT01NRU5UX05PREU6Ci0JCQlyZXR1cm4gbmV3IENvbW1lbnRUeXBlKChDb21tZW50KSBub2RlLCB0bSk7Ci0KLQkJY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFOgotCQkJcmV0dXJuIG5ldyBBdHRyVHlwZSgoQXR0cikgbm9kZSwgdG0pOwotCi0JCWNhc2UgTm9kZS5URVhUX05PREU6Ci0JCWNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREU6Ci0JCQlyZXR1cm4gbmV3IFRleHRUeXBlKChUZXh0KSBub2RlLCB0bSk7Ci0KLQkJY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6Ci0JCQlyZXR1cm4gbmV3IERvY1R5cGUoKERvY3VtZW50KSBub2RlLCB0bSk7Ci0KLQkJY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLQkJCXJldHVybiBuZXcgUElUeXBlKChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pIG5vZGUsIHRtKTsKLQotCQkJLy8gWFhYCi0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQgZmFsc2U7Ci0KLQkJfQotCi0JCS8vIHVucmVhY2guLi4gaG9wZWZ1bGx5Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlIGVsaW1pbmF0ZV9kdXBzKG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZSBycykgewotCQlIYXNodGFibGUgYWRkZWQgPSBuZXcgSGFzaHRhYmxlKHJzLnNpemUoKSk7Ci0KLQkJZm9yIChJdGVyYXRvciBpID0gcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQkJCU5vZGUgbiA9IG5vZGUubm9kZV92YWx1ZSgpOwotCi0JCQlpZiAoYWRkZWQuY29udGFpbnNLZXkobikpCi0JCQkJaS5yZW1vdmUoKTsKLQkJCWVsc2UKLQkJCQlhZGRlZC5wdXQobiwgQm9vbGVhbi5UUlVFKTsKLQkJfQotCQlyZXR1cm4gcnM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2Ugc29ydF9kb2N1bWVudF9vcmRlcihvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2UgcnMpIHsKLQkJQXJyYXlMaXN0IHJlcyA9IG5ldyBBcnJheUxpc3QocnMuc2l6ZSgpKTsKLQotCQlmb3IgKEl0ZXJhdG9yIGkgPSBycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCU5vZGVUeXBlIG5vZGUgPSAoTm9kZVR5cGUpIGkubmV4dCgpOwotCQkJYm9vbGVhbiBhZGRlZCA9IGZhbHNlOwotCi0JCQlmb3IgKGludCBqID0gMDsgaiA8IHJlcy5zaXplKCk7IGorKykgewotCQkJCU5vZGVUeXBlIHggPSAoTm9kZVR5cGUpIHJlcy5nZXQoaik7Ci0KLQkJCQlpZiAoYmVmb3JlKG5vZGUsIHgpKSB7Ci0JCQkJCXJlcy5hZGQoaiwgbm9kZSk7Ci0JCQkJCWFkZGVkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCFhZGRlZCkKLQkJCQlyZXMuYWRkKG5vZGUpOwotCQl9Ci0KLQkJcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlmb3IgKEl0ZXJhdG9yIGkgPSByZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlOb2RlVHlwZSBub2RlID0gKE5vZGVUeXBlKSBpLm5leHQoKTsKLQotCQkJcnMuYWRkKG5vZGUpOwotCQl9Ci0KLQkJcmV0dXJuIHJzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzYW1lKE5vZGVUeXBlIGEsIE5vZGVUeXBlIGIpIHsKLQkJcmV0dXJuIChhLm5vZGVfdmFsdWUoKS5pc1NhbWVOb2RlKGIubm9kZV92YWx1ZSgpKSk7Ci0JCS8vIFdoaWxlIGNvbXBhcmVfbm9kZShhLCBiKSA9PSAwIGlzIHRlbXB0aW5nLCBpdCBpcyBhbHNvIGV4cGVuc2l2ZQotCX0KLQotCXB1YmxpYyBib29sZWFuIGJlZm9yZShOb2RlVHlwZSB0d28pIHsKLQkJcmV0dXJuIGJlZm9yZSh0aGlzLCB0d28pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWZvcmUoTm9kZVR5cGUgYSwgTm9kZVR5cGUgYikgewotCQlyZXR1cm4gY29tcGFyZV9ub2RlKGEsIGIpIDwgMDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBhZnRlcihOb2RlVHlwZSB0d28pIHsKLQkJcmV0dXJuIGFmdGVyKHRoaXMsIHR3byk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyKE5vZGVUeXBlIGEsIE5vZGVUeXBlIGIpIHsKLQkJcmV0dXJuIGNvbXBhcmVfbm9kZShhLCBiKSA+IDA7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGludCBjb21wYXJlX25vZGUoTm9kZVR5cGUgYSwgTm9kZVR5cGUgYikgewotCQlOb2RlIG5vZGVBID0gYS5ub2RlX3ZhbHVlKCk7Ci0JCU5vZGUgbm9kZUIgPSBiLm5vZGVfdmFsdWUoKTsKLQkJCi0JCWlmIChub2RlQSA9PSBub2RlQiB8fCBub2RlQS5pc1NhbWVOb2RlKG5vZGVCKSkgcmV0dXJuIDA7Ci0KLQkJRG9jdW1lbnQgZG9jQSA9IGdldERvY3VtZW50KG5vZGVBKTsKLQkJRG9jdW1lbnQgZG9jQiA9IGdldERvY3VtZW50KG5vZGVCKTsKLQkJCi0JCWlmIChkb2NBICE9IGRvY0IgJiYgISBkb2NBLmlzU2FtZU5vZGUoZG9jQikpIHsKLQkJCXJldHVybiBjb21wYXJlRG9jdW1lbnRzKGRvY0EsIGRvY0IpOwotCQl9Ci0JCXNob3J0IHJlbGF0aW9uID0gbm9kZUEuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZUIpOwotCQlpZiAoKHJlbGF0aW9uICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcpICE9IDApIAotCQkJICByZXR1cm4gMTsKLQkJaWYgKChyZWxhdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSAhPSAwKSAKLQkJCSAgcmV0dXJuIC0xOwotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCByZXN1bHQgZnJvbSBub2RlIGNvbXBhcmlzb246ICIgKyByZWxhdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGNvbXBhcmVEb2N1bWVudHMoRG9jdW1lbnQgZG9jQSwgRG9jdW1lbnQgZG9jQikgewotCQkvLyBBcmJpdHJhcnkgYnV0IGZ1bGZpbGxzIHRoZSBzcGVjIChwcm92aWRlZCBkb2N1bWVuVVJJIGlzIGFsd2F5cyBzZXQpCi0JCWlmIChkb2NCLmdldERvY3VtZW50VVJJKCkgPT0gbnVsbCAmJiBkb2NBLmdldERvY3VtZW50VVJJKCkgPT0gbnVsbCkgewotCQkJcmV0dXJuIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKGRvY0EpIC0gU3lzdGVtLmlkZW50aXR5SGFzaENvZGUoZG9jQik7IAotCQl9Ci0JCXJldHVybiBkb2NCLmdldERvY3VtZW50VVJJKCkuY29tcGFyZVRvKGRvY0EuZ2V0RG9jdW1lbnRVUkkoKSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoTm9kZSBub2RlQSkgewotCQlyZXR1cm4gbm9kZUEgaW5zdGFuY2VvZiBEb2N1bWVudCA/IChEb2N1bWVudClub2RlQSA6IG5vZGVBLmdldE93bmVyRG9jdW1lbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgT2JqZWN0IGdldFR5cGVkVmFsdWVGb3JQcmltaXRpdmVUeXBlKFR5cGVEZWZpbml0aW9uIHR5cGVEZWYpIHsJCQotCQlTdHJpbmcgc3RyVmFsdWUgPSBnZXRTdHJpbmdWYWx1ZSgpOwotCQkKLQkJaWYgKHR5cGVEZWYgPT0gbnVsbCkgewotCQkgICByZXR1cm4gbmV3IFhTVW50eXBlZEF0b21pYyhzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCXJldHVybiBTY2hlbWFUeXBlVmFsdWVGYWN0b3J5Lm5ld1NjaGVtYVR5cGVWYWx1ZShQc3ljaG9QYXRoVHlwZUhlbHBlci5nZXRYU0RUeXBlU2hvcnRDb2RlKHR5cGVEZWYpLCBzdHJWYWx1ZSk7Ci0JfSAvLyBnZXRUeXBlZFZhbHVlRm9yUHJpbWl0aXZlVHlwZSAKLQotCQotCS8qCi0JICogQ29uc3RydWN0IHRoZSAidHlwZWQgdmFsdWUiIGZyb20gYSAic3RyaW5nIHZhbHVlIiwgZ2l2ZW4gdGhlIHNpbXBsZVR5cGUgb2YgdGhlIG5vZGUuCi0gICAgICovCi0JcHJvdGVjdGVkIFJlc3VsdFNlcXVlbmNlIGdldFhETVR5cGVkVmFsdWUoVHlwZURlZmluaXRpb24gdHlwZURlZiwgTGlzdC8qPFNob3J0PiovIGl0ZW1WYWxUeXBlcykgewotCQkKLQkJaWYgKCJhbnlTaW1wbGVUeXBlIi5lcXVhbHModHlwZURlZi5nZXROYW1lKCkpIHx8IAotCQkgICAgImFueUF0b21pY1R5cGUiLmVxdWFscyh0eXBlRGVmLmdldE5hbWUoKSkpIHsKLQkJCXJldHVybiBuZXcgWFNVbnR5cGVkQXRvbWljKGdldFN0cmluZ1ZhbHVlKCkpOwotCQl9Ci0JCWVsc2UgewotCQkJU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcFR5cGUgPSBudWxsOwotCi0JCQlpZiAodHlwZURlZiBpbnN0YW5jZW9mIENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJCUNvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZURlZmluaXRpb24gPSAoQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlRGVmOwotCQkJCXNpbXBUeXBlID0gY29tcGxleFR5cGVEZWZpbml0aW9uLmdldFNpbXBsZVR5cGUoKTsKLQkJCQlpZiAoc2ltcFR5cGUgIT0gbnVsbCkgewotCQkJCQkvLyBlbGVtZW50IGhhcyBhIGNvbXBsZXhUeXBlIHdpdGggYSBzaW1wbGUgY29udGVudAotCQkJCQlyZXR1cm4gZ2V0VHlwZWRWYWx1ZUZvclNpbXBsZUNvbnRlbnQoc2ltcFR5cGUsIGl0ZW1WYWxUeXBlcyk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBlbGVtZW50IGhhcyBhIGNvbXBsZXhUeXBlIHdpdGggY29tcGxleCBjb250ZW50Ci0JCQkJCXJldHVybiBuZXcgWFNVbnR5cGVkQXRvbWljKGdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gZWxlbWVudCBoYXMgYSBzaW1wbGVUeXBlCi0JCQkJc2ltcFR5cGUgPSAoU2ltcGxlVHlwZURlZmluaXRpb24pIHR5cGVEZWY7Ci0JCQkJcmV0dXJuIGdldFR5cGVkVmFsdWVGb3JTaW1wbGVDb250ZW50KHNpbXBUeXBlLCBpdGVtVmFsVHlwZXMpOwotCQkJfQotCQl9Ci0JCQotCX0gLy8gZ2V0WERNVHlwZWRWYWx1ZQotCQotCS8qCi0gICAgICogR2V0IHRoZSBYRE0gdHlwZWQgdmFsdWUgZm9yIHNjaGVtYSAic2ltcGxlIGNvbnRlbnQgbW9kZWwiLiAKLSAgICAgKi8KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIGdldFR5cGVkVmFsdWVGb3JTaW1wbGVDb250ZW50KFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBUeXBlLCBMaXN0Lyo8U2hvcnQ+Ki8gaXRlbVZhbHVlVHlwZXMpIHsKLQkJCi0JCVJlc3VsdEJ1ZmZlciBycyA9IG5ldyBSZXN1bHRCdWZmZXIoKTsKLQkJCi0JCWlmIChzaW1wVHlwZS5nZXRWYXJpZXR5KCkgPT0gU2ltcGxlVHlwZURlZmluaXRpb24uVkFSSUVUWV9BVE9NSUMpIHsKLQkJICAgQW55VHlwZSBzY2hlbWFUeXBlVmFsdWUgPSBTY2hlbWFUeXBlVmFsdWVGYWN0b3J5Lm5ld1NjaGVtYVR5cGVWYWx1ZShQc3ljaG9QYXRoVHlwZUhlbHBlci5nZXRYU0RUeXBlU2hvcnRDb2RlKHNpbXBUeXBlKSwgZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCSAgIGlmIChzY2hlbWFUeXBlVmFsdWUgIT0gbnVsbCkgewotCQkJCXJldHVybiBzY2hlbWFUeXBlVmFsdWU7Ci0JCSAgIH0gZWxzZSB7Ci0JCQkgICByZXR1cm4gbmV3IFhTVW50eXBlZEF0b21pYyhnZXRTdHJpbmdWYWx1ZSgpKTsKLQkJICAgfQotCQl9Ci0JCWVsc2UgaWYgKHNpbXBUeXBlLmdldFZhcmlldHkoKSA9PSBTaW1wbGVUeXBlRGVmaW5pdGlvbi5WQVJJRVRZX0xJU1QpIHsKLQkJCWFkZEF0b21pY0xpc3RJdGVtc1RvUmVzdWx0U2V0KHNpbXBUeXBlLCBpdGVtVmFsdWVUeXBlcywgcnMpOwotCQl9Ci0JCWVsc2UgaWYgKHNpbXBUeXBlLmdldFZhcmlldHkoKSA9PSBTaW1wbGVUeXBlRGVmaW5pdGlvbi5WQVJJRVRZX1VOSU9OKSB7Ci0JCQlnZXRUeXBlZFZhbHVlRm9yVmFyaWV0eVVuaW9uKHNpbXBUeXBlLCBycyk7Ci0JCX0KLQkJCi0JCXJldHVybiBycy5nZXRTZXF1ZW5jZSgpOwotCQkKLQl9IC8vIGdldFR5cGVkVmFsdWVGb3JTaW1wbGVDb250ZW50Ci0JCi0JCi0JLyoKLQkgKiBJZiB0aGUgdmFyaWV0eSBvZiBzaW1wbGVUeXBlIHdhcyAnbGlzdCcsIGFkZCB0aGUgdHlwZWQgImxpc3QgaXRlbSIgdmFsdWVzIHRvIHRoZSBwYXJlbnQgcmVzdWx0IHNldC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEF0b21pY0xpc3RJdGVtc1RvUmVzdWx0U2V0KFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBUeXBlLCBMaXN0Lyo8U2hvcnQ+Ki8gaXRlbVZhbHVlVHlwZXMsIFJlc3VsdEJ1ZmZlciBycykgewotCQkKLQkJLy8gdG9rZW5pemUgdGhlIHN0cmluZyB2YWx1ZSBieSBhICdsb25nZXN0IHNlcXVlbmNlJyBvZiB3aGl0ZS1zcGFjZXMuIHRoaXMgZ2l2ZXMgdXMgdGhlIGxpc3QgaXRlbXMgYXMgc3RyaW5nIHZhbHVlcy4KLQkJU3RyaW5nW10gbGlzdEl0ZW1zU3RyVmFsdWVzID0gZ2V0U3RyaW5nVmFsdWUoKS5zcGxpdCgiXFxzKyIpOwotCQkKLQkJU2ltcGxlVHlwZURlZmluaXRpb24gaXRlbVR5cGUgPSAoU2ltcGxlVHlwZURlZmluaXRpb24pIHNpbXBUeXBlLmdldEl0ZW1UeXBlKCk7CQkKLQkJaWYgKGl0ZW1UeXBlLmdldFZhcmlldHkoKSA9PSBTaW1wbGVUeXBlRGVmaW5pdGlvbi5WQVJJRVRZX0FUT01JQykgewotCQkJZm9yIChpbnQgbGlzdEl0ZW1JZHggPSAwOyBsaXN0SXRlbUlkeCA8IGxpc3RJdGVtc1N0clZhbHVlcy5sZW5ndGg7IGxpc3RJdGVtSWR4KyspIHsKLQkJCSAgIC8vIGFkZCBhbiBhdG9taWMgdHlwZWQgdmFsdWUgKHdob3NlIHR5cGUgaXMgdGhlICJpdGVtICB0eXBlIiBvZiB0aGUgbGlzdCwgYW5kICJzdHJpbmcgdmFsdWUiIGlzIHRoZSAic3RyaW5nIAotCQkJICAgLy8gdmFsdWUgb2YgdGhlIGxpc3QgaXRlbSIpIHRvIHRoZSAicmVzdWx0IHNlcXVlbmNlIi4KLQkJICAgICAgIHJzLmFkZChTY2hlbWFUeXBlVmFsdWVGYWN0b3J5Lm5ld1NjaGVtYVR5cGVWYWx1ZShQc3ljaG9QYXRoVHlwZUhlbHBlci5nZXRYU0RUeXBlU2hvcnRDb2RlKGl0ZW1UeXBlKSwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zU3RyVmFsdWVzW2xpc3RJdGVtSWR4XSkpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGl0ZW1UeXBlLmdldFZhcmlldHkoKSA9PSBTaW1wbGVUeXBlRGVmaW5pdGlvbi5WQVJJRVRZX1VOSU9OKSB7Ci0JCSAgICAvLyBoZXJlIHRoZSBsaXN0IGl0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBhdG9taWMgdHlwZXMKLQkJCWZvciAoaW50IGxpc3RJdGVtSWR4ID0gMDsgbGlzdEl0ZW1JZHggPCBsaXN0SXRlbXNTdHJWYWx1ZXMubGVuZ3RoOyBsaXN0SXRlbUlkeCsrKSB7Ci0JCQkJU3RyaW5nIGxpc3RJdGVtID0gbGlzdEl0ZW1zU3RyVmFsdWVzW2xpc3RJdGVtSWR4XTsKLQkJCQlycy5hZGQoU2NoZW1hVHlwZVZhbHVlRmFjdG9yeS5uZXdTY2hlbWFUeXBlVmFsdWUoKChTaG9ydClpdGVtVmFsdWVUeXBlcy5nZXQobGlzdEl0ZW1JZHgpKS5zaG9ydFZhbHVlKCksIGxpc3RJdGVtKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JfSAvLyBhZGRBdG9taWNMaXN0SXRlbXNUb1Jlc3VsdFNldAotCQotCQotCS8qCi0JICogSWYgdGhlIHZhcmlldHkgb2Ygc2ltcGxlVHlwZSB3YXMgJ3VuaW9uJywgZmluZCB0aGUgdHlwZWQgdmFsdWUgKGFuZCBhZGRlZCB0byB0aGUgcGFyZW50ICdyZXN1bHQgc2V0JykgCi0JICogdG8gYmUgcmV0dXJuZWQgYXMgdGhlIHR5cGVkIHZhbHVlIG9mIHRoZSBwYXJlbnQgbm9kZSwgYnkgY29uc2lkZXJpbmcgdGhlIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gKGkuZQotCSAqIHdoaWNoZXZlciBtZW1iZXIgdHlwZSBmaXJzdCBpbiBvcmRlciwgY2FuIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZSB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBwYXJlbnQgbm9kZSkuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGdldFR5cGVkVmFsdWVGb3JWYXJpZXR5VW5pb24oU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcFR5cGUsIFJlc3VsdEJ1ZmZlciBycykgewotCQkKLQkJTGlzdC8qPFNpbXBsZVR5cGVEZWZpbml0aW9uPiovIG1lbWJlclR5cGVzID0gc2ltcFR5cGUuZ2V0TWVtYmVyVHlwZXMoKTsKLQkJLy8gY2hlY2sgbWVtYmVyIHR5cGVzIGluIG9yZGVyLCB0byBmaW5kIHRoYXQgd2hpY2ggb25lIGNhbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGUgdGhlIHN0cmluZyB2YWx1ZS4KLQkJZm9yIChpbnQgbWVtVHlwZUlkeCA9IDA7IG1lbVR5cGVJZHggPCBtZW1iZXJUeXBlcy5zaXplKCk7IG1lbVR5cGVJZHgrKykgewotCQkJUHJpbWl0aXZlVHlwZSBtZW1TaW1wbGVUeXBlID0gKFByaW1pdGl2ZVR5cGUpIG1lbWJlclR5cGVzLmdldChtZW1UeXBlSWR4KTsKLQkJICAgaWYgKGlzVmFsdWVWYWxpZEZvclNpbXBsZVR5cGUoZ2V0U3RyaW5nVmFsdWUoKSwgbWVtU2ltcGxlVHlwZSkpIHsKLQkJCSAgCi0JCQkgICBycy5hZGQoU2NoZW1hVHlwZVZhbHVlRmFjdG9yeS5uZXdTY2hlbWFUeXBlVmFsdWUoUHN5Y2hvUGF0aFR5cGVIZWxwZXIuZ2V0WFNEVHlwZVNob3J0Q29kZShtZW1TaW1wbGVUeXBlKSwgZ2V0U3RyaW5nVmFsdWUoKSkpOwotCQkJICAgLy8gbm8gbW9yZSBtZW1iZXJUeXBlcyBuZWVkIHRvIGJlIGNoZWNrZWQKLQkJCSAgIGJyZWFrOyAKLQkJICAgfQotCQl9Ci0JCQotCX0gLy8gZ2V0VHlwZWRWYWx1ZUZvclZhcmlldHlVbmlvbgotCQotCQotCS8qCi0JICogRGV0ZXJtaW5lIGlmIGEgInN0cmluZyB2YWx1ZSIgaXMgdmFsaWQgZm9yIGEgZ2l2ZW4gc2ltcGxlVHlwZSBkZWZpbml0aW9uLiBUaGlzIGlzIGEgaGVscGVkIG1ldGhvZCBmb3Igb3RoZXIgbWV0aG9kcy4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNWYWx1ZVZhbGlkRm9yU2ltcGxlVHlwZSAoU3RyaW5nIHZhbHVlLCBQcmltaXRpdmVUeXBlIHNpbXBsVHlwZSkgewotCQkKLQkJLy8gYXR0ZW1wdCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgd2l0aCB0aGUgc2ltcGxlVHlwZQotCQlyZXR1cm4gc2ltcGxUeXBlLnZhbGlkYXRlKHZhbHVlKTsKLQkJCi0JfSAvLyBpc1ZhbHVlVmFsaWRGb3JBU2ltcGxlVHlwZQotCQotCQotCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzSUQoKTsKLQkKLQlwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0lEUkVGKCk7Ci0KLQkvKioKLQkgKiBVdGlsaXR5IG1ldGhvZCB0byBjaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIFR5cGVJbmZvIG1hdGNoZXMuCi0JICogQHBhcmFtIHR5cGVJbmZvCi0JICogQHBhcmFtIHR5cGVOYW1lCi0JICogQHJldHVybgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIGlzVHlwZShUeXBlSW5mbyB0eXBlSW5mbywgU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCWlmICh0eXBlSW5mbyAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgdHlwZUluZm9OYW1lID0gdHlwZUluZm8uZ2V0VHlwZU5hbWUoKTsKLQkJCWlmICh0eXBlSW5mb05hbWUgIT0gbnVsbCkgewotCQkJCWlmICh0eXBlSW5mby5nZXRUeXBlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UodHlwZU5hbWUpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0gCi0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIExvb2tzIHVwIHRoZSBhdmFpbGFibGUgdHlwZSBmb3IgdGhlIG5vZGUsIGlmIGF2YWlsYWJsZQotCSAqIAotCSAqIEByZXR1cm4gVHlwZURlZmluaXRpb24sIG9yIG51bGwKLQkgKi8KLQlwcm90ZWN0ZWQgVHlwZURlZmluaXRpb24gZ2V0VHlwZSgpIHsKLQkJaWYgKF90eXBlTW9kZWwgIT0gbnVsbCkgewotCQkJcmV0dXJuIF90eXBlTW9kZWwuZ2V0VHlwZShub2RlX3ZhbHVlKCkpOwotCQl9IGVsc2UgewotCQkJIHJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JcHVibGljIE9iamVjdCBnZXROYXRpdmVWYWx1ZSgpIHsKLQkJcmV0dXJuIG5vZGVfdmFsdWUoKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZU1vZGVsIGdldFR5cGVNb2RlbCgpIHsKLQkJcmV0dXJuIF90eXBlTW9kZWw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZXN1bHRCdWZmZXIgbGluYXJpemUoUmVzdWx0QnVmZmVyIHJzKSB7Ci0JCVRyZWVTZXQgYWxsID0gbmV3IFRyZWVTZXQoTk9ERV9DT01QQVJBVE9SKTsKLQkJYWxsLmFkZEFsbChycy5nZXRDb2xsZWN0aW9uKCkpOwotCQlyZXR1cm4gbmV3IFJlc3VsdEJ1ZmZlcigpLmNvbmNhdChhbGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvTnVtZXJpY1R5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvTnVtZXJpY1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ3MzFlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL051bWVyaWNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBHdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wTHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhEaXY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhJRGl2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoTWludXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhNb2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhQbHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoVGltZXM7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTnVtZXJpY1R5cGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIE51bWVyaWNUeXBlIGV4dGVuZHMgQ3RyVHlwZQotCi1pbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQsCi0KLU1hdGhQbHVzLCBNYXRoTWludXMsIE1hdGhUaW1lcywgTWF0aERpdiwgTWF0aElEaXYsIE1hdGhNb2QgewotCi0JLy8gWFhYIG5lZWRlZCBmb3IgZm46Ym9vbGVhbgotCS8qKgotCSAqIENoZWNrIHdoZXRoZXIgbm9kZSByZXByZXNudHMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBub2RlIHJlcHJlc250cyAwLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB6ZXJvKCk7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlcgotCSAqIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgUmVzdWx0U2VxdWVuY2UgdW5hcnlfbWludXMoKTsKLQotCS8vIG51bWVyaWMgZnVuY3Rpb25zCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSBhYnMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIE51bWVyaWNUeXBlIHJlcHJlc2VudGluZyB0aGUgc21hbGxlc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gdGhlCi0JICogICAgICAgICBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIGNlaWxpbmcoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSBmbG9vcigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBOdW1lcmljVHlwZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgTnVtZXJpY1R5cGUgcm91bmQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgTnVtZXJpY1R5cGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIGFic3RyYWN0IE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbigpOwotCQotCXB1YmxpYyBhYnN0cmFjdCBOdW1lcmljVHlwZSByb3VuZF9oYWxmX3RvX2V2ZW4oaW50IHByZWNpc2lvbik7Ci0KLQlwcm90ZWN0ZWQgSXRlbSBnZXRfc2luZ2xlX2FyZyhSZXN1bHRTZXF1ZW5jZSBycykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChycy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJcmV0dXJuIHJzLmZpcnN0KCk7Ci0JfQotCi0JLyoqKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN1cHBsaWVkIG5vZGUgaXMgb2YgdGhlIHN1cHBsaWVkIHR5cGUKLQkgKiAKLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIGJlaW5nIHRlc3RlZAotCSAqIEBwYXJhbSB0eXBlCi0JICogICAgICAgICAgICBUaGUgdHlwZSBleHBlY3RlZAotCSAqIEByZXR1cm4gVGhlIG5vZGUgYmVpbmcgdGVzdGVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiAgICAgICAgICAgICBJZiBub2RlIGJlaW5nIHRlc3RlZCBpcyBub3Qgb2YgZXhwZWN0ZWQgdHlwZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSXRlbSBnZXRfc2luZ2xlX3R5cGUoSXRlbSBhdCwgQ2xhc3MgdHlwZSkKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmICghdHlwZS5pc0luc3RhbmNlKGF0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJcmV0dXJuIGF0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSXRlbSBnZXRfc2luZ2xlX3R5cGUoQW55VHlwZSBhdCwgQ2xhc3MgdHlwZSkKLQl0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJcmV0dXJuIGdldF9zaW5nbGVfdHlwZSgoSXRlbSlhdCwgdHlwZSk7Ci0JfQotCi0JLyoqKgotCSAqIENoZWNrIHdoZXRoZXIgZmlyc3Qgbm9kZSBpbiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSBpcyBvZiB0aGUgc3VwcGxpZWQKLQkgKiB0eXBlCi0JICogCi0JICogQHBhcmFtIHJzCi0JICogICAgICAgICAgICBUaGUgbm9kZSBiZWluZyB0ZXN0ZWQKLQkgKiBAcGFyYW0gdHlwZQotCSAqICAgICAgICAgICAgVGhlIHR5cGUgZXhwZWN0ZWQKLQkgKiBAcmV0dXJuIFRoZSBub2RlIGJlaW5nIHRlc3RlZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogICAgICAgICAgICAgSWYgbm9kZSBiZWluZyB0ZXN0ZWQgaXMgbm90IG9mIGV4cGVjdGVkIHR5cGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFueVR5cGUgZ2V0X3NpbmdsZV90eXBlKFJlc3VsdFNlcXVlbmNlIHJzLCBDbGFzcyB0eXBlKQotCQkJdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChycy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlbSBhdCA9IHJzLmZpcnN0KCk7Ci0KLQkJaWYgKCF0eXBlLmlzSW5zdGFuY2UoYXQpKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlyZXR1cm4gKEFueVR5cGUpIGF0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvUElUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1BJVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2MxNjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvUElUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgSmVzcGVyIE1vbGxlci0gYnVnIDI3NTYxMCAtIEF2b2lkIGJpZyB0aW1lIGFuZCBtZW1vcnkgb3ZlcmhlYWQgZm9yIGV4dGVybmFscwotICogICAgIERhdmlkIENhcnZlciAgLSBidWcgMjgxMTg2IC0gaW1wbGVtZW50YXRpb24gb2YgZm46aWQgYW5kIGZuOmlkcmVmCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgUElUeXBlIGV4dGVuZHMgTm9kZVR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OID0gInByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24iOwotCXByaXZhdGUgUHJvY2Vzc2luZ0luc3RydWN0aW9uIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cwotCSAqIEBwYXJhbSBkb2Nfb3JkZXIKLQkgKiAgICAgICAgICAgIFRoZSBkb2N1bWVudCBvcmRlcgotCSAqLwotCXB1YmxpYyBQSVR5cGUoUHJvY2Vzc2luZ0luc3RydWN0aW9uIHYsIFR5cGVNb2RlbCB0bSkgewotCQlzdXBlcih2LCB0bSk7Ci0JCV92YWx1ZSA9IHY7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0aGlzIG5vZGUgcmVwcmVzZW50cwotCSAqIAotCSAqIEByZXR1cm4gQWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdGhpcyBub2RlIHJlcHJlc2VudHMKLQkgKi8KLQlwdWJsaWMgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLQkgKiBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXREYXRhKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi0JICogc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotCSAqICAgICAgICAgc3RvcmVkCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHR5cGVkX3ZhbHVlKCkgewotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKGdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgdGhlIG5vZGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiBBIFFOYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBRTmFtZSBub2RlX25hbWUoKSB7Ci0JCVFOYW1lIG5hbWUgPSBuZXcgUU5hbWUobnVsbCwgX3ZhbHVlLmdldFRhcmdldCgpKTsKLQotCQluYW1lLnNldF9uYW1lc3BhY2UobnVsbCk7Ci0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSUQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJRFJFRigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5UWVBFREFUT01JQzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1FOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1FOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZWNhMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9RTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTEgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMCAKLSAqICAgICBKZXNwZXIgTW9sbGVyLSBidWcgMjgxMTU5IC0gZGVidWdnaW5nIGNvbnZlbmllbmNlIHRvU3RyaW5nIG1ldGhvZCAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4ODg4NiAtIGFkZCB1bml0IHRlc3RzIGFuZCBmaXggZm46cmVzb2x2ZS1xbmFtZSBmdW5jdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyICAtIGJ1ZyAzNDA5MzMgLSBNaWdyYXRlIHRvIG5ldyBYUGF0aDIgQVBJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZheC54bWwuWE1MQ29uc3RhbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiBhIFFOYW1lIGRhdGF0eXBlIChuYW1lIG9mIGEgbm9kZSkKLSAqLwotcHVibGljIGNsYXNzIFFOYW1lIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfUV9OQU1FID0gInhzOlFOYW1lIjsKLQlwcml2YXRlIFN0cmluZyBfbmFtZXNwYWNlOwotCXByaXZhdGUgU3RyaW5nIF9wcmVmaXg7Ci0JcHJpdmF0ZSBTdHJpbmcgX2xvY2FsX3BhcnQ7Ci0JcHJpdmF0ZSBib29sZWFuIF9leHBhbmRlZDsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHByZWZpeAotCSAqICAgICAgICAgICAgUHJlZml4IG9mIHRoZSBub2RlIG5hbWUKLQkgKiBAcGFyYW0gbG9jYWxfcGFydAotCSAqICAgICAgICAgICAgVGhlIG5vZGUgbmFtZSBpdHNlbGYKLQkgKiBAcGFyYW0gbnMKLQkgKiAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBub2RlbmFtZSBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIFFOYW1lKFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbF9wYXJ0LCBTdHJpbmcgbnMpIHsKLQkJdGhpcyhwcmVmaXgsIGxvY2FsX3BhcnQpOwotCQlpZiAobnMgIT0gbnVsbCkgewotCQkJc2V0X25hbWVzcGFjZShucyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSBwcmVmaXgKLQkgKiAgICAgICAgICAgIFByZWZpeCBvZiB0aGUgbm9kZSBuYW1lCi0JICogQHBhcmFtIGxvY2FsX3BhcnQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIG5hbWUgaXRzZWxmCi0JICovCi0JcHVibGljIFFOYW1lKFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbF9wYXJ0KSB7Ci0JCV9wcmVmaXggPSBwcmVmaXg7Ci0JCV9sb2NhbF9wYXJ0ID0gbG9jYWxfcGFydDsKLQkJX2V4cGFuZGVkID0gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgb25seSB0aGUgbm9kZSBuYW1lIChubyBwcmVmaXgpCi0JICogCi0JICogQHBhcmFtIGxvY2FsX3BhcnQKLQkgKiAgICAgICAgICAgIFRoZSBub2RlIG5hbWUKLQkgKi8KLQlwdWJsaWMgUU5hbWUoU3RyaW5nIGxvY2FsX3BhcnQpIHsKLQkJdGhpcyhudWxsLCBsb2NhbF9wYXJ0KTsKLQkJc2V0X25hbWVzcGFjZShudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB3aXRoIGEgbnVsbCBwcmVmaXggYW5kIG51bGwgbm9kZSBuYW1lCi0JICovCi0JcHVibGljIFFOYW1lKCkgewotCQl0aGlzKG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyBRTmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIG5hbWUpIHsKLQkJdGhpcyhYTUxDb25zdGFudHMuREVGQVVMVF9OU19QUkVGSVguZXF1YWxzKG5hbWUuZ2V0UHJlZml4KCkpID8gbnVsbCA6IG5hbWUuZ2V0UHJlZml4KCksIG5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCQlpZiAoISBYTUxDb25zdGFudHMuTlVMTF9OU19VUkkuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKSBzZXRfbmFtZXNwYWNlKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQlfZXhwYW5kZWQgPSB0cnVlOyAKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFFOYW1lIGJ5IHBhcnNpbmcgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZQotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZQotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUU5hbWUgcGFyc2VfUU5hbWUoU3RyaW5nIHN0cikgewotCQlpbnQgb2NjdXJzID0gMDsKLQkJCi0JCWNoYXJbXSBzdHJDaHJBcnIgPSBzdHIudG9DaGFyQXJyYXkoKTsJCQotCQlmb3IgKGludCBjaHJJbmR4ID0gMDsgY2hySW5keCA8IHN0ckNockFyci5sZW5ndGg7IGNockluZHgrKykgewotCQkgIGlmIChzdHJDaHJBcnJbY2hySW5keF0gPT0gJzonKSB7Ci0JCQkgb2NjdXJzICs9IDE7ICAKLQkJICB9Ci0JCX0KLQkJCi0JCWlmIChvY2N1cnMgPiAxKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJU3RyaW5nW10gdG9rZW5zID0gc3RyLnNwbGl0KCI6Iik7Ci0KLQkJaWYgKHRva2Vucy5sZW5ndGggPT0gMSkKLQkJCXJldHVybiBuZXcgUU5hbWUodG9rZW5zWzBdKTsKLQkJCi0JCWlmICh0b2tlbnMubGVuZ3RoID09IDIpIHsKLQkJCQlyZXR1cm4gbmV3IFFOYW1lKHRva2Vuc1swXSwgdG9rZW5zWzFdKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgUU5hbWUgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gZXh0cmFjdCBmcm9tCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgUU5hbWUgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCi0JCWlmICghKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nKSAmJiAhKGFhdCBpbnN0YW5jZW9mIFFOYW1lKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQotCQlTdHJpbmcgc2FyZyA9IGFhdC5nZXRTdHJpbmdWYWx1ZSgpOwotCi0JCVFOYW1lIHFuYW1lID0gcGFyc2VfUU5hbWUoc2FyZyk7Ci0JCWlmIChxbmFtZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBxbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZS4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHN0cmluZygpCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCXJldHVybiBzdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOlFOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1FfTkFNRTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIlFOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiUU5hbWUiOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lLiBUaGlzIG1ldGhvZCBpcwotCSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmcoKSB7Ci0JCVN0cmluZyByZXMgPSAiIjsKLQotCQlpZiAoX3ByZWZpeCAhPSBudWxsKSB7Ci0JCQlyZXMgPSBfcHJlZml4ICsgIjoiOwotCQl9Ci0KLQkJcmVzICs9IF9sb2NhbF9wYXJ0OwotCQlyZXR1cm4gcmVzOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRobmFtZSBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZS4gVGhpcyBtZXRob2QgbXVzdCBub3QKLQkgKiBiZSBjYWxsZWQgaWYgYSBuYW1lc3BhY2UgZG9lcyBleGlzdCBmb3IgdGhpcyBub2RlCi0JICogCi0JICogQHJldHVybiBGdWxsIHBhdGhuYW1lIGluY2x1ZGluZyBuYW1lc3BhY2UKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGV4cGFuZGVkX25hbWUoKSB7Ci0JCWFzc2VydCBfZXhwYW5kZWQ7Ci0JCS8vIGlmKCFfZXhwYW5kZWQpCi0JCS8vIHJldHVybiBudWxsOwotCi0JCVN0cmluZyBlID0gIiI7Ci0JCWlmIChfbmFtZXNwYWNlICE9IG51bGwpCi0JCQllICs9IF9uYW1lc3BhY2UgKyAiOiI7Ci0KLQkJcmV0dXJuIGUgKyBfbG9jYWxfcGFydDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHByZWZpeCBvZiB0aGUgbm9kZSdzIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiBQcmVmaXggb2YgdGhlIG5vZGUncyBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgcHJlZml4KCkgewotCQlyZXR1cm4gX3ByZWZpeDsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBuYW1lc3BhY2UgZm9yIHRoaXMgbm9kZQotCSAqIAotCSAqIEBwYXJhbSBuCi0JICogICAgICAgICAgICBOYW1lc3BhY2UgdGhpcyBub2RlIGJlbG9uZ3MgaW4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRfbmFtZXNwYWNlKFN0cmluZyBuKSB7Ci0JCV9uYW1lc3BhY2UgPSBuICE9IG51bGwgPyAobi5sZW5ndGgoKSA9PSAwID8gbnVsbCA6IG4pIDogbnVsbDsKLQkJX2V4cGFuZGVkID0gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluLiBUaGlzIG1ldGhvZCBtdXN0IG5vdAotCSAqIGJlIGNhbGxlZCBpZiB0aGUgbm9kZSBkb2VzIG5vdCBiZWxvbmcgaW4gYSBuYW1lc3BhY2UKLQkgKiAKLQkgKiBAcmV0dXJuIE5hbWVzcGFjZSB0aGF0IHRoaXMgbm9kZSBiZWxvbmdzIGluCi0JICovCi0JcHVibGljIFN0cmluZyBuYW1lc3BhY2UoKSB7Ci0JCWFzc2VydCBfZXhwYW5kZWQ7Ci0JCXJldHVybiBfbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbm9kZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuIE5vZGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBsb2NhbCgpIHsKLQkJcmV0dXJuIF9sb2NhbF9wYXJ0OwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIGEgbmFtZXNwYWNlIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgbm9kZQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWZpbmVkIGZvciBub2RlLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBleHBhbmRlZCgpIHsKLQkJcmV0dXJuIF9leHBhbmRlZDsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBRTmFtZSBhbmQgYSBzdXBwbGllZCBRTmFtZQotCSAqIAotCSAqIEBwYXJhbSBvYmoKLQkgKiAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoLiBTaG91bGQgYmUgb2YgdHlwZSBRTmFtZQotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudCB0aGUgc2FtZSBub2RlLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotCi0JCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgY29tcGFyaW5nIGEgcW5hbWUKLQkJaWYgKCEob2JqIGluc3RhbmNlb2YgUU5hbWUpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVFOYW1lIGFyZyA9IChRTmFtZSkgb2JqOwotCi0JCS8vIGlmIHRoZXkgYXJlbid0IGV4cGFuZGVkLi4uIHdlIGNhbid0IGNvbXBhcmUgdGhlbQotCQlpZiAoIV9leHBhbmRlZCB8fCAhYXJnLmV4cGFuZGVkKCkpIHsKLQkJCWFzc2VydCBmYWxzZTsgLy8gWFhYIG5vdCBzdHJpY2x5IG5lY2Vzc2FyeQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJLy8gdHdvIGNhc2VzOiBudWxsID09IG51bGwsIG9yIC5lcXVhbHMob3RoZXIpCi0JCVN0cmluZyBhcmduID0gYXJnLm5hbWVzcGFjZSgpOwotCQlpZiAoX25hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQlpZiAoIV9uYW1lc3BhY2UuZXF1YWxzKGFyZ24pKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChhcmduICE9IG51bGwpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJU3RyaW5nIGFyZ2wgPSBhcmcubG9jYWwoKTsKLQkJLy8gWFhYIGxvY2FsIHBhcnQgc2hvdWxkIGFsd2F5cyBiZSBub24gbnVsbCA/Ci0JCWlmIChfbG9jYWxfcGFydCAhPSBudWxsKSB7Ci0JCQlpZiAoIV9sb2NhbF9wYXJ0LmVxdWFscyhhcmdsKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYXJnbCAhPSBudWxsKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIENhbGN1bGF0ZXMgdGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gVGhlIGhhc2hjb2RlIGZvciB0aGUgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0JCWludCBuYW1lc3BhY2UgPSAzOwotCQlpbnQgbG9jYWwgPSA0OwotCQlpbnQgcmVzdWx0ID0gMDsKLQotCQlhc3NlcnQgZXhwYW5kZWQoKTsKLQotCQlpZiAoX25hbWVzcGFjZSAhPSBudWxsKQotCQkJbmFtZXNwYWNlID0gX25hbWVzcGFjZS5oYXNoQ29kZSgpOwotCQlpZiAoX2xvY2FsX3BhcnQgIT0gbnVsbCkKLQkJCWxvY2FsID0gX2xvY2FsX3BhcnQuaGFzaENvZGUoKTsKLQotCQlyZXN1bHQgPSBuYW1lc3BhY2U7Ci0JCXJlc3VsdCBePSAoMiAqIGxvY2FsKTsKLQotCQlpZiAoX2V4cGFuZGVkKQotCQkJcmVzdWx0IF49IChyZXN1bHQgKyAxKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIFFOYW1lIGFuZCB0aGUgc3VwcGxpZWQgUU5hbWUKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUU5hbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50IHRoZSBzYW1lIG5vZGUuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUU5hbWUgdmFsID0gKFFOYW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBRTmFtZS5jbGFzcyk7Ci0JCXJldHVybiBlcXVhbHModmFsKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIHN0cmluZygpOwotCX0KLQkKLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfUU5BTUU7Ci0JfQotCi0JcHVibGljIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgYXNRTmFtZSgpIHsKLQkJcmV0dXJuIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKG5hbWVzcGFjZSgpLCBsb2NhbCgpLCBwcmVmaXgoKSAhPSBudWxsID8gcHJlZml4KCkgOiBYTUxDb25zdGFudHMuREVGQVVMVF9OU19QUkVGSVgpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gYXNRTmFtZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvU2NoZW1hVHlwZVZhbHVlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9TY2hlbWFUeXBlVmFsdWVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OTQ1NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9TY2hlbWFUeXBlVmFsdWVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMTgzMTMgLSBpbXByb3ZlbWVudHMgdG8gY29tcHV0YXRpb24gb2YgdHlwZWQgdmFsdWVzIG9mIG5vZGVzLCB3aGVuIHZhbGlkYXRlZCBieSBYTUwgU2NoZW1hIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUgdHlwZXMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMyMzkwMCAtIGltcHJvdmluZyBjb21wdXRpbmcgdGhlIHR5cGVkIHZhbHVlIG9mIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlcywgd2hlcmUgdGhlIHNjaGVtYQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIG9mIG5vZGVzIGFyZSBzaW1wbGUsIHdpdGggdmFyaWV0aWVzICdsaXN0JyBhbmQgJ3VuaW9uJy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzQxODYyIC0gaW1wcm92ZW1lbnRzIHRvIGNvbXB1dGF0aW9uIG9mIHR5cGVkIHZhbHVlIG9mIHhzOmJvb2xlYW4gbm9kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5Qc3ljaG9QYXRoVHlwZUhlbHBlcjsKLQotLyoqCi0gKiBBIGZhY3RvcnkgY2xhc3MgaW1wbGVtZW50YXRpb24sIHRvIGNvbnN0cnVjdCBQc3ljaG9QYXRoIHNjaGVtYSB0eXBlIHJlcHJlc2VudGF0aW9uIGNvcnJlc3BvbmRpbmcgCi0gKiB0byBYTUwgU2NoZW1hIHR5cGVzLgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hVHlwZVZhbHVlRmFjdG9yeSB7Ci0KLQlwdWJsaWMgc3RhdGljIEFueVR5cGUgbmV3U2NoZW1hVHlwZVZhbHVlKHNob3J0IHR5cGVEZWYsIFN0cmluZyBzdHJWYWx1ZSkgewotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuQU5ZVVJJX0RUKSB7Ci0JCQlyZXR1cm4gbmV3IFhTQW55VVJJKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuQk9PTEVBTl9EVCkgewotCQkJU3RyaW5nIG5ld1N0clZhbHVlID0gKCIxIi5lcXVhbHMoc3RyVmFsdWUpIHx8ICJ0cnVlIi5lcXVhbHMoc3RyVmFsdWUpKSA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0JCQlyZXR1cm4gbmV3IFhTQm9vbGVhbihCb29sZWFuLnZhbHVlT2YobmV3U3RyVmFsdWUpLmJvb2xlYW5WYWx1ZSgpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuREFURV9EVCkgeyAgICAgICAKLQkJCXJldHVybiBYU0RhdGUucGFyc2VfZGF0ZShzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkRBVEVUSU1FX0RUKSB7Ci0JCQlyZXR1cm4gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJLy8gZGVjaW1hbCBhbmQgaXQncyBzdWJ0eXBlcwkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkRFQ0lNQUxfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKG5ldyBCaWdEZWNpbWFsKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLklOVEVHRVJfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkxPTkdfRFQpIHsgICAgIAotCQkJcmV0dXJuIG5ldyBYU0xvbmcobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuSU5UX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTSW50KG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLlNIT1JUX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTU2hvcnQobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuQllURV9EVCkgeyAgICAgIAotCQkJcmV0dXJuIG5ldyBYU0J5dGUobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTk9OTkVHQVRJVkVJTlRFR0VSX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTTm9uTmVnYXRpdmVJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLlBPU0lUSVZFSU5URUdFUl9EVCkgeyAgICAgIAotCQkJcmV0dXJuIG5ldyBYU1Bvc2l0aXZlSW50ZWdlcihuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5VTlNJR05FRExPTkdfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZExvbmcobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuVU5TSUdORURJTlRfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZEludChuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5VTlNJR05FRFNIT1JUX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTVW5zaWduZWRTaG9ydChuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5VTlNJR05FREJZVEVfRFQpIHsgICAgICAKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZEJ5dGUobmV3IEJpZ0ludGVnZXIoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTk9OUE9TSVRJVkVJTlRFR0VSX0RUKSB7ICAgICAgCi0JCQlyZXR1cm4gbmV3IFhTTm9uUG9zaXRpdmVJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLk5FR0FUSVZFSU5URUdFUl9EVCkgeyAgICAgIAotCQkJcmV0dXJuIG5ldyBYU05lZ2F0aXZlSW50ZWdlcihuZXcgQmlnSW50ZWdlcihzdHJWYWx1ZSkpOwotCQl9Ci0JCS8vIGVuZCBvZiwgZGVjaW1hbCB0eXBlcwotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuRE9VQkxFX0RUKSB7ICAgICAgIAotCQkJcmV0dXJuIG5ldyBYU0RvdWJsZShEb3VibGUucGFyc2VEb3VibGUoc3RyVmFsdWUpKTsKLQkJfQotCQkKLQkJLy8gZHVyYXRpb24gYW5kIGl0J3Mgc3VidHlwZXMKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuRFVSQVRJT05fRFQpIHsgICAgICAgCi0JCQlyZXR1cm4gWFNEdXJhdGlvbi5wYXJzZURURHVyYXRpb24oc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBQc3ljaG9QYXRoVHlwZUhlbHBlci5EQVlUSU1FRFVSQVRJT05fRFQpIHsgICAgICAgCi0JCQlyZXR1cm4gWFNEYXlUaW1lRHVyYXRpb24ucGFyc2VEVER1cmF0aW9uKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gUHN5Y2hvUGF0aFR5cGVIZWxwZXIuWUVBUk1PTlRIRFVSQVRJT05fRFQpIHsgICAgICAgCi0JCQlyZXR1cm4gWFNZZWFyTW9udGhEdXJhdGlvbi5wYXJzZVlNRHVyYXRpb24oc3RyVmFsdWUpOwotCQl9Ci0JCS8vIGVuZCBvZiwgZHVyYXRpb24gdHlwZXMKLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkZMT0FUX0RUKSB7ICAgICAgICAKLQkJCXJldHVybiBuZXcgWFNGbG9hdChGbG9hdC5wYXJzZUZsb2F0KHN0clZhbHVlKSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkdEQVlfRFQpIHsgICAgICAgIAotCQkJcmV0dXJuIFhTR0RheS5wYXJzZV9nRGF5KHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuR01PTlRIX0RUKSB7ICAgICAgICAKLQkJCXJldHVybiBYU0dNb250aC5wYXJzZV9nTW9udGgoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5HTU9OVEhEQVlfRFQpIHsgICAgICAgIAotCQkJcmV0dXJuIFhTR01vbnRoRGF5LnBhcnNlX2dNb250aERheShzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLkdZRUFSX0RUKSB7ICAgICAgICAKLQkJCXJldHVybiBYU0dZZWFyLnBhcnNlX2dZZWFyKHN0clZhbHVlKTsKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuR1lFQVJNT05USF9EVCkgeyAgICAgICAgCi0JCQlyZXR1cm4gWFNHWWVhck1vbnRoLnBhcnNlX2dZZWFyTW9udGgoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5OT1RBVElPTl9EVCkgewotCQkJcmV0dXJuIG5ldyBYU1N0cmluZyhzdHJWYWx1ZSk7Ci0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLlFOQU1FX0RUKSB7Ci0JCQlyZXR1cm4gUU5hbWUucGFyc2VfUU5hbWUoc3RyVmFsdWUpOwotCQl9Ci0JCQotCQkvLyBzdHJpbmcgYW5kIGl0J3Mgc3VidHlwZXMKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuU1RSSU5HX0RUKSB7Ci0JCQlyZXR1cm4gbmV3IFhTU3RyaW5nKHN0clZhbHVlKTsgICAKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTk9STUFMSVpFRFNUUklOR19EVCkgewotCQkJcmV0dXJuIG5ldyBYU05vcm1hbGl6ZWRTdHJpbmcoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5UT0tFTl9EVCkgewotCQkJcmV0dXJuIG5ldyBYU1Rva2VuKHN0clZhbHVlKTsgICAKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuTkFNRV9EVCkgewotCQkJcmV0dXJuIG5ldyBYU05hbWUoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5OQ05BTUVfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNOQ05hbWUoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5FTlRJVFlfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNFbnRpdHkoc3RyVmFsdWUpOyAgIAotCQl9Ci0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5JRF9EVCkgewotCQkJcmV0dXJuIG5ldyBYU0lEKHN0clZhbHVlKTsgICAKLQkJfQotCQkKLQkJaWYgKHR5cGVEZWYgPT0gWFNDb25zdGFudHMuSURSRUZfRFQpIHsKLQkJCXJldHVybiBuZXcgWFNJRFJFRihzdHJWYWx1ZSk7ICAgCi0JCX0KLQkJCi0JCWlmICh0eXBlRGVmID09IFhTQ29uc3RhbnRzLk5NVE9LRU5fRFQpIHsKLQkJCXJldHVybiBuZXcgWFNOTVRPS0VOKHN0clZhbHVlKTsgICAKLQkJfQkJCi0JCS8vIGVuZCBvZiwgc3RyaW5nIHR5cGVzCi0JCQotCQlpZiAodHlwZURlZiA9PSBYU0NvbnN0YW50cy5USU1FX0RUKSB7Ci0JCQlyZXR1cm4gWFNUaW1lLnBhcnNlX3RpbWUoc3RyVmFsdWUpOwotCQl9ICAKLQkJCi0JICAgIC8vIGNyZWF0ZSBhIFhTU3RyaW5nIHZhbHVlLCBhcyBmYWxsYmFjayBvcHRpb24gCi0JCXJldHVybiBuZXcgWFNTdHJpbmcoc3RyVmFsdWUpOwotCQkKLQl9IC8vIG5ld1NjaGVtYVR5cGVWYWx1ZQotCQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvU2ltcGxlQXRvbWljSXRlbVR5cGVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1NpbXBsZUF0b21pY0l0ZW1UeXBlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTA2ZDg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvU2ltcGxlQXRvbWljSXRlbVR5cGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5BdG9taWNJdGVtVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFNpbXBsZUF0b21pY0l0ZW1UeXBlSW1wbCBpbXBsZW1lbnRzIEF0b21pY0l0ZW1UeXBlIHsKLQotCXByaXZhdGUgZmluYWwgc2hvcnQgb2NjdXJyZW5jZTsKLQlwcml2YXRlIGZpbmFsIFR5cGVEZWZpbml0aW9uIHR5cGVEZWZpbml0aW9uOwotCi0JcHVibGljIFNpbXBsZUF0b21pY0l0ZW1UeXBlSW1wbChUeXBlRGVmaW5pdGlvbiB0eXBlRGVmaW5pdGlvbikgewotCQlzdXBlcigpOwotCQl0aGlzLnR5cGVEZWZpbml0aW9uID0gdHlwZURlZmluaXRpb247Ci0JCXRoaXMub2NjdXJyZW5jZSA9IE9DQ1VSUkVOQ0VfT05FOwotCX0KLQotCXB1YmxpYyBTaW1wbGVBdG9taWNJdGVtVHlwZUltcGwoVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb24sIHNob3J0IG9jY3VycmVuY2UpIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy50eXBlRGVmaW5pdGlvbiA9IHR5cGVEZWZpbml0aW9uOwotCQl0aGlzLm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlOwotCX0KLQotCXB1YmxpYyBzaG9ydCBnZXRPY2N1cnJlbmNlKCkgewotCQlyZXR1cm4gdGhpcy5vY2N1cnJlbmNlOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIHR5cGVEZWZpbml0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9UZXh0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9UZXh0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNThlODhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvVGV4dFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIEplc3BlciBNb2xsZXItIGJ1ZyAyNzU2MTAgLSBBdm9pZCBiaWcgdGltZSBhbmQgbWVtb3J5IG92ZXJoZWFkIGZvciBleHRlcm5hbHMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgIC0gYnVnIDI4MTE4NiAtIGltcGxlbWVudGF0aW9uIG9mIGZuOmlkIGFuZCBmbjppZHJlZgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgVGV4dFR5cGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRleHRUeXBlIGV4dGVuZHMgTm9kZVR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUID0gInRleHQiOwotCXByaXZhdGUgVGV4dCBfdmFsdWU7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycwotCSAqIAotCSAqIEBwYXJhbSB2Ci0JICogICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIFRleHRUeXBlIG5vZGUKLQkgKi8KLQlwdWJsaWMgVGV4dFR5cGUoVGV4dCB2LCBUeXBlTW9kZWwgdG0pIHsKLQkJc3VwZXIodiwgdG0pOwotCQlfdmFsdWUgPSB2OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAidGV4dCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBURVhUOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0dWFsIHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWUgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5nZXROb2RlVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIFRleHQgdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVGV4dCB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdHlwZWRfdmFsdWUoKSB7Ci0JCXJldHVybiBuZXcgWFNVbnR5cGVkQXRvbWljKF92YWx1ZS5nZXREYXRhKCkpOwotCX0KLQotCS8qKgotCSAqIFVuc3VwcG9ydGVkIG1ldGhvZCBmb3IgdGhpcyBub2RldHlwZS4KLQkgKiAKLQkgKiBAcmV0dXJuIG51bGwgKG5vIHVzZXIgZGVmaW5lZCBuYW1lIGZvciB0aGlzIG5vZGUgZ2V0cyBkZWZpbmVkKQotCSAqLwotCXB1YmxpYyBRTmFtZSBub2RlX25hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFdpbGwgYWx3YXlzIHJldHVybiBmYWxzZTsKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJRCgpIHsKLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSURSRUYoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1VOVFlQRURBVE9NSUM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YUGF0aERlY2ltYWxGb3JtYXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFBhdGhEZWNpbWFsRm9ybWF0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZjZlNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YUGF0aERlY2ltYWxGb3JtYXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODM0MDQgLSBmaXhlZCBsb2NhbGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdFN5bWJvbHM7Ci1pbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIFhQYXRoIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIERlY2ltYWxGb3JtYXQgdG8gaGFuZGxlCi0gKiBzb21lIG9mIHRoZSB4cGF0aCBzcGVjaWZpYyBmb3JtYXR0aW5nIHJlcXVpcmVtZW50cy4gICBTcGVjaWZpY2FsbHkKLSAqIGl0IGFsbG93cyBmb3IgRSMgdG8gYmUgcmVwcmVzZW50ZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZXhwb25lbnQgdmFsdWUKLSAqIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlIGFsbCBleGlzdGluZyBEZWNpbWFsRm9ybWF0IHBhdHRlcm5zIGFyZSBoYW5kbGVkCi0gKiBhcyBpcy4KLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNlZSAxLjEKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYUGF0aERlY2ltYWxGb3JtYXQgZXh0ZW5kcyBEZWNpbWFsRm9ybWF0IHsKLQkKLQkvKioKLQkgKiAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtODIyOTg4NTk1NTg2NDE4NzQwMEw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5FR19JTkZJTklUWSA9ICItSU5GIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9TX0lORklOSVRZID0gIklORiI7Ci0KLQlwdWJsaWMgWFBhdGhEZWNpbWFsRm9ybWF0KFN0cmluZyBwYXR0ZXJuKSB7Ci0JCS8vIFhwYXRoIGhhcmRjb2RlcyB0aGlzIHRvIFVTIGxvY2FsZQotCQlzdXBlcihwYXR0ZXJuLCBuZXcgRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlLlVTKSk7Ci0JfQotCi0JLyoqCi0JICogRm9ybWF0cyB0aGUgc3RyaW5nIGRyb3BwaW5nIGEgWmVybyBFeHBvbmVudCBWYWx1ZSBpZiBpdCBleGlzdHMuCi0JICogQHBhcmFtIG9iagotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHhwYXRoRm9ybWF0KE9iamVjdCBvYmopIHsKLQkJcmV0dXJuIGZvcm1hdFhQYXRoKG9iaik7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZm9ybWF0WFBhdGgoT2JqZWN0IG9iaikgewotCQlTdHJpbmcgY3VyUGF0dGVybiA9IHRvUGF0dGVybigpOwotCQlTdHJpbmcgbmV3UGF0dGVybiA9IGN1clBhdHRlcm4ucmVwbGFjZUFsbCgiRTAiLCAiIik7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBGbG9hdCkgewotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdEZsb2F0VmFsdWUob2JqLCBjdXJQYXR0ZXJuLCBuZXdQYXR0ZXJuKTsKLQkJfQotCQlpZiAob2JqIGluc3RhbmNlb2YgRG91YmxlKSB7Ci0JCQlyZXR1cm4gZm9ybWF0RG91YmxlVmFsdWUob2JqLCBjdXJQYXR0ZXJuLCBuZXdQYXR0ZXJuKTsKLQkJfQotCQlyZXR1cm4gc3VwZXIuZm9ybWF0KG9iaiwgbmV3IFN0cmluZ0J1ZmZlcigpLCBuZXcgRmllbGRQb3NpdGlvbigwKSkudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBmb3JtYXREb3VibGVWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgY3VyUGF0dGVybiwKLQkJCVN0cmluZyBuZXdQYXR0ZXJuKSB7Ci0JCURvdWJsZSBkb3VibGVWYWx1ZSA9IChEb3VibGUpIG9iajsKLQkJaWYgKGlzRG91YmxlTmVnYXRpdmVJbmZpbml0eShkb3VibGVWYWx1ZSkpIHsKLQkJCXJldHVybiBORUdfSU5GSU5JVFk7Ci0JCX0KLQkJaWYgKGlzRG91YmxlUG9zaXRpdmVJbmZpbml0eShkb3VibGVWYWx1ZSkpIHsKLQkJCXJldHVybiBQT1NfSU5GSU5JVFk7Ci0JCX0KLQkJZG91YmxlWFBhdGhQYXR0ZXJuKG9iaiwgY3VyUGF0dGVybiwgbmV3UGF0dGVybik7Ci0JCXJldHVybiBmb3JtYXQob2JqLCBuZXcgU3RyaW5nQnVmZmVyKCksIG5ldyBGaWVsZFBvc2l0aW9uKDApKS50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb3VibGVYUGF0aFBhdHRlcm4oT2JqZWN0IG9iaiwgU3RyaW5nIGN1clBhdHRlcm4sCi0JCQlTdHJpbmcgbmV3UGF0dGVybikgewotCQlCaWdEZWNpbWFsIGRvdWJWYWx1ZSA9IG5ldyBCaWdEZWNpbWFsKCgoKERvdWJsZSkgb2JqKSkuZG91YmxlVmFsdWUoKSk7Ci0JCUJpZ0RlY2ltYWwgbWluVmFsdWUgPSBuZXcgQmlnRGVjaW1hbCgiLTFFNiIpOwotCQlCaWdEZWNpbWFsIG1heFZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoIjFFNiIpOwotCQlpZiAoZG91YlZhbHVlLmNvbXBhcmVUbyhtaW5WYWx1ZSkgPiAwICYmIGRvdWJWYWx1ZS5jb21wYXJlVG8obWF4VmFsdWUpIDwgMCkgewotCQkJYXBwbHlQYXR0ZXJuKG5ld1BhdHRlcm4pOwotCQl9IGVsc2UgeyAvL2lmIChkb3ViVmFsdWUuY29tcGFyZVRvKG1pblZhbHVlKSA8IDApIHsKLQkJCWFwcGx5UGF0dGVybihjdXJQYXR0ZXJuLnJlcGxhY2VBbGwoIjBcXC4jIiwgIjAuMCIpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0RvdWJsZVBvc2l0aXZlSW5maW5pdHkoRG91YmxlIGRvdWJsZVZhbHVlKSB7Ci0JCXJldHVybiBkb3VibGVWYWx1ZS5kb3VibGVWYWx1ZSgpID09IERvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNEb3VibGVOZWdhdGl2ZUluZmluaXR5KERvdWJsZSBkb3VibGVWYWx1ZSkgewotCQlyZXR1cm4gZG91YmxlVmFsdWUuZG91YmxlVmFsdWUoKSA9PSBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZm9ybWF0RmxvYXRWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgY3VyUGF0dGVybiwKLQkJCVN0cmluZyBuZXdQYXR0ZXJuKSB7Ci0JCUZsb2F0IGZsb2F0VmFsdWUgPSAoRmxvYXQpIG9iajsKLQkJaWYgKGlzRmxvYXROZWdJbmZpbml0eShmbG9hdFZhbHVlKSkgewotCQkJcmV0dXJuIE5FR19JTkZJTklUWTsKLQkJfQotCQlpZiAoaXNGbG9hdFBvc0luZmluaXR5KGZsb2F0VmFsdWUpKSB7Ci0JCQlyZXR1cm4gUE9TX0lORklOSVRZOwotCQl9Ci0JCWZsb2F0WFBhdGhQYXR0ZXJuKGN1clBhdHRlcm4sIG5ld1BhdHRlcm4sIGZsb2F0VmFsdWUpOwotCQlyZXR1cm4gZm9ybWF0KG9iaiwgbmV3IFN0cmluZ0J1ZmZlcigpLCBuZXcgRmllbGRQb3NpdGlvbigwKSkudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNGbG9hdFBvc0luZmluaXR5KEZsb2F0IGZsb2F0VmFsdWUpIHsKLQkJcmV0dXJuIGZsb2F0VmFsdWUuZmxvYXRWYWx1ZSgpID09IEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Zsb2F0TmVnSW5maW5pdHkoRmxvYXQgZmxvYXRWYWx1ZSkgewotCQlyZXR1cm4gZmxvYXRWYWx1ZS5mbG9hdFZhbHVlKCkgPT0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZsb2F0WFBhdGhQYXR0ZXJuKFN0cmluZyBjdXJQYXR0ZXJuLCBTdHJpbmcgbmV3UGF0dGVybiwKLQkJCUZsb2F0IGZsb2F0VmFsdWUpIHsKLQkJaWYgKGZsb2F0VmFsdWUuZmxvYXRWYWx1ZSgpID4gLTFFNmYgJiYgZmxvYXRWYWx1ZS5mbG9hdFZhbHVlKCkgPCAxRTZmKSB7Ci0JCQkKLQkJCWFwcGx5UGF0dGVybihuZXdQYXR0ZXJuKTsKLQkJfSBlbHNlIGlmIChmbG9hdFZhbHVlLmZsb2F0VmFsdWUoKSA8PSAtMUU2ZikgewotCQkJYXBwbHlQYXR0ZXJuKGN1clBhdHRlcm4ucmVwbGFjZUFsbCgiMFxcLiMiLCAiMC4wIiApKTsKLQkJfQotCX0KLQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNBbnlVUkkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNBbnlVUkkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE0YTE1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQW55VVJJLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnMjc0NzE5IC0gaW1wbGVtZW50YXRpb24gb2YgZXF1YWxpdHkgb2YgeHM6YW55VVJJIHZhbHVlcwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gZml4ZWQgY2FzdGluZyB0byB4czphbnlVUkkgb25seSBzdHJpbmcsCi0gKiAgICAgICAgIHVudHlwZWRBdG9taWMsIGFuZCBhbnlVUkkgYXJlIGFsbG93ZWQuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODM3NzcgLSBpbXBsZW1lbnRlZCBndCwgbHQgY29tcGFyaXNvbiBjb2RlLgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMTU5IC0gYWRkZWQgcHJvbW90aW9uIG9mIHhzOmFueVVSSSB0byBzdHJpbmcgKHJldmVyc2UgY2FzZSkgCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBHdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wTHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBVbml2ZXJzYWwgUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSByZWZlcmVuY2UKLSAqLwotcHVibGljIGNsYXNzIFhTQW55VVJJIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0FOWV9VUkkgPSAieHM6YW55VVJJIjsKLQlwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLQkvKioKLQkgKiBBcml0eSAxIENvbnN0cnVjdG9yCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJCi0JICovCi0JcHVibGljIFhTQW55VVJJKFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogQXJpdHkgMCBDb25zdHJ1Y3Rvci4gSW5pdGlhdGVzIFVSSSB0byBudWxsLgotCSAqLwotCXB1YmxpYyBYU0FueVVSSSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmFueVVSSSIsIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19BTllfVVJJOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHR5cGUgbmFtZSBvZiB0aGlzIGRhdGF0eXBlCi0JICogCi0JICogQHJldHVybiAiYW55VVJJIiwgdGhlIHR5cGUgbmFtZSBvZiB0aGlzIGRhdGF0eXBlCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiYW55VVJJIjsKLQl9Ci0KLQkvKioKLQkgKiBUcmFuc2Zvcm1zIGFuZCByZXRyaWV2ZXMgdGhlIFVSSSB2YWx1ZSBvZiB0aGlzIFVSSSBkYXRhdHlwZSBpbiBTdHJpbmcKLQkgKiBmb3JtYXQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBVUkkgdmFsdWUgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIHRoZSBVUkkgZGF0YXR5cGUgYXMgYQotCSAqICAgICAgICAgU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRpb24gb2YgYSByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiBhIFVSSSBmcm9tIGEgcHJldmlvdXMgcmVzdWx0Ci0JICogc2VxdWVuY2UuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgcHJldmlvdXMgcmVzdWx0IHNlcXVlbmNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgVVJJIHN1cHBsaWVkCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55VHlwZSBhYXQgPSAoQW55VHlwZSkgYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKCEoYWF0LnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKQotCQkJCXx8IGFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscyhYU19BTllfVVJJKSB8fCBhYXQuc3RyaW5nX3R5cGUoKQotCQkJCS5lcXVhbHMoInhzOnVudHlwZWRBdG9taWMiKSkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYU0FueVVSSShhYXQuc3RyaW5nX3ZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgeHM6YW55VVJJIChvciwgYnkgcHJvbW90aW9uIG9mIHRoaXMsIHhzOnN0cmluZykKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIG9mIHRoZSBzYW1lIFN0cmluZy4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZyBpbnN0YW5jZW9mIFhTQW55VVJJIHx8IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nKSB7Ci0JCQlpZiAodGhpcy5zdHJpbmdfdmFsdWUoKS5lcXVhbHMoYXJnLnN0cmluZ192YWx1ZSgpKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBHcmVhdGVyIHRoYW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotCSAqIG11c3QgYmUgb2YgdHlwZSB4czphbnlVUkkgKG9yLCBieSBwcm9tb3Rpb24gb2YgdGhpcywgeHM6c3RyaW5nKQotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmICghKGFyZyBpbnN0YW5jZW9mIFhTQW55VVJJIHx8IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nKSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJCi0JCX0KLQkJCi0JCVN0cmluZyBhbnlVUkkgPSB0aGlzLnN0cmluZ192YWx1ZSgpOwotCQlTdHJpbmcgY29tcGFyZVRvVVJJID0gYXJnLnN0cmluZ192YWx1ZSgpOwotCQlpZiAoYW55VVJJLmNvbXBhcmVUbyhjb21wYXJlVG9VUkkpID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogTGVzcyB0aGFuIGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgeHM6YW55VVJJIChvciwgYnkgcHJvbW90aW9uIG9mIHRoaXMsIHhzOnN0cmluZykKLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoIShhcmcgaW5zdGFuY2VvZiBYU0FueVVSSSB8fCBhcmcgaW5zdGFuY2VvZiBYU1N0cmluZykpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQkJCi0JCVN0cmluZyBhbnlVUkkgPSB0aGlzLnN0cmluZ192YWx1ZSgpOwotCQlTdHJpbmcgY29tcGFyZVRvVVJJID0gYXJnLnN0cmluZ192YWx1ZSgpOwotCQlpZiAoYW55VVJJLmNvbXBhcmVUbyhjb21wYXJlVG9VUkkpIDwgMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0FOWVVSSTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCYXNlNjRCaW5hcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCYXNlNjRCaW5hcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlOWI5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQmFzZTY0QmluYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODEwNDYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi51dGlsLkJhc2U2NDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLmR2LnV0aWwuSGV4QmluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0QmluYXJ5IGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0Jhc2U2NEJpbmFyeSBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfQkFTRTY0X0JJTkFSWSA9ICJ4czpiYXNlNjRCaW5hcnkiOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTQmFzZTY0QmluYXJ5KFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU0Jhc2U2NEJpbmFyeSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmJhc2U2NEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19CQVNFNjRfQklOQVJZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiYmFzZTY0QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiYmFzZTY0QmluYXJ5IjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgYmFzZTY0QmluYXJ5IHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkLiBUaGlzIG1ldGhvZCBpcwotCSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gc3RyaW5nX3ZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBiYXNlNjRCaW5hcnkgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyB2YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGJhc2U2NEJpbmFyeSB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBiYXNlNjRCaW5hcnkgdmFsdWUgCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIGJhc2U2NEJpbmFyeSB2YWx1ZSAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJU3RyaW5nIHN0cl92YWx1ZSA9IGFhdC5nZXRTdHJpbmdWYWx1ZSgpOwotCQkKLQkJYnl0ZVtdIGRlY29kZWRWYWx1ZSA9IEJhc2U2NC5kZWNvZGUoc3RyX3ZhbHVlKTsKLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSkgewotCQkJZGVjb2RlZFZhbHVlID0gSGV4QmluLmRlY29kZShzdHJfdmFsdWUpOwotCQkJZGVjb2RlZFZhbHVlID0gQmFzZTY0LmVuY29kZShkZWNvZGVkVmFsdWUpLmdldEJ5dGVzKCk7Ci0JCX0gZWxzZSB7Ci0JCQlkZWNvZGVkVmFsdWUgPSBzdHJfdmFsdWUuZ2V0Qnl0ZXMoKTsKLQkJfQotCQlpZiAoZGVjb2RlZFZhbHVlICE9IG51bGwpIHsKLQkJICByZXR1cm4gbmV3IFhTQmFzZTY0QmluYXJ5KG5ldyBTdHJpbmcoZGVjb2RlZFZhbHVlKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgLy8gaW52YWxpZCBiYXNlNjQgc3RyaW5nCi0JCSAgdGhyb3cgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJCi0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5KSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgYmFzZTY0QmluYXJ5Ci0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBzYW1lLiBGYWxzZSBvdGhlcndpc2UuCi0JICogICAgICAgICAKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0gICAgICBTdHJpbmcgdmFsVG9Db21wYXJlID0gYXJnLmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAKLSAgICAgIGJ5dGVbXSB2YWx1ZTEgPSBCYXNlNjQuZGVjb2RlKF92YWx1ZSk7Ci0gICAgICBieXRlW10gdmFsdWUyID0gQmFzZTY0LmRlY29kZSh2YWxUb0NvbXBhcmUpOwotICAgICAgaWYgKHZhbHVlMiA9PSBudWxsKSB7Ci0gICAgCXJldHVybiBmYWxzZTsgIAotICAgICAgfQotICAgICAgCi0gICAgICBpbnQgbGVuID0gdmFsdWUxLmxlbmd0aDsKLSAgICAgIGlmIChsZW4gIT0gdmFsdWUyLmxlbmd0aCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgaWYgKHZhbHVlMVtpXSAhPSB2YWx1ZTJbaV0pIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0JBU0U2NEJJTkFSWTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gQmFzZTY0LmRlY29kZShfdmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCb29sZWFuLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQm9vbGVhbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmEzNzI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCb29sZWFuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZzI3NDc4NCAtIGltcHJvdmVtZW50cyB0byB4czpib29sZWFuIGRhdGEgdHlwZSBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBjb3JyZWN0ZWQgY2FzdGluZyB0byBib29sZWFuLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJ1ZSBvciBhIGZhbHNlIHZhbHVlLgotICovCi1wdWJsaWMgY2xhc3MgWFNCb29sZWFuIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19CT09MRUFOID0gInhzOmJvb2xlYW4iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgWFNCb29sZWFuIFRSVUUgPSBuZXcgWFNCb29sZWFuKHRydWUpOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgWFNCb29sZWFuIEZBTFNFID0gbmV3IFhTQm9vbGVhbihmYWxzZSk7Ci0JcHJpdmF0ZSBib29sZWFuIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYXRlcyB0aGUgbmV3IHJlcHJlc2VudGF0aW9uIHRvIHRoZSBib29sZWFuIHN1cHBsaWVkCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICBJbml0aWFsaXplcyB0aGlzIGRhdGF0eXBlIHRvIHJlcHJlc2VudCB0aGlzIGJvb2xlYW4KLQkgKi8KLQlwdWJsaWMgWFNCb29sZWFuKGJvb2xlYW4geCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIEluaXRpYXRlcyB0byBhIGRlZmF1bHQgcmVwcmVzZW50YXRpb24gb2YgZmFsc2UuCi0JICovCi0JcHVibGljIFhTQm9vbGVhbigpIHsKLQkgIHRoaXMoZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBmdWxsIHR5cGUgcGF0aG5hbWUgb2YgdGhpcyBkYXRhdHlwZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmJvb2xlYW4iLCB0aGUgZnVsbCBkYXRhdHlwZSBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19CT09MRUFOOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBCb29sZWFuLnZhbHVlT2YoX3ZhbHVlKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIGRhdGF0eXBlIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJib29sZWFuIiwgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiYm9vbGVhbiI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuICIiICsgX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgYWN0dWFsIGJvb2xlYW4gdmFsdWUgc3RvcmVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgYm9vbGVhbiB2YWx1ZQotCSAqIGluIHRoZSBzdXBwbGllZCByZXN1bHQgc2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVzdWx0IHNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgYm9vbGVhbiB2YWx1ZS4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gQSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGJvb2xlYW4gdmFsdWUgc3VwcGxpZWQuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJICByZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCQkKLQkJSXRlbSBhbnlUeXBlID0gYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYW55VHlwZSBpbnN0YW5jZW9mIFhTRHVyYXRpb24gfHwgYW55VHlwZSBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYW55VHlwZSBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8IGFueVR5cGUgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fAotCQkJYW55VHlwZSBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJU3RyaW5nIHN0cl92YWx1ZSA9IGFueVR5cGUuZ2V0U3RyaW5nVmFsdWUoKTsKLQkJCi0JCQotCQlpZiAoIShpc0Nhc3RhYmxlKGFueVR5cGUsIHN0cl92YWx1ZSkpKSB7Ci0JCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQlyZXR1cm4gWFNCb29sZWFuLnZhbHVlT2YoISBpc0ZhbHNlKHN0cl92YWx1ZSkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0ZhbHNlKFN0cmluZyBzdHJfdmFsdWUpIHsKLQkJcmV0dXJuIHN0cl92YWx1ZS5lcXVhbHMoIjAiKSB8fCBzdHJfdmFsdWUuZXF1YWxzKCJmYWxzZSIpIHx8Ci0JCSAgICBzdHJfdmFsdWUuZXF1YWxzKCIrMCIpIHx8IHN0cl92YWx1ZS5lcXVhbHMoIi0wIikgfHwKLQkJICAgIHN0cl92YWx1ZS5lcXVhbHMoIjAuMEUwIikgfHwgc3RyX3ZhbHVlLmVxdWFscygiTmFOIik7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoSXRlbSBhbnlUeXBlLCBTdHJpbmcgc3RyX3ZhbHVlKSB7Ci0JCXJldHVybiBzdHJfdmFsdWUuZXF1YWxzKCIwIikgfHwgc3RyX3ZhbHVlLmVxdWFscygiMSIpIHx8IAotCQkJIHN0cl92YWx1ZS5lcXVhbHMoInRydWUiKSB8fCBzdHJfdmFsdWUuZXF1YWxzKCJmYWxzZSIpIHx8Ci0JCQkgYW55VHlwZSBpbnN0YW5jZW9mIE51bWVyaWNUeXBlOwotCX0KLQotCS8vIGNvbXBhcmlzb25zCi0JLyoqCi0JICogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkgYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbgotCSAqIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zIHRydWUgaWYgYm90aCByZXByZXNlbnQgc2FtZSBib29sZWFuIHZhbHVlLCBmYWxzZQotCSAqIG90aGVyd2lzZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGJvb2xlYW4gdmFsdWUgdG8gY29tcGFyZQotCSAqICAgICAgICAgICAgd2l0aC4KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gTmV3IFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0cnVlL2ZhbHNlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkKLQkgKiAgICAgICAgIGNvbXBhcmlzb24KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0Jvb2xlYW4gYmFyZyA9IChYU0Jvb2xlYW4pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZSgoSXRlbSlhcmcsCi0JCQkJWFNCb29sZWFuLmNsYXNzKTsKLQotCQlyZXR1cm4gdmFsdWUoKSA9PSBiYXJnLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBzdXBwbGllZCBhbmQgdGhpcyBib29sZWFuIHJlcHJlc2VudGF0aW9uLiBSZXR1cm5zCi0JICogdHJ1ZSBpZiB0aGlzIFhTQm9vbGVhbiByZXByZXNlbnRzIHRydWUgYW5kIHRoYXQgWFNCb29sZWFuIHN1cHBsaWVkCi0JICogcmVwcmVzZW50cyBmYWxzZS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib29sZWFuIHZhbHVlIHRvIGNvbXBhcmUKLQkgKiAgICAgICAgICAgIHdpdGguCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIE5ldyBYU0Jvb2xlYW4gcmVwcmVzZW50YXRpb24gb2YgdHJ1ZS9mYWxzZSByZXN1bHQgb2YgdGhlCi0JICogICAgICAgICBjb21wYXJpc29uCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0Jvb2xlYW4gYmFyZyA9IChYU0Jvb2xlYW4pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZSgoSXRlbSlhcmcsCi0JCQkJWFNCb29sZWFuLmNsYXNzKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCWlmICh2YWx1ZSgpICYmICFiYXJnLnZhbHVlKCkpCi0JCQlyZXN1bHQgPSB0cnVlOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VwcGxpZWQgYW5kIHRoaXMgYm9vbGVhbiByZXByZXNlbnRhdGlvbi4gUmV0dXJucwotCSAqIHRydWUgaWYgdGhpcyBYU0Jvb2xlYW4gcmVwcmVzZW50cyBmYWxzZSBhbmQgdGhhdCBYU0Jvb2xlYW4gc3VwcGxpZWQKLQkgKiByZXByZXNlbnRzIHRydWUuIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTQm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYm9vbGVhbiB2YWx1ZSB0byBjb21wYXJlCi0JICogICAgICAgICAgICB3aXRoLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBOZXcgWFNCb29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIHRydWUvZmFsc2UgcmVzdWx0IG9mIHRoZQotCSAqICAgICAgICAgY29tcGFyaXNvbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNCb29sZWFuIGJhcmcgPSAoWFNCb29sZWFuKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoKEl0ZW0pYXJnLAotCQkJCVhTQm9vbGVhbi5jbGFzcyk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQlpZiAoIXZhbHVlKCkgJiYgYmFyZy52YWx1ZSgpKQotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfQk9PTEVBTjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSB2YWx1ZU9mKAotCQkJYm9vbGVhbiBhbnN3ZXIpIHsKLQkJcmV0dXJuIGFuc3dlciA/IFRSVUUgOiBGQUxTRTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCeXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTQnl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGU3ZjNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNCeXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzkgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpieXRlIGRhdGEgdHlwZQotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotcHVibGljIGNsYXNzIFhTQnl0ZSBleHRlbmRzIFhTU2hvcnQgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19CWVRFID0gInhzOmJ5dGUiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTQnl0ZSgpIHsKLQkgIHRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKDApKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgYnl0ZSB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBCeXRlIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0J5dGUoQmlnSW50ZWdlciB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfQllURTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJieXRlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiYnl0ZSI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgJ2J5dGUnIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGJ5dGUgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ2J5dGUnIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIGJ5dGUuCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKC0xMjhMKTsKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDEyN0wpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcmV0dXJuIG5ldyBYU0J5dGUoYmlnSW50KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19CWVRFOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjY3OGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0NzkyIC0gaW1wcm92ZW1lbnRzIHRvIHhzOmRhdGUgY29uc3RydWN0b3IgZnVuY3Rpb24uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCBjYXN0aW5nIGlzc3VlLiAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gZml4IGRhdGVzIGZvciBjb21wYXJpc29uIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLlhNTEdyZWdvcmlhbkNhbGVuZGFyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEd0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBMdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uTWF0aE1pbnVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoUGx1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogUmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIG9mIHRoZSBmb3JtIHllYXItbW9udGgtZGF5IGFuZCBvcHRpb25hbCB0aW1lem9uZQotICovCi1wdWJsaWMgY2xhc3MgWFNEYXRlIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LCBDbXBHdCwKLQotTWF0aE1pbnVzLCBNYXRoUGx1cywKLQotQ2xvbmVhYmxlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfREFURSA9ICJ4czpkYXRlIjsKLQlwcml2YXRlIENhbGVuZGFyIF9jYWxlbmRhcjsKLQlwcml2YXRlIGJvb2xlYW4gX3RpbWV6b25lZDsKLQlwcml2YXRlIFhTRHVyYXRpb24gX3R6OwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgYSBzdXBwbGllZCBkYXRlCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgVGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGhlIHRpbWUgem9uZSBvZiB0aGUgZGF0ZSB0byBiZSBzdG9yZWQuCi0JICovCi0JcHVibGljIFhTRGF0ZShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCi0JCV90eiA9IHR6OwotCQlpZiAodHogPT0gbnVsbCkKLQkJCV90aW1lem9uZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZGF0ZQotCSAqLwotCXB1YmxpYyBYU0RhdGUoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRhdGUiIHdoaWNoIGlzIHRoZSBkYXRheXBlIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJkYXRlIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIEEgY29weSBvZiB0aGlzIGRhdGUgcmVwcmVzZW50YXRpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLQkJQ2FsZW5kYXIgYyA9IChDYWxlbmRhcikgY2FsZW5kYXIoKS5jbG9uZSgpOwotCQlYU0R1cmF0aW9uIHQgPSB0eigpOwotCi0JCWlmICh0ICE9IG51bGwpCi0JCQl0ID0gKFhTRHVyYXRpb24pIHQuY2xvbmUoKTsKLQotCQlyZXR1cm4gbmV3IFhTRGF0ZShjLCB0KTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIChvZiB0aGUgZm9ybSB5ZWFyLW1vbnRoLWRheSBvcgotCSAqIHllYXItbW9udGgtZGF5K3RpbWV6b25lKSBhbmQgY29uc3RydWN0cyBhIG5ldyBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YKLQkgKiBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0JICogQHJldHVybiBUaGUgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RhdGUgcGFyc2VfZGF0ZShTdHJpbmcgc3RyKSB7Ci0KLQkJU3RyaW5nIGRhdGUgPSAiIjsKLQkJU3RyaW5nIHRpbWUgPSAiVDAwOjAwOjAwLjAiOwotCi0JCWludCBpbmRleCA9IHN0ci5pbmRleE9mKCcrJywgMSk7Ci0JCWlmIChpbmRleCA9PSAtMSkgewotCQkJaW5kZXggPSBzdHIuaW5kZXhPZignLScsIDEpOwotCQkJaWYgKGluZGV4ID09IC0xKQotCQkJCXJldHVybiBudWxsOwotCQkJaW5kZXggPSBzdHIuaW5kZXhPZignLScsIGluZGV4ICsgMSk7Ci0JCQlpZiAoaW5kZXggPT0gLTEpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgaW5kZXggKyAxKTsKLQkJfQotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCdaJywgMSk7Ci0JCWlmIChpbmRleCAhPSAtMSkgewotCQkJZGF0ZSA9IHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJLy8gaGVyZSB3ZSBnbwotCQkJZGF0ZSArPSB0aW1lOwotCQkJZGF0ZSArPSBzdHIuc3Vic3RyaW5nKGluZGV4LCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UgewotCQkJZGF0ZSA9IHN0ciArIHRpbWU7Ci0JCX0KLQotCQkvLyBzb3JyeSBhZ2FpbiA9RAotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNEYXRlKGR0LmNhbGVuZGFyKCksIGR0LnR6KCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgdmFsdWUgaW4KLQkgKiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgdmFsdWUuCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIEEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBkYXRlIHZhbHVlIHN1cHBsaWVkLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJWFNEYXRlIGR0ID0gY2FzdERhdGUoYWF0KTsKLQotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcmV0dXJuIGR0OwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEl0ZW0gYWF0KSB7Ci0KLQkJLy8gV2UgbWlnaHQgYmUgYWJsZSB0byBjYXN0IHRoZXNlLgotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljCi0JCQkJfHwgYWF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCXJldHVybiB0cnVlOwotCi0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIFhTRGF0ZSBjYXN0RGF0ZShJdGVtIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXRlKGRhdGUuY2FsZW5kYXIoKSwgZGF0ZS50eigpKTsKLQkJfQotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXRlKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0KLQkJcmV0dXJuIHBhcnNlX2RhdGUoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSB5ZWFyIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgeWVhciB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IHllYXIoKSB7Ci0JCWludCB5ID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5ZRUFSKTsKLQkJaWYgKF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuRVJBKSA9PSBHcmVnb3JpYW5DYWxlbmRhci5CQykKLQkJCXkgKj0gLTE7Ci0KLQkJcmV0dXJuIHk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIG1vbnRoIGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgbW9udGggdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtb250aCgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZGF5IGZyb20gdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgZGF5IHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgZGF5KCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgZGF0ZSBoYXMgYW4gb3B0aW9uYWwgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIGl0Ci0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGEgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0ZS4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIiI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCi0JCWlmIChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuRVJBKSA9PSBHcmVnb3JpYW5DYWxlbmRhci5CQykgewotCQkJcmV0ICs9ICItIjsKLQkJfQotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLllFQVIpLCA0KTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCXJldCArPSAiLSI7Ci0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCksCi0JCQkJMik7Ci0KLQkJaWYgKHRpbWV6b25lZCgpKSB7Ci0JCQlpbnQgaHJzID0gX3R6LmhvdXJzKCk7Ci0JCQlpbnQgbWluID0gX3R6Lm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gX3R6LnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCQlyZXQgKz0gIloiOwotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCQlpZiAoX3R6Lm5lZ2F0aXZlKCkpIHsKLQkJCQkJdFpvbmVTdHIgKz0gIi0iOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRab25lU3RyICs9ICIrIjsKLQkJCQl9Ci0JCQkJdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7Ci0JCQkJdFpvbmVTdHIgKz0gIjoiOwotCQkJCXRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChtaW4sIDIpOwotCi0JCQkJcmV0ICs9IHRab25lU3RyOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaXZlIHRoZSBkYXRhdHlwZSBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZGF0ZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfREFURTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8KLQkgKiBhY2NvdW50KQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFhTRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSB0byBjb21wYXJlIHRvCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byBkYXRlcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0IHBvaW50IGluIHRpbWUuCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlIHZhbCA9IChYU0RhdGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZSgoSXRlbSlhcmcsIFhTRGF0ZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuZXF1YWxzKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzICh0YWtpbmcgdGltZXpvbmVzIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZSB2YWwgPSAoWFNEYXRlKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoKEl0ZW0pYXJnLCBYU0RhdGUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmJlZm9yZSh0aGF0Y2FsKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIG9uIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkYXRlcyAodGFraW5nIHRpbWV6b25lcyBpbnRvIGFjY291bnQpCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgWFNEYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgbGllcyBhZnRlciB0aGUgZGF0ZSBzdXBwbGllZC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZSB2YWwgPSAoWFNEYXRlKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoKEl0ZW0pYXJnLCBYU0RhdGUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmFmdGVyKHRoYXRjYWwpOwotCX0KLQotCS8vIFhYWCB0aGlzIGlzIGluY29ycmVjdCBbZXBvY2hdCi0JLyoqCi0JICogQ3VycmVudGx5IHVuc3VwcG9ydGVkIG1ldGhvZC4gUmV0cmlldmVzIHRoZSBkYXRlIGluIG1pbGxpc2Vjb25kcyBzaW5jZQotCSAqIHRoZSBiZWdpbmluZyBvZiBlcG9jaAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoCi0JICovCi0JcHVibGljIGRvdWJsZSB2YWx1ZSgpIHsKLQkJcmV0dXJuIGNhbGVuZGFyKCkuZ2V0VGltZUluTWlsbGlzKCkgLyAxMDAwLjA7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlIGFuZCBhIHN1cHBsaWVkIHJlc3VsdAotCSAqIHNlcXVlbmNlIChYU0RhdGUsIFhTWWVhck1vbnRoRHVyYXRpb24gYW5kIFhTRGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0JICogdmFsaWQgb25lcykuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotCSAqICAgICAgICAgICAgb3BlcmF0b3IuIElmIHRoaXMgaXMgYW4gWFNEYXRlLCB0aGUgcmVzdWx0IHdpbGwgYmUgYQotCSAqICAgICAgICAgICAgWFNEYXlUaW1lRHVyYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSB0d28KLQkgKiAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWFNZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotCSAqICAgICAgICAgICAgWFNEYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQgb2YKLQkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlbSBhdCA9IGFyZy5maXJzdCgpOwotCi0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNEYXRlKSAmJiAhKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikKLQkJCQkmJiAhKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RhdGUoYXJnKTsKLQkJfQotCQkKLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikgewotCQkJcmV0dXJuIG1pbnVzWFNZZWFyTW9udGhEdXJhdGlvbigoWFNZZWFyTW9udGhEdXJhdGlvbilhdCk7Ci0JCX0KLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbigoWFNEYXlUaW1lRHVyYXRpb24pYXQpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBtaW51c1hTRGF5VGltZUR1cmF0aW9uKEFueVR5cGUgYXQpIHsKLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgYXQ7Ci0KLQkJdHJ5IHsKLQkJCVhTRGF0ZSByZXMgPSAoWFNEYXRlKSBjbG9uZSgpOwotCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gX2RhdGF0eXBlRmFjdG9yeQotCQkJCQkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoCi0JCQkJCQkJKEdyZWdvcmlhbkNhbGVuZGFyKSBjYWxlbmRhcigpKTsKLQkJCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBfZGF0YXR5cGVGYWN0b3J5Ci0JCQkJCS5uZXdEdXJhdGlvbih2YWwuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQl4bWxDYWwuYWRkKGR0ZHVyYXRpb24ubmVnYXRlKCkpOwotCQkJcmVzID0gbmV3IFhTRGF0ZSh4bWxDYWwudG9HcmVnb3JpYW5DYWxlbmRhcigpLCByZXMudHooKSk7Ci0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXgpIHsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNZZWFyTW9udGhEdXJhdGlvbihBbnlUeXBlIGF0KSB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIGF0OwotCQl0cnkgewotCQkJWFNEYXRlIHJlcyA9IChYU0RhdGUpIGNsb25lKCk7Ci0KLQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NT05USCwgdmFsLm1vbnRoVmFsdWUoKSAqIC0xKTsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBleCkgewotCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBtaW51c1hTRGF0ZShSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGUgdmFsID0gKFhTRGF0ZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEYXRlLmNsYXNzKTsKLQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IG51bGw7Ci0JCUNhbGVuZGFyIHRoaXNDYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdENhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCWxvbmcgZHVyYXRpb24gPSB0aGlzQ2FsLmdldFRpbWVJbk1pbGxpcygpCi0JCQkJLSB0aGF0Q2FsLmdldFRpbWVJbk1pbGxpcygpOwotCQlkdGR1cmF0aW9uID0gX2RhdGF0eXBlRmFjdG9yeS5uZXdEdXJhdGlvbihkdXJhdGlvbik7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhYU0RheVRpbWVEdXJhdGlvbgotCQkJCS5wYXJzZURURHVyYXRpb24oZHRkdXJhdGlvbi50b1N0cmluZygpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGUgYW5kIGEgc3VwcGxpZWQgcmVzdWx0Ci0JICogc2VxdWVuY2UgKFhEVFllYXJNb250aER1cmF0aW9uIGFuZCBYRFREYXlUaW1lRHVyYXRpb24gYXJlIG9ubHkgdmFsaWQKLQkgKiBvbmVzKS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UgdGhhdCBpcyBvbiB0aGUgcmlnaHQgb2YgdGhlIG1pbnVzCi0JICogICAgICAgICAgICBvcGVyYXRvci4gSWYgYXJnIGlzIGFuIFhEVFllYXJNb250aER1cmF0aW9uIG9yIGFuCi0JICogICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gdGhlIHJlc3VsdCB3aWxsIGJlIGEgWFNEYXRlIG9mIHRoZSByZXN1bHQKLQkgKiAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3VwcGxpZWQuCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlJdGVtIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCWlmIChhdCBpbnN0YW5jZW9mIFhTWWVhck1vbnRoRHVyYXRpb24pIHsKLQkJCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBhdDsKLQotCQkJCVhTRGF0ZSByZXMgPSAoWFNEYXRlKSBjbG9uZSgpOwotCi0JCQkJcmVzLmNhbGVuZGFyKCkuYWRkKENhbGVuZGFyLk1PTlRILCB2YWwubW9udGhWYWx1ZSgpKTsKLQkJCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikgewotCQkJCVhTRGF5VGltZUR1cmF0aW9uIHZhbCA9IChYU0RheVRpbWVEdXJhdGlvbikgYXQ7Ci0KLQkJCQlYU0RhdGUgcmVzID0gKFhTRGF0ZSkgY2xvbmUoKTsKLQotCQkJCS8vIFdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIE51bWJlciBvZiBkYXlzIGRyb3BwaW5nIHRoZSByZXN0LgotCQkJCWludCBkYXlzID0gdmFsLmRheXMoKTsKLQkJCQlpZiAodmFsLm5lZ2F0aXZlKCkpIHsKLQkJCQkJZGF5cyAqPSAtMTsKLQkJCQl9Ci0JCQkJcmVzLmNhbGVuZGFyKCkuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgZGF5cyk7Ci0KLQkJCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTUlMTElTRUNPTkQsCi0JCQkJCQkoaW50KSAodmFsLnRpbWVfdmFsdWUoKSAqIDEwMDAuMCkpOwotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQkJfSBlbHNlIHsKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCQl9Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCX0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfREFURTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXRlVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGVUaW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MDBmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RhdGVUaW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZWQgc3RyaW5nX3ZhbHVlKCkgaW1wbGVtZW50YXRpb24gKG1vdGl2YXRlZCBieSBidWcsIDI4MTgyMikKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgyMjIzIC0gaW1wbGVtZW50YXRpb24gb2YgeHM6ZHVyYXRpb24uCi0gKiAgICAgICAgICAgICAgICAgIC0gYnVnIDI2Mjc2NSAtIGFkZGl0aW9uYWwgdHdlYWsgdG8gY29udmVydCAyNDowMDowMCB0byAwMDowMDowMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLlhNTEdyZWdvcmlhbkNhbGVuZGFyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEd0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBMdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uTWF0aE1pbnVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoUGx1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLSAqLwotcHVibGljIGNsYXNzIFhTRGF0ZVRpbWUgZXh0ZW5kcyBDYWxlbmRhclR5cGUgaW1wbGVtZW50cyBDbXBFcSwgQ21wTHQsIENtcEd0LAotCi1NYXRoTWludXMsIE1hdGhQbHVzLAotCi1DbG9uZWFibGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19EQVRFX1RJTUUgPSAieHM6ZGF0ZVRpbWUiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSBuZXcgcmVwcmVzZW50YXRpb24gb2YgYSBzdXBwbGllZCBkYXRlIGFuZCB0aW1lCi0JICogCi0JICogQHBhcmFtIGNhbAotCSAqICAgICAgICAgICAgVGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGFuZCB0aW1lIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGhlIHRpbWV6b25lIG9mIHRoZSBkYXRlIHRvIGJlIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgWFNEYXRlVGltZShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCi0JCV90eiA9IHR6OwotCi0JCWlmICh0eiA9PSBudWxsKQotCQkJX3RpbWV6b25lZCA9IGZhbHNlOwotCQllbHNlCi0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIEEgY29weSBvZiB0aGlzIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLQkJQ2FsZW5kYXIgYyA9IChDYWxlbmRhcikgY2FsZW5kYXIoKS5jbG9uZSgpOwotCQlYU0R1cmF0aW9uIHQgPSB0eigpOwotCi0JCWlmICh0ICE9IG51bGwpCi0JCQl0ID0gKFhTRHVyYXRpb24pIHQuY2xvbmUoKTsKLQotCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoYywgdCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGl0YXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lCi0JICovCi0JcHVibGljIFhTRGF0ZVRpbWUoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKCksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRhdGVUaW1lIiB3aGljaCBpcyB0aGUgZGF0YXlwZSBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZGF0ZVRpbWUiOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHRvIHNlZSBpZiBhIGNoYXJhY3RlciBpcyBudW1lcmljCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIENoYXJhY3RlciB0byBiZSB0ZXN0ZWQKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNoYXJhY3RlciBpcyBudW1lcmljLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzX2RpZ2l0KGNoYXIgeCkgewotCQlpZiAoJzAnIDw9IHggJiYgeCA8PSAnOScpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIHJldHJpZXZlcyB0aGUgeWVhciwKLQkgKiBtb250aCBhbmQgZGF5IGZyb20gaXQKLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0JICogQHJldHVybiBJbnRlZ2VyIGFycmF5IG9mIHNpemUgMy4gRWxlbWVudCAxIGlzIHRoZSB5ZWFyLCBlbGVtZW50IDIgaXMgdGhlCi0JICogICAgICAgICBtb250aCBhbmQgZWxlbWVudCAzIGlzIHRoZSBkYXkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludFtdIHBhcnNlX2RhdGUoU3RyaW5nIHN0cikgewotCQlpbnQgc3RhdGUgPSAwOyAvLyAwIGV4cGVjdCB5ZWFyIG9yIG1pbnVzCi0JCS8vIDEgZ2V0dGluZyB5ZWFyCi0JCS8vIDIgZ2V0dGluZyBtb250aAotCQkvLyAzIGdldHRpbmcgZGF5Ci0KLQkJaW50W10gcmV0ID0gbmV3IGludFszXTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykKLQkJCXJldFtpXSA9IDA7Ci0KLQkJU3RyaW5nIHRva2VuID0gIiI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspIHsKLQkJCWNoYXIgeCA9IHN0ci5jaGFyQXQoaSk7Ci0KLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCWNhc2UgMDoKLQkJCQlpZiAoaXNfZGlnaXQoeCkpIHsKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQl9IGVsc2UgaWYgKHggPT0gJy0nKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCXN0YXRlID0gMTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxOgotCQkJCS8vIHdlIGdvdCB0aGUgeWVhciBpbiB0aGVvcnkuLi4KLQkJCQlpZiAoeCA9PSAnLScpIHsKLQotCQkJCQkvLyBjaGVjayBvdXQgdGhlIHVuc2lnbmVkIHllYXIKLQkJCQkJU3RyaW5nIHV5ID0gdG9rZW47Ci0JCQkJCWlmICh1eS5zdGFydHNXaXRoKCItIikpCi0JCQkJCQl1eSA9IHV5LnN1YnN0cmluZygxLCB1eS5sZW5ndGgoKSk7Ci0JCQkJCWludCB1eWwgPSB1eS5sZW5ndGgoKTsKLQotCQkJCQlpZiAodXlsIDwgNCkKLQkJCQkJCXJldHVybiBudWxsOwotCi0JCQkJCWlmICh1eWwgPT0gNCkgewotCQkJCQkJaWYgKHV5LmNvbXBhcmVUbygiMDAwMCIpID09IDApCi0JCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCX0gZWxzZSBpZiAodXkuY2hhckF0KDApID09ICcwJykKLQkJCQkJCXJldHVybiBudWxsOwotCi0JCQkJCS8vIHNlbW1zIGdvb2QgdG8gbWUKLQkJCQkJcmV0WzBdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0JCQkJCXRva2VuID0gIiI7Ci0JCQkJCXN0YXRlID0gMjsKLQkJCQl9IGVsc2UgaWYgKGlzX2RpZ2l0KHgpKQotCQkJCQl0b2tlbiArPSB4OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMjoKLQkJCQkvLyB3ZSBnb3QgdGhlIG1vbnRoCi0JCQkJaWYgKHggPT0gJy0nKSB7Ci0JCQkJCWlmICh0b2tlbi5sZW5ndGgoKSAhPSAyKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0KLQkJCQkJcmV0WzFdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0JCQkJCXRva2VuID0gIiI7Ci0JCQkJCXN0YXRlID0gMzsKLQkJCQl9IGVsc2UgaWYgKGlzX2RpZ2l0KHgpKQotCQkJCQl0b2tlbiArPSB4OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzoKLQkJCQkvLyBnZXR0aW5nIGRheQotCQkJCWlmIChpc19kaWdpdCh4KSkKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCWFzc2VydCBmYWxzZTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9Ci0JCWlmIChzdGF0ZSAhPSAzKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJLy8gZ290IHRoZSBkYXkKLQkJaWYgKHRva2VuLmxlbmd0aCgpICE9IDIpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXRbMl0gPSBJbnRlZ2VyLnBhcnNlSW50KHRva2VuKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8vIHJldHVybgotCS8vIGhvdXIKLQkvLyBtaW51dGUKLQkvLyBzZWNvbmRzCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0ZSBhbmQgdGltZSBhbmQgcmV0cmlldmVzIHRoZSBob3VyLAotCSAqIG1pbnV0ZSBhbmQgc2Vjb25kcyBmcm9tIGl0Ci0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gSW50ZWdlciBhcnJheSBvZiBzaXplIDMuIEVsZW1lbnQgMSBpcyB0aGUgaG91ciwgZWxlbWVudCAyIGlzIHRoZQotCSAqICAgICAgICAgbWludXRlIGFuZCBlbGVtZW50IDMgaXMgdGhlIHNlY29uZHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGRvdWJsZVtdIHBhcnNlX3RpbWUoU3RyaW5nIHN0cikgewotCQlpbnQgc3RhdGUgPSAwOyAvLyAwIGdldHRpbmcgbWludXRlCi0JCS8vIDEgZ2V0dGluZyBob3VyCi0JCS8vIDIgZ2V0dGluZyBzZWNvbmRzIFt0aGUgd2hvbGUgcGFydF0KLQkJLy8gMyBnZXR0aW5nIGZyYWN0aW9uIG9mIHNlY29uZHMKLQotCQlkb3VibGVbXSByZXQgPSBuZXcgZG91YmxlWzNdOwotCi0JCVN0cmluZyB0b2tlbiA9ICIiOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspIHsKLQkJCWNoYXIgeCA9IHN0ci5jaGFyQXQoaSk7Ci0KLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMToKLQkJCQkvLyBnb3QgbWludXRlIC8gaG91cgotCQkJCWlmICh4ID09ICc6JykgewotCQkJCQlpZiAodG9rZW4ubGVuZ3RoKCkgIT0gMikKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQlyZXRbc3RhdGVdID0gSW50ZWdlci5wYXJzZUludCh0b2tlbik7Ci0JCQkJCXN0YXRlKys7Ci0JCQkJCXRva2VuID0gIiI7Ci0JCQkJfSBlbHNlIGlmIChpc19kaWdpdCh4KSkKLQkJCQkJdG9rZW4gKz0geDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDI6Ci0JCQkJaWYgKGlzX2RpZ2l0KHgpKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJCWlmICh0b2tlbi5sZW5ndGgoKSA+IDIpCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9IGVsc2UgaWYgKHggPT0gJy4nKSB7Ci0JCQkJCXRva2VuICs9IHg7Ci0JCQkJCXN0YXRlID0gMzsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzoKLQkJCQlpZiAoaXNfZGlnaXQoeCkpCi0JCQkJCXRva2VuICs9IHg7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX0KLQkJaWYgKCEoc3RhdGUgPT0gMyB8fCBzdGF0ZSA9PSAyKSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdldCBzZWNvbmRzCi0JCS8vIHRoaXMgaXMgd2hvbGUgKyBkb3QgKyBub3RoaW5nIGVsc2UKLQkJaWYgKHRva2VuLmxlbmd0aCgpID09IDMpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXRbMl0gPSBEb3VibGUucGFyc2VEb3VibGUodG9rZW4pOwotCi0JCWlmIChyZXRbMF0gPT0gMjQuMCkgewotCQkJcmV0WzBdID0gMDAuMDsKLQkJfQotCi0JCS8vIFhYWCBzYW5pdHkgY2hlY2sgYXJncy4uLgotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8vIHJldHVybnMKLQkvLyBwb3NpdGl2ZS9uZWdhdGl2ZQotCS8vIGhvdXIKLQkvLyBtaW51dGUKLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIGFuZCB0aW1lIGFuZCByZXRyaWV2ZXMgdGhlCi0JICogdGltZXpvbmUgZnJvbSBpdAotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIEludGVnZXIgYXJyYXkgb2Ygc2l6ZSAzLiBFbGVtZW50IDEgcmVwcmVzZW50cyB3aGV0aGVyIHRoZQotCSAqICAgICAgICAgdGltZXpvbmUgaXMgYWhlYWQgb3IgYmVoaW5kIEdNVCwgZWxlbWVudCAyIGlzIHRoZSBob3VyCi0JICogICAgICAgICBkaXNwbGFjZW1lbnQgYW5kIGVsZW1lbnQgMyBpcyB0aGUgbWludXRlIGRpc3BsYWNlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludFtdIHBhcnNlX3RpbWV6b25lKFN0cmluZyBzdHIpIHsKLQkJaW50W10gcmV0ID0gbmV3IGludFszXTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykKLQkJCXJldFtpXSA9IDA7Ci0JCXJldFswXSA9IDE7Ci0KLQkJaWYgKHN0ci5lcXVhbHMoIloiKSkgewotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCS8vIGdldCBpbml0aWFsIHBsdXMvbWludXMKLQkJaWYgKHN0ci5zdGFydHNXaXRoKCIrIikpCi0JCQlyZXRbMF0gPSAxOwotCQllbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiLSIpKQotCQkJcmV0WzBdID0gLTE7Ci0JCWVsc2UKLQkJCXJldHVybiBudWxsOwotCi0JCXN0ciA9IHN0ci5zdWJzdHJpbmcoMSwgc3RyLmxlbmd0aCgpKTsKLQotCQlpZiAoc3RyLmxlbmd0aCgpICE9ICgyICsgMSArIDIpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJdHJ5IHsKLQkJCXJldFsxXSA9IEludGVnZXIucGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLCAyKSk7Ci0JCQlyZXRbMl0gPSBJbnRlZ2VyLnBhcnNlSW50KHN0ci5zdWJzdHJpbmcoMywgNSkpOwotCi0JCQkvLyBBY2NvcmRpbmcgdG8gc2NoZW1hIHNwZWMsIHRpbWV6b25lIGlzIGxpbWl0ZWQgdG8KLQkJCS8vIHRoaXMuLi4gW3dlbGwuLiBhbG1vc3QuLi5dCi0JCQlpZiAocmV0WzFdID4gMTQpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpZiAocmV0WzJdID4gNTkpCi0JCQkJcmV0dXJuIG51bGw7Ci0KLQkJCXJldHVybiByZXQ7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlcnIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXR0ZW1wdHMgdG8gc2V0IGEgcGFydGljdWxhciBmaWVsZCBpbiB0aGUgQ2FsZW5kYXIKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBUaGUgQ2FsZW5kYXIgb2JqZWN0IHRvIHNldCB0aGUgZmllbGQgaW4KLQkgKiBAcGFyYW0gaXRlbQotCSAqICAgICAgICAgICAgVGhlIGZpZWxkIHRvIHNldAotCSAqIEBwYXJhbSB2YWwKLQkgKiAgICAgICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGZpZWxkIHRvCi0JICogQHJldHVybiBUcnVlIGlmIHN1Y2Nlc3NmdWxseSBzZXQuIEZhbHNlIG90aGVyd2lzZSAoZHVlIHRvIG91dCBvZiBib3VuZHMKLQkgKiAgICAgICAgIGZvciB0aGF0IGZpZWxkKQotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2V0X2l0ZW0oQ2FsZW5kYXIgY2FsLCBpbnQgaXRlbSwgaW50IHZhbCkgewotCQlpbnQgbWluID0gY2FsLmdldEFjdHVhbE1pbmltdW0oaXRlbSk7Ci0KLQkJaWYgKHZhbCA8IG1pbikKLQkJCXJldHVybiBmYWxzZTsKLQotCQlpbnQgbWF4ID0gY2FsLmdldEFjdHVhbE1heGltdW0oaXRlbSk7Ci0KLQkJaWYgKHZhbCA+IG1heCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQljYWwuc2V0KGl0ZW0sIHZhbCk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGUgYW5kIHRpbWUgYW5kIGNvbnN0cnVjdHMgYSBuZXcKLQkgKiBYU0RhdGVUaW1lIG9iamVjdCB1c2luZyB0aGF0IGluZm9ybWF0aW9uCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSAoYW5kIG9wdGlvbmFsIHRpbWV6b25lKQotCSAqIEByZXR1cm4gVGhlIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgYW5kIHRpbWUgKGFuZCBvcHRpb25hbAotCSAqICAgICAgICAgdGltZXpvbmUpCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RhdGVUaW1lIHBhcnNlRGF0ZVRpbWUoU3RyaW5nIHN0cikgewotCQkvLyBvaCBuby4uLiBub3QgYWdhaW4KLQotCQkvLyBvayBpdHMgdGhyZWUgdGhpbmdzOgotCQkvLyBkYXRlIFQgdGltZSB0aW1lem9uZQotCi0JCWludCBpbmRleCA9IHN0ci5pbmRleE9mKCdUJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIHNwbGl0IGRhdGUgYW5kIHJlc3QuLi4KLQkJU3RyaW5nIGRhdGUgPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJU3RyaW5nIHRpbWUgPSBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgc3RyLmxlbmd0aCgpKTsKLQkJU3RyaW5nIHRpbWV6b25lID0gbnVsbDsKLQotCQkvLyBjaGVjayBmb3IgdGltZXpvbmUKLQkJaW5kZXggPSB0aW1lLmluZGV4T2YoJysnKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSB0aW1lLmluZGV4T2YoJy0nKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJaW5kZXggPSB0aW1lLmluZGV4T2YoJ1onKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl0aW1lem9uZSA9IHRpbWUuc3Vic3RyaW5nKGluZGV4LCB0aW1lLmxlbmd0aCgpKTsKLQkJCXRpbWUgPSB0aW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCX0KLQotCQkvLyBnZXQgZGF0ZQotCQlpbnQgZFtdID0gcGFyc2VfZGF0ZShkYXRlKTsKLQkJaWYgKGQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIFNBTklUWSBDSEVYCi0JCVRpbWVab25lIFVUQyA9IFRpbWVab25lLmdldFRpbWVab25lKCJVVEMiKTsKLQkJR3JlZ29yaWFuQ2FsZW5kYXIgY2FsID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKFVUQyk7Ci0KLQkJLy8geWVhcgotCQlpbnQgeWVhciA9IGRbMF07Ci0JCWlmICh5ZWFyIDwgMCkgewotCQkJeWVhciAqPSAtMTsKLQkJCWNhbC5zZXQoQ2FsZW5kYXIuRVJBLCBHcmVnb3JpYW5DYWxlbmRhci5CQyk7Ci0JCX0gZWxzZSB7Ci0JCQljYWwuc2V0KENhbGVuZGFyLkVSQSwgR3JlZ29yaWFuQ2FsZW5kYXIuQUQpOwotCQl9Ci0KLQkJLy8gdGhpcyBpcyBhIG5pY2UgYnVnLi4uLgotCQkvLyBpZiBzYXkgdGhlIGN1cnJlbnQgZGF5IGlzIDI5Li4uCi0JCS8vIHRoZW4gaWYgd2Ugc2V0IHRoZSBtb250aCB0byBmZWIgZm9yIGV4YW1wbGUsIGFuZCAyOSBkb2Vzbid0Ci0JCS8vIGV4aXN0IGluIHRoYXQgeWVhciwgdGhlbiB0aGUgZGF0ZSBzY3Jld3MgdXAuCi0JCWNhbC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAyKTsKLQkJY2FsLnNldChDYWxlbmRhci5NT05USCwgMik7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLllFQVIsIHllYXIpKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLk1PTlRILCBkWzFdIC0gMSkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpZiAoIXNldF9pdGVtKGNhbCwgQ2FsZW5kYXIuREFZX09GX01PTlRILCBkWzJdKSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdldCB0aW1lCi0JCWRvdWJsZSB0W10gPSBwYXJzZV90aW1lKHRpbWUpOwotCQlpZiAodCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLkhPVVJfT0ZfREFZLCAoaW50KSB0WzBdKSkKLQkJCXJldHVybiBudWxsOwotCi0JCWlmICghc2V0X2l0ZW0oY2FsLCBDYWxlbmRhci5NSU5VVEUsIChpbnQpIHRbMV0pKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaWYgKCFzZXRfaXRlbShjYWwsIENhbGVuZGFyLlNFQ09ORCwgKGludCkgdFsyXSkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlkb3VibGUgbXMgPSB0WzJdIC0gKChpbnQpIHRbMl0pOwotCQltcyAqPSAxMDAwOwotCQlpZiAoIXNldF9pdGVtKGNhbCwgQ2FsZW5kYXIuTUlMTElTRUNPTkQsIChpbnQpIG1zKSkKLQkJCXJldHVybiBudWxsOwotCi0JCS8vIGdldCB0aW1lem9uZQotCQlpbnQgdHpbXSA9IG51bGw7Ci0JCVhTRHVyYXRpb24gdHpkID0gbnVsbDsKLQkJaWYgKHRpbWV6b25lICE9IG51bGwpIHsKLQkJCXR6ID0gcGFyc2VfdGltZXpvbmUodGltZXpvbmUpOwotCi0JCQlpZiAodHogPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQotCQkJdHpkID0gbmV3IFhTRGF5VGltZUR1cmF0aW9uKDAsIHR6WzFdLCB0elsyXSwgMC4wLCB0elswXSA8IDApOwotCi0JCX0KLQotCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoY2FsLCB0emQpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgcmVzdWx0IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJldHJpZXZhYmxlIGRhdGUgYW5kIHRpbWUKLQkgKiB2YWx1ZSBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGUgYW5kIHRpbWUKLQkgKiAgICAgICAgICAgIHZhbHVlLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGF0ZSBhbmQgdGltZSB2YWx1ZQotCSAqICAgICAgICAgc3VwcGxpZWQuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uCi0JCQkJfHwgYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkKLQkJCQl8fCBhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkKLQkJCQl8fCBhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JCUNhbGVuZGFyVHlwZSBkdCA9IGNhc3REYXRlVGltZShhYXQpOwotCi0JCWlmIChkdCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlyZXR1cm4gZHQ7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgQ2FsZW5kYXJUeXBlIGNhc3REYXRlVGltZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlKSB7Ci0JCQlYU0RhdGUgZGF0ZSA9IChYU0RhdGUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXRlVGltZShkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTRGF0ZVRpbWUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgZGF0ZVRpbWUudHooKSk7Ci0JCX0KLQotCQlyZXR1cm4gcGFyc2VEYXRlVGltZShhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB5ZWFyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgbW9udGggZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtb250aCB2YWx1ZSBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1vbnRoKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCkgKyAxOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBkYXkgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBkYXkgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBkYXkoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIGhvdXIgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBob3VyIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgaG91cigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlIHRoZSBtaW51dGUgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtaW51dGUgdmFsdWUgb2YgdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtaW51dGUoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIHNlY29uZHMgZnJvbSB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZWNvbmRzIHZhbHVlIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBkb3VibGUgc2Vjb25kKCkgewotCQlkb3VibGUgcyA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuU0VDT05EKTsKLQotCQlkb3VibGUgbXMgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKTsKLQotCQltcyAvPSAxMDAwOwotCi0JCXMgKz0gbXM7Ci0JCXJldHVybiBzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHRpbWV6b25lZCgpIHsKLQkJcmV0dXJuIF90aW1lem9uZWQ7Ci0JfQotCi0JLyoqCi0JICogUGFkcyB0aGUgc3VwcGxpZWQgbnVtYmVyIHRvIHRoZSBzdXBwbGllZCBudW1iZXIgb2YgZGlnaXRzIGJ5IGFkZGluZyAwJ3MKLQkgKiBpbiBmcm9udCBvZiBpdAotCSAqIAotCSAqIEBwYXJhbSBudW0KLQkgKiAgICAgICAgICAgIE51bWJlciB0aGF0IHNpIHRvIGJlIHBhZGRlZCAoaWYgbmVjY2Vzc2F5KQotCSAqIEBwYXJhbSBsZW4KLQkgKiAgICAgICAgICAgIERlc2lyZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmcKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFkZGVkIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBwYWRfaW50KGludCBudW0sIGludCBsZW4pIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCQlTdHJpbmcgc251bSA9ICIiICsgbnVtOwotCi0JCWludCBwYWQgPSBsZW4gLSBzbnVtLmxlbmd0aCgpOwotCi0JCS8vIHNvcnQgb3V0IHRoZSBuZWdhdGl2ZQotCQlpZiAobnVtIDwgMCkgewotCQkJcmV0ICs9ICItIjsKLQkJCXNudW0gPSBzbnVtLnN1YnN0cmluZygxLCBzbnVtLmxlbmd0aCgpKTsKLQkJCXBhZCsrOwotCQl9Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIocmV0KTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYWQ7IGkrKykgewotCQkJYnVmLmFwcGVuZCgiMCIpOwotCQl9Ci0JCWJ1Zi5hcHBlbmQoc251bSk7Ci0JCXJldCA9IGJ1Zi50b1N0cmluZygpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBhbmQgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIiI7Ci0KLQkJQ2FsZW5kYXIgYWRqdXN0Rm9ydGltZXpvbmUgPSBjYWxlbmRhcigpOwotCi0JCWlmIChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuRVJBKSA9PSBHcmVnb3JpYW5DYWxlbmRhci5CQykgewotCQkJcmV0ICs9ICItIjsKLQkJfQotCi0JCXJldCArPSBwYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5ZRUFSKSwgNCk7Ci0KLQkJcmV0ICs9ICItIjsKLQkJcmV0ICs9IHBhZF9pbnQobW9udGgoKSwgMik7Ci0KLQkJcmV0ICs9ICItIjsKLQkJcmV0ICs9IHBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCksIDIpOwotCi0JCS8vIHRpbWUKLQkJcmV0ICs9ICJUIjsKLQotCQlyZXQgKz0gcGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpLCAyKTsKLQotCQlyZXQgKz0gIjoiOwotCQlyZXQgKz0gcGFkX2ludChhZGp1c3RGb3J0aW1lem9uZS5nZXQoQ2FsZW5kYXIuTUlOVVRFKSwgMik7Ci0KLQkJcmV0ICs9ICI6IjsKLQkJaW50IGlzZWNvbmQgPSAoaW50KSBzZWNvbmQoKTsKLQkJZG91YmxlIHNlYyA9IHNlY29uZCgpOwotCi0JCWlmICgoc2VjIC0gKGlzZWNvbmQpKSA9PSAwLjApCi0JCQlyZXQgKz0gcGFkX2ludChpc2Vjb25kLCAyKTsKLQkJZWxzZSB7Ci0JCQlpZiAoc2VjIDwgMTAuMCkKLQkJCQlyZXQgKz0gIjAiICsgc2VjOwotCQkJZWxzZQotCQkJCXJldCArPSBzZWM7Ci0JCX0KLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCWludCBocnMgPSBfdHouaG91cnMoKTsKLQkJCWludCBtaW4gPSBfdHoubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSBfdHouc2Vjb25kcygpOwotCQkJaWYgKGhycyA9PSAwICYmIG1pbiA9PSAwICYmIHNlY3MgPT0gMCkgewotCQkJCXJldCArPSAiWiI7Ci0JCQl9IGVsc2UgewotCQkJCVN0cmluZyB0Wm9uZVN0ciA9ICIiOwotCQkJCWlmIChfdHoubmVnYXRpdmUoKSkgewotCQkJCQl0Wm9uZVN0ciArPSAiLSI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdFpvbmVTdHIgKz0gIisiOwotCQkJCX0KLQkJCQl0Wm9uZVN0ciArPSBwYWRfaW50KGhycywgMik7Ci0JCQkJdFpvbmVTdHIgKz0gIjoiOwotCQkJCXRab25lU3RyICs9IHBhZF9pbnQobWluLCAyKTsKLQotCQkJCXJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cml2ZSB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmRhdGVUaW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19EQVRFX1RJTUU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBDYWxlbmRhciBjYWxlbmRhcigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhcjsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nCi0JICogdGltZXpvbmVzIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIGRhdGVzIGFuZCB0aW1lcyBhcmUgcmVwcmVzZW50IHRoZSBzYW1lIGV4YWN0Ci0JICogICAgICAgICBwb2ludCBpbiB0aW1lLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEYXRlVGltZSB2YWwgPSAoWFNEYXRlVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywKLQkJCQlYU0RhdGVUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBvbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZGF0ZXMgYW5kIHRpbWVzICh0YWtpbmcgdGltZXpvbmVzCi0JICogaW50byBhY2NvdW50KQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFhTRGF0ZVRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGUgdG8gY29tcGFyZSB0bwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBUcnVlIGlmIGluIHRpbWUsIHRoaXMgZGF0ZSBhbmQgdGltZSBsaWVzIGJlZm9yZSB0aGUgZGF0ZSBhbmQgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZVRpbWUgdmFsID0gKFhTRGF0ZVRpbWUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXRlVGltZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuYmVmb3JlKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gb24gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIGRhdGVzIGFuZCB0aW1lcyAodGFraW5nIHRpbWV6b25lcwotCSAqIGludG8gYWNjb3VudCkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBYU0RhdGVUaW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIHRvIGNvbXBhcmUgdG8KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBpbiB0aW1lLCB0aGlzIGRhdGUgYW5kIHRpbWUgbGllcyBhZnRlciB0aGUgZGF0ZSBhbmQgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRGF0ZVRpbWUgdmFsID0gKFhTRGF0ZVRpbWUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXRlVGltZS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuYWZ0ZXIodGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0KLQotCS8vIFhYWCB0aGlzIGlzIGluY29ycmVjdCBbZXBvY2hdCi0JLyoqCi0JICogQ3VycmVudGx5IHVuc3VwcG9ydGVkIG1ldGhvZC4gUmV0cmlldmVzIHRoZSBkYXRlIGluIG1pbGxpc2Vjb25kcyBzaW5jZQotCSAqIHRoZSBiZWdpbmluZyBvZiBlcG9jaAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgYmVnaW5pbmcgb2YgdGhlIGVwb2NoCi0JICovCi0JcHVibGljIGRvdWJsZSB2YWx1ZSgpIHsKLQkJcmV0dXJuIGNhbGVuZGFyKCkuZ2V0VGltZUluTWlsbGlzKCkgLyAxMDAwLjA7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtaW51cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEYXRlVGltZSBhbmQgYSBzdXBwbGllZCByZXN1bHQKLQkgKiBzZXF1ZW5jZSAoWFNEYXRlVGltZSwgWERUWWVhck1vbnRoRHVyYXRpb24gYW5kIFhEVERheVRpbWVEdXJhdGlvbiBhcmUKLQkgKiBvbmx5IHZhbGlkIG9uZXMpLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZSB0aGF0IGlzIG9uIHRoZSByaWdodCBvZiB0aGUgbWludXMKLQkgKiAgICAgICAgICAgIG9wZXJhdG9yLiBJZiB0aGlzIGlzIGFuIFhTRGF0ZVRpbWUsIHRoZSByZXN1bHQgd2lsbCBiZSBhCi0JICogICAgICAgICAgICBYRFREYXlUaW1lRHVyYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSB0d28KLQkgKiAgICAgICAgICAgIGRhdGVzLiBJZiBhcmcgaXMgYW4gWERUWWVhck1vbnRoRHVyYXRpb24gb3IgYW4KLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBYU0RhdGVUaW1lIG9mIHRoZQotCSAqICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGRhdGUgbWludXMgdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiAgICAgICAgICAgIHN1cHBsaWVkLgotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtaW51cyBvcGVyYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUl0ZW0gYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpICYmICEoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKQotCQkJCSYmICEoYXQgaW5zdGFuY2VvZiBYU0RheVRpbWVEdXJhdGlvbikpIHsKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RhdGVUaW1lKGFyZyk7Ci0JCX0KLQotCQlpZiAoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU1llYXJNb250aER1cmF0aW9uKGF0KTsKLQkJfQotCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU0RhdGVUaW1lKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0RhdGVUaW1lIHZhbCA9IChYU0RhdGVUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRGF0ZVRpbWUuY2xhc3MpOwotCi0JCUNhbGVuZGFyIHRoaXNDYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdENhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCWxvbmcgZHVyYXRpb24gPSB0aGlzQ2FsLmdldFRpbWVJbk1pbGxpcygpCi0JCQkJLSB0aGF0Q2FsLmdldFRpbWVJbk1pbGxpcygpOwotCQlEdXJhdGlvbiBkdGR1cmF0aW9uID0gX2RhdGF0eXBlRmFjdG9yeS5uZXdEdXJhdGlvbihkdXJhdGlvbik7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhYU0RheVRpbWVEdXJhdGlvbgotCQkJCS5wYXJzZURURHVyYXRpb24oZHRkdXJhdGlvbi50b1N0cmluZygpKSk7Ci0JfQotCi0JcHJpdmF0ZSBSZXN1bHRTZXF1ZW5jZSBtaW51c1hTRGF5VGltZUR1cmF0aW9uKEl0ZW0gYXQpIHsKLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgYXQ7Ci0JCXRyeSB7Ci0JCQlYU0RhdGVUaW1lIHJlcyA9IChYU0RhdGVUaW1lKSBjbG9uZSgpOwotCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gX2RhdGF0eXBlRmFjdG9yeQotCQkJCQkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKEdyZWdvcmlhbkNhbGVuZGFyKSBjYWxlbmRhcigpKTsKLQkJCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBfZGF0YXR5cGVGYWN0b3J5Ci0JCQkJCS5uZXdEdXJhdGlvbih2YWwuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQl4bWxDYWwuYWRkKGR0ZHVyYXRpb24ubmVnYXRlKCkpOwotCQkJcmVzID0gbmV3IFhTRGF0ZVRpbWUoeG1sQ2FsLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgcmVzLnR6KCkpOwotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZXgpIHsKLQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgbWludXNYU1llYXJNb250aER1cmF0aW9uKEl0ZW0gYXQpIHsKLQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgYXQ7Ci0KLQkJdHJ5IHsKLQkJCVhTRGF0ZVRpbWUgcmVzID0gKFhTRGF0ZVRpbWUpIGNsb25lKCk7Ci0KLQkJCXJlcy5jYWxlbmRhcigpLmFkZChDYWxlbmRhci5NT05USCwgdmFsLm1vbnRoVmFsdWUoKSAqIC0xKTsKLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQl9IGNhdGNoIChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBleCkgewotCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGFkZGl0aW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RhdGVUaW1lIGFuZCBhIHN1cHBsaWVkCi0JICogcmVzdWx0IHNlcXVlbmNlIChYRFRZZWFyTW9udGhEdXJhdGlvbiBhbmQgWERURGF5VGltZUR1cmF0aW9uIGFyZSBvbmx5Ci0JICogdmFsaWQgb25lcykuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlIHRoYXQgaXMgb24gdGhlIHJpZ2h0IG9mIHRoZSBtaW51cwotCSAqICAgICAgICAgICAgb3BlcmF0b3IuIElmIGFyZyBpcyBhbiBYRFRZZWFyTW9udGhEdXJhdGlvbiBvciBhbgotCSAqICAgICAgICAgICAgWERURGF5VGltZUR1cmF0aW9uIHRoZSByZXN1bHQgd2lsbCBiZSBhIFhTRGF0ZVRpbWUgb2YgdGhlCi0JICogICAgICAgICAgICByZXN1bHQgb2YgdGhlIGN1cnJlbnQgZGF0ZSBtaW51cyB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqICAgICAgICAgICAgc3VwcGxpZWQuCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG1pbnVzIG9wZXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlJdGVtIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCWlmIChhdCBpbnN0YW5jZW9mIFhTWWVhck1vbnRoRHVyYXRpb24pIHsKLQkJCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBhdDsKLQotCQkJCVhTRGF0ZVRpbWUgcmVzID0gKFhTRGF0ZVRpbWUpIGNsb25lKCk7Ci0KLQkJCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTU9OVEgsIHZhbC5tb250aFZhbHVlKCkpOwotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgYXQ7Ci0KLQkJCQlYU0RhdGVUaW1lIHJlcyA9IChYU0RhdGVUaW1lKSBjbG9uZSgpOwotCi0JCQkJWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sQ2FsID0gX2RhdGF0eXBlRmFjdG9yeQotCQkJCQkJLm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKAotCQkJCQkJCQkoR3JlZ29yaWFuQ2FsZW5kYXIpIGNhbGVuZGFyKCkpOwotCQkJCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBfZGF0YXR5cGVGYWN0b3J5Ci0JCQkJCQkubmV3RHVyYXRpb24odmFsLmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCXhtbENhbC5hZGQoZHRkdXJhdGlvbik7Ci0JCQkJcmVzID0gbmV3IFhTRGF0ZVRpbWUoeG1sQ2FsLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKSwgcmVzLnR6KCkpOwotCQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhyZXMpOwotCQkJfSBlbHNlIHsKLQkJCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCQl9Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19EQVRFVElNRTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXlUaW1lRHVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEYXlUaW1lRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMzkzNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRGF5VGltZUR1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3Mzc2MCAtIHdyb25nIG5hbWVzcGFjZSBmb3IgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzkzNzcgLSBpbXByb3ZlbWVudHMgdG8gbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIG9wZXJhdGlvbnMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24geHM6ZGF5VGltZUR1cmF0aW9uLgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkR1cmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoRGl2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoTWludXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhQbHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoVGltZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIERheVRpbWVEdXJhdGlvbiBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNEYXlUaW1lRHVyYXRpb24gZXh0ZW5kcyBYU0R1cmF0aW9uIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LAotCQlDbXBHdCwKLQotCQlNYXRoUGx1cywgTWF0aE1pbnVzLCBNYXRoVGltZXMsIE1hdGhEaXYsCi0KLQkJQ2xvbmVhYmxlIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0RBWV9USU1FX0RVUkFUSU9OID0gInhzOmRheVRpbWVEdXJhdGlvbiI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycy4gSWYgbW9yZSB0aGFuIDI0IGhvdXJzIGlzCi0JICogc3VwcGxpZWQsIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBhZGp1c3RlZCBhY29yZGluZ2x5LiBUaGUgc2FtZSBvY2N1cnMgZm9yCi0JICogbWludXRlcyBhbmQgc2Vjb25kcwotCSAqIAotCSAqIEBwYXJhbSBkYXlzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gaG91cnMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBob3VycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gbWludXRlcwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIG1pbnV0ZXMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIHNlY29uZHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBuZWdhdGl2ZQotCSAqICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0JICogICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBYU0RheVRpbWVEdXJhdGlvbihpbnQgZGF5cywgaW50IGhvdXJzLCBpbnQgbWludXRlcywgZG91YmxlIHNlY29uZHMsCi0JCQlib29sZWFuIG5lZ2F0aXZlKSB7Ci0JCXN1cGVyKDAsIDAsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBuZWdhdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzCi0JICogCi0JICogQHBhcmFtIHNlY3MKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lCi0JICovCi0JcHVibGljIFhTRGF5VGltZUR1cmF0aW9uKGRvdWJsZSBzZWNzKSB7Ci0JCXN1cGVyKDAsIDAsIDAsIDAsIDAsIE1hdGguYWJzKHNlY3MpLCBzZWNzIDwgMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgwZGF5cywgMGhvdXJzLCAwbWludXRlcywgMHNlY29uZHMpCi0JICovCi0JcHVibGljIFhTRGF5VGltZUR1cmF0aW9uKCkgewotCQlzdXBlcigwLCAwLCAwLCAwLCAwLCAwLjAsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgWFNEYXlUaW1lRHVyYXRpb24oRHVyYXRpb24gZCkgewotCQl0aGlzKGQuZ2V0RGF5cygpLCBkLmdldEhvdXJzKCksIGQuZ2V0TWludXRlcygpLCAwLjAsIGQuZ2V0U2lnbigpID09IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgdGltZSBkdXJhdGlvbgotCSAqIAotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiBAdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCi0JICovCi0JcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBuZXcgWFNEYXlUaW1lRHVyYXRpb24oZGF5cygpLCBob3VycygpLCBtaW51dGVzKCksIHNlY29uZHMoKSwKLQkJCQluZWdhdGl2ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQkKLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkKLQkJWFNEdXJhdGlvbiBkdGQgPSBjYXN0RGF5VGltZUR1cmF0aW9uKGFhdCk7Ci0JCi0JCWlmIChkdGQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCi0JCXJldHVybiBkdGQ7Ci0JfQotCQotCXByaXZhdGUgWFNEdXJhdGlvbiBjYXN0RGF5VGltZUR1cmF0aW9uKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uKSB7Ci0JCQlYU0R1cmF0aW9uIGR1cmF0aW9uID0gKFhTRHVyYXRpb24pIGFhdDsKLQkJCXJldHVybiBuZXcgWFNEYXlUaW1lRHVyYXRpb24oZHVyYXRpb24uZGF5cygpLCBkdXJhdGlvbi5ob3VycygpLCBkdXJhdGlvbi5taW51dGVzKCksIGR1cmF0aW9uLnNlY29uZHMoKSwgZHVyYXRpb24ubmVnYXRpdmUoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZURURHVyYXRpb24oYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgWFNEYXlUaW1lRHVyYXRpb24gYnkgcGFyc2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZQotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN1cHBsaWVkCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0R1cmF0aW9uIHBhcnNlRFREdXJhdGlvbihTdHJpbmcgc3RyKSB7Ci0JCWJvb2xlYW4gbmVnYXRpdmUgPSBmYWxzZTsKLQkJaW50IGRheXMgPSAwOwotCQlpbnQgaG91cnMgPSAwOwotCQlpbnQgbWludXRlcyA9IDA7Ci0JCWRvdWJsZSBzZWNvbmRzID0gMDsKLQotCQkvLyBzdHJpbmcgZm9sbG93aW5nIHRoZSBQCi0JCVN0cmluZyBwc3RyID0gbnVsbDsKLQkJU3RyaW5nIHRzdHIgPSBudWxsOwotCi0JCS8vIGdldCB0aGUgbmVnYXRpdmUgYW5kIHBzdHIKLQkJaWYgKHN0ci5zdGFydHNXaXRoKCItUCIpKSB7Ci0JCQluZWdhdGl2ZSA9IHRydWU7Ci0JCQlwc3RyID0gc3RyLnN1YnN0cmluZygyLCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJQIikpIHsKLQkJCW5lZ2F0aXZlID0gZmFsc2U7Ci0JCQlwc3RyID0gc3RyLnN1YnN0cmluZygxLCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UKLQkJCXJldHVybiBudWxsOwotCi0JCXRyeSB7Ci0JCQkvLyBnZXQgdGhlIGRheXMKLQkJCWludCBpbmRleCA9IHBzdHIuaW5kZXhPZignRCcpOwotCQkJYm9vbGVhbiBkaWRfc29tZXRoaW5nID0gZmFsc2U7Ci0KLQkJCS8vIG5vIEQuLi4gbXVzdCBoYXZlIFQKLQkJCWlmIChpbmRleCA9PSAtMSkgewotCQkJCWlmIChwc3RyLnN0YXJ0c1dpdGgoIlQiKSkgewotCQkJCQl0c3RyID0gcHN0ci5zdWJzdHJpbmcoMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSBwc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJZGF5cyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSBwc3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHBzdHIubGVuZ3RoKCkpOwotCi0JCQkJaWYgKHRzdHIuc3RhcnRzV2l0aCgiVCIpKSB7Ci0JCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZygxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAodHN0ci5sZW5ndGgoKSA+IDApCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJdHN0ciA9ICIiOwotCQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIGRvIHRoZSBUIHN0cgotCi0JCQkvLyBob3VyCi0JCQlpbmRleCA9IHRzdHIuaW5kZXhPZignSCcpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gdHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCWhvdXJzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0JCQkvLyBtaW51dGUKLQkJCWluZGV4ID0gdHN0ci5pbmRleE9mKCdNJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSB0c3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJbWludXRlcyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCQkJLy8gc2Vjb25kcwotCQkJaW5kZXggPSB0c3RyLmluZGV4T2YoJ1MnKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHRzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlzZWNvbmRzID0gRG91YmxlLnBhcnNlRG91YmxlKGRpZ2l0KTsKLQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCX0KLQkJCWlmIChkaWRfc29tZXRoaW5nKSB7Ci0JCQkJLy8gbWFrZSBzdXJlIHdlIHBhcnNlZCBpdCBhbGwKLQkJCQlpZiAodHN0ci5sZW5ndGgoKSAhPSAwKQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGVycikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTRGF5VGltZUR1cmF0aW9uKGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBuZWdhdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cml2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImRheVRpbWVEdXJhdGlvbiIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImRheVRpbWVEdXJhdGlvbiI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpkYXlUaW1lRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfREFZX1RJTUVfRFVSQVRJT047Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGFkZGl0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gYWRkCi0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLQkgKiAgICAgICAgIHRoZSBhZGRpdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHBsdXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEdXJhdGlvbiB2YWwgPSAoWFNEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNEYXlUaW1lRHVyYXRpb24uY2xhc3MpOwotCQkKLQkJZG91YmxlIHJlcyA9IHZhbHVlKCkgKyB2YWwudmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGF5VGltZUR1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1YnRyYWN0Ci0JICogQHJldHVybiBOZXcgWFNEYXlUaW1lRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24gYWZ0ZXIKLQkgKiAgICAgICAgIHRoZSBzdWJ0cmFjdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzKTsKLQotCQlkb3VibGUgcmVzID0gdmFsdWUoKSAtIHZhbC52YWx1ZSgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEYXlUaW1lRHVyYXRpb24ocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNEYXlUaW1lRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gbXVsdGlwbHkgYnkKLQkgKiBAcmV0dXJuIE5ldyBYU0RheVRpbWVEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbiBhZnRlcgotCSAqICAgICAgICAgdGhlIG11bHRpcGxpY2F0aW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY29udmVydGVkUlMgPSBhcmc7Ci0JCQotCQlpZiAoYXJnLnNpemUoKSA9PSAxKSB7Ci0JCQlJdGVtIGFyZ1ZhbHVlID0gYXJnLmZpcnN0KCk7Ci0gICAgICAgICAgICBpZiAoYXJnVmFsdWUgaW5zdGFuY2VvZiBYU0RlY2ltYWwpIHsKLSAgICAgICAgICAgIAljb252ZXJ0ZWRSUyA9IFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RvdWJsZShhcmdWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKSk7CQotICAgICAgICAgICAgfQotCQl9Ci0JCQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShjb252ZXJ0ZWRSUywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFNEb3VibGUuY2xhc3MpOwotCQlpZiAodmFsLm5hbigpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IubmFuKCk7Ci0JCX0KLQotCQlkb3VibGUgcmVzID0gdmFsdWUoKSAqIHZhbC5kb3VibGVfdmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGF5VGltZUR1cmF0aW9uKHJlcykpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTRGF5VGltZUR1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGRpdmlkZSBieQotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0aW5nIGR1cmF0aW9uIGFmdGVyCi0JICogICAgICAgICB0aGUgZGl2aXNpb24KLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5zaXplKCkgIT0gMSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0KLQkJSXRlbSBhdCA9IGFyZy5maXJzdCgpOwotCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRG91YmxlKSB7Ci0JCQlYU0RvdWJsZSBkdCA9IChYU0RvdWJsZSkgYXQ7Ci0JCQlkb3VibGUgcmV0dmFsID0gMDsKLQkJCQotCQkJaWYgKGR0Lm5hbigpKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLm5hbigpOwotCQkJfQotCQkJCi0JCQlpZiAoIWR0Lnplcm8oKSkgewotCQkJCUJpZ0RlY2ltYWwgcmV0ID0gbmV3IEJpZ0RlY2ltYWwoMCk7Ci0JCQkJCi0JCQkJaWYgKGR0LmluZmluaXRlKCkpIHsKLQkJCQkJcmV0dmFsID0gdmFsdWUoKSAvIGR0LmRvdWJsZV92YWx1ZSgpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldCA9IG5ldyBCaWdEZWNpbWFsKHZhbHVlKCkpOwotCQkJCQlyZXQgPSByZXQuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKGR0LmRvdWJsZV92YWx1ZSgpKSwgMTgsIEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOKTsKLQkJCQkJcmV0dmFsID0gcmV0LmRvdWJsZVZhbHVlKCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3Iub3ZlcmZsb3dVbmRlcmZsb3coKTsKLQkJCX0KLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCQkuY3JlYXRlX25ldyhuZXcgWFNEYXlUaW1lRHVyYXRpb24ocmV0dmFsKSk7Ci0JCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpIHsKLQkJCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCQkJCi0JCQlCaWdEZWNpbWFsIHJldCA9IG5ldyBCaWdEZWNpbWFsKDApOwotCQkJCQkJCQotCQkJaWYgKCFkdC56ZXJvKCkpIHsKLQkJCQlyZXQgPSBuZXcgQmlnRGVjaW1hbCh2YWx1ZSgpKTsKLQkJCQlyZXQgPSByZXQuZGl2aWRlKGR0LmdldFZhbHVlKCksIDE4LCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTik7Ci0JCQl9IGVsc2UgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5vdmVyZmxvd1VuZGVyZmxvdygpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGF5VGltZUR1cmF0aW9uKAotCQkJCQlyZXQuaW50VmFsdWUoKSkpOwkKLQkJfSBlbHNlIGlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlYU0R1cmF0aW9uIG1kID0gKFhTRHVyYXRpb24pIGF0OwotCi0JCQlCaWdEZWNpbWFsIHJlcyA9IG51bGw7Ci0JCQlyZXMgPSBuZXcgQmlnRGVjaW1hbCh0aGlzLnZhbHVlKCkpOwotCQkJQmlnRGVjaW1hbCBsID0gbmV3IEJpZ0RlY2ltYWwobWQudmFsdWUoKSk7Ci0JCQlyZXMgPSByZXMuZGl2aWRlKGwsIDE4LCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTik7Ci0KLQkJCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlcykpOwotCQl9IGVsc2UgewotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJCXJldHVybiBudWxsOyAvLyB1bnJlYWNoCi0JCX0KLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfREFZVElNRURVUkFUSU9OOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RlY2ltYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEZWNpbWFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYTA0MTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RlY2ltYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc0ODA1IC0gaW1wcm92ZW1lbnRzIHRvIHhzOmludGVnZXIgZGF0YSB0eXBlCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNzc3NzQgLSBYU0RlY2ltYWwgcmV0dXJuaW5nIHdyb25nIHZhbHVlcy4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIHZhcmlvdXMgbnVtZXJpYyBmb3JtYXR0aW5nIGZpeGVzIGFuZCBjYWxjdWxhdGlvbnMKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIENhbid0IENhc3QgRXhwb25lbnRpYWwgdmFsdWVzIHRvIERlY2ltYWwgdmFsdWVzLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgZWRnZSBjYXNlIHdoZXJlIHJvdW5kaW5nIHdhcyBvY2N1cmluZyB3aGVuIGl0IHNob3VsZG4ndC4gCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyNjI3NjUgLSBmaXggdHlwZSB0ZXN0cwotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMDI4IC0gZml4ZWQgZGl2aXNpb24gb2YgemVybyAobm8sIG5vdCBieSkKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEZWNpbWFsIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RlY2ltYWwgZXh0ZW5kcyBOdW1lcmljVHlwZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfREVDSU1BTCA9ICJ4czpkZWNpbWFsIjsKLQlwcml2YXRlIEJpZ0RlY2ltYWwgX3ZhbHVlOwotCXByaXZhdGUgWFBhdGhEZWNpbWFsRm9ybWF0IGZvcm1hdCA9IG5ldyBYUGF0aERlY2ltYWxGb3JtYXQoIjAuIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKLQotCS8qKgotCSAqIEluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAuMAotCSAqLwotCXB1YmxpYyBYU0RlY2ltYWwoKSB7Ci0JCXRoaXMoQmlnRGVjaW1hbC52YWx1ZU9mKDApKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIE51bWJlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNEZWNpbWFsKEJpZ0RlY2ltYWwgeCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQkKLQlwdWJsaWMgWFNEZWNpbWFsKFN0cmluZyB4KSB7Ci0JCS8vX3ZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoeCwgTWF0aENvbnRleHQuREVDSU1BTDEyOCk7Ci0JCV92YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKHgpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6ZGVjaW1hbCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19ERUNJTUFMOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZGVjaW1hbCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImRlY2ltYWwiOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGVjaW1hbCB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQkKLQkJaWYgKHplcm8oKSkgewotCQkJcmV0dXJuICIwIjsKLQkJfQotCQkKLQkJLy8gc3RyaXAgdHJhaWxpbmcgemVyb3MKLQkJX3ZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoKF92YWx1ZS50b1N0cmluZygpKS5yZXBsYWNlRmlyc3QoIjAqIiwgIiIpKTsKLQkJCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBpZiB0aGlzIFhTRGVjaW1hbCByZXByZXNlbnRzIDAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0RlY2ltYWwgcmVwcmVzZW50cyAwLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB6ZXJvKCkgewotCQlyZXR1cm4gKF92YWx1ZS5jb21wYXJlVG8obmV3IEJpZ0RlY2ltYWwoMC4wKSkgPT0gMCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZGVjaW1hbAotCSAqIG51bWJlciBpbiB0aGUgc3VwcGxpZWQgcmVzdWx0IHNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlc3VsdCBzZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRlY2ltYWwgbnVtYmVyLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZGVjaW1hbCBudW1iZXIgc3VwcGxpZWQuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJSXRlbSBhYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJaWYgKGFhdC5nZXRTdHJpbmdWYWx1ZSgpLmluZGV4T2YoIi1JTkYiKSAhPSAtMSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJaWYgKCFpc0xleGljYWxWYWx1ZShhYXQuZ2V0U3RyaW5nVmFsdWUoKSkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkTGV4aWNhbFZhbHVlKCk7Ci0JCX0KLQkJCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJdHJ5IHsKLQkJCS8vIFhQYXRoIGRvZXNuJ3QgYWxsb3cgZm9yIGNvbnZlcnRpbmcgRXhwb25lbnRzIHRvIERlY2ltYWwgdmFsdWVzLgotCQkJCi0JCQlyZXR1cm4gY2FzdERlY2ltYWwoYWF0KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGlzTGV4aWNhbFZhbHVlKFN0cmluZyB2YWx1ZSkgewotCQlpZiAodmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgiaW5mIikpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoIi1pbmYiKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShJdGVtIGFhdCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9CQkKLQkJCi0JCWlmICgoYWF0LmdldFN0cmluZ1ZhbHVlKCkuaW5kZXhPZigiRSIpICE9IC0xKSB8fCAKLQkJCShhYXQuZ2V0U3RyaW5nVmFsdWUoKS5pbmRleE9mKCJlIikgIT0gLTEpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgWFNEZWNpbWFsIGNhc3REZWNpbWFsKEl0ZW0gYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCWlmIChhYXQuZ2V0U3RyaW5nVmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKG5ldyBCaWdEZWNpbWFsKCIxIikpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChuZXcgQmlnRGVjaW1hbCgiMCIpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IFhTRGVjaW1hbChhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogQGRlcHJlY2F0ZWQgVXNlIGdldFZhbHVlKCkgaW5zdGVhZC4KLQkgKi8KLQlwdWJsaWMgZG91YmxlIGRvdWJsZV92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS5kb3VibGVWYWx1ZSgpOwotCX0KLQkKLQlwdWJsaWMgQmlnRGVjaW1hbCBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBudW1iZXIgc3RvcmVkIHRvIHRoYXQgc3VwcGxpZWQKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgTnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldF9kb3VibGUoZG91YmxlIHgpIHsKLQkJX3ZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoeCk7Ci0JfQotCi0JLy8gY29tcGFyaXNvbnMKLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4KLQkgKiBAcGFyYW0gYXQKLQkgKiAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLQkgKiAgICAgICAgICAgIFhTRGVjaW1hbCkKLQkgKiAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIDIgcmVwcmVzZW50YXRpb24gcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXQsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNEZWNpbWFsIGR0ID0gbnVsbDsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RlY2ltYWwpKSB7IAotCQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhdCk7Ci0JCQkKLQkJCVJlc3VsdFNlcXVlbmNlIGNycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJCWlmIChjcnMuZW1wdHkoKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCQotCQkJSXRlbSBjYXQgPSBjcnMuZmlyc3QoKTsKLQotCQkJZHQgPSAoWFNEZWNpbWFsKSBjYXQ7Ci0JICAgIH0gZWxzZSB7Ci0JICAgIAlkdCA9IChYU0RlY2ltYWwpIGF0OwotCSAgICB9Ci0JCXJldHVybiAoX3ZhbHVlLmNvbXBhcmVUbyhkdC5nZXRWYWx1ZSgpKSA9PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgUmVwcmVzZW50YXRpb24gdG8gYmUgY29tcGFyZWQgd2l0aCAobXVzdCBjdXJyZW50bHkgYmUgb2YgdHlwZQotCSAqICAgICAgICAgICAgWFNEZWNpbWFsKQotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdHlwZSByZXByZXNlbnRzIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGlzCi0JICogICAgICAgICBvbmUgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUl0ZW0gY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLQkJCi0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQkJcmV0dXJuIChfdmFsdWUuY29tcGFyZVRvKHZhbC5nZXRWYWx1ZSgpKSA9PSAxKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSXRlbSBjb252ZXJ0QXJnKEFueVR5cGUgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhcmcpOwotCQlycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJSXRlbSBjYXJnID0gcnMuZmlyc3QoKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQotCQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RlY2ltYWwpCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0eXBlIHJlcHJlc2VudHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHRoaXMKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJSXRlbSBjYXJnID0gY29udmVydEFyZyhhcmcpOwotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0JCXJldHVybiAoX3ZhbHVlLmNvbXBhcmVUbyh2YWwuZ2V0VmFsdWUoKSkgPT0gLTEpOwotCX0KLQotCS8vIG1hdGgKLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sIHRoZQotCSAqIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0RlY2ltYWwuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIGFkZGl0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCS8vIGdldCBhcmcKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQlJdGVtIGF0ID0gZ2V0X3NpbmdsZV9hcmcoY2FyZyk7Ci0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNEZWNpbWFsKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRGVjaW1hbCBkdCA9IChYU0RlY2ltYWwpIGF0OwotCi0JCS8vIG93biBpdAotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChfdmFsdWUuYWRkKGR0LmdldFZhbHVlKCkpKSk7Ci0JfQotCQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQkJfQotCQl9Ci0JCWNhcmcgPSBjb25zdHJ1Y3RvcihjYXJnKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQkKLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBzdWJ0cmFjdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgc3VidHJhY3Rpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCQotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJSXRlbSBhdCA9IGdldF9zaW5nbGVfYXJnKGNhcmcpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTRGVjaW1hbCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlYU0RlY2ltYWwgZHQgPSAoWFNEZWNpbWFsKSBhdDsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChfdmFsdWUuc3VidHJhY3QoZHQuZ2V0VmFsdWUoKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIG11bHRpcGxpY2F0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB0aW1lcyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQkJQmlnRGVjaW1hbCByZXN1bHQgPSBfdmFsdWUubXVsdGlwbHkodmFsLmdldFZhbHVlKCkpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRGVjaW1hbCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgZGl2aXNpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQkJCi0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQkJaWYgKHZhbC56ZXJvKCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5kaXZfemVybyhudWxsKTsKLQkJfQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IGdldFZhbHVlKCkuZGl2aWRlKHZhbC5nZXRWYWx1ZSgpLCAxOCwgQmlnRGVjaW1hbC5ST1VORF9IQUxGX0VWRU4pOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChyZXN1bHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEZWNpbWFsIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gRHVlIHRvIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gb3IgY29udmVyc2lvbiwKLQkgKiB0aGUgUmVzdWx0U2VxdWVuY2UgbXVzdCBiZSBvZiB0eXBlIFhTRGVjaW1hbC4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLQkgKiAgICAgICAgIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RlY2ltYWwgdmFsID0gKFhTRGVjaW1hbCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRGVjaW1hbC5jbGFzcyk7Ci0KLQkJaWYgKHZhbC56ZXJvKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZGl2X3plcm8obnVsbCk7Ci0JCUJpZ0ludGVnZXIgX2l2YWx1ZSA9IF92YWx1ZS50b0JpZ0ludGVnZXIoKTsKLQkJQmlnSW50ZWdlciBpdmFsID0gIHZhbC5nZXRWYWx1ZSgpLnRvQmlnSW50ZWdlcigpOwotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IF9pdmFsdWUuZGl2aWRlKGl2YWwpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IAotCQkJCSAgICAgICAgICAgWFNJbnRlZ2VyKHJlc3VsdCkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtb2R1bHVzIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0RlY2ltYWwgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLCB0aGUKLQkgKiBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEZWNpbWFsLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtb2QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEZWNpbWFsLmNsYXNzKTsKLQkJCi0JCS8vIEJpZ0RlY2ltYWwgcmVzdWx0ID0gX3ZhbHVlLnJlbWFpbmRlcih2YWwuZ2V0VmFsdWUoKSk7Ci0JCUJpZ0RlY2ltYWwgcmVzdWx0ID0gcmVtYWluZGVyKF92YWx1ZSwgdmFsLmdldFZhbHVlKCkpOyAKLQkJCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlc3VsdCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgQmlnRGVjaW1hbCByZW1haW5kZXIoQmlnRGVjaW1hbCB2YWx1ZSwgQmlnRGVjaW1hbCBkaXZpc29yKSB7Ci0JCS8vIHJldHVybiB2YWx1ZS5yZW1haW5kZXIoZGl2aXNvcik7Ci0JCQotCQkvLyBhcHB4IGFzIG9mIG5vdy4gSkRLIDEuNCBkb2Vzbid0IHN1cHBvcnQgQmlnRGVjaW1hbC5yZW1haW5kZXIoLi4pCi0JCUJpZ0RlY2ltYWwgZGl2aWRlbmQgPSB2YWx1ZS5kaXZpZGUoZGl2aXNvciwgQmlnRGVjaW1hbC5ST1VORF9ET1dOKTsKLQkJQmlnRGVjaW1hbCBjZWlsRGl2aWRlbmQgPSBuZXcgQmlnRGVjaW1hbChkaXZpZGVuZC50b0JpZ0ludGVnZXIoKSk7Ci0JCQotCQlyZXR1cm4gdmFsdWUuc3VidHJhY3QoY2VpbERpdmlkZW5kLm11bHRpcGx5KGRpdmlzb3IpKTsgCi0JfQotCQotCS8qKgotCSAqIE5lZ2F0aW9uIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIG5lZ2F0aW9uIG9mIHRoaXMgWFNEZWNpbWFsCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IF92YWx1ZS5uZWdhdGUoKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RlY2ltYWwocmVzdWx0KSk7Ci0JfQotCi0JLy8gZnVuY3Rpb25zCi0JLyoqCi0JICogQWJzb2x1dGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIGFicygpIHsKLQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwoX3ZhbHVlLmFicygpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RlY2ltYWwgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgY2VpbGluZygpIHsKLQkJQmlnRGVjaW1hbCBjZWlsaW5nID0gX3ZhbHVlLnNldFNjYWxlKDAsIEJpZ0RlY2ltYWwuUk9VTkRfQ0VJTElORyk7Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKGNlaWxpbmcpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEZWNpbWFsIHJlcHJlc2VudGluZyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHNtYWxsZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgZmxvb3IoKSB7Ci0JCUJpZ0RlY2ltYWwgZmxvb3IgPSBfdmFsdWUuc2V0U2NhbGUoMCwgQmlnRGVjaW1hbC5ST1VORF9GTE9PUik7Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKGZsb29yKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmQoKSB7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSBfdmFsdWUuc2V0U2NhbGUoMCwgQmlnRGVjaW1hbC5ST1VORF9VUCk7Ci0JCXJldHVybiBuZXcgWFNEZWNpbWFsKHJvdW5kKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGludGVnZXIgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICogCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKCkgewotCQlyZXR1cm4gcm91bmRfaGFsZl90b19ldmVuKDApOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uLgotCSAqIAotCSAqIEBwYXJhbSBwcmVjaXNpb24gQW4gaW50ZWdlciBwcmVjaXNpb24gCi0JICogQHJldHVybiBBIFhTRGVjaW1hbCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKGludCBwcmVjaXNpb24pIHsKLQkJQmlnRGVjaW1hbCByb3VuZCA9IF92YWx1ZS5zZXRTY2FsZShwcmVjaXNpb24sIEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOKTsKLQkJcmV0dXJuIG5ldyBYU0RlY2ltYWwocm91bmQpOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19ERUNJTUFMOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRG91YmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRG91YmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWYyYzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0RvdWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjc3NzcwIC0gZm9ybWF0IG9mIFhTRG91YmxlIGZvciB6ZXJvIHZhbHVlcyBpbmNvcnJlY3QuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3OTQwNiAtIGltcHJvdmVtZW50cyB0byBuZWdhdGl2ZSB6ZXJvIHZhbHVlcyBmb3IgeHM6ZG91YmxlCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSB2YXJpb3VzIG51bWVyaWMgZm9ybWF0dGluZyBmaXhlcyBhbmQgY2FsY3VsYXRpb25zCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCByb3VuZGluZyBlcnJvcnMuICAgICAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIEJ1ZyAyODYwNjIgLSBGaXggaWRpdiBlcnJvciBjYXNlcyBhbmQgaW5jcmVhc2UgcHJlY2lzaW9uICAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEb3VibGUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTRG91YmxlIGV4dGVuZHMgTnVtZXJpY1R5cGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0RPVUJMRSA9ICJ4czpkb3VibGUiOwotCXByaXZhdGUgRG91YmxlIF92YWx1ZTsKLQlwcml2YXRlIFhQYXRoRGVjaW1hbEZvcm1hdCBmb3JtYXQgPSBuZXcgWFBhdGhEZWNpbWFsRm9ybWF0KAotCQkJIjAuIyMjIyMjIyMjIyMjIyMjI0UwIik7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBudW1iZXIKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgTnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0RvdWJsZShkb3VibGUgeCkgewotCQlfdmFsdWUgPSBuZXcgRG91YmxlKHgpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU0RvdWJsZSgpIHsKLQkJdGhpcygwKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyBhIFN0cmluZyByZXByZXNlbnRlZCBudW1iZXIKLQkgKiAKLQkgKiBAcGFyYW0gaW5pdAotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRG91YmxlKFN0cmluZyBpbml0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdHJ5IHsKLQkJCWlmIChpbml0LmVxdWFscygiLUlORiIpKSB7Ci0JCQkJX3ZhbHVlID0gbmV3IERvdWJsZShEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpOwotCQkJfSBlbHNlIGlmIChpbml0LmVxdWFscygiSU5GIikpIHsKLQkJCQlfdmFsdWUgPSBuZXcgRG91YmxlKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSk7Ci0JCQl9IGVsc2UgewotCQkJCV92YWx1ZSA9IG5ldyBEb3VibGUoaW5pdCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3RyaW5nIHJlcHJlc2VudGVkIG51bWJlcgotCSAqIAotCSAqIEBwYXJhbSBpCi0JICogICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciB0byBiZSBzdG9yZWQKLQkgKiBAcmV0dXJuIE5ldyBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBzdXBwbGllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEb3VibGUgcGFyc2VfZG91YmxlKFN0cmluZyBpKSB7Ci0JCXRyeSB7Ci0JCQlEb3VibGUgZCA9IG51bGw7Ci0JCQlpZiAoaS5lcXVhbHMoIklORiIpKSB7Ci0JCQkJZCA9IG5ldyBEb3VibGUoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKTsKLQkJCX0gZWxzZSBpZiAoaS5lcXVhbHMoIi1JTkYiKSkgewotCQkJCWQgPSBuZXcgRG91YmxlKERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSk7Ci0JCQl9IGVsc2UgewotCQkJCWQgPSBuZXcgRG91YmxlKGkpOwotCQkJfQotCQkJcmV0dXJuIG5ldyBYU0RvdWJsZShkLmRvdWJsZVZhbHVlKCkpOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IHJlc3VsdCBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXRyaWV2YWJsZSBkb3VibGUgbnVtYmVyCi0JICogaW4gdGhlIHN1cHBsaWVkIHJlc3VsdCBzZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXN1bHQgc2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBkb3VibGUgbnVtYmVyLgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICogQHJldHVybiBBIG5ldyByZXN1bHQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZG91YmxlIG51bWJlciBzdXBwbGllZC4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24gfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JCVhTRG91YmxlIGQgPSBjYXN0RG91YmxlKGFhdCk7Ci0JCQotCQlpZiAoZCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlyZXR1cm4gZDsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoSXRlbSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTU3RyaW5nIHx8IGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyB8fAotCQkJYWF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0RvdWJsZSBjYXN0RG91YmxlKEl0ZW0gYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCWlmIChhYXQuZ2V0U3RyaW5nVmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCXJldHVybiBuZXcgWFNEb3VibGUoMS4wRTApOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gbmV3IFhTRG91YmxlKDAuMEUwKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcGFyc2VfZG91YmxlKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCi0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpkb3VibGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfRE9VQkxFOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZG91YmxlIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZG91YmxlIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIERlY2ltYWwgdmFsdWUgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJaWYgKHplcm8oKSkgewotCQkJcmV0dXJuICIwIjsKLQkJfQotCi0JCWlmIChuZWdhdGl2ZVplcm8oKSkgewotCQkJcmV0dXJuICItMCI7Ci0JCX0KLQotCQlpZiAobmFuKCkpIHsKLQkJCXJldHVybiAiTmFOIjsKLQkJfQotCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgTmFOCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBuYW4oKSB7Ci0JCXJldHVybiBEb3VibGUuaXNOYU4oX3ZhbHVlLmRvdWJsZVZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyBhbiBpbmZpbml0ZSBudW1iZXIgKG5lZ2F0aXZlIG9yIHBvc2l0aXZlKQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpbmZpbml0ZSgpIHsKLQkJcmV0dXJuIERvdWJsZS5pc0luZmluaXRlKF92YWx1ZS5kb3VibGVWYWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHplcm8oKSB7Ci0JCXJldHVybiAoRG91YmxlLmNvbXBhcmUoX3ZhbHVlLmRvdWJsZVZhbHVlKCksIDAuMEUwKSA9PSAwKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgWFNEb3VibGUgcmVwcmVzZW50cyAtMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFhTRG91YmxlIHJlcHJlc2VudHMgLTAuIEZhbHNlIG90aGVyd2lzZS4KLQkgKiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmVaZXJvKCkgewotCQlyZXR1cm4gKERvdWJsZS5jb21wYXJlKF92YWx1ZS5kb3VibGVWYWx1ZSgpLCAtMC4wRTApID09IDApOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgc3RvcmVkCi0JICovCi0JcHVibGljIGRvdWJsZSBkb3VibGVfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUuZG91YmxlVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4KLQkgKiBAcGFyYW0gYWEKLQkgKiAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIHRvIGJlIGNvbXBhcmVkIHdpdGggKG11c3QgY3VycmVudGx5IGJlIG9mIHR5cGUKLQkgKiAgICAgICAgICAgIFhTRG91YmxlKQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgMiByZXByZXNlbnRhdGlvbnMgcmVwcmVzZW50IHRoZSBzYW1lIG51bWJlci4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFhLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYWEpOwotCQlSZXN1bHRTZXF1ZW5jZSBjcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCQotCQlpZiAoY3JzLmVtcHR5KCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQkJSXRlbSBjYXQgPSBjcnMuZmlyc3QoKTsKLQotCQlYU0RvdWJsZSBkID0gKFhTRG91YmxlKSBjYXQ7Ci0JCWlmIChkLm5hbigpICYmIG5hbigpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCURvdWJsZSB0aGF0dmFsdWUgPSBuZXcgRG91YmxlKGQuZG91YmxlX3ZhbHVlKCkpOwotCQlEb3VibGUgdGhpc3ZhbHVlID0gbmV3IERvdWJsZShkb3VibGVfdmFsdWUoKSk7Ci0JCQotCQlyZXR1cm4gdGhpc3ZhbHVlLmVxdWFscyh0aGF0dmFsdWUpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RvdWJsZSkKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBzbWFsbGVyIHRoYW4gdGhpcwotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlJdGVtIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0JCQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RvdWJsZS5jbGFzcyk7Ci0JCXJldHVybiBkb3VibGVfdmFsdWUoKSA+IHZhbC5kb3VibGVfdmFsdWUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSXRlbSBjb252ZXJ0QXJnKEFueVR5cGUgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhcmcpOwotCQlycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJSXRlbSBjYXJnID0gcnMuZmlyc3QoKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIEN1cnJlbnRseQotCSAqIG5vIG51bWVyaWMgdHlwZSBwcm9tb3Rpb24gZXhpc3RzIHNvIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiBtdXN0IGJlCi0JICogb2YgdHlwZSBYU0RvdWJsZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBSZXByZXNlbnRhdGlvbiB0byBiZSBjb21wYXJlZCB3aXRoIChtdXN0IGN1cnJlbnRseSBiZSBvZiB0eXBlCi0JICogICAgICAgICAgICBYU0RvdWJsZSkKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHR5cGUgcmVwcmVzZW50cyBhIG51bWJlciBncmVhdGVyIHRoYW4gdGhpcwotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlJdGVtIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0KLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCQlyZXR1cm4gZG91YmxlX3ZhbHVlKCkgPCB2YWwuZG91YmxlX3ZhbHVlKCk7Ci0JfQotCi0JLy8gbWF0aAotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBhZGRpdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGFkZGl0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJSXRlbSBhdCA9IGdldF9zaW5nbGVfYXJnKGNhcmcpOwotCQkKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0RvdWJsZSkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQkrIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCX0KLQotCQljYXJnID0gY29uc3RydWN0b3IoY2FyZyk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBzdWJ0cmFjdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQkKLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQktIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiBEdWUgdG8gbm8gbnVtZXJpYyB0eXBlIHByb21vdGlvbiBvciBjb252ZXJzaW9uLAotCSAqIHRoZSBSZXN1bHRTZXF1ZW5jZSBtdXN0IGJlIG9mIHR5cGUgWFNEb3VibGUuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbXVsdGlwbGljYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0RvdWJsZSB2YWwgPSAoWFNEb3VibGUpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RvdWJsZS5jbGFzcyk7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoZG91YmxlX3ZhbHVlKCkKLQkJCQkqIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBkaXZpc2lvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRG91YmxlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRG91YmxlLmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RvdWJsZShkb3VibGVfdmFsdWUoKQotCQkJCS8gdmFsLmRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRG91YmxlIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBpbnRlZ2VyCi0JICogICAgICAgICBkaXZpc2lvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgaWRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNEb3VibGUuY2xhc3MpOwotCi0JCWlmICh0aGlzLm5hbigpIHx8IHZhbC5uYW4oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5udW1lcmljX292ZXJmbG93KCJEaXZpZGVuZCBvciBkaXZpc29yIGlzIE5hTiIpOwotCi0JCWlmICh0aGlzLmluZmluaXRlKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubnVtZXJpY19vdmVyZmxvdygiRGl2aWRlbmQgaXMgaW5maW5pdGUiKTsKLQotCQlpZiAodmFsLnplcm8oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kaXZfemVybyhudWxsKTsKLQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IG5ldyBCaWdEZWNpbWFsKChkb3VibGVfdmFsdWUoKSAvIHZhbC5kb3VibGVfdmFsdWUoKSkpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihyZXN1bHQudG9CaWdJbnRlZ2VyKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNEb3VibGUgYW5kIHRoZSBzdXBwbGllZAotCSAqIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhIG1vZHVsdXMgd2l0aAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBtb2R1bHVzLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtb2QoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCi0JCVhTRG91YmxlIHZhbCA9IChYU0RvdWJsZSkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRG91YmxlLmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RvdWJsZShkb3VibGVfdmFsdWUoKQotCQkJCSUgdmFsLmRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTmVnYXRpb24gb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGlzIFhTRGVjaW1hbAotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB1bmFyeV9taW51cygpIHsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0RvdWJsZSgtMQotCQkJCSogZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvLyBmdW5jdGlvbnMKLQkvKioKLQkgKiBBYnNvbHV0ZXMgdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSBhYnMoKSB7Ci0JCXJldHVybiBuZXcgWFNEb3VibGUoTWF0aC5hYnMoZG91YmxlX3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSBjZWlsaW5nKCkgewotCQlyZXR1cm4gbmV3IFhTRG91YmxlKE1hdGguY2VpbChkb3VibGVfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSBmbG9vcigpIHsKLQkJcmV0dXJuIG5ldyBYU0RvdWJsZShNYXRoLmZsb29yKGRvdWJsZV92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0RvdWJsZSByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmQoKSB7Ci0JCUJpZ0RlY2ltYWwgdmFsdWUgPSBuZXcgQmlnRGVjaW1hbChfdmFsdWUuZG91YmxlVmFsdWUoKSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZSgwLCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfVVApOwotCQlyZXR1cm4gbmV3IFhTRG91YmxlKHJvdW5kLmRvdWJsZVZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbigpIHsKLQotCQlyZXR1cm4gcm91bmRfaGFsZl90b19ldmVuKDApOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsb3Nlc3QgaW50ZWdlciBvZiB0aGUgbnVtYmVyIHN0b3JlZCB3aXRoIHRoZSBzcGVjaWZpZWQKLQkgKiBwcmVjaXNpb24uCi0JICogCi0JICogQHBhcmFtIHByZWNpc2lvbgotCSAqICAgICAgICAgICAgQW4gaW50ZWdlciBwcmVjaXNpb24KLQkgKiBAcmV0dXJuIEEgWFNEb3VibGUgcmVwcmVzZW50aW5nIHRoZSBjbG9zZXN0IGxvbmcgb2YgdGhlIG51bWJlciBzdG9yZWQuCi0JICovCi0JcHVibGljIE51bWVyaWNUeXBlIHJvdW5kX2hhbGZfdG9fZXZlbihpbnQgcHJlY2lzaW9uKSB7Ci0JCUJpZ0RlY2ltYWwgdmFsdWUgPSBuZXcgQmlnRGVjaW1hbChfdmFsdWUuZG91YmxlVmFsdWUoKSk7Ci0JCUJpZ0RlY2ltYWwgcm91bmQgPSB2YWx1ZS5zZXRTY2FsZShwcmVjaXNpb24sIEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9FVkVOKTsKLQkJcmV0dXJuIG5ldyBYU0RvdWJsZShyb3VuZC5kb3VibGVWYWx1ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfRE9VQkxFOwotCX0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0gICAgCXJldHVybiBkb3VibGVfdmFsdWUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRHVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEdXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDNhMWZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNEdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjgyMjIzIC0gSW1wbGVtZW50ZWQgWFNEdXJhdGlvbiB0eXBlIGZvciBjYXN0YWJsZSBjaGVja2luZy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEd0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBMdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6ZHVyYXRpb24gZGF0YSB0eXBlLiBPdGhlciBkdXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMKLSAqIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBpbXBsZW1lbnRhdGlvbi4KLSAqIAotICogQHNpbmNlIDEuMSBUaGlzIHVzZWQgdG8gYmUgYW4gYWJzdHJhY3QgY2xhc3MgYnV0IHdhcyBpbmNvcnJlY3RseSBpbXBsZW1lbnRlZAotICogICAgICAgIGFzIHN1Y2guCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0R1cmF0aW9uIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBMdCwgQ21wR3QsIENsb25lYWJsZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfRFVSQVRJT04gPSAieHM6ZHVyYXRpb24iOwotCXByb3RlY3RlZCBpbnQgX3llYXI7Ci0JcHJvdGVjdGVkIGludCBfbW9udGg7Ci0JcHJvdGVjdGVkIGludCBfZGF5czsKLQlwcm90ZWN0ZWQgaW50IF9ob3VyczsKLQlwcm90ZWN0ZWQgaW50IF9taW51dGVzOwotCXByb3RlY3RlZCBkb3VibGUgX3NlY29uZHM7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gX25lZ2F0aXZlOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdG8gdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIG1vcmUgdGhhbiAyNCBob3VycyBpcwotCSAqIHN1cHBsaWVkLCB0aGUgbnVtYmVyIG9mIGRheXMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuIFRoZSBzYW1lIG9jY3VycyBmb3IKLQkgKiBtaW51dGVzIGFuZCBzZWNvbmRzCi0JICogCi0JICogQHBhcmFtIHllYXJzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIEBwYXJhbSBtb250aHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIEBwYXJhbSBkYXlzCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgZGF5cyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gaG91cnMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBob3VycyBpbiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcGFyYW0gbWludXRlcwotCSAqICAgICAgICAgICAgTnVtYmVyIG9mIG1pbnV0ZXMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIHNlY29uZHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBzZWNvbmRzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBuZWdhdGl2ZQotCSAqICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0JICogICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uKGludCB5ZWFycywgaW50IG1vbnRocywgaW50IGRheXMsIGludCBob3VycywgaW50IG1pbnV0ZXMsCi0JCQlkb3VibGUgc2Vjb25kcywgYm9vbGVhbiBuZWdhdGl2ZSkgewotCQlfeWVhciA9IHllYXJzOwotCQlfbW9udGggPSBtb250aHM7Ci0JCV9kYXlzID0gZGF5czsKLQkJX2hvdXJzID0gaG91cnM7Ci0JCV9taW51dGVzID0gbWludXRlczsKLQkJX3NlY29uZHMgPSBzZWNvbmRzOwotCQlfbmVnYXRpdmUgPSBuZWdhdGl2ZTsKLQotCQlpZiAoX21vbnRoID49IDEyKSB7Ci0JCQlfeWVhciArPSBfbW9udGggLyAxMjsKLQkJCV9tb250aCA9IF9tb250aCAlIDEyOwotCQl9Ci0KLQkJaWYgKF9zZWNvbmRzID49IDYwKSB7Ci0JCQlpbnQgaXNlYyA9IChpbnQpIF9zZWNvbmRzOwotCQkJZG91YmxlIHJlbSA9IF9zZWNvbmRzIC0gKGlzZWMpOwotCi0JCQlfbWludXRlcyArPSBpc2VjIC8gNjA7Ci0JCQlfc2Vjb25kcyA9IGlzZWMgJSA2MDsKLQkJCV9zZWNvbmRzICs9IHJlbTsKLQkJfQotCQlpZiAoX21pbnV0ZXMgPj0gNjApIHsKLQkJCV9ob3VycyArPSBfbWludXRlcyAvIDYwOwotCQkJX21pbnV0ZXMgPSBfbWludXRlcyAlIDYwOwotCQl9Ci0JCWlmIChfaG91cnMgPj0gMjQpIHsKLQkJCV9kYXlzICs9IF9ob3VycyAvIDI0OwotCQkJX2hvdXJzID0gX2hvdXJzICUgMjQ7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcwotCSAqIAotCSAqIEBwYXJhbSBzZWNzCi0JICogICAgICAgICAgICBOdW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uKGRvdWJsZSBzZWNzKSB7Ci0JCXRoaXMoMCwgMCwgMCwgMCwgMCwgTWF0aC5hYnMoc2VjcyksIHNlY3MgPCAwKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byBhIGR1cmF0aW9uIG9mIG5vIHRpbWUgKDBkYXlzLCAwaG91cnMsIDBtaW51dGVzLCAwc2Vjb25kcykKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbigpIHsKLQkJdGhpcygwLCAwLCAwLCAwLCAwLCAwLjAsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJkdXJhdGlvbiI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0RVUkFUSU9OOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uIHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCVN0cmluZyByZXQgPSAiIjsKLQkJYm9vbGVhbiBkaWRfc29tZXRoaW5nID0gZmFsc2U7Ci0JCVN0cmluZyB0cmV0ID0gIiI7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkgJiYgIShkYXlzKCkgPT0gMCAmJiBob3VycygpID09IDAgJiYgc2Vjb25kcygpID09IDApKQotCQkJcmV0ICs9ICItIjsKLQotCQlyZXQgKz0gIlAiOwotCi0JCWludCB5ZWFycyA9IHllYXIoKTsKLQkJaWYgKHllYXJzICE9IDApCi0JCQlyZXQgKz0geWVhcnMgKyAiWSI7Ci0KLQkJaW50IG1vbnRocyA9IG1vbnRoKCk7Ci0JCWlmIChtb250aHMgIT0gMCkgewotCQkJcmV0ICs9IG1vbnRocyArICJNIjsKLQkJfQotCi0JCWlmIChkYXlzKCkgIT0gMCkgewotCQkJcmV0ICs9IGRheXMoKSArICJEIjsKLQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQl9Ci0KLQkJLy8gZG8gdGhlICJ0aW1lIiBiaXQKLQkJaW50IGhvdXJzID0gaG91cnMoKTsKLQkJaW50IG1pbnV0ZXMgPSBtaW51dGVzKCk7Ci0JCWRvdWJsZSBzZWNvbmRzID0gc2Vjb25kcygpOwotCQkKLQkJaWYgKGhvdXJzICE9IDApIHsKLQkJCXRyZXQgKz0gaG91cnMgKyAiSCI7Ci0JCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJfQotCQlpZiAobWludXRlcyAhPSAwKSB7Ci0JCQl0cmV0ICs9IG1pbnV0ZXMgKyAiTSI7Ci0JCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJfQotCQlpZiAoc2Vjb25kcyAhPSAwKSB7Ci0JCQlTdHJpbmcgZG91YlN0ciA9IChuZXcgRG91YmxlKHNlY29uZHMpLnRvU3RyaW5nKCkpOwotCQkJaWYgKGRvdWJTdHIuZW5kc1dpdGgoIi4wIikpIHsKLQkJCQkvLyBzdHJpbmcgdmFsdWUgb2YgeC4wIHNlY29uZHMgaXMgeFMuIGUuZywgNy4wUyBpcyBjb252ZXJ0ZWQgdG8KLQkJCQkvLyA3Uy4KLQkJCQl0cmV0ICs9IGRvdWJTdHIuc3Vic3RyaW5nKDAsIGRvdWJTdHIuaW5kZXhPZigiLjAiKSkgKyAiUyI7Ci0JCQl9IGVsc2UgewotCQkJCXRyZXQgKz0gc2Vjb25kcyArICJTIjsKLQkJCX0KLQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQl9IGVsc2UgaWYgKCFkaWRfc29tZXRoaW5nKSB7Ci0JCQkJdHJldCArPSAiMFMiOwotCQl9Ci0JCQotCQlpZiAoKHllYXIoKSA9PSAwICYmIG1vbnRoKCkgPT0gMCkgfHwgKGhvdXJzID4gMCB8fCBtaW51dGVzID4gMCB8fCBzZWNvbmRzID4gMCkpIHsKLQkJCWlmICh0cmV0Lmxlbmd0aCgpID4gMCkgewotCQkJCXJldCArPSAiVCIgKyB0cmV0OwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBkYXlzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBkYXlzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IGRheXMoKSB7Ci0JCXJldHVybiBfZGF5czsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtaW51dGVzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1pbnV0ZXMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCXB1YmxpYyBpbnQgbWludXRlcygpIHsKLQkJcmV0dXJuIF9taW51dGVzOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGhvdXJzIChtYXggMjQpIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBob3VycyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBob3VycygpIHsKLQkJcmV0dXJuIF9ob3VyczsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIChtYXggNjApIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqLwotCXB1YmxpYyBkb3VibGUgc2Vjb25kcygpIHsKLQkJcmV0dXJuIF9zZWNvbmRzOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiB2YWx1ZSgpID09IHZhbC52YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHRpbWUgcmVwcmVzZW50cyBhIGxhcmdlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXlUaW1lRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiB2YWx1ZSgpIDwgdmFsLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsCi0JCQkJWFNEYXlUaW1lRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiB2YWx1ZSgpID4gdmFsLnZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0JICogdGltZQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5lZ2F0aXZlKCkgewotCQlyZXR1cm4gX25lZ2F0aXZlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQgYXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHdpdGhpbiBpdAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIHNlY29uZHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBkb3VibGUgdmFsdWUoKSB7Ci0JCWRvdWJsZSByZXQgPSBkYXlzKCkgKiAyNCAqIDYwICogNjA7Ci0KLQkJcmV0ICs9IGhvdXJzKCkgKiA2MCAqIDYwOwotCQlyZXQgKz0gbWludXRlcygpICogNjA7Ci0JCXJldCArPSBzZWNvbmRzKCk7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkpCi0JCQlyZXQgKj0gLTE7Ci0JCQotCQkKLQotCQlyZXR1cm4gcmV0OwotCX0KLQkKLQlwdWJsaWMgZG91YmxlIHRpbWVfdmFsdWUoKSB7Ci0JCWRvdWJsZSByZXQgPSAwOwotCQlyZXQgKz0gaG91cnMoKSAqIDYwICogNjA7Ci0JCXJldCArPSBtaW51dGVzKCkgKiA2MDsKLQkJcmV0ICs9IHNlY29uZHMoKTsKLQotCQlpZiAobmVnYXRpdmUoKSkKLQkJCXJldCAqPSAtMTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZHVyYXRpb24KLQkgKiBmcm9tIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSB0aW1lIGR1cmF0aW9uIGV4dHJhY3RlZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgQ2FsZW5kYXJUeXBlIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghKGlzQ2FzdGFibGUoYWF0KSkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCVhTRHVyYXRpb24gZHVyYXRpb24gPSBjYXN0RHVyYXRpb24oYWF0KTsKLQotCQlpZiAoZHVyYXRpb24gPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcmV0dXJuIGR1cmF0aW9uOwotCX0KLQotCXByaXZhdGUgWFNEdXJhdGlvbiBjYXN0RHVyYXRpb24oQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRHVyYXRpb24pIHsKLQkJCVhTRHVyYXRpb24gZHVyYXRpb24gPSAoWFNEdXJhdGlvbikgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0R1cmF0aW9uKGR1cmF0aW9uLnllYXIoKSwgZHVyYXRpb24ubW9udGgoKSwgZHVyYXRpb24uZGF5cygpLCBkdXJhdGlvbi5ob3VycygpLCBkdXJhdGlvbi5taW51dGVzKCksIGR1cmF0aW9uLnNlY29uZHMoKSwgZHVyYXRpb24ubmVnYXRpdmUoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZURURHVyYXRpb24oYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFhTRGF5VGltZUR1cmF0aW9uIGJ5IHBhcnNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiAKLQkgKiBAcGFyYW0gc3RyCi0JICogICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50ZWQgZHVyYXRpb24gb2YgdGltZQotCSAqIEByZXR1cm4gTmV3IFhTRGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZSBzdXBwbGllZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNEdXJhdGlvbiBwYXJzZURURHVyYXRpb24oU3RyaW5nIHN0cikgewotCQlib29sZWFuIG5lZ2F0aXZlID0gZmFsc2U7Ci0JCWludCB5ZWFycyA9IDA7Ci0JCWludCBtb250aHMgPSAwOwotCQlpbnQgZGF5cyA9IDA7Ci0JCWludCBob3VycyA9IDA7Ci0JCWludCBtaW51dGVzID0gMDsKLQkJZG91YmxlIHNlY29uZHMgPSAwOwotCi0JCS8vIHN0cmluZyBmb2xsb3dpbmcgdGhlIFAKLQkJU3RyaW5nIHBzdHIgPSAiIjsKLQkJU3RyaW5nIHRzdHIgPSAiIjsKLQotCQkvLyBnZXQgdGhlIG5lZ2F0aXZlIGFuZCBwc3RyCi0JCWlmIChzdHIuc3RhcnRzV2l0aCgiLVAiKSkgewotCQkJbmVnYXRpdmUgPSB0cnVlOwotCQkJcHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiUCIpKSB7Ci0JCQluZWdhdGl2ZSA9IGZhbHNlOwotCQkJcHN0ciA9IHN0ci5zdWJzdHJpbmcoMSwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gbnVsbDsKLQotCQl0cnkgewotCQkJaW50IGluZGV4ID0gcHN0ci5pbmRleE9mKCdZJyk7Ci0JCQlib29sZWFuIGRpZF9zb21ldGhpbmcgPSBmYWxzZTsKLQotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gcHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCXllYXJzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJcHN0ciA9IHBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0KLQkJCWluZGV4ID0gcHN0ci5pbmRleE9mKCdNJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSBwc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJbW9udGhzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJcHN0ciA9IHBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgcHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0KLQkJCS8vIGdldCB0aGUgZGF5cwotCQkJaW5kZXggPSBwc3RyLmluZGV4T2YoJ0QnKTsKLQotCQkJaWYgKGluZGV4ID09IC0xKSB7Ci0JCQkJaWYgKHBzdHIuc3RhcnRzV2l0aCgiVCIpKSB7Ci0JCQkJCXRzdHIgPSBwc3RyLnN1YnN0cmluZygxLCBwc3RyLmxlbmd0aCgpKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVN0cmluZyBkaWdpdCA9IHBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlkYXlzID0gSW50ZWdlci5wYXJzZUludChkaWdpdCk7Ci0JCQkJdHN0ciA9IHBzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgcHN0ci5sZW5ndGgoKSk7Ci0KLQkJCQlpZiAodHN0ci5zdGFydHNXaXRoKCJUIikpIHsKLQkJCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRzdHIgPSAiIjsKLQkJCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBkbyB0aGUgVCBzdHIKLQotCQkJLy8gaG91cgotCQkJaW5kZXggPSB0c3RyLmluZGV4T2YoJ0gnKTsKLQkJCWlmIChpbmRleCAhPSAtMSkgewotCQkJCVN0cmluZyBkaWdpdCA9IHRzdHIuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkJCQlob3VycyA9IEludGVnZXIucGFyc2VJbnQoZGlnaXQpOwotCQkJCXRzdHIgPSB0c3RyLnN1YnN0cmluZyhpbmRleCArIDEsIHRzdHIubGVuZ3RoKCkpOwotCQkJCWRpZF9zb21ldGhpbmcgPSB0cnVlOwotCQkJfQotCQkJLy8gbWludXRlCi0JCQlpbmRleCA9IHRzdHIuaW5kZXhPZignTScpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nIGRpZ2l0ID0gdHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCW1pbnV0ZXMgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0KTsKLQkJCQl0c3RyID0gdHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCB0c3RyLmxlbmd0aCgpKTsKLQkJCQlkaWRfc29tZXRoaW5nID0gdHJ1ZTsKLQkJCX0KLQkJCS8vIHNlY29uZHMKLQkJCWluZGV4ID0gdHN0ci5pbmRleE9mKCdTJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmcgZGlnaXQgPSB0c3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQkJc2Vjb25kcyA9IERvdWJsZS5wYXJzZURvdWJsZShkaWdpdCk7Ci0JCQkJdHN0ciA9IHRzdHIuc3Vic3RyaW5nKGluZGV4ICsgMSwgdHN0ci5sZW5ndGgoKSk7Ci0JCQkJZGlkX3NvbWV0aGluZyA9IHRydWU7Ci0JCQl9Ci0JCQlpZiAoIWRpZF9zb21ldGhpbmcpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXJyKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXJldHVybiBuZXcgWFNEdXJhdGlvbih5ZWFycywgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywKLQkJCQluZWdhdGl2ZSk7Ci0JfQotCi0JcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBuZXcgWFNEdXJhdGlvbih5ZWFyKCksIG1vbnRoKCksIGRheXMoKSwgaG91cnMoKSwgbWludXRlcygpLAotCQkJCXNlY29uZHMoKSwgbmVnYXRpdmUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgeWVhcnMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIHllYXJzIHdpdGhpbiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IHllYXIoKSB7Ci0JCXJldHVybiBfeWVhcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG51bWJlciBvZiBtb250aHMgd2l0aGluIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gTnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3RvcmVkCi0JICovCi0JcHVibGljIGludCBtb250aCgpIHsKLQkJcmV0dXJuIF9tb250aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCVN0cmluZyB2YWx1ZSA9IGFhdC5nZXRTdHJpbmdWYWx1ZSgpOyAvLyBnZXQgdGhpcyBvbmNlIHNvIHdlIGRvbid0IHJlY3JlYXRlIGV2ZXJ5dGltZS4KLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpzdHJpbmciKSB8fCB0eXBlLmVxdWFscygieHM6dW50eXBlZEF0b21pYyIpKSB7Ci0JCQlpZiAoaXNEdXJhdGlvblZhbHVlKHZhbHVlKSkgewotCQkJCXJldHVybiB0cnVlOyAgLy8gV2UgbWlnaHQgYmUgYWJsZSB0byBjYXN0IHRoaXMuCi0JCQl9Ci0JCX0KLQkJCi0JCS8vIFdlIGNhbiBjYXN0IGZyb20gb3Vyc2VsZiBvciBkZXJpdmF0aW9ucyBvZiBvdXJzZWx2ZXMuCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkJCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRHVyYXRpb25WYWx1ZShTdHJpbmcgdmFsdWUpIHsKLQkJcmV0dXJuIHZhbHVlLnN0YXJ0c1dpdGgoIlAiKSB8fCB2YWx1ZS5zdGFydHNXaXRoKCItUCIpOwotCX0KLQkKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19EVVJBVElPTjsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gX2RhdGF0eXBlRmFjdG9yeS5uZXdEdXJhdGlvbighIG5lZ2F0aXZlKCksIHllYXIoKSwgbW9udGgoKSwgZGF5cygpLCBob3VycygpLCBtaW51dGVzKCksIChpbnQpc2Vjb25kcygpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRW50aXR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRW50aXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ODc5ZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0VudGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgYnVnIDIyODIyMyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ4NDIgLSBpbXByb3Zpbmcgc3VwcG9ydCBmb3IgdGhlIGRhdGEgdHlwZXMgTmFtZSwgTkNOYW1lLCBFTlRJVFksIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCwgSURSRUYgYW5kIE5NVE9LRU4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBCdWlsdCBpbiBEYXRhIFR5cGUgZm9yIHhzOkVudGl0eQotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFhTRW50aXR5IGV4dGVuZHMgWFNOQ05hbWUgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19FTlRJVFkgPSAieHM6RU5USVRZIjsKLQotCXB1YmxpYyBYU0VudGl0eSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0JCi0JcHVibGljIFhTRW50aXR5KFN0cmluZyB2YWx1ZSkgewotCQlzdXBlcih2YWx1ZSk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19FTlRJVFk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIkVOVElUWSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgd2l0aGluCi0JICogdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAgVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoaXMKLQkgKiBpcyByZWxheGVkIGZyb20gdGhlIFhNTCBTY2hlbWEgcmVxdWlyZW1lbnQuICBUaGUgRU5USVRZIGRvZXMKLQkgKiBub3QgaGF2ZSB0byBiZSBsb2NhdGVkIG9yIGV4cGFuZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kCi0JICogZXZhbHVhdGlvbiBmb3IgY2FzdGluZy4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBFTlRJVFkKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBFTlRJVFkgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlTdHJpbmcgc3RyVmFsdWUgPSBhYXQuZ2V0U3RyaW5nVmFsdWUoKTsKLQkJCi0JCWlmICghaXNDb25zdHJhaW50U2F0aXNmaWVkKHN0clZhbHVlKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJldHVybiBuZXcgWFNFbnRpdHkoc3RyVmFsdWUpOwotCX0KLQkKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19FTlRJVFk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTRmxvYXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNGbG9hdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmE4MWQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNGbG9hdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ4MDUgLSBpbXByb3ZlbWVudHMgdG8geHM6aW50ZWdlciBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc5NDA2IC0gaW1wcm92ZW1lbnRzIHRvIG5lZ2F0aXZlIHplcm8gdmFsdWVzIGZvciB4czpmbG9hdAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCByb3VuZGluZyBlcnJvcnMuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGZpeGVkIGNhc3RpbmcgZXJyb3JzLgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBCdWcgMjg2MDYyIC0gRml4IGlkaXYgZXJyb3IgY2FzZXMgYW5kIGluY3JlYXNlIHByZWNpc2lvbiAgCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBBZGRlZCBjb25zdHJ1Y3RvciBmcm9tIHN0cmluZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIEZsb2F0IGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0Zsb2F0IGV4dGVuZHMgTnVtZXJpY1R5cGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0ZMT0FUID0gInhzOmZsb2F0IjsKLQlwcml2YXRlIEZsb2F0IF92YWx1ZTsKLQlwcml2YXRlIFhQYXRoRGVjaW1hbEZvcm1hdCBmb3JtYXQgPSBuZXcgWFBhdGhEZWNpbWFsRm9ybWF0KCIwLiMjIyMjIyNFMCIpOwotCS8qKgotCSAqIEluaXRpYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBudW1iZXIKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIG51bWJlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNGbG9hdChmbG9hdCB4KSB7Ci0JCV92YWx1ZSA9IG5ldyBGbG9hdCh4KTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWF0ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTRmxvYXQoKSB7Ci0JCXRoaXMoMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgYSBTdHJpbmcgcmVwcmVzZW50ZWQgbnVtYmVyCi0JICogCi0JICogQHBhcmFtIGluaXQKLQkgKiAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0Zsb2F0KFN0cmluZyBpbml0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJdHJ5IHsKLQkJCWlmIChpbml0LmVxdWFscygiLUlORiIpKSB7Ci0JCQkJX3ZhbHVlID0gbmV3IEZsb2F0KEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZKTsKLQkJCX0gZWxzZSBpZiAoaW5pdC5lcXVhbHMoIklORiIpKSB7Ci0JCQkJX3ZhbHVlID0gbmV3IEZsb2F0KEZsb2F0LlBPU0lUSVZFX0lORklOSVRZKTsKLQkJCX0gZWxzZSB7Ci0JCQkJX3ZhbHVlID0gbmV3IEZsb2F0KGluaXQpOwotCQkJfQotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCX0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmZsb2F0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0ZMT0FUOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZmxvYXQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJmbG9hdCI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbnVtYmVyCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0b3JlZCBudW1iZXIKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlpZiAoemVybygpKSB7Ci0JCSAgIHJldHVybiAiMCI7Ci0JCX0KLQkJaWYgKG5lZ2F0aXZlWmVybygpKSB7Ci0JCSAgIHJldHVybiAiLTAiOwkKLQkJfQotCQkKLQkJaWYgKG5hbigpKSB7Ci0JCSAgIHJldHVybiAiTmFOIjsJCi0JCX0KLQkJCQkJCQkJCi0JCXJldHVybiBmb3JtYXQueHBhdGhGb3JtYXQoX3ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgTmFOCi0JICogCi0JICogQHJldHVybiBUcnVlIGlzIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBOYU4uIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5hbigpIHsKLQkJcmV0dXJuIEZsb2F0LmlzTmFOKF92YWx1ZS5mbG9hdFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIHRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBpbmZpbml0eQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpcyB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgaW5maW5pdHkuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGluZmluaXRlKCkgewotCQlyZXR1cm4gRmxvYXQuaXNJbmZpbml0ZShfdmFsdWUuZmxvYXRWYWx1ZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGRhdGF0eXBlIHJlcHJlc2VudHMgMC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gemVybygpIHsKLQkgICByZXR1cm4gKEZsb2F0LmNvbXBhcmUoX3ZhbHVlLmZsb2F0VmFsdWUoKSwgMCkgPT0gMCk7Ci0JfQotCQotCS8qCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBYU0Zsb2F0IHJlcHJlc2VudHMgLTAKLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBYU0Zsb2F0IHJlcHJlc2VudHMgLTAuIEZhbHNlIG90aGVyd2lzZS4KLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIGJvb2xlYW4gbmVnYXRpdmVaZXJvKCkgewotCSAgIHJldHVybiAoRmxvYXQuY29tcGFyZShfdmFsdWUuZmxvYXRWYWx1ZSgpLCAtMC4wZikgPT0gMCk7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmV0cmlldmFibGUgZmxvYXQgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBmbG9hdAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGZsb2F0IHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlBbnlUeXBlIGFhdCA9IChBbnlUeXBlKSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJaWYgKCEoYWF0LnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSB8fCBhYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSB8fAotCQkJYWF0LnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCWFhdC5zdHJpbmdfdHlwZSgpLmVxdWFscygieHM6Ym9vbGVhbiIpIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0KLQkJdHJ5IHsKLQkJCWZsb2F0IGY7Ci0JCQlpZiAoYWF0LmdldFN0cmluZ1ZhbHVlKCkuZXF1YWxzKCJJTkYiKSkgewotCQkJCWYgPSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWTsKLQkJCX0gZWxzZSBpZiAoYWF0LmdldFN0cmluZ1ZhbHVlKCkuZXF1YWxzKCItSU5GIikpIHsKLQkJCQlmID0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFk7Ci0JCQl9IGVsc2UgaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbikgewotCQkJCWlmIChhYXQuZ2V0U3RyaW5nVmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCQlmID0gMS4wZjsKLQkJCQl9IGVsc2UgewotCQkJCQlmID0gMC4wZjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJICAgIGYgPSBGbG9hdC52YWx1ZU9mKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCX0KLQkJCXJldHVybiBuZXcgWFNGbG9hdChmKTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIGZsb2F0IHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gVGhlIGFjdHVhbCBmbG9hdCB2YWx1ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgZmxvYXQgZmxvYXRfdmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUuZmxvYXRWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIG51bWJlciBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLgotCSAqIEBwYXJhbSBhYQotCSAqICAgICAgICAgICAgVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbnVtYmVyLiBGYWxzZQotCSAqICAgICAgICAgb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFhLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUl0ZW0gY2FyZyA9IGNvbnZlcnRBcmcoYWEpOwotCQlpZiAoIShjYXJnIGluc3RhbmNlb2YgWFNGbG9hdCkpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCVhTRmxvYXQgZiA9IChYU0Zsb2F0KSBjYXJnOwotCQlpZiAobmFuKCkgJiYgZi5uYW4oKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlGbG9hdCB0aGF0dmFsdWUgPSBuZXcgRmxvYXQoZi5mbG9hdF92YWx1ZSgpKTsKLQkJRmxvYXQgdGhpc3ZhbHVlID0gbmV3IEZsb2F0KGZsb2F0X3ZhbHVlKCkpOwotCi0JCXJldHVybiB0aGlzdmFsdWUuZXF1YWxzKHRoYXR2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgbnVtYmVyIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkYXRhdHlwZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG9uZSBzdG9yZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ3QoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlJdGVtIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIGZsb2F0X3ZhbHVlKCkgPiB2YWwuZmxvYXRfdmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBudW1iZXIgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGRhdGF0eXBlIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gaXMgYSBncmVhdGVyIG51bWJlciB0aGFuIHRoZQotCSAqICAgICAgICAgb25lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBsdChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUl0ZW0gY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCQlyZXR1cm4gZmxvYXRfdmFsdWUoKSA8IHZhbC5mbG9hdF92YWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGFuIGFkZGl0aW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbCBhZGRpdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCUl0ZW0gYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJKyB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBzdWJ0cmFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbWludXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnN0cnVjdG9yKGFyZyk7Ci0JCUl0ZW0gYXQgPSBnZXRfc2luZ2xlX2FyZyhjYXJnKTsKLQkJaWYgKCEoYXQgaW5zdGFuY2VvZiBYU0Zsb2F0KSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGF0OwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNGbG9hdChmbG9hdF92YWx1ZSgpCi0JCQkJLSB2YWwuZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbXVsdGlwbGljYXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsCi0JICogICAgICAgICBtdWx0aXBsaWNhdGlvbi4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnN0cnVjdG9yKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KGZsb2F0X3ZhbHVlKCkKLQkJCQkqIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGRpdmlzaW9uIG9wZXJhdG9yIGJldHdlZW4gdGhpcyBYU0Zsb2F0IGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBkaXZpc2lvbiB3aXRoCi0JICogQHJldHVybiBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgZGl2aXNpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCVhTRmxvYXQgdmFsID0gKFhTRmxvYXQpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0Zsb2F0LmNsYXNzKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KGZsb2F0X3ZhbHVlKCkKLQkJCQkvIHZhbC5mbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIGludGVnZXIgZGl2aXNpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTRmxvYXQgYW5kIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlLiAKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgdG8gcGVyZm9ybSBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIGludGVnZXIKLQkgKiAgICAgICAgIGRpdmlzaW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBpZGl2KFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCi0JCWlmICh0aGlzLm5hbigpIHx8IHZhbC5uYW4oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5udW1lcmljX292ZXJmbG93KCJEaXZpZGVuZCBvciBkaXZpc29yIGlzIE5hTiIpOwotCi0JCWlmICh0aGlzLmluZmluaXRlKCkpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IubnVtZXJpY19vdmVyZmxvdygiRGl2aWRlbmQgaXMgaW5maW5pdGUiKTsKLQotCQlpZiAodmFsLnplcm8oKSkKLQkJCXRocm93IER5bmFtaWNFcnJvci5kaXZfemVybyhudWxsKTsKLQotCQlCaWdEZWNpbWFsIHJlc3VsdCA9IEJpZ0RlY2ltYWwudmFsdWVPZigobmV3IEZsb2F0KChmbG9hdF92YWx1ZSgpIC8gCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmZsb2F0X3ZhbHVlKCkpKSkubG9uZ1ZhbHVlKCkpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihyZXN1bHQudG9CaWdJbnRlZ2VyKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNGbG9hdCBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIER1ZSB0byBubyBudW1lcmljIHR5cGUgcHJvbW90aW9uIG9yIGNvbnZlcnNpb24sIHRoZQotCSAqIFJlc3VsdFNlcXVlbmNlIG11c3QgYmUgb2YgdHlwZSBYU0Zsb2F0LgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgbW9kdWx1cyB3aXRoCi0JICogQHJldHVybiBBIFhTRmxvYXQgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwgbW9kdWx1cy4KLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgbW9kKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJWFNGbG9hdCB2YWwgPSAoWFNGbG9hdCkgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTRmxvYXQuY2xhc3MpOwotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRmxvYXQoZmxvYXRfdmFsdWUoKQotCQkJCSUgdmFsLmZsb2F0X3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBOZWdhdGVzIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSB1bmFyeV9taW51cygpIHsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeQotCQkJCS5jcmVhdGVfbmV3KG5ldyBYU0Zsb2F0KC0xICogZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIEFic29sdXRlcyB0aGUgbnVtYmVyIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgYWJzKCkgewotCQlyZXR1cm4gbmV3IFhTRmxvYXQoTWF0aC5hYnMoZmxvYXRfdmFsdWUoKSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNtYWxsZXN0IGludGVnZXIgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB0aGUKLQkgKiAgICAgICAgIG51bWJlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgY2VpbGluZygpIHsKLQkJcmV0dXJuIG5ldyBYU0Zsb2F0KChmbG9hdCkgTWF0aC5jZWlsKGZsb2F0X3ZhbHVlKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBBIFhTRmxvYXQgcmVwcmVzZW50aW5nIHRoZSBsYXJnZXN0IGludGVnZXIgc21hbGxlciB0aGFuIHRoZQotCSAqICAgICAgICAgbnVtYmVyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSBmbG9vcigpIHsKLQkJcmV0dXJuIG5ldyBYU0Zsb2F0KChmbG9hdCkgTWF0aC5mbG9vcihmbG9hdF92YWx1ZSgpKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSByb3VuZCgpIHsKLQkJQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKGZsb2F0X3ZhbHVlKCkpOwotCQlCaWdEZWNpbWFsIHJvdW5kID0gdmFsdWUuc2V0U2NhbGUoMCwgQmlnRGVjaW1hbC5ST1VORF9IQUxGX1VQKTsKLQkJcmV0dXJuIG5ldyBYU0Zsb2F0KHJvdW5kLmZsb2F0VmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqIAotCSAqIEByZXR1cm4gQSBYU0Zsb2F0IHJlcHJlc2VudGluZyB0aGUgY2xvc2VzdCBsb25nIG9mIHRoZSBudW1iZXIgc3RvcmVkLgotCSAqLwotCXB1YmxpYyBOdW1lcmljVHlwZSByb3VuZF9oYWxmX3RvX2V2ZW4oKSB7Ci0JCXJldHVybiByb3VuZF9oYWxmX3RvX2V2ZW4oMCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2xvc2VzdCBpbnRlZ2VyIG9mIHRoZSBudW1iZXIgc3RvcmVkIHdpdGggdGhlIHNwZWNpZmllZCBwcmVjaXNpb24uCi0JICogCi0JICogQHBhcmFtIHByZWNpc2lvbiBBbiBpbnRlZ2VyIHByZWNpc2lvbiAKLQkgKiBAcmV0dXJuIEEgWFNGbG9hdCByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgbG9uZyBvZiB0aGUgbnVtYmVyIHN0b3JlZC4KLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgcm91bmRfaGFsZl90b19ldmVuKGludCBwcmVjaXNpb24pIHsKLQkJQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKF92YWx1ZS5mbG9hdFZhbHVlKCkpOwotCQlCaWdEZWNpbWFsIHJvdW5kID0gdmFsdWUuc2V0U2NhbGUocHJlY2lzaW9uLCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTik7Ci0JCXJldHVybiBuZXcgWFNGbG9hdChyb3VuZC5mbG9hdFZhbHVlKCkpOwotCX0KLQkKLQlwcm90ZWN0ZWQgSXRlbSBjb252ZXJ0QXJnKEFueVR5cGUgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhhcmcpOwotCQlycyA9IGNvbnN0cnVjdG9yKHJzKTsKLQkJSXRlbSBjYXJnID0gcnMuZmlyc3QoKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQotCQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCX0KLQotCQljYXJnID0gY29uc3RydWN0b3IoY2FyZyk7Ci0JCXJldHVybiBjYXJnOwotCX0JCi0JCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0ZMT0FUOwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gZmxvYXRfdmFsdWUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR0RheS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dEYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjOTY0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR0RheS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gQ29ycmVjdCBwYXJzaW5nIG9mIERhdGUgdG8gZ2V0IGRheSBjb3JyZWN0bHkuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBmaXhlZCBpc3N1ZSB3aXRoIGNhc3RpbmcuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgRGF5IGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0dEYXkgZXh0ZW5kcyBDYWxlbmRhclR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfR19EQVkgPSAieHM6Z0RheSI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGRheQotCSAqIAotCSAqIEBwYXJhbSBjYWwKLQkgKiAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgdG8gYmUgc3RvcmVkCi0JICogQHBhcmFtIHR6Ci0JICogICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHRGF5KENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0eikgewotCQlfY2FsZW5kYXIgPSBjYWw7Ci0JCWlmICh0eiAhPSBudWxsKSB7Ci0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQkJCV90eiA9IHR6OwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHRGF5KCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdEYXkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJnRGF5IjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXkgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHRGF5Ci0JICogcmVwcmVzZW50YXRpb24gb2YgaXQuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IChhbmQgb3B0aW9uYWwgdGltZXpvbmUpCi0JICogQHJldHVybiBUaGUgWFNHRGF5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dEYXkgcGFyc2VfZ0RheShTdHJpbmcgc3RyKSB7Ci0JCQotCQlTdHJpbmcgc3RhcnRkYXRlID0gIjE5NzItMTItIjsKLQkJU3RyaW5nIHN0YXJ0dGltZSA9ICJUMDA6MDA6MDAiOwotCi0JCWludCBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycsIHN0ci5sZW5ndGgoKSk7Ci0JCQotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignLScpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignWicsIHN0ci5sZW5ndGgoKSk7Ci0JCWlmIChpbmRleCAhPSAtMSkgewotCQkJaW50IHpJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignWicsIHN0ci5sZW5ndGgoKSk7Ci0JCQlpZiAoekluZGV4ID09IC0xKSB7Ci0JCQkJaWYgKGluZGV4ID4gNCkKLQkJCQkJekluZGV4ID0gaW5kZXg7Ci0JCQl9Ci0JCQlpZiAoekluZGV4ID09IC0xKSB7Ci0JCQkJekluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCcrJyk7Ci0JCQl9Ci0JCQkKLQkJCVN0cmluZ1tdIHNwbGl0ID0gc3RyLnNwbGl0KCItIik7Ci0JCQlzdGFydGRhdGUgKz0gc3BsaXRbM10ucmVwbGFjZUFsbCgiWiIsICIiKTsKLQkJCQotCQkJaWYgKHN0ci5pbmRleE9mKCdUJykgIT0gLTEpIHsKLQkJCQlpZiAoc3BsaXQubGVuZ3RoID4gNCkgewotCQkJCQlTdHJpbmdbXSB0aW1lc3BsaXQgPSBzcGxpdFs0XS5zcGxpdCgiOiIpOwotCQkJCQlpZiAodGltZXNwbGl0Lmxlbmd0aCA8IDMpIHsKLQkJCQkJCXN0YXJ0dGltZSA9ICJUIjsKLQkJCQkJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN0YXJ0dGltZSk7Ci0JCQkJCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB0aW1lc3BsaXQubGVuZ3RoOyBjbnQrKykgewotCQkJCQkJCWJ1Zi5hcHBlbmQodGltZXNwbGl0W2NudF0gKyAiOiIpOwotCQkJCQkJfQotCQkJCQkJYnVmLmFwcGVuZCgiMDAiKTsKLQkJCQkJCXN0YXJ0dGltZSA9IGJ1Zi50b1N0cmluZygpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJc3RhcnR0aW1lICs9IHRpbWVzcGxpdFswXSArICI6IiArIHRpbWVzcGxpdFsxXSArICI6IiArIHRpbWVzcGxpdFsyXTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXN0YXJ0ZGF0ZSA9IHN0YXJ0ZGF0ZS50cmltKCk7Ci0JCQlzdGFydGRhdGUgKz0gc3RhcnR0aW1lOwotCi0JCQlpZiAoekluZGV4ICE9IC0xKSB7Ci0JCQkJCi0JCQkJc3RhcnRkYXRlICs9IHN0ci5zdWJzdHJpbmcoekluZGV4KTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0YXJ0ZGF0ZSArPSBzdHIgKyBzdGFydHRpbWU7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHN0YXJ0ZGF0ZSk7Ci0JCWlmIChkdCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIG5ldyBYU0dEYXkoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgZ0RheSBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnRGF5IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIGRheQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU1RpbWUgfHwgaXNHRGF0YVR5cGUoYWF0KSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8IGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5IHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fCBhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJWFNHRGF5IHZhbCA9IGNhc3RHRGF5KGFhdCk7Ci0KLQkJaWYgKHZhbCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlyZXR1cm4gdmFsOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTR0RheSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNHRGF0YVR5cGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJU3RyaW5nIHR5cGUgPSBhYXQuc3RyaW5nX3R5cGUoKTsKLQkJaWYgKHR5cGUuZXF1YWxzKCJ4czpnTW9udGhEYXkiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdNb250aCIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXIiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyTW9udGgiKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkKLQlwcml2YXRlIFhTR0RheSBjYXN0R0RheShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHRGF5KSB7Ci0JCQlYU0dEYXkgZ2RheSA9IChYU0dEYXkpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHRGF5KGdkYXkuY2FsZW5kYXIoKSwgZ2RheS50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR0RheShkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHRGF5KGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCXJldHVybiBwYXJzZV9nRGF5KGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsgCi0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgaW50IGRheSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIGRheQotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgZGF5Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICItLS0iOwotCi0JCUNhbGVuZGFyIGFkanVzdEZvcnRpbWV6b25lID0gY2FsZW5kYXIoKTsKLQkJCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCksIDIpOwotCQkKLQkJaWYgKHRpbWV6b25lZCgpKSB7Ci0JCQlpbnQgaHJzID0gdHooKS5ob3VycygpOwotCQkJaW50IG1pbiA9IHR6KCkubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSB0eigpLnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCSAgcmV0ICs9ICJaIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJICBTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCSAgaWYgKHR6KCkubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpnRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfREFZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLQkgKiByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHRGF5Ci0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTR0RheSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIGRheS4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHRGF5IHZhbCA9IChYU0dEYXkpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTR0RheS5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0JCQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQkKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19HREFZOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmMxMGU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHTW9udGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEZpeGVkIHBhcnNpbmcgb2YgZ01vbnRoIHZhbHVlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODA1NDcgLSBmaXggZGF0ZXMgZm9yIGNvbXBhcmlzb24gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdNb250aCBkYXRhdHlwZQotICovCi1wdWJsaWMgY2xhc3MgWFNHTW9udGggZXh0ZW5kcyBDYWxlbmRhclR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfR19NT05USCA9ICJ4czpnTW9udGgiOwotCXByaXZhdGUgQ2FsZW5kYXIgX2NhbGVuZGFyOwotCXByaXZhdGUgYm9vbGVhbiBfdGltZXpvbmVkOwotCXByaXZhdGUgWFNEdXJhdGlvbiBfdHo7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBtb250aAotCSAqIAotCSAqIEBwYXJhbSBjYWwKLQkgKiAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoCi0JICovCi0JcHVibGljIFhTR01vbnRoKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0eikgewotCQlfY2FsZW5kYXIgPSBjYWw7Ci0JCWlmICh0eiAhPSBudWxsKSB7Ci0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQkJCV90eiA9IHR6OwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtb250aAotCSAqLwotCXB1YmxpYyBYU0dNb250aCgpIHsKLQkJdGhpcyhuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJnTW9udGgiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJnTW9udGgiOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1vbnRoIGFuZCBjb25zdHJ1Y3RzIGEgbmV3IFhTR01vbnRoCi0JICogcmVwcmVzZW50YXRpb24gb2YgaXQuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dNb250aCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNHTW9udGggcGFyc2VfZ01vbnRoKFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgc3RhcnRkYXRlID0gIjE5NzItIjsKLQkJU3RyaW5nIHN0YXJ0dGltZSA9ICJUMDA6MDA6MDAiOwotCi0JCWludCBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycsIHN0ci5sZW5ndGgoKSk7Ci0JCQotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignLScpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignWicsIHN0ci5sZW5ndGgoKSk7Ci0JCWlmIChpbmRleCAhPSAtMSkgewotCQkJaW50IHpJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignWicsIHN0ci5sZW5ndGgoKSk7Ci0JCQlpZiAoekluZGV4ID09IC0xKSB7Ci0JCQkJaWYgKGluZGV4ID4gMykgewotCQkJCQl6SW5kZXggPSBpbmRleDsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCVN0cmluZ1tdIHNwbGl0ID0gc3RyLnNwbGl0KCItIik7Ci0JCQlzdGFydGRhdGUgKz0gc3BsaXRbMl0ucmVwbGFjZUFsbCgiWiIsICIiKSArICItMDEiOwotCQkJCi0JCQlpZiAoc3RyLmluZGV4T2YoJ1QnKSAhPSAtMSkgeyAKLQkJCQlpZiAoc3BsaXQubGVuZ3RoID4gMykgewotCQkJCQlTdHJpbmdbXSB0aW1lc3BsaXQgPSBzcGxpdFszXS5zcGxpdCgiOiIpOwotCQkJCQlpZiAodGltZXNwbGl0Lmxlbmd0aCA8IDMpIHsKLQkJCQkJCXN0YXJ0dGltZSA9ICJUIjsKLQkJCQkJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN0YXJ0dGltZSk7Ci0JCQkJCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB0aW1lc3BsaXQubGVuZ3RoOyBjbnQrKykgewotCQkJCQkJCWJ1Zi5hcHBlbmQodGltZXNwbGl0W2NudF0gKyAiOiIpOwotCQkJCQkJfQotCQkJCQkJYnVmLmFwcGVuZCgiMDAiKTsKLQkJCQkJCXN0YXJ0dGltZSA9IGJ1Zi50b1N0cmluZygpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJc3RhcnR0aW1lICs9IHRpbWVzcGxpdFswXSArICI6IiArIHRpbWVzcGxpdFsxXSArICI6IiArIHRpbWVzcGxpdFsyXTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXN0YXJ0ZGF0ZSA9IHN0YXJ0ZGF0ZS50cmltKCk7Ci0JCQlzdGFydGRhdGUgKz0gc3RhcnR0aW1lOwotCi0JCQlpZiAoekluZGV4ICE9IC0xKSB7Ci0JCQkJc3RhcnRkYXRlICs9IHN0ci5zdWJzdHJpbmcoekluZGV4KTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0YXJ0ZGF0ZSArPSBzdHIgKyBzdGFydHRpbWU7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHN0YXJ0ZGF0ZSk7Ci0JCWlmIChkdCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIG5ldyBYU0dNb250aChkdC5jYWxlbmRhcigpLCBkdC50eigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdNb250aCBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBnTW9udGggaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgbW9udGgKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTVGltZSB8fCBpc0dEYXRhVHlwZShhYXQpIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQkJWFNHTW9udGggdmFsID0gY2FzdEdNb250aChhYXQpOwotCi0JCWlmICh2YWwgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcmV0dXJuIHZhbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0dEYXRhVHlwZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlTdHJpbmcgdHlwZSA9IGFhdC5zdHJpbmdfdHlwZSgpOwotCQlpZiAodHlwZS5lcXVhbHMoInhzOmdNb250aERheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z0RheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXIiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyTW9udGgiKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUgfHwgCi0JCQlhYXQgaW5zdGFuY2VvZiBYU0dNb250aCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0dNb250aCBjYXN0R01vbnRoKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0dNb250aCkgewotCQkJWFNHTW9udGggZ20gPSAoWFNHTW9udGgpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGgoZ20uY2FsZW5kYXIoKSwgZ20udHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUpIHsKLQkJCVhTRGF0ZSBkYXRlID0gKFhTRGF0ZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dNb250aChkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGgoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgZGF0ZVRpbWUudHooKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZV9nTW9udGgoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgaW50IG1vbnRoKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCkgKyAxOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbgotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHRpbWV6b25lZCgpIHsKLQkJcmV0dXJuIF90aW1lem9uZWQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgbW9udGgKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICItLSI7Ci0KLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludChtb250aCgpLCAyKTsKLQotCQlpZiAodGltZXpvbmVkKCkpIHsKLQkJCQotCQkJaW50IGhycyA9IHR6KCkuaG91cnMoKTsKLQkJCWludCBtaW4gPSB0eigpLm1pbnV0ZXMoKTsKLQkJCWRvdWJsZSBzZWNzID0gdHooKS5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmICh0eigpLm5lZ2F0aXZlKCkpIHsKLQkJCQl0Wm9uZVN0ciArPSAiLSI7ICAKLQkJCSAgfQotCQkJICBlbHNlIHsKLQkJCQl0Wm9uZVN0ciArPSAiKyI7IAotCQkJICB9Ci0JCQkgIHRab25lU3RyICs9IFhTRGF0ZVRpbWUucGFkX2ludChocnMsIDIpOyAgCi0JCQkgIHRab25lU3RyICs9ICI6IjsKLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1pbiwgMik7Ci0JCQkgIAotCQkJICByZXQgKz0gdFpvbmVTdHI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6Z01vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfTU9OVEg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkCi0JICogCi0JICogQHJldHVybiBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggc3RvcmVkCi0JICovCi0JcHVibGljIENhbGVuZGFyIGNhbGVuZGFyKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24uIFRoaXMKLQkgKiByZXByZXNlbnRhdGlvbiBtdXN0IGJlIG9mIHR5cGUgWFNHTW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHTW9udGggdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb25zIGFyZSBvZiB0aGUgc2FtZSBtb250aC4gRmFsc2UKLQkgKiAgICAgICAgIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHTW9udGggdmFsID0gKFhTR01vbnRoKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTR01vbnRoLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQkKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19HTU9OVEg7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aERheS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dNb250aERheS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2IxMDdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHTW9udGhEYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIEZpeCBwYXJzaW5nIG9mIGdNb250aERheSB0byB2YWxpZCBkYXRlCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyODIyMjMgLSBmaXggdGltZXpvbmUgYWRqdXN0bWVudCBjcmVhdGlvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIGNhc3RpbmcgaXNzdWUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgTW9udGhEYXkgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTR01vbnRoRGF5IGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfTU9OVEhfREFZID0gInhzOmdNb250aERheSI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQkKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSB0byBiZSBzdG9yZWQKLQkgKiBAcGFyYW0gdHoKLQkgKiAgICAgICAgICAgIFRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGhEYXkoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQkJaWYgKHR6ICE9IG51bGwpIHsKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCQkJX3R6ID0gdHo7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgWFNHTW9udGhEYXkoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiZ01vbnRoRGF5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ01vbnRoRGF5IjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb250aCBhbmQgZGF5IGFuZCBjb25zdHJ1Y3RzIGEgbmV3Ci0JICogWFNHTW9udGhEYXkgcmVwcmVzZW50YXRpb24gb2YgaXQuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSAoYW5kIG9wdGlvbmFsCi0JICogICAgICAgICAgICB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dNb250aERheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgZGF0ZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNHTW9udGhEYXkgcGFyc2VfZ01vbnRoRGF5KFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgc3RhcnRkYXRlID0gIjE5NzItIjsKLQkJU3RyaW5nIHN0YXJ0dGltZSA9ICJUMDA6MDA6MDAiOwotCi0JCWludCBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKycsIHN0ci5sZW5ndGgoKSk7Ci0JCQkJCi0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCctJyk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQlpbnQgekluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCdaJywgc3RyLmxlbmd0aCgpKTsKLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQlpZiAoaW5kZXggPiA1KQotCQkJCQl6SW5kZXggPSBpbmRleDsKLQkJCX0KLQkJCWlmICh6SW5kZXggPT0gLTEpIHsKLQkJCQl6SW5kZXggPSBzdHIubGFzdEluZGV4T2YoJysnKTsKLQkJCX0KLQotCQkJCi0JCQlTdHJpbmdbXSBzcGxpdCA9IHN0ci5zcGxpdCgiLSIpOwotCQkJc3RhcnRkYXRlICs9IHNwbGl0WzJdLnJlcGxhY2VBbGwoIloiLCAiIikgKyAiLSIgKyBzcGxpdFszXS5yZXBsYWNlQWxsKCJaIiwgIiIpLnN1YnN0cmluZygwLCAyKTsKLQkJCQotCQkJaWYgKHNwbGl0Lmxlbmd0aCA+IDQpIHsKLQkJCQlTdHJpbmdbXSB0aW1lc3BsaXQgPSBzcGxpdFs0XS5zcGxpdCgiOiIpOwotCQkJCWlmICh0aW1lc3BsaXQubGVuZ3RoIDwgMykgewotCQkJCQlzdGFydHRpbWUgPSAiVCI7Ci0JCQkJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKHN0YXJ0dGltZSk7Ci0JCQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHRpbWVzcGxpdC5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJCQlidWYuYXBwZW5kKHRpbWVzcGxpdFtjbnRdICsgIjoiKTsKLQkJCQkJfQotCQkJCQlidWYuYXBwZW5kKCIwMCIpOwotCQkJCQlzdGFydHRpbWUgPSBidWYudG9TdHJpbmcoKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzdGFydHRpbWUgKz0gdGltZXNwbGl0WzBdICsgIjoiICsgdGltZXNwbGl0WzFdICsgIjoiICsgdGltZXNwbGl0WzJdOwotCQkJCX0KLQkJCX0KLQotCQkJc3RhcnRkYXRlID0gc3RhcnRkYXRlLnRyaW0oKTsKLQkJCXN0YXJ0ZGF0ZSArPSBzdGFydHRpbWU7Ci0KLQkJCQotCQkJaWYgKHpJbmRleCAhPSAtMSkgewotCQkJCXN0YXJ0ZGF0ZSArPSBzdHIuc3Vic3RyaW5nKHpJbmRleCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGFydGRhdGUgKz0gc3RhcnR0aW1lOwotCQl9Ci0KLQkJWFNEYXRlVGltZSBkdCA9IFhTRGF0ZVRpbWUucGFyc2VEYXRlVGltZShzdGFydGRhdGUpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHTW9udGhEYXkoZHQuY2FsZW5kYXIoKSwgZHQudHooKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBnTW9udGhEYXkgaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ01vbnRoRGF5IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIG1vbnRoIGFuZCBkYXkKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTVGltZSB8fCBpc0dEYXRhVHlwZShhYXQpIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4gfHwgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTSGV4QmluYXJ5IHx8IGFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCi0JCWlmICghaXNDYXN0YWJsZShhYXQpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0JCQotCQlYU0dNb250aERheSB2YWwgPSBjYXN0R01vbnRoRGF5KGFhdCk7Ci0KLQkJaWYgKHZhbCA9PSBudWxsKQotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQotCQlyZXR1cm4gdmFsOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGlzR0RhdGFUeXBlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCVN0cmluZyB0eXBlID0gYWF0LnN0cmluZ190eXBlKCk7Ci0JCWlmICh0eXBlLmVxdWFscygieHM6Z0RheSIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z01vbnRoIikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnWWVhciIpIHx8Ci0JCQl0eXBlLmVxdWFscygieHM6Z1llYXJNb250aCIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSB8fCAKLQkJCWFhdCBpbnN0YW5jZW9mIFhTR01vbnRoRGF5KSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIFhTR01vbnRoRGF5IGNhc3RHTW9udGhEYXkoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTR01vbnRoRGF5KSB7Ci0JCQlYU0dNb250aERheSBnbWQgPSAoWFNHTW9udGhEYXkpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHTW9udGhEYXkoZ21kLmNhbGVuZGFyKCksIGdtZC50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR01vbnRoRGF5KGRhdGUuY2FsZW5kYXIoKSwgZGF0ZS50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCVhTRGF0ZVRpbWUgZGF0ZVRpbWUgPSAoWFNEYXRlVGltZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dNb250aERheShkYXRlVGltZS5jYWxlbmRhcigpLCBkYXRlVGltZS50eigpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlX2dNb250aERheShhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgbW9udGggYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgbW9udGgoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBhY3R1YWwgZGF5IGFzIGFuIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgaW50IGRheSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIG1vbnRoIGFuZCBkYXkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIi0tIjsKLQotCQlDYWxlbmRhciBhZGp1c3RGb3J0aW1lem9uZSA9IGNhbGVuZGFyKCk7Ci0JCQotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCXJldCArPSAiLSI7Ci0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCksIDIpOwotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJCi0JCQlpbnQgaHJzID0gdHooKS5ob3VycygpOwotCQkJaW50IG1pbiA9IHR6KCkubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSB0eigpLnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCSAgcmV0ICs9ICJaIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJICBTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCSAgaWYgKHR6KCkubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpnTW9udGhEYXkiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfR19NT05USF9EQVk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggYW5kIGRheSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb250aCBhbmQgZGF5IHN0b3JlZAotCSAqLwotCXB1YmxpYyBDYWxlbmRhciBjYWxlbmRhcigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhcjsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0JICogcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR01vbnRoRGF5Ci0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTR01vbnRoRGF5IHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgbW9udGggYW5kIGRheS4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNHTW9udGhEYXkgdmFsID0gKFhTR01vbnRoRGF5KSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTR01vbnRoRGF5LmNsYXNzKTsKLQotCQlyZXR1cm4gY2FsZW5kYXIoKS5lcXVhbHModmFsLmNhbGVuZGFyKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQkKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19HTU9OVEhEQVk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MGRlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTR1llYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeCBjYXN0aW5nIGlzc3Vlcy4gCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MDU0NyAtIGZpeCBkYXRlcyBmb3IgY29tcGFyaXNvbiAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ01vbnRoIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0dZZWFyIGV4dGVuZHMgQ2FsZW5kYXJUeXBlIGltcGxlbWVudHMgQ21wRXEgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX0dfWUVBUiA9ICJ4czpnWWVhciI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggdG8gYmUgc3RvcmVkCi0JICogQHBhcmFtIHR6Ci0JICogICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb250aAotCSAqLwotCXB1YmxpYyBYU0dZZWFyKENhbGVuZGFyIGNhbCwgWFNEdXJhdGlvbiB0eikgewotCQlfY2FsZW5kYXIgPSBjYWw7Ci0JCWlmICh0eiAhPSBudWxsKSB7Ci0JCQlfdGltZXpvbmVkID0gdHJ1ZTsKLQkJCV90eiA9IHR6OwotCQl9Ci0JCQotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgeWVhcgotCSAqLwotCXB1YmxpYyBYU0dZZWFyKCkgewotCQl0aGlzKG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImdZZWFyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ1llYXIiOwotCX0KLQotCS8qKgotCSAqIFBhcnNlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgYW5kIGNvbnN0cnVjdHMgYSBuZXcgWFNHWWVhcgotCSAqIHJlcHJlc2VudGF0aW9uIG9mIGl0LgotCSAqIAotCSAqIEBwYXJhbSBzdHIKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIgKGFuZCBvcHRpb25hbCB0aW1lem9uZSkKLQkgKiBAcmV0dXJuIFRoZSBYU0dZZWFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dZZWFyIHBhcnNlX2dZZWFyKFN0cmluZyBzdHIpIHsKLQotCi0JCVN0cmluZyB5ZWFyID0gIiI7Ci0JCVN0cmluZyBtb250aERheXRpbWUgPSAiLTAxLTAxVDAwOjAwOjAwLjAiOwotCQkKLQotCQlpbnQgaW5kZXggPSBzdHIuaW5kZXhPZignKycsIDEpOwotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgMSk7Ci0JCWlmIChpbmRleCA9PSAtMSkKLQkJCWluZGV4ID0gc3RyLmluZGV4T2YoJ1onLCAxKTsKLQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQl5ZWFyID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQl5ZWFyICs9IG1vbnRoRGF5dGltZTsKLQkJCXllYXIgKz0gc3RyLnN1YnN0cmluZyhpbmRleCwgc3RyLmxlbmd0aCgpKTsKLQkJfSBlbHNlIHsKLQkJCXllYXIgPSBzdHIgKyBtb250aERheXRpbWU7Ci0JCX0KLQotCQlYU0RhdGVUaW1lIGR0ID0gWFNEYXRlVGltZS5wYXJzZURhdGVUaW1lKHllYXIpOwotCQlpZiAoZHQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBuZXcgWFNHWWVhcihkdC5jYWxlbmRhcigpLCBkdC50eigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIGdZZWFyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIHllYXIKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoIWlzQ2FzdGFibGUoYWF0KSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCQkKLQkJWFNHWWVhciB2YWwgPSBjYXN0R1llYXIoYWF0KTsKLQotCQlpZiAodmFsID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCi0JCXJldHVybiB2YWw7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzR0RhdGFUeXBlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCVN0cmluZyB0eXBlID0gYWF0LnN0cmluZ190eXBlKCk7Ci0JCWlmICh0eXBlLmVxdWFscygieHM6Z01vbnRoRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnTW9udGgiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyTW9udGgiKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNDYXN0YWJsZShBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlIHx8IGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUgfHwgCi0JCQlhYXQgaW5zdGFuY2VvZiBYU0dZZWFyKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcml2YXRlIFhTR1llYXIgY2FzdEdZZWFyKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0dZZWFyKSB7Ci0JCQlYU0dZZWFyIGd5ID0gKFhTR1llYXIpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhcihneS5jYWxlbmRhcigpLCBneS50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR1llYXIoZGF0ZS5jYWxlbmRhcigpLCBkYXRlLnR6KCkpOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJWFNEYXRlVGltZSBkYXRlVGltZSA9IChYU0RhdGVUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR1llYXIoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgZGF0ZVRpbWUudHooKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZV9nWWVhcihhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3Igd2hldGhlciBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQgYXQgY3JlYXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgYSB0aW1lem9uZSB3YXMgc3BlY2lmaWVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIiI7Ci0KLQkJcmV0ICs9IFhTRGF0ZVRpbWUucGFkX2ludCh5ZWFyKCksIDQpOwotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJCi0JCQlpbnQgaHJzID0gdHooKS5ob3VycygpOwotCQkJaW50IG1pbiA9IHR6KCkubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSB0eigpLnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCSAgcmV0ICs9ICJaIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJICBTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCSAgaWYgKHR6KCkubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpnWWVhciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19HX1lFQVI7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIHN0b3JlZAotCSAqLwotCXB1YmxpYyBDYWxlbmRhciBjYWxlbmRhcigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhcjsKLQl9Ci0KLQkvKioKLQkgKiBFcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uLiBUaGlzCi0JICogcmVwcmVzZW50YXRpb24gbXVzdCBiZSBvZiB0eXBlIFhTR1llYXIKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHWWVhciB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR3byByZXByZXNlbnRhdGlvbnMgYXJlIG9mIHRoZSBzYW1lIHllYXIuIEZhbHNlCi0JICogICAgICAgICBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTR1llYXIgdmFsID0gKFhTR1llYXIpIE51bWVyaWNUeXBlLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTR1llYXIuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmVxdWFscyh0aGF0Y2FsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICogCi0JICogQHJldHVybiB0aGUgdGltZXpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0R1cmF0aW9uIHR6KCkgewotCQlyZXR1cm4gX3R6OwotCX0JCi0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfR1lFQVI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyTW9udGguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNHWWVhck1vbnRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZmUzODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0dZZWFyTW9udGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeGVkIGNhc3RpbmcgaXNzdWVzLiAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gZml4IGRhdGVzIGZvciBjb21wYXJpc29uIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkR5bmFtaWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBZZWFyTW9udGggZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTR1llYXJNb250aCBleHRlbmRzIENhbGVuZGFyVHlwZSBpbXBsZW1lbnRzIENtcEVxIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19HX1lFQVJfTU9OVEggPSAieHM6Z1llYXJNb250aCI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgeWVhciBhbmQgbW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gY2FsCi0JICogICAgICAgICAgICBDYWxlbmRhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggdG8gYmUgc3RvcmVkCi0JICogQHBhcmFtIHR6Ci0JICogICAgICAgICAgICBUaW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB5ZWFyIGFuZCBtb250aAotCSAqLwotCXB1YmxpYyBYU0dZZWFyTW9udGgoQ2FsZW5kYXIgY2FsLCBYU0R1cmF0aW9uIHR6KSB7Ci0JCV9jYWxlbmRhciA9IGNhbDsKLQkJaWYgKHR6ICE9IG51bGwpIHsKLQkJCV90aW1lem9uZWQgPSB0cnVlOwotCQkJX3R6ID0gdHo7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHllYXIgYW5kIG1vbnRoCi0JICovCi0JcHVibGljIFhTR1llYXJNb250aCgpIHsKLQkJdGhpcyhuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJnWWVhck1vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiZ1llYXJNb250aCI7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciBhbmQgbW9udGggYW5kIGNvbnN0cnVjdHMgYSBuZXcKLQkgKiBYU0dZZWFyTW9udGggcmVwcmVzZW50YXRpb24gb2YgaXQuCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBhbmQgbW9udGggKGFuZCBvcHRpb25hbAotCSAqICAgICAgICAgICAgdGltZXpvbmUpCi0JICogQHJldHVybiBUaGUgWFNHWWVhck1vbnRoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBkYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0dZZWFyTW9udGggcGFyc2VfZ1llYXJNb250aChTdHJpbmcgc3RyKSB7Ci0KLQkJU3RyaW5nIHllYXJNb250aCA9ICIiOwotCQlTdHJpbmcgZGF5VGltZSA9ICItMDFUMDA6MDA6MDAuMCI7Ci0KLQkJaW50IGluZGV4ID0gc3RyLmluZGV4T2YoJysnLCAxKTsKLQkJaWYgKGluZGV4ID09IC0xKSB7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgMSk7Ci0JCQlpZiAoaW5kZXggPT0gLTEpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCctJywgaW5kZXggKyAxKTsKLQkJfQotCQlpZiAoaW5kZXggPT0gLTEpCi0JCQlpbmRleCA9IHN0ci5pbmRleE9mKCdaJywgMSk7Ci0JCWlmIChpbmRleCAhPSAtMSkgewotCQkJeWVhck1vbnRoID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCQl5ZWFyTW9udGggKz0gZGF5VGltZTsKLQkJCXllYXJNb250aCArPSBzdHIuc3Vic3RyaW5nKGluZGV4LCBzdHIubGVuZ3RoKCkpOwotCQl9IGVsc2UgewotCQkJeWVhck1vbnRoID0gc3RyICsgZGF5VGltZTsKLQkJfQotCi0JCVhTRGF0ZVRpbWUgZHQgPSBYU0RhdGVUaW1lLnBhcnNlRGF0ZVRpbWUoeWVhck1vbnRoKTsKLQkJaWYgKGR0ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gbmV3IFhTR1llYXJNb250aChkdC5jYWxlbmRhcigpLCBkdC50eigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGdZZWFyTW9udGggaW4KLQkgKiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgZ1llYXJNb250aCBpcyB0byBiZQotCSAqICAgICAgICAgICAgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgeWVhciBhbmQgbW9udGgKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlpZiAoYWF0IGluc3RhbmNlb2YgTnVtZXJpY1R5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbiB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNUaW1lIHx8IGlzR0RhdGFUeXBlKGFhdCkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQkJCi0JCVhTR1llYXJNb250aCB2YWwgPSBjYXN0R1llYXJNb250aChhYXQpOyAKLQotCQlpZiAodmFsID09IG51bGwpCi0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCi0JCXJldHVybiB2YWw7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzR0RhdGFUeXBlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCVN0cmluZyB0eXBlID0gYWF0LnN0cmluZ190eXBlKCk7Ci0JCWlmICh0eXBlLmVxdWFscygieHM6Z01vbnRoRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnRGF5IikgfHwKLQkJCXR5cGUuZXF1YWxzKCJ4czpnTW9udGgiKSB8fAotCQkJdHlwZS5lcXVhbHMoInhzOmdZZWFyIikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHWWVhck1vbnRoKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JCQotCX0KLQkKLQlwcml2YXRlIFhTR1llYXJNb250aCBjYXN0R1llYXJNb250aChBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNHWWVhck1vbnRoKSB7Ci0JCQlYU0dZZWFyTW9udGggZ3ltID0gKFhTR1llYXJNb250aCkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU0dZZWFyTW9udGgoZ3ltLmNhbGVuZGFyKCksIGd5bS50eigpKTsKLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZSkgewotCQkJWFNEYXRlIGRhdGUgPSAoWFNEYXRlKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTR1llYXJNb250aChkYXRlLmNhbGVuZGFyKCksIGRhdGUudHooKSk7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0RhdGVUaW1lKSB7Ci0JCQlYU0RhdGVUaW1lIGRhdGVUaW1lID0gKFhTRGF0ZVRpbWUpIGFhdDsKLQkJCXJldHVybiBuZXcgWFNHWWVhck1vbnRoKGRhdGVUaW1lLmNhbGVuZGFyKCksIGRhdGVUaW1lLnR6KCkpOwotCQl9Ci0JCQotCQlyZXR1cm4gcGFyc2VfZ1llYXJNb250aChhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBhY3R1YWwgeWVhciBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIHllYXIgYXMgYW4gaW50ZWdlcgotCSAqLwotCXB1YmxpYyBpbnQgeWVhcigpIHsKLQkJaW50IHkgPSBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotCQlpZiAoX2NhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotCQkJeSAqPSAtMTsKLQotCQlyZXR1cm4geTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBtb250aCBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgYWN0dWFsIG1vbnRoIGFzIGFuIGludGVnZXIKLQkgKi8KLQlwdWJsaWMgaW50IG1vbnRoKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCkgKyAxOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciB3aGV0aGVyIGEgdGltZXpvbmUgd2FzIHNwZWNpZmllZCBhdCBjcmVhdGlvbgotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhIHRpbWV6b25lIHdhcyBzcGVjaWZpZWQuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHRpbWV6b25lZCgpIHsKLQkJcmV0dXJuIF90aW1lem9uZWQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdG9yZWQgeWVhciBhbmQgbW9udGgKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RvcmVkIHllYXIgYW5kIG1vbnRoCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJU3RyaW5nIHJldCA9ICIiOwotCi0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoeWVhcigpLCA0KTsKLQotCQlyZXQgKz0gIi0iOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KG1vbnRoKCksIDIpOwotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJCi0JCQlpbnQgaHJzID0gdHooKS5ob3VycygpOwotCQkJaW50IG1pbiA9IHR6KCkubWludXRlcygpOwotCQkJZG91YmxlIHNlY3MgPSB0eigpLnNlY29uZHMoKTsKLQkJCWlmIChocnMgPT0gMCAmJiBtaW4gPT0gMCAmJiBzZWNzID09IDApIHsKLQkJCSAgcmV0ICs9ICJaIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJICBTdHJpbmcgdFpvbmVTdHIgPSAiIjsKLQkJCSAgaWYgKHR6KCkubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpnWWVhck1vbnRoIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0dfWUVBUl9NT05USDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGFuZCBtb250aCBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXI7Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbi4gVGhpcwotCSAqIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgdHlwZSBYU0dZZWFyTW9udGgKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNHWWVhck1vbnRoIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucyBhcmUgb2YgdGhlIHNhbWUgeWVhciBhbmQgbW9udGguCi0JICogICAgICAgICBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTR1llYXJNb250aCB2YWwgPSAoWFNHWWVhck1vbnRoKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLAotCQkJCVhTR1llYXJNb250aC5jbGFzcyk7Ci0JCUNhbGVuZGFyIHRoaXNjYWwgPSBub3JtYWxpemVDYWxlbmRhcihjYWxlbmRhcigpLCB0eigpKTsKLQkJQ2FsZW5kYXIgdGhhdGNhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKHZhbC5jYWxlbmRhcigpLCB2YWwudHooKSk7Ci0KLQkJcmV0dXJuIHRoaXNjYWwuZXF1YWxzKHRoYXRjYWwpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0aW1lem9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTRHVyYXRpb24gdHooKSB7Ci0JCXJldHVybiBfdHo7Ci0JfQotCQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19HWUVBUk1PTlRIOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNIZXhCaW5hcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNIZXhCaW5hcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyYjljMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSGV4QmluYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODEwNTQgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIyODIyMyAtIGZpeGVkIGNhc3RpbmcgaXNzdWUuICBOZWVkZWQgdG8gZW5jb2RlIHRoZSB2YWx1ZS4gCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi51dGlsLkJhc2U2NDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLmR2LnV0aWwuSGV4QmluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeHM6aGV4QmluYXJ5IGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0hleEJpbmFyeSBleHRlbmRzIEN0clR5cGUgaW1wbGVtZW50cyBDbXBFcSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSEVYX0JJTkFSWSA9ICJ4czpoZXhCaW5hcnkiOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTSGV4QmluYXJ5KFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU0hleEJpbmFyeSgpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmhleEJpbmFyeSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19IRVhfQklOQVJZOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiaGV4QmluYXJ5IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiaGV4QmluYXJ5IjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB2YWx1ZSgpCi0JICogCi0JICogQHJldHVybiBUaGUgaGV4QmluYXJ5IHN0b3JlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWUudG9VcHBlckNhc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGhleEJpbmFyeSBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKQotCSAqIAotCSAqIEByZXR1cm4gVGhlIGhleEJpbmFyeSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgaGV4QmluYXJ5IHZhbHVlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGhleEJpbmFyeSB2YWx1ZSAKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSByZXByZXNlbnRpbmcgaGV4QmluYXJ5IHZhbHVlIAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwgYWF0IGluc3RhbmNlb2YgWFNCb29sZWFuIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBYU0FueVVSSSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmludmFsaWRUeXBlKCk7Ci0JCX0KLQotCQlTdHJpbmcgc3RyX3ZhbHVlID0gYWF0LmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQotCQlpZiAoIShhYXQgaW5zdGFuY2VvZiBYU0hleEJpbmFyeSB8fAotCQkJCSAgYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwKLQkJCQkgIGFhdCBpbnN0YW5jZW9mIFhTVW50eXBlZEF0b21pYyB8fAotCQkJCSAgYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkpKSB7Ci0JCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMgfHwgYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcpIHsKLQkJCVN0cmluZ1tdIG5vbkhleFZhbHVlcyA9IG51bGw7Ci0JCQl0cnkgewotCQkJCW5vbkhleFZhbHVlcyA9IHN0cl92YWx1ZS5zcGxpdCgiWzAtOWEtZkEtRl0iKTsKLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCQkKLQkJCVN0cmluZ1tdIGJpblZhbHVlcyA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWJpblZhbHVlcyA9IHN0cl92YWx1ZS5zcGxpdCgiWzAtMV0iKTsKLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChub25IZXhWYWx1ZXMubGVuZ3RoID4gMCB8fCBiaW5WYWx1ZXMubGVuZ3RoID09IDApIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZEZvckNhc3RDb25zdHJ1Y3RvcigpOwotCQkJfQkJCQotCQl9Ci0KLQkJCi0JCWJ5dGVbXSBkZWNvZGVkVmFsdWUgPSBudWxsOwotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQmFzZTY0QmluYXJ5KSB7Ci0JCQlkZWNvZGVkVmFsdWUgPSBCYXNlNjQuZGVjb2RlKHN0cl92YWx1ZSk7Ci0JCQlkZWNvZGVkVmFsdWUgPSBIZXhCaW4uZW5jb2RlKGRlY29kZWRWYWx1ZSkuZ2V0Qnl0ZXMoKTsKLQkJfSBlbHNlIHsKLQkJCWRlY29kZWRWYWx1ZSA9IHN0cl92YWx1ZS5nZXRCeXRlcygpOwotIAkJfQotCQkKLQkJaWYgKGRlY29kZWRWYWx1ZSAhPSBudWxsKSB7Ci0JCSAgcmV0dXJuIG5ldyBYU0hleEJpbmFyeShuZXcgU3RyaW5nKGRlY29kZWRWYWx1ZSkpOwotCQl9Ci0JCWVsc2UgewotCQkgIC8vIGludmFsaWQgaGV4QmluYXJ5IHN0cmluZwotCQkgIHRocm93IER5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7CQotCQl9Ci0JfQotCi0JLyoqCi0JICogRXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaAotCSAqIG11c3QgYmUgb2YgdHlwZSBoZXhCaW5hcnkKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gcmVwcmVzZW50YXRpb24gYXJlIHNhbWUuIEZhbHNlIG90aGVyd2lzZS4KLQkgKiAgICAgICAgIAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gZXEoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGR5bmFtaWNDb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLSAgICAgIFN0cmluZyB2YWxUb0NvbXBhcmUgPSBhcmcuZ2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgIAotICAgICAgYnl0ZVtdIHZhbHVlMSA9IEhleEJpbi5kZWNvZGUoX3ZhbHVlKTsKLSAgICAgIGJ5dGVbXSB2YWx1ZTIgPSBIZXhCaW4uZGVjb2RlKHZhbFRvQ29tcGFyZSk7Ci0gICAgICBpZiAodmFsdWUyID09IG51bGwpIHsKLSAgICAJcmV0dXJuIGZhbHNlOyAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGludCBsZW4gPSB2YWx1ZTEubGVuZ3RoOwotICAgICAgaWYgKGxlbiAhPSB2YWx1ZTIubGVuZ3RoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICBpZiAodmFsdWUxW2ldICE9IHZhbHVlMltpXSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0hFWEJJTkFSWTsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROYXRpdmVWYWx1ZSgpIHsKLQkJcmV0dXJuIEhleEJpbi5kZWNvZGUoX3ZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSUQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJRC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWYwNDMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJRC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgYnVnIDIyODIyMyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ4NDIgLSBpbXByb3Zpbmcgc3VwcG9ydCBmb3IgdGhlIGRhdGEgdHlwZXMgTmFtZSwgTkNOYW1lLCBFTlRJVFksIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCwgSURSRUYgYW5kIE5NVE9LRU4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qCi0gKiBJbXBsZW1lbnRzIHRoZSB4czpJRCBkYXRhIHR5cGUuCi0gKiAKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFhTSUQgZXh0ZW5kcyBYU05DTmFtZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSUQgPSAieHM6SUQiOwotCi0JcHVibGljIFhTSUQoU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JcHVibGljIFhTSUQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0lEOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJJRCI7Ci0JfQotCQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUFueUF0b21pY1R5cGUgYWF0ID0gKEFueUF0b21pY1R5cGUpIGFyZy5maXJzdCgpOwotCQlTdHJpbmcgc3RyVmFsdWUgPSBhYXQuZ2V0U3RyaW5nVmFsdWUoKTsKLQkJCi0JCWlmICghaXNDb25zdHJhaW50U2F0aXNmaWVkKHN0clZhbHVlKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCi0JCXJldHVybiBuZXcgWFNJRChzdHJWYWx1ZSk7Ci0JfQotCQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19JRDsKLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJRFJFRi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0lEUkVGLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjE2N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0lEUkVGLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSBidWcgMjI4MjIzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMzNDg0MiAtIGltcHJvdmluZyBzdXBwb3J0IGZvciB0aGUgZGF0YSB0eXBlcyBOYW1lLCBOQ05hbWUsIEVOVElUWSwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElELCBJRFJFRiBhbmQgTk1UT0tFTi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoKLSAqIEltcGxlbWVudHMgdGhlIHhzOklEUkVGIGRhdGEgdHlwZS4KLSAqIAotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgWFNJRFJFRiBleHRlbmRzIFhTTkNOYW1lIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19JRFJFRiA9ICJ4czpJRFJFRiI7Ci0KLQlwdWJsaWMgWFNJRFJFRihTdHJpbmcgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0KLQlwdWJsaWMgWFNJRFJFRigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfSURSRUY7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIklEUkVGIjsKLQl9Ci0JCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCVN0cmluZyBzdHJWYWx1ZSA9IGFhdC5nZXRTdHJpbmdWYWx1ZSgpOwotCQkKLQkJaWYgKCFpc0NvbnN0cmFpbnRTYXRpc2ZpZWQoc3RyVmFsdWUpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYU0lEUkVGKHN0clZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfSURSRUY7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU0ludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTA2YTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NTEwNSAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmludCBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi1wdWJsaWMgY2xhc3MgWFNJbnQgZXh0ZW5kcyBYU0xvbmcgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19JTlQgPSAieHM6aW50IjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU0ludCgpIHsKLQkgIHRoaXMoQmlnSW50ZWdlci52YWx1ZU9mKDApKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50IHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIEludCB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNJbnQoQmlnSW50ZWdlciB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmludCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19JTlQ7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAiaW50IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiaW50IjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAnaW50JyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBpbnQgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ2ludCcgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYW4gaW50LgotCQlJdGVtIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigtMjE0NzQ4MzY0OEwpOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMjE0NzQ4MzY0N0wpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJCX0KLQkJCQotCQkJcmV0dXJuIG5ldyBYU0ludChiaWdJbnQpOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX0lOVDsKLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnRlZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTSW50ZWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWE3MjRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NDgwNSAtIGltcHJvdmVtZW50cyB0byB4czppbnRlZ2VyIGRhdGEgdHlwZS4gVXNpbmcgSmF2YQotICogICAgICAgICAgICAgICAgICAgICAgQmlnSW50ZWdlciBjbGFzcyB0byBlbmhhbmNlIG51bWVyaWNhbCByYW5nZSB0byAtSU5GIC0+ICtJTkYuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXggY29tcGFyaXNpb24gdG8gemVyby4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4MjIyMyAtIGZpeCBjYXN0aW5nIGlzc3Vlcy4KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gYnVnIDI2Mjc2NSAtIGZpeCB0eXBlIHRlc3RzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBBZGRlZCBjb25zdHJ1Y3RvciBmcm9tIHN0cmluZwotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIEludGVnZXIgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTSW50ZWdlciBleHRlbmRzIFhTRGVjaW1hbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfSU5URUdFUiA9ICJ4czppbnRlZ2VyIjsKLQlwcml2YXRlIEJpZ0ludGVnZXIgX3ZhbHVlOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTSW50ZWdlcigpIHsKLQkJdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGludGVnZXIKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgSW50ZWdlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcihuZXcgQmlnRGVjaW1hbCh4KSk7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgaW50ZWdlcgotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU0ludGVnZXIoU3RyaW5nIHgpIHsKLQkJc3VwZXIobmV3IEJpZ0RlY2ltYWwoeCkpOwotCQlfdmFsdWUgPSBuZXcgQmlnSW50ZWdlcih4KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOmludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfSU5URUdFUjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gImludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJpbnRlZ2VyIjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZS50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgaXMgMAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBpcyAwLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB6ZXJvKCkgewotCQlyZXR1cm4gKF92YWx1ZS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA9PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGludGVnZXIgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgaW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBpbnRlZ2VyIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhbiBpbnRlZ2VyLgotCQlJdGVtIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0R1cmF0aW9uIHx8IGFhdCBpbnN0YW5jZW9mIENhbGVuZGFyVHlwZSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNCYXNlNjRCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQW55VVJJKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZFR5cGUoKTsKLQkJfQotCQkKLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQkKLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gY2FzdEludGVnZXIoYWF0KTsKLQkJCXJldHVybiBuZXcgWFNJbnRlZ2VyKGJpZ0ludCk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuaW52YWxpZExleGljYWxWYWx1ZSgpOwotCQl9Ci0KLQl9Ci0JCi0JcHJpdmF0ZSBCaWdJbnRlZ2VyIGNhc3RJbnRlZ2VyKEl0ZW0gYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU0Jvb2xlYW4pIHsKLQkJCWlmIChhYXQuZ2V0U3RyaW5nVmFsdWUoKS5lcXVhbHMoInRydWUiKSkgewotCQkJCXJldHVybiBCaWdJbnRlZ2VyLk9ORTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIEJpZ0ludGVnZXIuWkVSTzsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGVjaW1hbCB8fCBhYXQgaW5zdGFuY2VvZiBYU0Zsb2F0IHx8Ci0JCQkJYWF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCQlCaWdEZWNpbWFsIGJpZ0RlYyA9ICBuZXcgQmlnRGVjaW1hbChhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkJcmV0dXJuIGJpZ0RlYy50b0JpZ0ludGVnZXIoKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2FzdGFibGUoSXRlbSBhYXQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNTdHJpbmcgfHwgYWF0IGluc3RhbmNlb2YgWFNVbnR5cGVkQXRvbWljIHx8Ci0JCQlhYXQgaW5zdGFuY2VvZiBOb2RlVHlwZSkgewotCQkJaWYgKGlzTGV4aWNhbFZhbHVlKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0xleGljYWxWYWx1ZShTdHJpbmcgdmFsdWUpIHsKLQkJCi0JCXRyeSB7Ci0JCQluZXcgQmlnSW50ZWdlcih2YWx1ZSk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZAotCSAqIAotCSAqIEByZXR1cm4gVGhlIGFjdHVhbCBpbnRlZ2VyIHZhbHVlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBCaWdJbnRlZ2VyIGludF92YWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBpbnRlZ2VyIHN0b3JlZCB0byB0aGF0IHN1cHBsaWVkCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIEludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0X2ludChCaWdJbnRlZ2VyIHgpIHsKLQkJX3ZhbHVlID0geDsKLQkJc2V0X2RvdWJsZSh4LmludFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYW4gYWRkaXRpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIGFkZGl0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBwbHVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQkJSXRlbSBhdCA9IGdldF9zaW5nbGVfYXJnKGNhcmcpOwotCQlpZiAoIShhdCBpbnN0YW5jZW9mIFhTSW50ZWdlcikpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkKLQkJWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpYXQ7Ci0KLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyAKLQkJCQkgICAgICAgICAgICAgICAgICAgWFNJbnRlZ2VyKGludF92YWx1ZSgpLmFkZCh2YWwuaW50X3ZhbHVlKCkpKSk7Ci0JCQotCX0KLQotCQotCXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgY29udmVydFJlc3VsdFNlcXVlbmNlKFJlc3VsdFNlcXVlbmNlIGFyZykKLQkJCXRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gYXJnOwotCQlJdGVyYXRvciBpdCA9IGNhcmcuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQW55VHlwZSB0eXBlID0gKEFueVR5cGUpIGl0Lm5leHQoKTsKLQkJCWlmICh0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czp1bnR5cGVkQXRvbWljIikgfHwKLQkJCQl0eXBlLnN0cmluZ190eXBlKCkuZXF1YWxzKCJ4czpzdHJpbmciKSkgewotCQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQkJfQotCQl9Ci0JCWNhcmcgPSBjb25zdHJ1Y3RvcihjYXJnKTsKLQkJcmV0dXJuIGNhcmc7Ci0JfQkKLQkKLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgc3VidHJhY3Rpb24gb3BlcmF0b3IgYmV0d2VlbiB0aGlzIFhTSW50ZWdlciBhbmQgdGhlIHN1cHBsaWVkCi0JICogUmVzdWx0U2VxdWVuY2UuIAotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSB0byBwZXJmb3JtIGEgc3VidHJhY3Rpb24gd2l0aAotCSAqIEByZXR1cm4gQSBYU0ludGVnZXIgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtYXRoZW1hdGljYWwKLQkgKiAgICAgICAgIHN1YnRyYWN0aW9uLgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBtaW51cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0JCVhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNJbnRlZ2VyLmNsYXNzKTsKLQkJCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgCi0JCQkJICAgICAgICAgICAgICAgICBYU0ludGVnZXIoaW50X3ZhbHVlKCkuc3VidHJhY3QodmFsLmludF92YWx1ZSgpKSkpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtdWx0aXBsaWNhdGlvbiB3aXRoCi0JICogQHJldHVybiBBIFhTSW50ZWdlciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgdGhlIG1hdGhlbWF0aWNhbAotCSAqICAgICAgICAgbXVsdGlwbGljYXRpb24uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHRpbWVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIGNhcmcgPSBjb252ZXJ0UmVzdWx0U2VxdWVuY2UoYXJnKTsKLQotCQlYU0ludGVnZXIgdmFsID0gKFhTSW50ZWdlcikgZ2V0X3NpbmdsZV90eXBlKGNhcmcsIFhTSW50ZWdlci5jbGFzcyk7Ci0JCQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IAotCQkJCSAgICAgICAgICAgICAgICAgWFNJbnRlZ2VyKGludF92YWx1ZSgpLm11bHRpcGx5KHZhbC5pbnRfdmFsdWUoKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbW9kdWx1cyBvcGVyYXRvciBiZXR3ZWVuIHRoaXMgWFNJbnRlZ2VyIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBSZXN1bHRTZXF1ZW5jZS4gCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIHRvIHBlcmZvcm0gYSBtb2R1bHVzIHdpdGgKLQkgKiBAcmV0dXJuIEEgWFNJbnRlZ2VyIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiB0aGUgbWF0aGVtYXRpY2FsIG1vZHVsdXMuCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1vZChSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlSZXN1bHRTZXF1ZW5jZSBjYXJnID0gY29udmVydFJlc3VsdFNlcXVlbmNlKGFyZyk7Ci0KLQkJWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0ludGVnZXIuY2xhc3MpOwotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IGludF92YWx1ZSgpLnJlbWFpbmRlcih2YWwuaW50X3ZhbHVlKCkpOyAKLQkJCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNJbnRlZ2VyKHJlc3VsdCkpOwotCX0KLQotCS8qKgotCSAqIE5lZ2F0ZXMgdGhlIGludGVnZXIgc3RvcmVkCi0JICogCi0JICogQHJldHVybiBOZXcgWFNJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbmVnYXRpb24gb2YgdGhlIGludGVnZXIgc3RvcmVkCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIHVuYXJ5X21pbnVzKCkgewotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5Ci0JCQkJLmNyZWF0ZV9uZXcobmV3IFhTSW50ZWdlcihpbnRfdmFsdWUoKS5tdWx0aXBseShCaWdJbnRlZ2VyLnZhbHVlT2YoLTEpKSkpOwotCX0KLQotCS8qKgotCSAqIEFic29sdXRlcyB0aGUgaW50ZWdlciBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBYU0ludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSBvZiB0aGUgaW50ZWdlciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgTnVtZXJpY1R5cGUgYWJzKCkgewotCQlyZXR1cm4gbmV3IFhTSW50ZWdlcihpbnRfdmFsdWUoKS5hYnMoKSk7Ci0JfQotCQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGVjaW1hbCNndChvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZSkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCUl0ZW0gY2FyZyA9IGNvbnZlcnRBcmcoYXJnKTsKLSAgICAgICAgWFNJbnRlZ2VyIHZhbCA9IChYU0ludGVnZXIpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0ludGVnZXIuY2xhc3MpOwotICAgICAgICAKLSAgICAgICAgaW50IGNvbXBhcmVSZXN1bHQgPSBpbnRfdmFsdWUoKS5jb21wYXJlVG8odmFsLmludF92YWx1ZSgpKTsKLQkJCi0JCXJldHVybiBjb21wYXJlUmVzdWx0ID4gMDsKLQl9Ci0JCi0JcHJvdGVjdGVkIEl0ZW0gY29udmVydEFyZyhBbnlUeXBlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVJlc3VsdFNlcXVlbmNlIHJzID0gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcoYXJnKTsKLQkJcnMgPSBjb25zdHJ1Y3Rvcihycyk7Ci0JCUl0ZW0gY2FyZyA9IHJzLmZpcnN0KCk7Ci0JCXJldHVybiBjYXJnOwotCX0KLQkKLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWwjbHQob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueVR5cGUpCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlJdGVtIGNhcmcgPSBjb252ZXJ0QXJnKGFyZyk7Ci0gICAgICAgIFhTSW50ZWdlciB2YWwgPSAoWFNJbnRlZ2VyKSBnZXRfc2luZ2xlX3R5cGUoY2FyZywgWFNJbnRlZ2VyLmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIGludCBjb21wYXJlUmVzdWx0ID0gaW50X3ZhbHVlKCkuY29tcGFyZVRvKHZhbC5pbnRfdmFsdWUoKSk7Ci0JCQotCQlyZXR1cm4gY29tcGFyZVJlc3VsdCA8IDA7Ci0JfQotCQotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBkaXYoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY2FyZyA9IGNvbnZlcnRSZXN1bHRTZXF1ZW5jZShhcmcpOwotCQkKLQkJWFNEZWNpbWFsIHZhbCA9IChYU0RlY2ltYWwpIGdldF9zaW5nbGVfdHlwZShjYXJnLCBYU0RlY2ltYWwuY2xhc3MpOwotCi0JCWlmICh2YWwuemVybygpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuZGl2X3plcm8obnVsbCk7Ci0JCX0KLQkJCi0JCUJpZ0RlY2ltYWwgcmVzdWx0ID0gZ2V0VmFsdWUoKS5kaXZpZGUodmFsLmdldFZhbHVlKCksIDE4LCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTik7Ci0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEZWNpbWFsKHJlc3VsdCkpOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19JTlRFR0VSOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNMb25nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTG9uZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWJhODk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNMb25nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzQ5NTIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOmxvbmcgZGF0YSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi1wdWJsaWMgY2xhc3MgWFNMb25nIGV4dGVuZHMgWFNJbnRlZ2VyIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTE9ORyA9ICJ4czpsb25nIjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU0xvbmcoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIGxvbmcgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgTG9uZyB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNMb25nKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpsb25nIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX0xPTkc7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAibG9uZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gImxvbmciOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIGxvbmcgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbG9uZyBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbG9uZycgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBsb25nLgotCQlJdGVtIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigtOTIyMzM3MjAzNjg1NDc3NTgwOEwpOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoOTIyMzM3MjAzNjg1NDc3NTgwN0wpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCB8fCBiaWdJbnQuY29tcGFyZVRvKG1heCkgPiAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwkKLQkJCX0KLQkJCQotCQkJcmV0dXJuIG5ldyBYU0xvbmcoYmlnSW50KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19MT05HOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05DTmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05DTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWJjN2Y2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOQ05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0ODQyIC0gaW1wcm92aW5nIHN1cHBvcnQgZm9yIHRoZSBkYXRhIHR5cGVzIE5hbWUsIE5DTmFtZSwgRU5USVRZLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQsIElEUkVGIGFuZCBOTVRPS0VOLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MQ2hhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOQ05hbWUgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTTkNOYW1lIGV4dGVuZHMgWFNOYW1lIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTkNfTkFNRSA9ICJ4czpOQ05hbWUiOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBTdHJpbmcgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTTkNOYW1lKFN0cmluZyB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNOQ05hbWUoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpOQ05hbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTkNfTkFNRTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIk5DTmFtZSIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIk5DTmFtZSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBOQ05hbWUgd2l0aGluCi0JICogdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgTkNOYW1lCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgTkNOYW1lIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJU3RyaW5nIHN0clZhbHVlID0gYWF0LmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQotCQlpZiAoIWlzQ29uc3RyYWludFNhdGlzZmllZChzdHJWYWx1ZSkpIHsKLQkJCS8vIGludmFsaWQgaW5wdXQKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTTkNOYW1lKHN0clZhbHVlKTsKLQl9Ci0JCi0JLyoKLQkgKiBDaGVjayBpZiBhIHN0cmluZyBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnRzIG9mIE5DTmFtZSBkYXRhIHR5cGUuCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNDb25zdHJhaW50U2F0aXNmaWVkKFN0cmluZyBzdHJWYWx1ZSkgewotCQkKLQkJYm9vbGVhbiBpc1ZhbGlkTkNOYW1lID0gdHJ1ZTsKLQkJCi0JCWlmICghWE1MQ2hhci5pc1ZhbGlkTkNOYW1lKHN0clZhbHVlKSkgewotCQkJaXNWYWxpZE5DTmFtZSA9IGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gaXNWYWxpZE5DTmFtZTsKLQkJCi0JfSAvLyBpc0NvbnN0cmFpbnRTYXRpc2ZpZWQKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19OQ05BTUU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05NVE9LRU4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOTVRPS0VOLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZmI0YjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05NVE9LRU4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0ODQyIC0gaW1wcm92aW5nIHN1cHBvcnQgZm9yIHRoZSBkYXRhIHR5cGVzIE5hbWUsIE5DTmFtZSwgRU5USVRZLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQsIElEUkVGIGFuZCBOTVRPS0VOLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MQ2hhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOTVRPS0VOIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU05NVE9LRU4gZXh0ZW5kcyBYU1Rva2VuIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTk1UT0tFTiA9ICJ4czpOTVRPS0VOIjsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgU3RyaW5nIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU05NVE9LRU4oU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU05NVE9LRU4oKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpOTVRPS0VOIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05NVE9LRU47Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJOTVRPS0VOIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiTk1UT0tFTiI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBOTVRPS0VOIHdpdGhpbgotCSAqIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIE5NVE9LRU4KLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOTVRPS0VOIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJU3RyaW5nIHN0clZhbHVlID0gYWF0LmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQotCQlpZiAoIVhNTENoYXIuaXNWYWxpZE5tdG9rZW4oc3RyVmFsdWUpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYU05NVE9LRU4oc3RyVmFsdWUpOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19OTVRPS0VOOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE5ZmUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExIE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDMzNDg0MiAtIGltcHJvdmluZyBzdXBwb3J0IGZvciB0aGUgZGF0YSB0eXBlcyBOYW1lLCBOQ05hbWUsIEVOVElUWSwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElELCBJRFJFRiBhbmQgTk1UT0tFTi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MQ2hhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBOYW1lIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU05hbWUgZXh0ZW5kcyBYU1Rva2VuIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfTkFNRSA9ICJ4czpOYW1lIjsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgU3RyaW5nIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU05hbWUoU3RyaW5nIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU05hbWUoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05BTUU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJOYW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAiTmFtZSI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBOYW1lIHdpdGhpbgotCSAqIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIE5hbWUKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBOYW1lIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJU3RyaW5nIHN0clZhbHVlID0gYWF0LmdldFN0cmluZ1ZhbHVlKCk7Ci0JCQotCQlpZiAoIVhNTENoYXIuaXNWYWxpZE5hbWUoc3RyVmFsdWUpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBYU05hbWUoc3RyVmFsdWUpOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19OQU1FOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOZWdhdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOZWdhdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkZDcwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTmVnYXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOm5lZ2F0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotcHVibGljIGNsYXNzIFhTTmVnYXRpdmVJbnRlZ2VyIGV4dGVuZHMgWFNOb25Qb3NpdGl2ZUludGVnZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19ORUdBVElWRV9JTlRFR0VSID0gInhzOm5lZ2F0aXZlSW50ZWdlciI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIC0xCi0JICovCi0JcHVibGljIFhTTmVnYXRpdmVJbnRlZ2VyKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoLTEpKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQgbmVnYXRpdmVJbnRlZ2VyIHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIG5lZ2F0aXZlSW50ZWdlciB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNOZWdhdGl2ZUludGVnZXIoQmlnSW50ZWdlciB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOm5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19ORUdBVElWRV9JTlRFR0VSOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIm5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIm5lZ2F0aXZlSW50ZWdlciI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbmVnYXRpdmVJbnRlZ2VyCi0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbmVnYXRpdmVJbnRlZ2VyJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBub25Qb3NpdGl2ZUludGVnZXIuCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcywgLUlORgotCQkJLy8gbWF4IHZhbHVlIGlzIC0xCi0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigtMUwpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNOZWdhdGl2ZUludGVnZXIoYmlnSW50KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19ORUdBVElWRUlOVEVHRVI7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vbk5lZ2F0aXZlSW50ZWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vbk5lZ2F0aXZlSW50ZWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2RhN2UxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb25OZWdhdGl2ZUludGVnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzYwOSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6bm9uTmVnYXRpdmVJbnRlZ2VyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgdHlwZS4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGFicyB2YWx1ZSB0ZXN0cy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi1wdWJsaWMgY2xhc3MgWFNOb25OZWdhdGl2ZUludGVnZXIgZXh0ZW5kcyBYU0ludGVnZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OT05fTkVHQVRJVkVfSU5URUdFUiA9ICJ4czpub25OZWdhdGl2ZUludGVnZXIiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTTm9uTmVnYXRpdmVJbnRlZ2VyKCkgewotCSAgdGhpcyhCaWdJbnRlZ2VyLnZhbHVlT2YoMCkpOwotCX0KLQkKLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdXBwbGllZCBub25OZWdhdGl2ZUludGVnZXIgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgbm9uTmVnYXRpdmVJbnRlZ2VyIHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU05vbk5lZ2F0aXZlSW50ZWdlcihCaWdJbnRlZ2VyIHgpIHsKLQkJc3VwZXIoeCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX05PTl9ORUdBVElWRV9JTlRFR0VSOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gIm5vbk5lZ2F0aXZlSW50ZWdlciIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIm5vbk5lZ2F0aXZlSW50ZWdlciI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgbm9uTmVnYXRpdmVJbnRlZ2VyCi0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIG5vbk5lZ2F0aXZlSW50ZWdlciBpcyB0byBiZSBleHRyYWN0ZWQKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSAnbm9uTmVnYXRpdmVJbnRlZ2VyJyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSBub25OZWdhdGl2ZUludGVnZXIuCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcywgMAotCQkJLy8gbWF4IHZhbHVlIGlzIElORgotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMEwpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtaW4pIDwgMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNOb25OZWdhdGl2ZUludGVnZXIoYmlnSW50KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19OT05ORUdBVElWRUlOVEVHRVI7Ci0JfQotCi0JcHVibGljIE9iamVjdCBnZXROYXRpdmVWYWx1ZSgpIHsKLQkJcmV0dXJuIGdldFZhbHVlKCkubG9uZ1ZhbHVlKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uUG9zaXRpdmVJbnRlZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9uUG9zaXRpdmVJbnRlZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZDg4ZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vblBvc2l0aXZlSW50ZWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc3NTk5IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uLCBvZiB4czpub25Qb3NpdGl2ZUludGVnZXIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU05vblBvc2l0aXZlSW50ZWdlciBleHRlbmRzIFhTSW50ZWdlciB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX05PTl9QT1NJVElWRV9JTlRFR0VSID0gInhzOm5vblBvc2l0aXZlSW50ZWdlciI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNOb25Qb3NpdGl2ZUludGVnZXIoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIG5vblBvc2l0aXZlSW50ZWdlciB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBub25Qb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTTm9uUG9zaXRpdmVJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpub25Qb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTk9OX1BPU0lUSVZFX0lOVEVHRVI7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAibm9uUG9zaXRpdmVJbnRlZ2VyIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyB0eXBlX25hbWUoKSB7Ci0JCXJldHVybiAibm9uUG9zaXRpdmVJbnRlZ2VyIjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBub25Qb3NpdGl2ZUludGVnZXIKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgbm9uUG9zaXRpdmVJbnRlZ2VyIGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdub25Qb3NpdGl2ZUludGVnZXInIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIG5vblBvc2l0aXZlSW50ZWdlci4KLQkJSXRlbSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJLy8gbWluIHZhbHVlIGlzLCAtSU5GCi0JCQkvLyBtYXggdmFsdWUgaXMgMAotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMEwpOwkJCQotCi0JCQlpZiAoYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNOb25Qb3NpdGl2ZUludGVnZXIoYmlnSW50KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19OT05QT1NJVElWRUlOVEVHRVI7Ci0JfQotCi0JcHVibGljIE9iamVjdCBnZXROYXRpdmVWYWx1ZSgpIHsKLQkJcmV0dXJuIGdldFZhbHVlKCkubG9uZ1ZhbHVlKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9ybWFsaXplZFN0cmluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vcm1hbGl6ZWRTdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkZGU0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTTm9ybWFsaXplZFN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgTXVrdWwgR2FuZGhpLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzA5NTg1IC0gaW1wbGVtZW50YXRpb24gb2YgeHM6bm9ybWFsaXplZFN0cmluZyBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMzM0NDc4IC0gcmVmYWN0b3JpbmcgY29kZSB0byBjYXRlciB0byB4czp0b2tlbiBkYXRhIHR5cGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHhzOm5vcm1hbGl6ZWRTdHJpbmcgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTTm9ybWFsaXplZFN0cmluZyBleHRlbmRzIFhTU3RyaW5nIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OT1JNQUxJWkVEU1RSSU5HID0gInhzOm5vcm1hbGl6ZWRTdHJpbmciOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBUaGUgU3RyaW5nIHRvIGluaXRpYWxpc2UgdG8KLQkgKi8KLQlwdWJsaWMgWFNOb3JtYWxpemVkU3RyaW5nKFN0cmluZyB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNOb3JtYWxpemVkU3RyaW5nKCkgewotCQl0aGlzKG51bGwpOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6bm9ybWFsaXplZFN0cmluZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19OT1JNQUxJWkVEU1RSSU5HOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAibm9ybWFsaXplZFN0cmluZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gIm5vcm1hbGl6ZWRTdHJpbmciOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgU3RyaW5nIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgU3RyaW5nCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkgICByZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJU3RyaW5nIHNyY1N0cmluZyA9IGFhdC5nZXRTdHJpbmdWYWx1ZSgpOwotCQlpZiAoIWlzU2F0aXNmaWVzQ29uc3RyYWludHMoc3JjU3RyaW5nKSkgewotCQkJLy8gaW52YWxpZCBpbnB1dAotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ldyBYU05vcm1hbGl6ZWRTdHJpbmcoc3JjU3RyaW5nKTsKLQl9Ci0JCi0JLyoKLQkgKiBEb2VzIHRoZSBzdHJpbmcgaW4gY29udGV4dCBzYXRpc2ZpZXMgY29uc3RyYWludHMgb2YgdGhlIGRhdGF0eXBlLCB4czpub3JtYWxpemVkU3RyaW5nLiAKLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1NhdGlzZmllc0NvbnN0cmFpbnRzKFN0cmluZyBzcmNTdHJpbmcpIHsKLQkgICAKLQkJYm9vbGVhbiBpc05vcm1hbGl6ZWRTdHIgPSB0cnVlOwotCQkKLQkJLy8gdGhlIHhzOm5vcm1hbGl6ZWRTdHJpbmcgdmFsdWUgY2Fubm90IGNvbnRhaW4sICdjYXJyaWFnZSByZXR1cm4nLCAnbGluZSBmZWVkJyBhbmQgJ3RhYicgY2hhcmFjdGVycy4KLQkJaWYgKChzcmNTdHJpbmcuaW5kZXhPZigiXHIiKSAhPSAtMSkgfHwgKHNyY1N0cmluZy5pbmRleE9mKCJcbiIpICE9IC0xKSB8fCAoc3JjU3RyaW5nLmluZGV4T2YoIlx0IikgIT0gLTEpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlpc05vcm1hbGl6ZWRTdHIgPSBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzTm9ybWFsaXplZFN0cjsKLQkJICAKLQl9IC8vIGlzU2F0aXNmaWVzQ29uc3RyYWludHMKLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19OT1JNQUxJWkVEU1RSSU5HOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNOb3RhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vdGF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjA2NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU05vdGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSBidWcgMjgyMjIzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotcHVibGljIGNsYXNzIFhTTm90YXRpb24gZXh0ZW5kcyBDdHJUeXBlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19OT1RBVElPTiA9ICJ4czpOT1RBVElPTiI7Ci0KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfTk9UQVRJT047Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCUR5bmFtaWNFcnJvci50aHJvd190eXBlX2Vycm9yKCk7Ci0JCXRocm93IG5ldyBEeW5hbWljRXJyb3IoIlhQU1QwMDgwIiwgIkNhbid0IENhc3QgdG8gTk9UQVRJT04iKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJOT1RBVElPTiI7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX05PVEFUSU9OOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBnZXRTdHJpbmdWYWx1ZSgpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNQb3NpdGl2ZUludGVnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNQb3NpdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4ZjcxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTUG9zaXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MzIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnBvc2l0aXZlSW50ZWdlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotcHVibGljIGNsYXNzIFhTUG9zaXRpdmVJbnRlZ2VyIGV4dGVuZHMgWFNOb25OZWdhdGl2ZUludGVnZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19QT1NJVElWRV9JTlRFR0VSID0gInhzOnBvc2l0aXZlSW50ZWdlciI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDEKLQkgKi8KLQlwdWJsaWMgWFNQb3NpdGl2ZUludGVnZXIoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigxKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHBvc2l0aXZlSW50ZWdlciB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICBwb3NpdGl2ZUludGVnZXIgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTUG9zaXRpdmVJbnRlZ2VyKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpwb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfUE9TSVRJVkVfSU5URUdFUjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJwb3NpdGl2ZUludGVnZXIiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJwb3NpdGl2ZUludGVnZXIiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHBvc2l0aXZlSW50ZWdlcgotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSBwb3NpdGl2ZUludGVnZXIgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Bvc2l0aXZlSW50ZWdlcicgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgcG9zaXRpdmVJbnRlZ2VyLgotCQlJdGVtIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMQotCQkJLy8gbWF4IHZhbHVlIGlzIElORgotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMSk7Ci0KLQkJCWlmIChiaWdJbnQuY29tcGFyZVRvKG1pbikgPCAwKSB7Ci0JCQkgICAvLyBpbnZhbGlkIGlucHV0Ci0JCQkgICB0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwkKLQkJCX0KLQkJCQotCQkJcmV0dXJuIG5ldyBYU1Bvc2l0aXZlSW50ZWdlcihiaWdJbnQpOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1BPU0lUSVZFSU5URUdFUjsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTaG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Nob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MmY4MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Nob3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MDggLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpzaG9ydCBkYXRhIHR5cGUKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi1wdWJsaWMgY2xhc3MgWFNTaG9ydCBleHRlbmRzIFhTSW50IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNfU0hPUlQgPSAieHM6c2hvcnQiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTU2hvcnQoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHNob3J0IHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFNob3J0IHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU1Nob3J0KEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czpzaG9ydCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19TSE9SVDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJzaG9ydCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgdHlwZV9uYW1lKCkgewotCQlyZXR1cm4gInNob3J0IjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSAnc2hvcnQnIGluIHRoZQotCSAqIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHNob3J0IGlzIHRvIGJlIGV4dHJhY3RlZAotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlICdzaG9ydCcgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgc2hvcnQuCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKC0zMjc2OEwpOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMzI3NjdMKTsJCQkKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNTaG9ydChiaWdJbnQpOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1NIT1JUOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZSgpLnNob3J0VmFsdWUoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTdHJpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNTdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBiY2RlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBBbmRyZWEgQml0dGF1LCBVbml2ZXJzaXR5IENvbGxlZ2UgTG9uZG9uLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFBzeWNob1BhdGggWFBhdGggMi4wCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gaW1wcm92ZWQgY29tcGFyaXNvbiBvZiB4czpzdHJpbmcgd2l0aCBvdGhlciBYRE0gdHlwZXMKLSAqICBKZXNwZXIgUyBNb2xsZXIgLSBidWcgMjg2MDYxICAgY29ycmVjdCBoYW5kbGluZyBvZiBxdW90ZWQgc3RyaW5nIAotICogIEplc3BlciBTIE1vbGxlciAtIGJ1ZyAyODA1NTUgLSBBZGQgcGx1Z2dhYmxlIGNvbGxhdGlvbiBzdXBwb3J0Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wRXE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEd0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBMdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRm5Db21wYXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBTdHJpbmcgZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTU3RyaW5nIGV4dGVuZHMgQ3RyVHlwZSBpbXBsZW1lbnRzIENtcEVxLCBDbXBHdCwgQ21wTHQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1NUUklORyA9ICJ4czpzdHJpbmciOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyB0byBpbml0aWFsaXNlIHRvCi0JICovCi0JcHVibGljIFhTU3RyaW5nKFN0cmluZyB4KSB7Ci0JCV92YWx1ZSA9IHg7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gbnVsbAotCSAqLwotCXB1YmxpYyBYU1N0cmluZygpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnN0cmluZyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19TVFJJTkc7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJzdHJpbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJzdHJpbmciOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RyaW5nIHN0b3JlZC4gVGhpcyBtZXRob2QgaXMKLQkgKiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHZhbHVlKCkKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBTdHJpbmcgc3RvcmVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLQkJcmV0dXJuIF92YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyBzdG9yZWQuIFRoaXMgbWV0aG9kIGlzCi0JICogZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBzdHJpbmdfdmFsdWUoKQotCSAqIAotCSAqIEByZXR1cm4gVGhlIFN0cmluZyBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHZhbHVlKCkgewotCQlyZXR1cm4gZ2V0U3RyaW5nVmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIFN0cmluZyBpbiB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFN0cmluZwotCSAqIEByZXR1cm4gTmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHN1cHBsaWVkIFN0cmluZwotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy9BbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJSXRlbSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlyZXR1cm4gbmV3IFhTU3RyaW5nKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQkvLyBjb21wYXJpc29ucwotCi0JLy8gNjY2IGluZGljYXRlcyBkZWF0aCBbY29tcGFyZSByZXR1cm5lZCBlbXB0eSBzZXFdCi0JcHJpdmF0ZSBpbnQgZG9fY29tcGFyZShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZGMpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCS8vIFhYWDogVGhpcyBjYW4ndCBoYXBwZW4sIEkgZ3Vlc3MKLQkJaWYgKGFyZyA9PSBudWxsKSByZXR1cm4gNjY2OwotCi0JCVhTU3RyaW5nIGNvbXBhcmFuZCA9IGFyZyBpbnN0YW5jZW9mIFhTU3RyaW5nID8gKFhTU3RyaW5nKWFyZyA6IG5ldyBYU1N0cmluZyhhcmcuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQotCQlCaWdJbnRlZ2VyIHJlc3VsdCA9IEZuQ29tcGFyZS5jb21wYXJlX3N0cmluZyhkYy5nZXRDb2xsYXRpb25Qcm92aWRlcigpLmdldERlZmF1bHRDb2xsYXRpb24oKSwgdGhpcywgY29tcGFyYW5kLCBkYyk7Ci0KLQkJcmV0dXJuIHJlc3VsdC5pbnRWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgcmVwcmVzZW50YXRpb24gd2hpY2gKLQkgKiBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIHJlcHJlc2VudGF0aW9uIGFyZSBvZiB0aGUgc2FtZSBTdHJpbmcuIEZhbHNlCi0JICogICAgICAgICBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGVxKEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBkeW5hbWljQ29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWludCBjbXAgPSBkb19jb21wYXJlKGFyZywgZHluYW1pY0NvbnRleHQpOwotCi0JCS8vIFhYWCBpbSBub3Qgc3VyZSB3aGF0IHRvIGRvIGhlcmUhISEgYmVjYXVzZSBlcSBoYXMgdG8gcmV0dXJuCi0JCS8vIHNvbWV0aGluZyBpIGZpbmsuLi4uCi0JCWlmIChjbXAgPT0gNjY2KQotCQkJYXNzZXJ0IGZhbHNlOwotCi0JCXJldHVybiBjbXAgPT0gMDsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIHdoaWNoIG11c3QgYmUgb2YKLQkgKiB0eXBlIFN0cmluZwotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSByZXByZXNlbnRhdGlvbiB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhpcyBTdHJpbmcgaXMgbGV4b2dyYXBoaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGF0Ci0JICogICAgICAgICBzdXBwbGllZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWludCBjbXAgPSBkb19jb21wYXJlKGFyZywgY29udGV4dCk7Ci0KLQkJYXNzZXJ0IGNtcCAhPSA2NjY7Ci0KLQkJcmV0dXJuIGNtcCA+IDA7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCByZXByZXNlbnRhdGlvbiB3aGljaCBtdXN0IGJlIG9mCi0JICogdHlwZSBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgcmVwcmVzZW50YXRpb24gdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoaXMgU3RyaW5nIGlzIGxleG9ncmFwaGljYWxseSBsZXNzIHRoYW4gdGhhdCBzdXBwbGllZC4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpbnQgY21wID0gZG9fY29tcGFyZShhcmcsIGNvbnRleHQpOwotCi0JCWFzc2VydCBjbXAgIT0gNjY2OwotCi0JCXJldHVybiBjbXAgPCAwOwotCX0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfU1RSSU5HOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1RpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNhZjFjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzM3NjAgLSB3cm9uZyBuYW1lc3BhY2UgZm9yIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcwotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyODIyMjMgLSBpbXBsZW1lbnRhdGlvbiBvZiB4czpkdXJhdGlvbiBkYXRhIHR5cGUuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3Rpb24gb2YgY2FzdGluZyB0byB0aW1lLiAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjgwNTQ3IC0gZml4IGRhdGVzIGZvciBjb21wYXJpc29uIAotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjYyNzY1IC0gZml4IHR5cGUgdGVzdHMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKLQotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EdXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBFcTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wR3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5NYXRoTWludXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhQbHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotLyoqCi0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUaW1lIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU1RpbWUgZXh0ZW5kcyBDYWxlbmRhclR5cGUgaW1wbGVtZW50cyBDbXBFcSwgQ21wTHQsIENtcEd0LAotCi1NYXRoTWludXMsIE1hdGhQbHVzLAotCi1DbG9uZWFibGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1RJTUUgPSAieHM6dGltZSI7Ci0JcHJpdmF0ZSBDYWxlbmRhciBfY2FsZW5kYXI7Ci0JcHJpdmF0ZSBib29sZWFuIF90aW1lem9uZWQ7Ci0JcHJpdmF0ZSBYU0R1cmF0aW9uIF90ejsKLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIHRoZSBzdXBwbGllZCB0aW1lIGFuZCB0aW1lem9uZQotCSAqIAotCSAqIEBwYXJhbSBjYWwKLQkgKiAgICAgICAgICAgIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHRvIGJlIHN0b3JlZAotCSAqIEBwYXJhbSB0egotCSAqICAgICAgICAgICAgVGhlIHRpbWV6b25lIChwb3NzaWJseSBudWxsKSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0aW1lCi0JICovCi0JcHVibGljIFhTVGltZShDYWxlbmRhciBjYWwsIFhTRHVyYXRpb24gdHopIHsKLQkJX2NhbGVuZGFyID0gY2FsOwotCi0JCV90eiA9IHR6OwotCQlpZiAodHogPT0gbnVsbCkKLQkJCV90aW1lem9uZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJX3RpbWV6b25lZCA9IHRydWU7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gdGhlIGN1cnJlbnQgdGltZQotCSAqLwotCXB1YmxpYyBYU1RpbWUoKSB7Ci0JCXRoaXMobmV3IEdyZWdvcmlhbkNhbGVuZGFyKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSksIG51bGwpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgdGltZSAoYW5kIHRpbWV6b25lKSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIE5ldyBYU1RpbWUgcmVwcmVzZW50aW5nIHRoZSBjb3B5IG9mIHRoZSB0aW1lIGFuZCB0aW1lem9uZQotCSAqIEB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLQkJQ2FsZW5kYXIgYyA9IChDYWxlbmRhcikgY2FsZW5kYXIoKS5jbG9uZSgpOwotCQlYU0R1cmF0aW9uIHQgPSB0eigpOwotCi0JCWlmICh0ICE9IG51bGwpCi0JCQl0ID0gKFhTRHVyYXRpb24pIHQuY2xvbmUoKTsKLQotCQlyZXR1cm4gbmV3IFhTVGltZShjLCB0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInRpbWUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ0aW1lIjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIFN0cmluZyByZXByZXNlbnRlZCBzdXBwbGllZCB0aW1lCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGVkIHRpbWUgYW5kIHRpbWV6b25lIHRvIGJlIHN0b3JlZAotCSAqIEByZXR1cm4gTmV3IFhTVGltZSByZXByZXNlbnRpbmcgdGhlIHN1cHBsaWVkIHRpbWUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIENhbGVuZGFyVHlwZSBwYXJzZV90aW1lKFN0cmluZyBzdHIpIHsKLQotCQlTdHJpbmcgc3RhcnRkYXRlID0gIjE5ODMtMTEtMjlUIjsKLQkJCi0JCVhTRGF0ZVRpbWUgZHQgPSBYU0RhdGVUaW1lLnBhcnNlRGF0ZVRpbWUoc3RhcnRkYXRlICsgc3RyKTsKLQkJaWYgKGR0ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gbmV3IFhTVGltZShkdC5jYWxlbmRhcigpLCBkdC50eigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHRpbWUgZnJvbSB0aGUKLQkgKiBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIHRpbWUKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCB0aW1lCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQlBbnlBdG9taWNUeXBlIGFhdCA9IChBbnlBdG9taWNUeXBlKSBhcmcuZmlyc3QoKTsKLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0JCQotCQlDYWxlbmRhclR5cGUgdCA9IGNhc3RUaW1lKGFhdCk7Ci0KLQkJaWYgKHQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcmV0dXJuIHQ7Ci0JfSAKLQotCXByaXZhdGUgYm9vbGVhbiBpc0Nhc3RhYmxlKEFueUF0b21pY1R5cGUgYWF0KSB7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1N0cmluZyB8fCBhYXQgaW5zdGFuY2VvZiBYU1VudHlwZWRBdG9taWMpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEYXRlVGltZSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCWlmIChhYXQgaW5zdGFuY2VvZiBYU1RpbWUpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBDYWxlbmRhclR5cGUgY2FzdFRpbWUoQW55QXRvbWljVHlwZSBhYXQpIHsKLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTVGltZSkgewotCQkJWFNUaW1lIHRpbWUgPSAoWFNUaW1lKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTVGltZSh0aW1lLmNhbGVuZGFyKCksIHRpbWUudHooKSk7Ci0JCX0KLQkJaWYgKGFhdCBpbnN0YW5jZW9mIFhTRGF0ZVRpbWUpIHsKLQkJCVhTRGF0ZVRpbWUgZGF0ZVRpbWUgPSAoWFNEYXRlVGltZSkgYWF0OwotCQkJcmV0dXJuIG5ldyBYU1RpbWUoZGF0ZVRpbWUuY2FsZW5kYXIoKSwgZGF0ZVRpbWUudHooKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZV90aW1lKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBob3VyIHN0b3JlZCBhcyBhbiBpbnRlZ2VyCi0JICogCi0JICogQHJldHVybiBUaGUgaG91ciBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IGhvdXIoKSB7Ci0JCXJldHVybiBfY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIG1pbnV0ZSBzdG9yZWQgYXMgYW4gaW50ZWdlcgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG1pbnV0ZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgaW50IG1pbnV0ZSgpIHsKLQkJcmV0dXJuIF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNlY29uZHMgc3RvcmVkIGFzIGFuIGludGVnZXIKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzZWNvbmQgc3RvcmVkCi0JICovCi0JcHVibGljIGRvdWJsZSBzZWNvbmQoKSB7Ci0JCWRvdWJsZSBzID0gX2NhbGVuZGFyLmdldChDYWxlbmRhci5TRUNPTkQpOwotCi0JCWRvdWJsZSBtcyA9IF9jYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpOwotCi0JCW1zIC89IDEwMDA7Ci0KLQkJcyArPSBtczsKLQkJcmV0dXJuIHM7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIHdoZXRoZXIgdGhlIHRpbWUgc3RvcmVkIGhhcyBhIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdAotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdGltZSBoYXMgYSB0aW1lem9uZSBhc3NvY2lhdGVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB0aW1lem9uZWQoKSB7Ci0JCXJldHVybiBfdGltZXpvbmVkOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlTdHJpbmcgcmV0ID0gIiI7Ci0JCQotCQlDYWxlbmRhciBhZGp1c3RGb3J0aW1lem9uZSA9IGNhbGVuZGFyKCk7Ci0JCXJldCArPSBYU0RhdGVUaW1lLnBhZF9pbnQoYWRqdXN0Rm9ydGltZXpvbmUuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSwgMik7Ci0JCQotCQlyZXQgKz0gIjoiOwotCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGFkanVzdEZvcnRpbWV6b25lLmdldChDYWxlbmRhci5NSU5VVEUpLCAyKTsKLQkJCi0KLQkJcmV0ICs9ICI6IjsKLQkJaW50IGlzZWNvbmQgPSAoaW50KSBzZWNvbmQoKTsKLQkJZG91YmxlIHNlYyA9IHNlY29uZCgpOwotCi0JCWlmICgoc2VjIC0gKGlzZWNvbmQpKSA9PSAwLjApCi0JCQlyZXQgKz0gWFNEYXRlVGltZS5wYWRfaW50KGlzZWNvbmQsIDIpOwotCQllbHNlIHsKLQkJCWlmIChzZWMgPCAxMC4wKQotCQkJCXJldCArPSAiMCIgKyBzZWM7Ci0JCQllbHNlCi0JCQkJcmV0ICs9IHNlYzsKLQkJfQotCi0JCWlmICh0aW1lem9uZWQoKSkgewotCQkJaW50IGhycyA9IF90ei5ob3VycygpOwotCQkJaW50IG1pbiA9IF90ei5taW51dGVzKCk7Ci0JCQlkb3VibGUgc2VjcyA9IF90ei5zZWNvbmRzKCk7Ci0JCQlpZiAoaHJzID09IDAgJiYgbWluID09IDAgJiYgc2VjcyA9PSAwKSB7Ci0JCQkgIHJldCArPSAiWiI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgU3RyaW5nIHRab25lU3RyID0gIiI7Ci0JCQkgIGlmIChfdHoubmVnYXRpdmUoKSkgewotCQkJCXRab25lU3RyICs9ICItIjsgIAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCXRab25lU3RyICs9ICIrIjsgCi0JCQkgIH0KLQkJCSAgdFpvbmVTdHIgKz0gWFNEYXRlVGltZS5wYWRfaW50KGhycywgMik7ICAKLQkJCSAgdFpvbmVTdHIgKz0gIjoiOwotCQkJICB0Wm9uZVN0ciArPSBYU0RhdGVUaW1lLnBhZF9pbnQobWluLCAyKTsKLQkJCSAgCi0JCQkgIHJldCArPSB0Wm9uZVN0cjsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czp0aW1lIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1RJTUU7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGEgQ2FsZW5kYXIgcmVwcmVzZW50YXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIENhbGVuZGFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lIHN0b3JlZAotCSAqLwotCXB1YmxpYyBDYWxlbmRhciBjYWxlbmRhcigpIHsKLQkJcmV0dXJuIF9jYWxlbmRhcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGltZSBzdG9yZWQgYXMgYSBkdXJhdGlvbiBvZgotCSAqIHRpbWUKLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBkdXJhdGlvbiBvZiB0aW1lIGJldHdlZW4gdGhlIHRpbWUgc3RvcmVkIGFuZCB0aGUgYWN0dWFsIHRpbWUKLQkgKiAgICAgICAgIGFmdGVyIHRoZSB0aW1lem9uZSBpcyB0YWtlbiBpbnRvIGFjY291bnQKLQkgKi8KLQlwdWJsaWMgWFNEdXJhdGlvbiB0eigpIHsKLQkJcmV0dXJuIF90ejsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAotCSAqIAotCSAqIEByZXR1cm4gdGltZSBzdG9yZWQgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAotCSAqLwotCXB1YmxpYyBkb3VibGUgdmFsdWUoKSB7Ci0JCXJldHVybiBjYWxlbmRhcigpLmdldFRpbWVJbk1pbGxpcygpIC8gMTAwMC4wOwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgWFNUaW1lIHJlcHJlc2VudGF0aW9uCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFhTVGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgYm90aCBYU1RpbWUncyByZXByZXNlbnQgdGhlIHNhbWUgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQotCQlyZXR1cm4gdGhpc2NhbC5lcXVhbHModGhhdGNhbCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBYU1RpbWUgcmVwcmVzZW50YXRpb24KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgWFNUaW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNudHMgYSBwb2ludCBpbiB0aW1lIGFmdGVyIHRoYXQKLQkgKiAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gbHQoQW55VHlwZSBhcmcsIER5bmFtaWNDb250ZXh0IGNvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgTnVtZXJpY1R5cGUuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNUaW1lLmNsYXNzKTsKLQkJQ2FsZW5kYXIgdGhpc2NhbCA9IG5vcm1hbGl6ZUNhbGVuZGFyKGNhbGVuZGFyKCksIHR6KCkpOwotCQlDYWxlbmRhciB0aGF0Y2FsID0gbm9ybWFsaXplQ2FsZW5kYXIodmFsLmNhbGVuZGFyKCksIHZhbC50eigpKTsKLQkJcmV0dXJuIHRoaXNjYWwuYmVmb3JlKHRoYXRjYWwpOwotCX0KLQkKLQkvKioKLQkgKiBDb21wYXJpc29uIGJldHdlZW4gdGhpcyBhbmQgdGhlIHN1cHBsaWVkIFhTVGltZSByZXByZXNlbnRhdGlvbgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBYU1RpbWUgdG8gY29tcGFyZSB3aXRoCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBzdXBwbGllZCB0aW1lIHJlcHJlc250cyBhIHBvaW50IGluIHRpbWUgYmVmb3JlIHRoYXQKLQkgKiAgICAgICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0aW1lIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTVGltZSB2YWwgPSAoWFNUaW1lKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1RpbWUuY2xhc3MpOwotCQlDYWxlbmRhciB0aGlzY2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRjYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCi0JCXJldHVybiB0aGlzY2FsLmFmdGVyKHRoYXRjYWwpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBzdWJ0cmFjdGlvbiBiZXR3ZWVuIHRoaXMgdGltZSBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIHJlcHJlc2VudGF0aW9uLiBUaGlzIHN1cHBsaWVkIHJlcHJlc2VudGF0aW9uIG11c3QgYmUgb2YgZWl0aGVyIHR5cGUKLQkgKiBYU1RpbWUgKGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyB0aGUgZHVyYXRpb24gb2YgdGltZSBiZXR3ZWVuIHRoZXNlCi0JICogdHdvIHRpbWVzKSBvciBhIFhTRGF5VGltZUR1cmF0aW9uIChpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgdGhlIHRpbWUKLQkgKiB3aGVuIHRoaXMgZHVyYXRpb24gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSB0aW1lIHN0b3JlZCkuCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIHJlcHJlc2VudGF0aW9uIHRvIHN1YnRyYWN0IChlaXRoZXIgWFNUaW0gb3IKLQkgKiAgICAgICAgICAgIFhEVERheVRpbWVEdXJhdGlvbikKLQkgKiBAcmV0dXJuIEEgUmVzdWx0U2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuc2l6ZSgpICE9IDEpCi0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCi0JCUl0ZW0gYXQgPSBhcmcuZmlyc3QoKTsKLQkJCi0JCWlmICghKGF0IGluc3RhbmNlb2YgWFNUaW1lKSAmJiAhKGF0IGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNUaW1lKSB7Ci0JCQlyZXR1cm4gbWludXNYU1RpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJCi0JCWlmIChhdCBpbnN0YW5jZW9mIFhTRGF5VGltZUR1cmF0aW9uKSB7Ci0JCQlyZXR1cm4gbWludXNYU0RheVRpbWVEdXJhdGlvbihhdCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNEYXlUaW1lRHVyYXRpb24oSXRlbSBhdCkgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBhdDsKLQotCQlYU1RpbWUgcmVzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlcyA9IChYU1RpbWUpIGNsb25lKCk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlYTUxHcmVnb3JpYW5DYWxlbmRhciB4bWxDYWwgPSBfZGF0YXR5cGVGYWN0b3J5Lm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKChHcmVnb3JpYW5DYWxlbmRhciljYWxlbmRhcigpKTsKLQkJRHVyYXRpb24gZHRkdXJhdGlvbiA9IF9kYXRhdHlwZUZhY3RvcnkubmV3RHVyYXRpb24odmFsLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl4bWxDYWwuYWRkKGR0ZHVyYXRpb24ubmVnYXRlKCkpOwotCQlyZXMgPSBuZXcgWFNUaW1lKHhtbENhbC50b0dyZWdvcmlhbkNhbGVuZGFyKCksIHJlcy50eigpKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcocmVzKTsKLQl9Ci0KLQlwcml2YXRlIFJlc3VsdFNlcXVlbmNlIG1pbnVzWFNUaW1lRHVyYXRpb24oSXRlbSBhdCkgewotCQlYU1RpbWUgdmFsID0gKFhTVGltZSkgYXQ7Ci0JCUR1cmF0aW9uIGR0ZHVyYXRpb24gPSBudWxsOwotCQlDYWxlbmRhciB0aGlzQ2FsID0gbm9ybWFsaXplQ2FsZW5kYXIoY2FsZW5kYXIoKSwgdHooKSk7Ci0JCUNhbGVuZGFyIHRoYXRDYWwgPSBub3JtYWxpemVDYWxlbmRhcih2YWwuY2FsZW5kYXIoKSwgdmFsLnR6KCkpOwotCQlsb25nIGR1cmF0aW9uID0gdGhpc0NhbC5nZXRUaW1lSW5NaWxsaXMoKSAtIHRoYXRDYWwuZ2V0VGltZUluTWlsbGlzKCk7Ci0JCWR0ZHVyYXRpb24gPSBfZGF0YXR5cGVGYWN0b3J5Lm5ld0R1cmF0aW9uKGR1cmF0aW9uKTsKLQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KFhTRGF5VGltZUR1cmF0aW9uLnBhcnNlRFREdXJhdGlvbihkdGR1cmF0aW9uLnRvU3RyaW5nKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgYWRkaXRpb24gYmV0d2VlbiB0aGlzIHRpbWUgc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQgdGltZQotCSAqIGR1cmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIEEgWERURGF5VGltZUR1cmF0aW9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvCi0JICogICAgICAgICAgICBhZGQKLQkgKiBAcmV0dXJuIEEgWFNUaW1lIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoaXMgYWRkaXRpb24uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU0R1cmF0aW9uIHZhbCA9IChYU0R1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU0RheVRpbWVEdXJhdGlvbi5jbGFzcyk7Ci0KLQkJdHJ5IHsKLQkJCWRvdWJsZSBtcyA9IHZhbC50aW1lX3ZhbHVlKCkgKiAxMDAwLjA7Ci0KLQkJCVhTVGltZSByZXMgPSAoWFNUaW1lKSBjbG9uZSgpOwotCi0JCQlyZXMuY2FsZW5kYXIoKS5hZGQoQ2FsZW5kYXIuTUlMTElTRUNPTkQsIChpbnQpIG1zKTsKLQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KHJlcyk7Ci0JCX0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGVycikgewotCQkJYXNzZXJ0IGZhbHNlOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVElNRTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gX2NhbGVuZGFyLmNsb25lKCk7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNUb2tlbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Rva2VuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YzFkNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Rva2VuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAzMzQ0NzggLSBpbXBsZW1lbnRhdGlvbiBvZiB4czp0b2tlbiBkYXRhIHR5cGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHhzOnRva2VuIGRhdGF0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU1Rva2VuIGV4dGVuZHMgWFNOb3JtYWxpemVkU3RyaW5nIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19UT0tFTiA9ICJ4czp0b2tlbiI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB1c2luZyB0aGUgc3VwcGxpZWQgU3RyaW5nCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIFRoZSBTdHJpbmcgdG8gaW5pdGlhbGlzZSB0bwotCSAqLwotCXB1YmxpYyBYU1Rva2VuKFN0cmluZyB4KSB7Ci0JCXN1cGVyKHgpOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHRvIG51bGwKLQkgKi8KLQlwdWJsaWMgWFNUb2tlbigpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnRva2VuIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1RPS0VOOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAidG9rZW4iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ0b2tlbiI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSBTdHJpbmcgaW4gdGhlCi0JICogc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBTdHJpbmcKLQkgKiBAcmV0dXJuIE5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCSAgIHJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJSXRlbSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQlTdHJpbmcgc3JjU3RyaW5nID0gYWF0LmdldFN0cmluZ1ZhbHVlKCk7Ci0JCWlmICghaXNTYXRpc2ZpZXNDb25zdHJhaW50cyhzcmNTdHJpbmcpKSB7Ci0JCQkvLyBpbnZhbGlkIGlucHV0Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQl9Ci0JCQotCQlyZXR1cm4gbmV3IFhTVG9rZW4oc3JjU3RyaW5nKTsKLQl9Ci0JCi0JLyoKLQkgKiBEb2VzIHRoZSBzdHJpbmcgaW4gY29udGV4dCBzYXRpc2ZpZXMgY29uc3RyYWludHMgb2YgdGhlIGRhdGF0eXBlLCB4czp0b2tlbi4gCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNTYXRpc2ZpZXNDb25zdHJhaW50cyhTdHJpbmcgc3JjU3RyaW5nKSB7Ci0JICAgCi0JCWJvb2xlYW4gaXNUb2tlbiA9IHRydWU7Ci0JCQotCQkvLyBzYXRpc2ZpZXMgY29uc3RyYWludHMgb2YgeHM6bm9ybWFsaXplZFN0cmluZyBhbmQgYWRkaXRpb25hbGx5IG11c3Qgc2F0aXNmeSB0aGUgY29uZGl0aW9uLAotCQkvLyB0aGUgc3RyaW5nIG11c3Qgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMgYW5kIHRoYXQgaGF2ZSBubyBpbnRlcm5hbCBzZXF1ZW5jZXMgb2YgdHdvIG9yIG1vcmUgc3BhY2VzLgotCQlpZiAoIXN1cGVyLmlzU2F0aXNmaWVzQ29uc3RyYWludHMoc3JjU3RyaW5nKSB8fCBzcmNTdHJpbmcuc3RhcnRzV2l0aCgiICIpIHx8IAotCQkJIHNyY1N0cmluZy5lbmRzV2l0aCgiICIpIHx8IHNyY1N0cmluZy5pbmRleE9mKCIgICIpICE9IC0xKSB7Ci0JCQlpc1Rva2VuID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBpc1Rva2VuOwotCQkgIAotCX0gLy8gaXNTYXRpc2ZpZXNDb25zdHJhaW50cwotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1RPS0VOOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkQnl0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkQnl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQ1ZjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZEJ5dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY1MCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRCeXRlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgdHlwZS4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2Mjc2NSAtIGZpeGVkIGFicyB2YWx1ZSB0ZXN0cy4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi1wdWJsaWMgY2xhc3MgWFNVbnNpZ25lZEJ5dGUgZXh0ZW5kcyBYU1Vuc2lnbmVkU2hvcnQgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19VTlNJR05FRF9CWVRFID0gInhzOnVuc2lnbmVkQnl0ZSI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZEJ5dGUoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkQnl0ZSB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICB1bnNpZ25lZEJ5dGUgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRCeXRlKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czp1bnNpZ25lZEJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVU5TSUdORURfQllURTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ1bnNpZ25lZEJ5dGUiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ1bnNpZ25lZEJ5dGUiOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkQnl0ZQotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZEJ5dGUgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkQnl0ZScgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgdW5zaWduZWRCeXRlLgotCQlJdGVtIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMAotCQkJLy8gbWF4IHZhbHVlIGlzIDI1NQotCQkJQmlnSW50ZWdlciBtaW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoMCk7Ci0JCQlCaWdJbnRlZ2VyIG1heCA9IEJpZ0ludGVnZXIudmFsdWVPZigyNTVMKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZEJ5dGUoYmlnSW50KTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRUeXBlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIEJ1aWx0aW5UeXBlTGlicmFyeS5YU19VTlNJR05FREJZVEU7Ci0JfQotCi0JcHVibGljIE9iamVjdCBnZXROYXRpdmVWYWx1ZSgpIHsKLQkJcmV0dXJuIGdldFZhbHVlKCkuc2hvcnRWYWx1ZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkSW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRJbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYyZjFlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRJbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0MiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRJbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0eXBlLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjYyNzY1IC0gZml4ZWQgYWJzIHZhbHVlIHRlc3RzLgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdEJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLkR5bmFtaWNFcnJvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU1Vuc2lnbmVkSW50IGV4dGVuZHMgWFNVbnNpZ25lZExvbmcgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19VTlNJR05FRF9JTlQgPSAieHM6dW5zaWduZWRJbnQiOwotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYSByZXByZXNlbnRhdGlvbiBvZiAwCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRJbnQoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkSW50IHZhbHVlCi0JICogCi0JICogQHBhcmFtIHgKLQkgKiAgICAgICAgICAgIHVuc2lnbmVkSW50IHRvIGJlIHN0b3JlZAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkSW50KEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czp1bnNpZ25lZEludCIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19VTlNJR05FRF9JTlQ7Ci0JfQotCQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAidW5zaWduZWRJbnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ1bnNpZ25lZEludCI7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgZXh0cmFjdGFibGUgdW5zaWduZWRJbnQKLQkgKiBpbiB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0aGUgdW5zaWduZWRJbnQgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkSW50JyBzdXBwbGllZAotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJLy8gdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMgYXBwbHkgaGVyZSB0b28uIEdldCB0aGUgYXJndW1lbnQKLQkJLy8gYW5kIGNvbnZlcnQgaXQncyBzdHJpbmcgdmFsdWUgdG8gYSB1bnNpZ25lZEludC4KLQkJSXRlbSBhYXQgPSBhcmcuZmlyc3QoKTsKLQotCQl0cnkgewotCQkJQmlnSW50ZWdlciBiaWdJbnQgPSBuZXcgQmlnSW50ZWdlcihhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCQkKLQkJCS8vIGRvaW5nIHRoZSByYW5nZSBjaGVja2luZwotCQkJLy8gbWluIHZhbHVlIGlzIDAKLQkJCS8vIG1heCB2YWx1ZSBpcyA0Mjk0OTY3Mjk1Ci0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigwKTsKLQkJCUJpZ0ludGVnZXIgbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKDQyOTQ5NjcyOTVMKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZEludChiaWdJbnQpOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsKLQkJfQotCi0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gQnVpbHRpblR5cGVMaWJyYXJ5LlhTX1VOU0lHTkVESU5UOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZSgpLmxvbmdWYWx1ZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZExvbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZExvbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3ZGNkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTVW5zaWduZWRMb25nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyNzc2MjkgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24sIG9mIHhzOnVuc2lnbmVkTG9uZwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotcHVibGljIGNsYXNzIFhTVW5zaWduZWRMb25nIGV4dGVuZHMgWFNOb25OZWdhdGl2ZUludGVnZXIgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19VTlNJR05FRF9MT05HID0gInhzOnVuc2lnbmVkTG9uZyI7Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyBhIHJlcHJlc2VudGF0aW9uIG9mIDAKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZExvbmcoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkTG9uZyB2YWx1ZQotCSAqIAotCSAqIEBwYXJhbSB4Ci0JICogICAgICAgICAgICB1bnNpZ25lZExvbmcgdG8gYmUgc3RvcmVkCi0JICovCi0JcHVibGljIFhTVW5zaWduZWRMb25nKEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czp1bnNpZ25lZExvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHN0cmluZ190eXBlKCkgewotCQlyZXR1cm4gWFNfVU5TSUdORURfTE9ORzsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ1bnNpZ25lZExvbmciIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ1bnNpZ25lZExvbmciOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IFJlc3VsdFNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4dHJhY3RhYmxlIHVuc2lnbmVkTG9uZwotCSAqIGluIHRoZSBzdXBwbGllZCBSZXN1bHRTZXF1ZW5jZQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBSZXN1bHRTZXF1ZW5jZSBmcm9tIHdoaWNoIHRoZSB1bnNpZ25lZExvbmcgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkTG9uZycgc3VwcGxpZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLmVtcHR5KCkpCi0JCQlyZXR1cm4gUmVzdWx0QnVmZmVyLkVNUFRZOwotCi0JCS8vIHRoZSBmdW5jdGlvbiBjb252ZXJzaW9uIHJ1bGVzIGFwcGx5IGhlcmUgdG9vLiBHZXQgdGhlIGFyZ3VtZW50Ci0JCS8vIGFuZCBjb252ZXJ0IGl0J3Mgc3RyaW5nIHZhbHVlIHRvIGEgdW5zaWduZWRMb25nLgotCQlJdGVtIGFhdCA9IGFyZy5maXJzdCgpOwotCi0JCXRyeSB7Ci0JCQlCaWdJbnRlZ2VyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQkJCQotCQkJLy8gZG9pbmcgdGhlIHJhbmdlIGNoZWNraW5nCi0JCQkvLyBtaW4gdmFsdWUgaXMgMAotCQkJLy8gbWF4IHZhbHVlIGlzIDE4NDQ2NzQ0MDczNzA5NTUxNjE1Ci0JCQlCaWdJbnRlZ2VyIG1pbiA9IEJpZ0ludGVnZXIudmFsdWVPZigwKTsKLQkJCUJpZ0ludGVnZXIgbWF4ID0gbmV3IEJpZ0ludGVnZXIoIjE4NDQ2NzQ0MDczNzA5NTUxNjE1Iik7Ci0KLQkJCWlmIChiaWdJbnQuY29tcGFyZVRvKG1pbikgPCAwIHx8IGJpZ0ludC5jb21wYXJlVG8obWF4KSA+IDApIHsKLQkJCSAgIC8vIGludmFsaWQgaW5wdXQKLQkJCSAgIHRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7CQotCQkJfQotCQkJCi0JCQlyZXR1cm4gbmV3IFhTVW5zaWduZWRMb25nKGJpZ0ludCk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5TSUdORURMT05HOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0TmF0aXZlVmFsdWUoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkU2hvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnNpZ25lZFNob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYTVhZjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1Vuc2lnbmVkU2hvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE11a3VsIEdhbmRoaSwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI3NzY0NSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgb2YgeHM6dW5zaWduZWRTaG9ydAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjI3NjUgLSBmaXhlZCBhYnMgdmFsdWUgdGVzdHMuCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluLkJ1aWx0aW5UeXBlTGlicmFyeTsKLQotcHVibGljIGNsYXNzIFhTVW5zaWduZWRTaG9ydCBleHRlbmRzIFhTVW5zaWduZWRJbnQgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU19VTlNJR05FRF9TSE9SVCA9ICJ4czp1bnNpZ25lZFNob3J0IjsKLQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgMAotCSAqLwotCXB1YmxpYyBYU1Vuc2lnbmVkU2hvcnQoKSB7Ci0JICB0aGlzKEJpZ0ludGVnZXIudmFsdWVPZigwKSk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpemVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cHBsaWVkIHVuc2lnbmVkU2hvcnQgdmFsdWUKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgdW5zaWduZWRTaG9ydCB0byBiZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgWFNVbnNpZ25lZFNob3J0KEJpZ0ludGVnZXIgeCkgewotCQlzdXBlcih4KTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkYXRhdHlwZSdzIGZ1bGwgcGF0aG5hbWUKLQkgKiAKLQkgKiBAcmV0dXJuICJ4czp1bnNpZ25lZFNob3J0IiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1VOU0lHTkVEX1NIT1JUOwotCX0KLQkKLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgbmFtZQotCSAqIAotCSAqIEByZXR1cm4gInVuc2lnbmVkU2hvcnQiIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ1bnNpZ25lZFNob3J0IjsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB1bnNpZ25lZFNob3J0Ci0JICogaW4gdGhlIHN1cHBsaWVkIFJlc3VsdFNlcXVlbmNlCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIFJlc3VsdFNlcXVlbmNlIGZyb20gd2hpY2ggdGhlIHVuc2lnbmVkU2hvcnQgaXMgdG8gYmUgZXh0cmFjdGVkCi0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgJ3Vuc2lnbmVkU2hvcnQnIHN1cHBsaWVkCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgY29uc3RydWN0b3IoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGFyZy5lbXB0eSgpKQotCQkJcmV0dXJuIFJlc3VsdEJ1ZmZlci5FTVBUWTsKLQotCQkvLyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcyBhcHBseSBoZXJlIHRvby4gR2V0IHRoZSBhcmd1bWVudAotCQkvLyBhbmQgY29udmVydCBpdCdzIHN0cmluZyB2YWx1ZSB0byBhIHVuc2lnbmVkU2hvcnQuCi0JCUl0ZW0gYWF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJdHJ5IHsKLQkJCUJpZ0ludGVnZXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIoYWF0LmdldFN0cmluZ1ZhbHVlKCkpOwotCQkJCi0JCQkvLyBkb2luZyB0aGUgcmFuZ2UgY2hlY2tpbmcKLQkJCS8vIG1pbiB2YWx1ZSBpcyAwCi0JCQkvLyBtYXggdmFsdWUgaXMgNjU1MzUKLQkJCUJpZ0ludGVnZXIgbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKDApOwotCQkJQmlnSW50ZWdlciBtYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoNjU1MzVMKTsKLQotCQkJaWYgKGJpZ0ludC5jb21wYXJlVG8obWluKSA8IDAgfHwgYmlnSW50LmNvbXBhcmVUbyhtYXgpID4gMCkgewotCQkJICAgLy8gaW52YWxpZCBpbnB1dAotCQkJICAgdGhyb3cgRHluYW1pY0Vycm9yLmNhbnRfY2FzdChudWxsKTsJCi0JCQl9Ci0JCQkKLQkJCXJldHVybiBuZXcgWFNVbnNpZ25lZFNob3J0KGJpZ0ludCk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3IuY2FudF9jYXN0KG51bGwpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5TSUdORURTSE9SVDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gZ2V0VmFsdWUoKS5pbnRWYWx1ZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1VudHlwZWRBdG9taWMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvWFNVbnR5cGVkQXRvbWljLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjhiMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1VudHlwZWRBdG9taWMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgQW5kcmVhIEJpdHRhdSwgVW5pdmVyc2l0eSBDb2xsZWdlIExvbmRvbiwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBQc3ljaG9QYXRoIFhQYXRoIDIuMAotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNjI3NjUgLSBjb3JyZWN0ZWQgaW1wbGVtZW50YXRpb24gb2YgWFNVbnR5cGVkQXRvbWljIAotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW4uQnVpbHRpblR5cGVMaWJyYXJ5OwotCi0vKioKLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVudHlwZWRBdG9taWMgZGF0YXR5cGUgd2hpY2ggaXMgdXNlZCB0byByZXByZXNlbnQKLSAqIHVudHlwZWQgYXRvbWljIG5vZGVzLgotICovCi1wdWJsaWMgY2xhc3MgWFNVbnR5cGVkQXRvbWljIGV4dGVuZHMgQ3RyVHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1VOVFlQRURfQVRPTUlDID0gInhzOnVudHlwZWRBdG9taWMiOwotCXByaXZhdGUgU3RyaW5nIF92YWx1ZTsKLQotCQotCXB1YmxpYyBYU1VudHlwZWRBdG9taWMoKSB7Ci0JCXRoaXMobnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIEluaXRpYWxpc2VzIHVzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0geAotCSAqICAgICAgICAgICAgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhlIHVudHlwZWQgYXRvbWljCi0JICogICAgICAgICAgICBub2RlCi0JICovCi0JcHVibGljIFhTVW50eXBlZEF0b21pYyhTdHJpbmcgeCkgewotCQlfdmFsdWUgPSB4OwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICogCi0JICogQHJldHVybiAieHM6dW50eXBlZEF0b21pYyIgd2hpY2ggaXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc3RyaW5nX3R5cGUoKSB7Ci0JCXJldHVybiBYU19VTlRZUEVEX0FUT01JQzsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoaXMgdW50eXBlZCBhdG9taWMKLQkgKiBub2RlCi0JICogCi0JICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoaXMgdW50eXBlZCBhdG9taWMgbm9kZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7Ci0JCXJldHVybiBfdmFsdWU7Ci0JfQotCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGNvbnN0cnVjdG9yKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCXJldHVybiBuZXcgWFNVbnR5cGVkQXRvbWljKGFhdC5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ1bnR5cGVkQXRvbWljIjsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5UWVBFREFUT01JQzsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5hdGl2ZVZhbHVlKCkgewotCQlyZXR1cm4gX3ZhbHVlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9YU1llYXJNb250aER1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTWWVhck1vbnRoRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2ZWY2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL1hTWWVhck1vbnRoRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIEFuZHJlYSBCaXR0YXUsIFVuaXZlcnNpdHkgQ29sbGVnZSBMb25kb24sIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEFuZHJlYSBCaXR0YXUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgUHN5Y2hvUGF0aCBYUGF0aCAyLjAKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjczNzYwIC0gd3JvbmcgbmFtZXNwYWNlIGZvciBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjc5MzczIC0gaW1wcm92ZW1lbnRzIHRvIG11bHRpcGx5IG9wZXJhdGlvbiBvbiB4czp5ZWFyTW9udGhEdXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHR5cGUuCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI4MjIyMyAtIGltcGxlbWVudGF0aW9uIG9mIHhzOmR1cmF0aW9uIGRhdGEgdHlwZS4KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5EeW5hbWljQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuUmVzdWx0QnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5SZXN1bHRTZXF1ZW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLkNtcEVxOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5DbXBHdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uQ21wTHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhEaXY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhNaW51czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uTWF0aFBsdXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLmZ1bmN0aW9uLk1hdGhUaW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci0KLS8qKgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgWWVhck1vbnRoRHVyYXRpb24gZGF0YXR5cGUKLSAqLwotcHVibGljIGNsYXNzIFhTWWVhck1vbnRoRHVyYXRpb24gZXh0ZW5kcyBYU0R1cmF0aW9uIGltcGxlbWVudHMgQ21wRXEsIENtcEx0LAotCQlDbXBHdCwgTWF0aFBsdXMsIE1hdGhNaW51cywgTWF0aFRpbWVzLCBNYXRoRGl2IHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTX1lFQVJfTU9OVEhfRFVSQVRJT04gPSAieHM6eWVhck1vbnRoRHVyYXRpb24iOwotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdXNpbmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMuIElmIHRoZSBudW1iZXIgb2YgbW9udGhzCi0JICogc3VwcGxpZWQgaXMgbW9yZSB0aGFuIDEyLCB0aGUgbnVtYmVyIG9mIHllYXJzIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgotCSAqIAotCSAqIEBwYXJhbSB5ZWFyCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgeWVhcnMgaW4gdGhpcyBkdXJhdGlvbiBvZiB0aW1lCi0JICogQHBhcmFtIG1vbnRoCi0JICogICAgICAgICAgICBOdW1iZXIgb2YgbW9udGhzIGluIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqIEBwYXJhbSBuZWdhdGl2ZQotCSAqICAgICAgICAgICAgVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIG9mIHRpbWUgcmVwcmVzZW50cyBhIGJhY2t3YXJkcyBwYXNzYWdlCi0JICogICAgICAgICAgICB0aHJvdWdoIHRpbWUuIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBYU1llYXJNb250aER1cmF0aW9uKGludCB5ZWFyLCBpbnQgbW9udGgsIGJvb2xlYW4gbmVnYXRpdmUpIHsKLQkJc3VwZXIoeWVhciwgbW9udGgsIDAsIDAsIDAsIDAsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXNlcyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1vbnRocwotCSAqIAotCSAqIEBwYXJhbSBtb250aHMKLQkgKiAgICAgICAgICAgIE51bWJlciBvZiBtb250aHMgaW4gdGhlIGR1cmF0aW9uIG9mIHRpbWUKLQkgKi8KLQlwdWJsaWMgWFNZZWFyTW9udGhEdXJhdGlvbihpbnQgbW9udGhzKSB7Ci0JCXRoaXMoMCwgTWF0aC5hYnMobW9udGhzKSwgbW9udGhzIDwgMCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGlzZXMgdG8gYSBkdXJhdGlvbiBvZiBubyB0aW1lICgweWVhcnMgYW5kIDBtb250aHMpCi0JICovCi0JcHVibGljIFhTWWVhck1vbnRoRHVyYXRpb24oKSB7Ci0JCXRoaXMoMCwgMCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgWFNZZWFyTW9udGhEdXJhdGlvbiBieSBwYXJzaW5nIHRoZSBzdXBwbGllZCBTdHJpbmcKLQkgKiByZXByZXNlbnRlZCBkdXJhdGlvbiBvZiB0aW1lCi0JICogCi0JICogQHBhcmFtIHN0cgotCSAqICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGVkIGR1cmF0aW9uIG9mIHRpbWUKLQkgKiBAcmV0dXJuIE5ldyBYU1llYXJNb250aER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gb2YgdGltZQotCSAqICAgICAgICAgc3VwcGxpZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRHVyYXRpb24gcGFyc2VZTUR1cmF0aW9uKFN0cmluZyBzdHIpIHsKLQkJYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOwotCQlpbnQgeWVhciA9IDA7Ci0JCWludCBtb250aCA9IDA7Ci0KLQkJaW50IHN0YXRlID0gMDsgLy8gMCBiZWdpbm5pbmcKLQkJLy8gMSB5ZWFyCi0JCS8vIDIgbW9udGgKLQkJLy8gMyBkb25lCi0JCS8vIDQgZXhwZWN0aW5nIFAKLQkJLy8gNSBleHBlY3RpbmcgWSBvciBNCi0JCS8vIDYgZXhwZWN0aW5nIE0gb3IgZW5kCi0JCS8vIDcgZXhwZWN0aW5nIGVuZAotCi0JCVN0cmluZyBkaWdpdHMgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgewotCQkJY2hhciB4ID0gc3RyLmNoYXJBdChpKTsKLQotCQkJc3dpdGNoIChzdGF0ZSkgewotCQkJLy8gYmVnaW5uaW5nCi0JCQljYXNlIDA6Ci0JCQkJaWYgKHggPT0gJy0nKSB7Ci0JCQkJCW5lZ2F0aXZlID0gdHJ1ZTsKLQkJCQkJc3RhdGUgPSA0OwotCQkJCX0gZWxzZSBpZiAoeCA9PSAnUCcpCi0JCQkJCXN0YXRlID0gNTsKLQkJCQllbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDQ6Ci0JCQkJaWYgKHggPT0gJ1AnKQotCQkJCQlzdGF0ZSA9IDU7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA1OgotCQkJCWlmICgnMCcgPD0geCAmJiB4IDw9ICc5JykKLQkJCQkJZGlnaXRzICs9IHg7Ci0JCQkJZWxzZSBpZiAoeCA9PSAnWScpIHsKLQkJCQkJaWYgKGRpZ2l0cy5sZW5ndGgoKSA9PSAwKQotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCXllYXIgPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0cyk7Ci0JCQkJCWRpZ2l0cyA9ICIiOwotCQkJCQlzdGF0ZSA9IDY7Ci0JCQkJfSBlbHNlIGlmICh4ID09ICdNJykgewotCQkJCQlpZiAoZGlnaXRzLmxlbmd0aCgpID09IDApCi0JCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJbW9udGggPSBJbnRlZ2VyLnBhcnNlSW50KGRpZ2l0cyk7Ci0JCQkJCXN0YXRlID0gNzsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNjoKLQkJCQlpZiAoJzAnIDw9IHggJiYgeCA8PSAnOScpCi0JCQkJCWRpZ2l0cyArPSB4OwotCQkJCWVsc2UgaWYgKHggPT0gJ00nKSB7Ci0JCQkJCWlmIChkaWdpdHMubGVuZ3RoKCkgPT0gMCkKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQltb250aCA9IEludGVnZXIucGFyc2VJbnQoZGlnaXRzKTsKLQkJCQkJc3RhdGUgPSA3OwotCi0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiBudWxsOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDc6Ci0JCQkJcmV0dXJuIG51bGw7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0IGZhbHNlOwotCQkJCXJldHVybiBudWxsOwotCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbmV3IFhTWWVhck1vbnRoRHVyYXRpb24oeWVhciwgbW9udGgsIG5lZ2F0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaXZlcyB0aGUgZGF0YXR5cGUncyBuYW1lCi0JICogCi0JICogQHJldHVybiAieWVhck1vbnRoRHVyYXRpb24iIHdoaWNoIGlzIHRoZSBkYXRhdHlwZSdzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHR5cGVfbmFtZSgpIHsKLQkJcmV0dXJuICJ5ZWFyTW9udGhEdXJhdGlvbiI7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBSZXN1bHRTZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSBleHRyYWN0YWJsZSB0aW1lIGR1cmF0aW9uCi0JICogZnJvbSB0aGUgc3VwcGxpZWQgUmVzdWx0U2VxdWVuY2UKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgUmVzdWx0U2VxdWVuY2UgZnJvbSB3aGljaCB0byBleHRyYWN0Ci0JICogQHJldHVybiBOZXcgUmVzdWx0U2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgdGltZSBkdXJhdGlvbiBleHRyYWN0ZWQKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBSZXN1bHRTZXF1ZW5jZSBjb25zdHJ1Y3RvcihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCi0JCWlmIChhcmcuZW1wdHkoKSkKLQkJCXJldHVybiBSZXN1bHRCdWZmZXIuRU1QVFk7Ci0KLQkJQW55QXRvbWljVHlwZSBhYXQgPSAoQW55QXRvbWljVHlwZSkgYXJnLmZpcnN0KCk7Ci0JCWlmIChhYXQgaW5zdGFuY2VvZiBOdW1lcmljVHlwZSB8fCBhYXQgaW5zdGFuY2VvZiBDYWxlbmRhclR5cGUgfHwKLQkJCWFhdCBpbnN0YW5jZW9mIFhTQm9vbGVhbiB8fCBhYXQgaW5zdGFuY2VvZiBYU0Jhc2U2NEJpbmFyeSB8fAotCQkJYWF0IGluc3RhbmNlb2YgWFNIZXhCaW5hcnkgfHwgYWF0IGluc3RhbmNlb2YgWFNBbnlVUkkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5pbnZhbGlkVHlwZSgpOwotCQl9Ci0KLQkJaWYgKCFpc0Nhc3RhYmxlKGFhdCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0JCX0KLQotCQlYU0R1cmF0aW9uIHltZCA9IGNhc3RZZWFyTW9udGhEdXJhdGlvbihhYXQpOwotCi0JCWlmICh5bWQgPT0gbnVsbCkKLQkJCXRocm93IER5bmFtaWNFcnJvci5jYW50X2Nhc3QobnVsbCk7Ci0KLQkJcmV0dXJuIHltZDsKLQl9Ci0JCi0JcHJpdmF0ZSBYU0R1cmF0aW9uIGNhc3RZZWFyTW9udGhEdXJhdGlvbihBbnlBdG9taWNUeXBlIGFhdCkgewotCQlpZiAoYWF0IGluc3RhbmNlb2YgWFNEdXJhdGlvbikgewotCQkJWFNEdXJhdGlvbiBkdXJhdGlvbiA9IChYU0R1cmF0aW9uKSBhYXQ7Ci0JCQlyZXR1cm4gbmV3IFhTWWVhck1vbnRoRHVyYXRpb24oZHVyYXRpb24ueWVhcigpLCBkdXJhdGlvbi5tb250aCgpLCBkdXJhdGlvbi5uZWdhdGl2ZSgpKTsKLQkJfQotCQkKLQkJcmV0dXJuIHBhcnNlWU1EdXJhdGlvbihhYXQuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyBkdXJhdGlvbiByZXByZXNlbnRzIGEgYmFja3dhcmQgcGFzc2FnZSB0aHJvdWdoCi0JICogdGltZQotCSAqIAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGR1cmF0aW9uIHJlcHJlc2VudHMgYSBiYWNrd2FyZCBwYXNzYWdlIHRocm91Z2ggdGltZS4KLQkgKiAgICAgICAgIEZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBib29sZWFuIG5lZ2F0aXZlKCkgewotCQlyZXR1cm4gX25lZ2F0aXZlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24gb2YgdGltZSBzdG9yZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgewotCQlTdHJpbmcgc3RydmFsID0gIiI7Ci0KLQkJaWYgKG5lZ2F0aXZlKCkpCi0JCQlzdHJ2YWwgKz0gIi0iOwotCi0JCXN0cnZhbCArPSAiUCI7Ci0KLQkJaW50IHllYXJzID0geWVhcigpOwotCQlpZiAoeWVhcnMgIT0gMCkKLQkJCXN0cnZhbCArPSB5ZWFycyArICJZIjsKLQotCQlpbnQgbW9udGhzID0gbW9udGgoKTsKLQkJaWYgKG1vbnRocyA9PSAwKSB7Ci0JCQlpZiAoeWVhcnMgPT0gMCkKLQkJCQlzdHJ2YWwgKz0gbW9udGhzICsgIk0iOwotCQl9IGVsc2UKLQkJCXN0cnZhbCArPSBtb250aHMgKyAiTSI7Ci0KLQkJcmV0dXJuIHN0cnZhbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGRhdGF0eXBlJ3MgZnVsbCBwYXRobmFtZQotCSAqIAotCSAqIEByZXR1cm4gInhzOnllYXJNb250aER1cmF0aW9uIiB3aGljaCBpcyB0aGUgZGF0YXR5cGUncyBmdWxsIHBhdGhuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBzdHJpbmdfdHlwZSgpIHsKLQkJcmV0dXJuIFhTX1lFQVJfTU9OVEhfRFVSQVRJT047Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBkdXJhdGlvbiBvZiB0aW1lIHN0b3JlZCBhcyB0aGUgbnVtYmVyIG9mIG1vbnRocyB3aXRoaW4gaXQKLQkgKiAKLQkgKiBAcmV0dXJuIE51bWJlciBvZiBtb250aHMgbWFraW5nIHVwIHRoaXMgZHVyYXRpb24gb2YgdGltZQotCSAqLwotCXB1YmxpYyBpbnQgbW9udGhWYWx1ZSgpIHsKLQkJaW50IHJldCA9IHllYXIoKSAqIDEyICsgbW9udGgoKTsKLQotCQlpZiAobmVnYXRpdmUoKSkKLQkJCXJldCAqPSAtMTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIEVxdWFsaXR5IGNvbXBhcmlzb24gYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3VwcGxpZWQgZHVyYXRpb24gb2YgdGltZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBjb21wYXJlIHdpdGgKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhleSBib3RoIHJlcHJlc2VudCB0aGUgZHVyYXRpb24gb2YgdGltZS4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlcShBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgZHluYW1pY0NvbnRleHQpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnIGluc3RhbmNlb2YgWFNEYXlUaW1lRHVyYXRpb24pIHsKLQkJCVhTRGF5VGltZUR1cmF0aW9uIGRheVRpbWVEdXJhdGlvbiA9IChYU0RheVRpbWVEdXJhdGlvbilhcmc7Ci0JCQlyZXR1cm4gKG1vbnRoVmFsdWUoKSA9PSAwICYmIGRheVRpbWVEdXJhdGlvbi52YWx1ZSgpID09IDAuMCk7Ci0JCX0gZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgWFNZZWFyTW9udGhEdXJhdGlvbikgewotCQkJWFNZZWFyTW9udGhEdXJhdGlvbiB5ZWFyTW9udGhEdXJhdGlvbiA9IChYU1llYXJNb250aER1cmF0aW9uKWFyZzsKLQkJCXJldHVybiBtb250aFZhbHVlKCkgPT0geWVhck1vbnRoRHVyYXRpb24ubW9udGhWYWx1ZSgpOwotCQl9Ci0JCVhTRHVyYXRpb24gdmFsID0gKFhTRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTRHVyYXRpb24uY2xhc3MpOwotCQlyZXR1cm4gc3VwZXIuZXEodmFsLCBkeW5hbWljQ29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgbGFyZ2VyIGR1cmF0aW9uIHRoYW4gdGhhdAotCSAqICAgICAgICAgc3RvcmVkLiBGYWxzZSBvdGhlcndpc2UKLQkgKiBAdGhyb3dzIER5bmFtaWNFcnJvcgotCSAqLwotCXB1YmxpYyBib29sZWFuIGx0KEFueVR5cGUgYXJnLCBEeW5hbWljQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJWFNZZWFyTW9udGhEdXJhdGlvbiB2YWwgPSAoWFNZZWFyTW9udGhEdXJhdGlvbikgTnVtZXJpY1R5cGUKLQkJCQkuZ2V0X3NpbmdsZV90eXBlKGFyZywgWFNZZWFyTW9udGhEdXJhdGlvbi5jbGFzcyk7Ci0KLQkJcmV0dXJuIG1vbnRoVmFsdWUoKSA8IHZhbC5tb250aFZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyaXNvbiBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBvZiB0aW1lLgotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGNvbXBhcmUgd2l0aAotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgdGltZSByZXByZXNlbnRzIGEgc21hbGxlciBkdXJhdGlvbiB0aGFuIHRoYXQKLQkgKiAgICAgICAgIHN0b3JlZC4gRmFsc2Ugb3RoZXJ3aXNlCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBndChBbnlUeXBlIGFyZywgRHluYW1pY0NvbnRleHQgY29udGV4dCkgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpOwotCi0JCXJldHVybiBtb250aFZhbHVlKCkgPiB2YWwubW9udGhWYWx1ZSgpOwotCX0KLQotCS8qKgotCSAqIE1hdGhlbWF0aWNhbCBhZGRpdGlvbiBiZXR3ZWVuIHRoaXMgZHVyYXRpb24gc3RvcmVkIGFuZCB0aGUgc3VwcGxpZWQKLQkgKiBkdXJhdGlvbiBvZiB0aW1lIChvZiB0eXBlIFhTWWVhck1vbnRoRHVyYXRpb24pCi0JICogCi0JICogQHBhcmFtIGFyZwotCSAqICAgICAgICAgICAgVGhlIGR1cmF0aW9uIG9mIHRpbWUgdG8gYWRkCi0JICogQHJldHVybiBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotCSAqICAgICAgICAgYWZ0ZXIgdGhlIGFkZGl0aW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgcGx1cyhSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlYU1llYXJNb250aER1cmF0aW9uIHZhbCA9IChYU1llYXJNb250aER1cmF0aW9uKSBOdW1lcmljVHlwZQotCQkJCS5nZXRfc2luZ2xlX3R5cGUoYXJnLCBYU1llYXJNb250aER1cmF0aW9uLmNsYXNzKTsKLQotCQlpbnQgcmVzID0gbW9udGhWYWx1ZSgpICsgdmFsLm1vbnRoVmFsdWUoKTsKLQotCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTWWVhck1vbnRoRHVyYXRpb24ocmVzKSk7Ci0JfQotCi0JLyoqCi0JICogTWF0aGVtYXRpY2FsIHN1YnRyYWN0aW9uIGJldHdlZW4gdGhpcyBkdXJhdGlvbiBzdG9yZWQgYW5kIHRoZSBzdXBwbGllZAotCSAqIGR1cmF0aW9uIG9mIHRpbWUgKG9mIHR5cGUgWFNZZWFyTW9udGhEdXJhdGlvbikKLQkgKiAKLQkgKiBAcGFyYW0gYXJnCi0JICogICAgICAgICAgICBUaGUgZHVyYXRpb24gb2YgdGltZSB0byBzdWJ0cmFjdAotCSAqIEByZXR1cm4gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLQkgKiAgICAgICAgIGFmdGVyIHRoZSBzdWJ0cmFjdGlvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIG1pbnVzKFJlc3VsdFNlcXVlbmNlIGFyZykgdGhyb3dzIER5bmFtaWNFcnJvciB7Ci0JCVhTWWVhck1vbnRoRHVyYXRpb24gdmFsID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIE51bWVyaWNUeXBlCi0JCQkJLmdldF9zaW5nbGVfdHlwZShhcmcsIFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpOwotCi0JCWludCByZXMgPSBtb250aFZhbHVlKCkgLSB2YWwubW9udGhWYWx1ZSgpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNZZWFyTW9udGhEdXJhdGlvbihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgbXVsdGlwbGljYXRpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0JICogZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIG11bHRpcGx5IGJ5Ci0JICogQHJldHVybiBOZXcgWFNZZWFyTW9udGhEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdGluZyBkdXJhdGlvbgotCSAqICAgICAgICAgYWZ0ZXIgdGhlIG11bHRpcGxpY2F0aW9uCi0JICogQHRocm93cyBEeW5hbWljRXJyb3IKLQkgKi8KLQlwdWJsaWMgUmVzdWx0U2VxdWVuY2UgdGltZXMoUmVzdWx0U2VxdWVuY2UgYXJnKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJUmVzdWx0U2VxdWVuY2UgY29udmVydGVkUlMgPSBhcmc7CQkKLQkJaWYgKGFyZy5zaXplKCkgPT0gMSkgewotCQkJSXRlbSBhcmdWYWx1ZSA9IGFyZy5maXJzdCgpOwotICAgICAgICAgICAgaWYgKGFyZ1ZhbHVlIGluc3RhbmNlb2YgWFNEZWNpbWFsKSB7Ci0gICAgICAgICAgICAJY29udmVydGVkUlMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNEb3VibGUoYXJnVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSkpOwkKLSAgICAgICAgICAgIH0KLQkJfQotCQkKLQkJWFNEb3VibGUgdmFsID0gKFhTRG91YmxlKSBOdW1lcmljVHlwZS5nZXRfc2luZ2xlX3R5cGUoY29udmVydGVkUlMsCi0JCQkJWFNEb3VibGUuY2xhc3MpOwotCi0JCWlmICh2YWwubmFuKCkpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5uYW4oKTsKLQkJfQotCQkKLQkJaWYgKHZhbC5pbmZpbml0ZSgpKSB7Ci0JCQl0aHJvdyBEeW5hbWljRXJyb3Iub3ZlcmZsb3dEYXRlVGltZSgpOwotCQl9Ci0JCQotCQlpbnQgcmVzID0gKGludCkgTWF0aC5yb3VuZChtb250aFZhbHVlKCkgKiB2YWwuZG91YmxlX3ZhbHVlKCkpOwotCi0JCXJldHVybiBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldyhuZXcgWFNZZWFyTW9udGhEdXJhdGlvbihyZXMpKTsKLQl9Ci0KLQkvKioKLQkgKiBNYXRoZW1hdGljYWwgZGl2aXNpb24gYmV0d2VlbiB0aGlzIGR1cmF0aW9uIHN0b3JlZCBhbmQgdGhlIHN1cHBsaWVkCi0JICogZHVyYXRpb24gb2YgdGltZSAob2YgdHlwZSBYU1llYXJNb250aER1cmF0aW9uKQotCSAqIAotCSAqIEBwYXJhbSBhcmcKLQkgKiAgICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aW1lIHRvIGRpdmlkZSBieQotCSAqIEByZXR1cm4gTmV3IFhTWWVhck1vbnRoRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSByZXN1bHRpbmcgZHVyYXRpb24KLQkgKiAgICAgICAgIGFmdGVyIHRoZSBkaXZpc2lvbgotCSAqIEB0aHJvd3MgRHluYW1pY0Vycm9yCi0JICovCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGRpdihSZXN1bHRTZXF1ZW5jZSBhcmcpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlpZiAoYXJnLnNpemUoKSAhPSAxKQotCQkJRHluYW1pY0Vycm9yLnRocm93X3R5cGVfZXJyb3IoKTsKLQotCQlJdGVtIGF0ID0gYXJnLmZpcnN0KCk7Ci0KLQkJaWYgKGF0IGluc3RhbmNlb2YgWFNEb3VibGUpIHsKLQkJCVhTRG91YmxlIGR0ID0gKFhTRG91YmxlKSBhdDsKLQotCQkJaW50IHJldCA9IDA7Ci0KLQkJCWlmICghZHQuemVybygpKQotCQkJCXJldCA9IChpbnQpIE1hdGgucm91bmQobW9udGhWYWx1ZSgpIC8gZHQuZG91YmxlX3ZhbHVlKCkpOwotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTWWVhck1vbnRoRHVyYXRpb24oCi0JCQkJCXJldCkpOwotCQl9IGVsc2UgaWYgKGF0IGluc3RhbmNlb2YgWFNEZWNpbWFsKSB7Ci0JCQlYU0RlY2ltYWwgZHQgPSAoWFNEZWNpbWFsKSBhdDsKLQkJCQotCQkJaW50IHJldCA9IDA7Ci0JCQkKLQkJCWlmICghZHQuemVybygpKQotCQkJCXJldCA9IChpbnQpIE1hdGgucm91bmQobW9udGhWYWx1ZSgpIC8gZHQuZ2V0VmFsdWUoKS5kb3VibGVWYWx1ZSgpKTsKLQkJCQotCQkJcmV0dXJuIFJlc3VsdFNlcXVlbmNlRmFjdG9yeS5jcmVhdGVfbmV3KG5ldyBYU1llYXJNb250aER1cmF0aW9uKAotCQkJCQlyZXQpKTsJCi0JCX0gZWxzZSBpZiAoYXQgaW5zdGFuY2VvZiBYU1llYXJNb250aER1cmF0aW9uKSB7Ci0JCQlYU1llYXJNb250aER1cmF0aW9uIG1kID0gKFhTWWVhck1vbnRoRHVyYXRpb24pIGF0OwotCi0JCQlkb3VibGUgcmVzID0gKGRvdWJsZSkgbW9udGhWYWx1ZSgpIC8gbWQubW9udGhWYWx1ZSgpOwotCi0JCQlyZXR1cm4gUmVzdWx0U2VxdWVuY2VGYWN0b3J5LmNyZWF0ZV9uZXcobmV3IFhTRGVjaW1hbChuZXcgQmlnRGVjaW1hbChyZXMpKSk7Ci0JCX0gZWxzZSB7Ci0JCQlEeW5hbWljRXJyb3IudGhyb3dfdHlwZV9lcnJvcigpOwotCQkJcmV0dXJuIG51bGw7IC8vIHVucmVhY2gKLQkJfQotCX0JCi0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfWUVBUk1PTlRIRFVSQVRJT047Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL2J1aWx0aW4vQXRvbWljVHlwZURlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9BdG9taWNUeXBlRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWE5MjkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9BdG9taWNUeXBlRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBBdG9taWNUeXBlRGVmaW5pdGlvbiBleHRlbmRzIFR5cGVEZWZpbml0aW9uIHsKLQotCXB1YmxpYyBhYnN0cmFjdCBTaW5nbGVJdGVtU2VxdWVuY2UgY29uc3RydWN0KFJlc3VsdFNlcXVlbmNlIHJzKTsKLQlwdWJsaWMgYWJzdHJhY3QgU2luZ2xlSXRlbVNlcXVlbmNlIGNvbnN0cnVjdE5hdGl2ZShPYmplY3QgcnMpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9CdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9CdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliMDUzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL2J1aWx0aW4vQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluOwotCi0KLXB1YmxpYyBjbGFzcyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gZXh0ZW5kcyBCdWlsdGluVHlwZURlZmluaXRpb24gewotCi0JcHVibGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbihTdHJpbmcgbmFtZSwgQ2xhc3MgaW1wbGVtZW50YXRpb25DbGFzcywgQ2xhc3MgbmF0aXZlVHlwZSwgQnVpbHRpblR5cGVEZWZpbml0aW9uIGJhc2VUeXBlKSB7Ci0JCXN1cGVyKG5hbWUsIGltcGxlbWVudGF0aW9uQ2xhc3MsIG5hdGl2ZVR5cGUsIGJhc2VUeXBlKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNBYnN0cmFjdCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9CdWlsdGluTGlzdFR5cGVEZWZpbml0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL2J1aWx0aW4vQnVpbHRpbkxpc3RUeXBlRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTU1YWYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9CdWlsdGluTGlzdFR5cGVEZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBCdWlsdGluTGlzdFR5cGVEZWZpbml0aW9uIGV4dGVuZHMgQnVpbHRpblR5cGVEZWZpbml0aW9uIGltcGxlbWVudHMgU2ltcGxlVHlwZURlZmluaXRpb24gewotCQotCXByaXZhdGUgZmluYWwgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIGl0ZW1UeXBlOwotCi0JcHVibGljIEJ1aWx0aW5MaXN0VHlwZURlZmluaXRpb24oUU5hbWUgbmFtZSwgQnVpbHRpblR5cGVEZWZpbml0aW9uIGJhc2VUeXBlLCBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gaXRlbVR5cGUpIHsKLQkJc3VwZXIobmFtZSwgbnVsbCwgQ29sbGVjdGlvbi5jbGFzcywgYmFzZVR5cGUpOwotCQl0aGlzLml0ZW1UeXBlID0gaXRlbVR5cGU7Ci0JfQotCi0JcHVibGljIEJ1aWx0aW5MaXN0VHlwZURlZmluaXRpb24oU3RyaW5nIG5hbWUsIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbiBiYXNlVHlwZSwgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIGl0ZW1UeXBlKSB7Ci0JCXN1cGVyKG5hbWUsIG51bGwsIENvbGxlY3Rpb24uY2xhc3MsIGJhc2VUeXBlKTsKLQkJdGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQWJzdHJhY3QoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc2hvcnQgZ2V0VmFyaWV0eSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwdWJsaWMgU2ltcGxlVHlwZURlZmluaXRpb24gZ2V0UHJpbWl0aXZlVHlwZSgpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc2hvcnQgZ2V0QnVpbHRJbktpbmQoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldEl0ZW1UeXBlKCkgewotCQlyZXR1cm4gaXRlbVR5cGU7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0TWVtYmVyVHlwZXMoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHNob3J0IGdldE9yZGVyZWQoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RmluaXRlKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRCb3VuZGVkKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXROdW1lcmljKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL2J1aWx0aW4vQnVpbHRpblR5cGVEZWZpbml0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL2J1aWx0aW4vQnVpbHRpblR5cGVEZWZpbml0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZWQzM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9idWlsdGluL0J1aWx0aW5UeXBlRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLmJ1aWx0aW47Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5YUGF0aEVycm9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbiBpbXBsZW1lbnRzIEF0b21pY1R5cGVEZWZpbml0aW9uICB7Ci0JCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAKLQkKLQlwcml2YXRlIGZpbmFsIFFOYW1lIG5hbWU7Ci0JcHJpdmF0ZSBmaW5hbCBDbGFzcyBpbXBsZW1lbnRhdGlvbkNsYXNzOwotCXByaXZhdGUgZmluYWwgQ2xhc3MgbmF0aXZlVHlwZTsKLQlwcml2YXRlIGZpbmFsIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbiBiYXNlVHlwZTsKLQlwcml2YXRlIGZpbmFsIE1ldGhvZCBjb25zdHJ1Y3Rvck1ldGhvZDsKLQlwcml2YXRlIGZpbmFsIE1ldGhvZCBjb25zdHJ1Y3RvckZyb21OYXRpdmVNZXRob2Q7Ci0KLQlwdWJsaWMgQnVpbHRpblR5cGVEZWZpbml0aW9uKFFOYW1lIG5hbWUsIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbiBiYXNlVHlwZSkgewotCQl0aGlzKG5hbWUsIG51bGwsIG51bGwsIGJhc2VUeXBlKTsKLQl9Ci0KLQlwdWJsaWMgQnVpbHRpblR5cGVEZWZpbml0aW9uKFN0cmluZyBuYW1lLCBCdWlsdGluVHlwZURlZmluaXRpb24gYmFzZVR5cGUpIHsKLQkJdGhpcyhuYW1lLCBudWxsLCBudWxsLCBiYXNlVHlwZSk7Ci0JfQotCi0JcHVibGljIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbihRTmFtZSBuYW1lLCBDbGFzcyBpbXBsZW1lbnRhdGlvbkNsYXNzLCBDbGFzcyBuYXRpdmVUeXBlLCBCdWlsdGluVHlwZURlZmluaXRpb24gYmFzZVR5cGUpIHsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJdGhpcy5pbXBsZW1lbnRhdGlvbkNsYXNzID0gaW1wbGVtZW50YXRpb25DbGFzczsKLQkJdGhpcy5uYXRpdmVUeXBlID0gbmF0aXZlVHlwZTsKLQkJdGhpcy5iYXNlVHlwZSA9IGJhc2VUeXBlOwotCQkKLQkJTWV0aG9kIG0gPSBudWxsOwotCQl0cnkgewotCQkJbSA9IGltcGxlbWVudGF0aW9uQ2xhc3MgIT0gbnVsbCA/IGltcGxlbWVudGF0aW9uQ2xhc3MuZ2V0TWV0aG9kKCJjb25zdHJ1Y3RvciIsIFJlc3VsdFNlcXVlbmNlLmNsYXNzKSA6IG51bGw7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotCQl9Ci0JCXRoaXMuY29uc3RydWN0b3JNZXRob2QgPSBtOwotCi0JCW0gPSBudWxsOwotCQl0cnkgewotCQkJbSA9IGltcGxlbWVudGF0aW9uQ2xhc3MgIT0gbnVsbCA/IGltcGxlbWVudGF0aW9uQ2xhc3MuZ2V0TWV0aG9kKCJjb25zdHJ1Y3RvciIsIG5hdGl2ZVR5cGUpIDogbnVsbDsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBXZSdsbCBsaXZlCi0JCX0KLQkJdGhpcy5jb25zdHJ1Y3RvckZyb21OYXRpdmVNZXRob2QgPSBtOwotCi0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNBYnN0cmFjdCgpIHsKLQkJcmV0dXJuIGltcGxlbWVudGF0aW9uQ2xhc3MgPT0gbnVsbDsKLQl9Ci0JCi0JcHVibGljIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbihTdHJpbmcgbmFtZSwgQ2xhc3MgaW1wbGVtZW50YXRpb25DbGFzcywgQ2xhc3MgbmF0aXZlVHlwZSwgQnVpbHRpblR5cGVEZWZpbml0aW9uIGJhc2VUeXBlKSB7Ci0JCXRoaXMobmV3IFFOYW1lKFhTX05TLCBuYW1lKSwgaW1wbGVtZW50YXRpb25DbGFzcywgbmF0aXZlVHlwZSwgYmFzZVR5cGUpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZS5nZXRMb2NhbFBhcnQoKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0QmFzZVR5cGUoKSB7Ci0JCXJldHVybiBiYXNlVHlwZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVkRnJvbVR5cGUoVHlwZURlZmluaXRpb24gYW5jZXN0b3JUeXBlLCBzaG9ydCBkZXJpdmF0aW9uTWV0aG9kKSB7Ci0JCWlmIChhbmNlc3RvclR5cGUgPT0gdGhpcykgcmV0dXJuIHRydWU7Ci0JCWlmIChiYXNlVHlwZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0JCXJldHVybiBiYXNlVHlwZS5kZXJpdmVkRnJvbVR5cGUoYW5jZXN0b3JUeXBlLCBkZXJpdmF0aW9uTWV0aG9kKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVkRnJvbShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSwgc2hvcnQgZGVyaXZhdGlvbk1ldGhvZCkgewotCQlpZiAobmFtZXNwYWNlLmVxdWFscyhnZXROYW1lc3BhY2UoKSkgJiYgbmFtZS5lcXVhbHMoZ2V0TmFtZSgpKSkgcmV0dXJuIHRydWU7Ci0JCQotCQlpZiAoYmFzZVR5cGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIGJhc2VUeXBlLmRlcml2ZWRGcm9tKG5hbWVzcGFjZSwgbmFtZSwgZGVyaXZhdGlvbk1ldGhvZCk7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0U2ltcGxlVHlwZXMoQXR0ciBhdHRyKSB7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRTaW1wbGVUeXBlcyhFbGVtZW50IGF0dHIpIHsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5BdG9taWNUeXBlRGVmaW5pdGlvbiNjb25zdHJ1Y3Qob3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlKQotCSAqLwotCXB1YmxpYyBTaW5nbGVJdGVtU2VxdWVuY2UgY29uc3RydWN0KFJlc3VsdFNlcXVlbmNlIHJzKSB7Ci0JCXRyeSB7Ci0JCQlpZiAoaW1wbGVtZW50YXRpb25DbGFzcyA9PSBudWxsKSB0aHJvdyBuZXcgWFBhdGhFcnJvcigiVHlwZSAiICsgZ2V0TmFtZSgpICsgIiBpcyBhYnN0cmFjdCEiKTsKLQkJCXJldHVybiAoU2luZ2xlSXRlbVNlcXVlbmNlKWNvbnN0cnVjdG9yTWV0aG9kLmludm9rZShudWxsLCBuZXcgT2JqZWN0W10geyBycyB9KTsKLQkJfQotCQljYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQkJfQotCQljYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgU2luZ2xlSXRlbVNlcXVlbmNlIGNvbnN0cnVjdE5hdGl2ZShPYmplY3Qgb2JqKSB7Ci0JCXRyeSB7Ci0JCQlpZiAoY29uc3RydWN0b3JGcm9tTmF0aXZlTWV0aG9kID09IG51bGwpIHRocm93IG5ldyBYUGF0aEVycm9yKCJUeXBlICIgKyBnZXROYW1lKCkgKyAiIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBmcm9tIG5hdGl2ZSBvYmplY3QhIik7Ci0JCQlyZXR1cm4gKFNpbmdsZUl0ZW1TZXF1ZW5jZSljb25zdHJ1Y3RvckZyb21OYXRpdmVNZXRob2QuaW52b2tlKG51bGwsIG5ldyBPYmplY3RbXSB7IG9iaiB9KTsKLQkJfQotCQljYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQkJfQotCQljYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgQ2xhc3MgZ2V0TmF0aXZlVHlwZSgpIHsKLQkJcmV0dXJuIG5hdGl2ZVR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9idWlsdGluL0J1aWx0aW5UeXBlTGlicmFyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9idWlsdGluL0J1aWx0aW5UeXBlTGlicmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2IwMjMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9CdWlsdGluVHlwZUxpYnJhcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5idWlsdGluOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLkFueUF0b21pY1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0FueVVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCYXNlNjRCaW5hcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTQm9vbGVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNCeXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0R1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0VudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNGbG9hdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHRGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0dNb250aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNHTW9udGhEYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTR1llYXJNb250aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNIZXhCaW5hcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSUQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSURSRUY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTSW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTG9uZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOQ05hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTk1UT0tFTjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05lZ2F0aXZlSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNOb25OZWdhdGl2ZUludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTTm9uUG9zaXRpdmVJbnRlZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU05vdGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Bvc2l0aXZlSW50ZWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTaG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNVbnNpZ25lZEJ5dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRJbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW5zaWduZWRMb25nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1Vuc2lnbmVkU2hvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTWWVhck1vbnRoRHVyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIFRoaXMgdHlwZSBjYXB0dXJlcyBhbGwgb2YgdGhlIGJ1aWx0LWluIFhQYXRoIDIuMCB0eXBlcywgYXMgZGVmaW5lZCBpbiBGJk8gc3BlY2lmaWNhdGlvbi4KLSAqIGh0dHA6Ly93d3cudzMub3JnL1RSL3hxdWVyeS1vcGVyYXRvcnMvI2RhdGF0eXBlcwotICovCi1wdWJsaWMgY2xhc3MgQnVpbHRpblR5cGVMaWJyYXJ5IHsKLQkvLyBUaGlzIHR5cGUgY2FwdHVyZXMgYWxsIG9mIHRoZSBidWlsdC1pbiBYUGF0aCAyLjAgdHlwZXMsIGFzIGRlZmluZWQgaW4gRiZPIHNwZWNpZmljYXRpb24uCi0JLy8gaHR0cDovL3d3dy53My5vcmcvVFIveHF1ZXJ5LW9wZXJhdG9ycy8jZGF0YXR5cGVzCi0JCi0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluVHlwZURlZmluaXRpb24gWFNfQU5ZVFlQRSA9IG5ldyBCdWlsdGluVHlwZURlZmluaXRpb24oImFueVR5cGUiLCBudWxsKTsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluVHlwZURlZmluaXRpb24gWFNfVU5UWVBFRCA9IG5ldyBCdWlsdGluVHlwZURlZmluaXRpb24oInVudHlwZWQiLCBYU19BTllUWVBFKTsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluVHlwZURlZmluaXRpb24gWFNfQU5ZU0lNUExFVFlQRSA9IG5ldyBCdWlsdGluVHlwZURlZmluaXRpb24oImFueVNpbXBsZVR5cGUiLCBYU19BTllUWVBFKTsKLQkJCS8vCVN1YnR5cGVzIG9mIHVzZXItZGVmaW5lZCBsaXN0IGFuZCB1bmlvbiB0eXBlcwotCQkJLy8JeHM6SURSRUZTCi0JCQkvLwl4czpOTVRPS0VOUwotCQkJLy8JeHM6RU5USVRJRVMKLQkJCS8vCXhzOmFueUF0b21pY1R5cGUKLQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0FOWUFUT01JQ1RZUEUgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJhbnlBdG9taWNUeXBlIiwgQW55QXRvbWljVHlwZS5jbGFzcywgT2JqZWN0LmNsYXNzLCBYU19BTllTSU1QTEVUWVBFKTsKLQkJCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX1VOVFlQRURBVE9NSUMgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJ1bnR5cGVkQXRvbWljIiwgbnVsbCwgU3RyaW5nLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0RBVEVUSU1FID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiZGF0ZVRpbWUiLCBYU0RhdGVUaW1lLmNsYXNzLCBDYWxlbmRhci5jbGFzcyxYU19BTllBVE9NSUNUWVBFKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19EQVRFID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiZGF0ZSIsIFhTRGF0ZS5jbGFzcywgQ2FsZW5kYXIuY2xhc3MsIFhTX0FOWUFUT01JQ1RZUEUpOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX1RJTUUgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJ0aW1lIiwgWFNUaW1lLmNsYXNzLCBDYWxlbmRhci5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfRFVSQVRJT04gPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJkdXJhdGlvbiIsIFhTRHVyYXRpb24uY2xhc3MsIER1cmF0aW9uLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfWUVBUk1PTlRIRFVSQVRJT04gPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJ5ZWFyTW9udGhEdXJhdGlvbiIsIFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MsIER1cmF0aW9uLmNsYXNzLCBYU19EVVJBVElPTik7Ci0JCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0RBWVRJTUVEVVJBVElPTiA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oImRheVRpbWVEdXJhdGlvbiIsIFhTRGF5VGltZUR1cmF0aW9uLmNsYXNzLCBEdXJhdGlvbi5jbGFzcywgWFNfRFVSQVRJT04pOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0ZMT0FUID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiZmxvYXQiLCBYU0Zsb2F0LmNsYXNzLCBGbG9hdC5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfRE9VQkxFID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiZG91YmxlIiwgWFNEb3VibGUuY2xhc3MsIERvdWJsZS5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfREVDSU1BTCA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oImRlY2ltYWwiLCBYU0RlY2ltYWwuY2xhc3MsIEJpZ0RlY2ltYWwuY2xhc3MsIFhTX0FOWUFUT01JQ1RZUEUpOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19JTlRFR0VSID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiaW50ZWdlciIsIFhTSW50ZWdlci5jbGFzcywgQmlnSW50ZWdlci5jbGFzcywgWFNfREVDSU1BTCk7Ci0JCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19OT05QT1NJVElWRUlOVEVHRVIgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJub25Qb3NpdGl2ZUludGVnZXIiLCAgWFNOb25Qb3NpdGl2ZUludGVnZXIuY2xhc3MsIEJpZ0ludGVnZXIuY2xhc3MsIFhTX0lOVEVHRVIpOwotCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX05FR0FUSVZFSU5URUdFUiA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oIm5lZ2F0aXZlSW50ZWdlciIsICBYU05lZ2F0aXZlSW50ZWdlci5jbGFzcywgQmlnSW50ZWdlci5jbGFzcywgWFNfTk9OUE9TSVRJVkVJTlRFR0VSKTsKLQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0xPTkcgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJsb25nIiwgWFNMb25nLmNsYXNzLCBMb25nLmNsYXNzLCBYU19JTlRFR0VSKTsKLQkJCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19JTlQgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJpbnQiLCBYU0ludC5jbGFzcywgSW50ZWdlci5jbGFzcywgWFNfTE9ORyk7Ci0JCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX1NIT1JUID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigic2hvcnQiLCBYU1Nob3J0LmNsYXNzLCBTaG9ydC5jbGFzcywgWFNfSU5UKTsKLQkJCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0JZVEUgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJieXRlIiwgWFNCeXRlLmNsYXNzLCBCeXRlLmNsYXNzLCBYU19TSE9SVCk7Ci0JCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19OT05ORUdBVElWRUlOVEVHRVIgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJub25OZWdhdGl2ZUludGVnZXIiLCBYU05vbk5lZ2F0aXZlSW50ZWdlci5jbGFzcywgQmlnSW50ZWdlci5jbGFzcywgWFNfSU5URUdFUik7Ci0JCQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfVU5TSUdORURMT05HID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigidW5zaWduZWRMb25nIiwgWFNVbnNpZ25lZExvbmcuY2xhc3MsIEJpZ0ludGVnZXIuY2xhc3MsIFhTX05PTk5FR0FUSVZFSU5URUdFUik7Ci0JCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX1VOU0lHTkVESU5UID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigidW5zaWduZWRJbnQiLCBYU1Vuc2lnbmVkSW50LmNsYXNzLCBMb25nLmNsYXNzLCBYU19VTlNJR05FRExPTkcpOwotCQkJCQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfVU5TSUdORURTSE9SVCA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oInVuc2lnbmVkU2hvcnQiLCBYU1Vuc2lnbmVkU2hvcnQuY2xhc3MsIEludGVnZXIuY2xhc3MsIFhTX1VOU0lHTkVESU5UKTsKLQkJCQkJCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19VTlNJR05FREJZVEUgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJ1bnNpZ25lZEJ5dGUiLCBYU1Vuc2lnbmVkQnl0ZS5jbGFzcywgU2hvcnQuY2xhc3MsIFhTX1VOU0lHTkVEU0hPUlQpOwotCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX1BPU0lUSVZFSU5URUdFUiA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oInBvc2l0aXZlSW50ZWdlciIsIFhTUG9zaXRpdmVJbnRlZ2VyLmNsYXNzLCBCaWdJbnRlZ2VyLmNsYXNzLCBYU19OT05ORUdBVElWRUlOVEVHRVIpOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0dZRUFSTU9OVEggPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJnWWVhck1vbnRoIiwgWFNHWWVhck1vbnRoLmNsYXNzLCBDYWxlbmRhci5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfR1lFQVIgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJnWWVhciIsIFhTR1llYXIuY2xhc3MsIENhbGVuZGFyLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19HTU9OVEhEQVkgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJnTW9udGhEYXkiLCBYU0dNb250aERheS5jbGFzcywgQ2FsZW5kYXIuY2xhc3MsIFhTX0FOWUFUT01JQ1RZUEUpOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0dEQVkgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJnRGF5IiwgWFNHRGF5LmNsYXNzLCBDYWxlbmRhci5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfR01PTlRIID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiZ01vbnRoIiwgWFNHTW9udGguY2xhc3MsIENhbGVuZGFyLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19TVFJJTkcgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJzdHJpbmciLCBYU1N0cmluZy5jbGFzcywgU3RyaW5nLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfTk9STUFMSVpFRFNUUklORyA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oIm5vcm1hbGl6ZWRTdHJpbmciLCBYU1N0cmluZy5jbGFzcywgU3RyaW5nLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX1RPS0VOID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigidG9rZW4iLCBYU1Rva2VuLmNsYXNzLCBTdHJpbmcuY2xhc3MsIFhTX05PUk1BTElaRURTVFJJTkcpOwotCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0xBTkdVQUdFID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigibGFuZ3VhZ2UiLCBYU1Rva2VuLmNsYXNzLCBTdHJpbmcuY2xhc3MsIFhTX1RPS0VOKTsKLQkJCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19OTVRPS0VOID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiTk1UT0tFTiIsIFhTTk1UT0tFTi5jbGFzcywgU3RyaW5nLmNsYXNzLCBYU19UT0tFTik7Ci0JCQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfTkFNRSA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oIk5hbWUiLCBYU05hbWUuY2xhc3MsIFN0cmluZy5jbGFzcywgWFNfVE9LRU4pOwotCQkJCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19OQ05BTUUgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJOQ05hbWUiLCBYU05DTmFtZS5jbGFzcywgU3RyaW5nLmNsYXNzLCBYU19OQU1FKTsKLQkJCQkJCXB1YmxpYyBmaW5hbCBzdGF0aWMgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uIFhTX0lEID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiSUQiLCBYU0lELmNsYXNzLCBTdHJpbmcuY2xhc3MsIFhTX05DTkFNRSk7Ci0JCQkJCQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19JRFJFRiA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oIklEUkVGIiwgWFNJRFJFRi5jbGFzcywgU3RyaW5nLmNsYXNzLCBYU19OQ05BTUUpOwotCQkJCQkJcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfRU5USVRZID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiRU5USVRZIiwgWFNFbnRpdHkuY2xhc3MsIFN0cmluZy5jbGFzcywgWFNfTkNOQU1FKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19CT09MRUFOID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiYm9vbGVhbiIsIFhTQm9vbGVhbi5jbGFzcywgQm9vbGVhbi5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfQkFTRTY0QklOQVJZID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiYmFzZTY0QmluYXJ5IiwgWFNCYXNlNjRCaW5hcnkuY2xhc3MsIGJ5dGVbXS5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfSEVYQklOQVJZID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiaGV4QmluYXJ5IiwgWFNIZXhCaW5hcnkuY2xhc3MsIGJ5dGVbXS5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfQU5ZVVJJID0gbmV3IEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbigiYW55VVJJIiwgWFNBbnlVUkkuY2xhc3MsIFN0cmluZy5jbGFzcywgWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24gWFNfUU5BTUUgPSBuZXcgQnVpbHRpbkF0b21pY1R5cGVEZWZpbml0aW9uKCJRTmFtZSIsIFFOYW1lLmNsYXNzLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5BdG9taWNUeXBlRGVmaW5pdGlvbiBYU19OT1RBVElPTiA9IG5ldyBCdWlsdGluQXRvbWljVHlwZURlZmluaXRpb24oIk5PVEFUSU9OIiwgWFNOb3RhdGlvbi5jbGFzcywgU3RyaW5nLmNsYXNzLCBYU19BTllBVE9NSUNUWVBFKTsKLQotCS8vIFRoZXNlIGFyZSBhbHNvIHN1YnR5cGVzIG9mIGFueSB0eXBlcyAKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5MaXN0VHlwZURlZmluaXRpb24gWFNfSURSRUZTID0gbmV3IEJ1aWx0aW5MaXN0VHlwZURlZmluaXRpb24oIklEUkVGUyIsIFhTX0FOWVRZUEUsIFhTX0lEUkVGKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5MaXN0VHlwZURlZmluaXRpb24gWFNfTk1UT0tFTlMgPSBuZXcgQnVpbHRpbkxpc3RUeXBlRGVmaW5pdGlvbigiTk1UT0tFTlMiLCBYU19BTllUWVBFLCBYU19OTVRPS0VOKTsKLQlwdWJsaWMgZmluYWwgc3RhdGljIEJ1aWx0aW5MaXN0VHlwZURlZmluaXRpb24gWFNfRU5USVRJRVMgPSBuZXcgQnVpbHRpbkxpc3RUeXBlRGVmaW5pdGlvbigiRU5USVRJRVMiLCBYU19BTllUWVBFLCBYU19FTlRJVFkpOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgVHlwZU1vZGVsIEJVSUxUSU5fVFlQRVMgPSBuZXcgVHlwZU1vZGVsKCkgewotCi0JCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBsb29rdXBUeXBlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyB0eXBlTmFtZSkgewotCQkJaWYgKCEgQnVpbHRpblR5cGVEZWZpbml0aW9uLlhTX05TLmVxdWFscyhuYW1lc3BhY2UpKSByZXR1cm4gbnVsbDsKLQkJCXJldHVybiAoVHlwZURlZmluaXRpb24pIGJ1aWx0aW5UeXBlcy5nZXQodHlwZU5hbWUpOwotCQl9Ci0KLQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGxvb2t1cEVsZW1lbnREZWNsYXJhdGlvbihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgZWxlbWVudE5hbWUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGxvb2t1cEF0dHJpYnV0ZURlY2xhcmF0aW9uKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJcHJpdmF0ZSBNYXAvKjxTdHJpbmcsIEJ1aWx0aW5UeXBlRGVmaW5pdGlvbj4qLyBidWlsdGluVHlwZXMgPSBuZXcgSGFzaE1hcC8qPFN0cmluZywgQnVpbHRpblR5cGVEZWZpbml0aW9uPiovKCk7Ci0JCXsKLQkJCWFkZFR5cGUoWFNfQU5ZVFlQRSk7Ci0JCQlhZGRUeXBlKFhTX1VOVFlQRUQpOwotCQkJYWRkVHlwZShYU19BTllTSU1QTEVUWVBFKTsKLQkJCWFkZFR5cGUoWFNfQU5ZQVRPTUlDVFlQRSk7Ci0JCQkJCQkJCi0JCQlhZGRUeXBlKFhTX1VOVFlQRURBVE9NSUMpOwotCQkJCi0JCQlhZGRUeXBlKFhTX0RBVEVUSU1FKTsKLQkJCWFkZFR5cGUoWFNfREFURSk7Ci0JCQlhZGRUeXBlKFhTX1RJTUUpOwotCQkJYWRkVHlwZShYU19EVVJBVElPTik7Ci0JCQlhZGRUeXBlKFhTX1lFQVJNT05USERVUkFUSU9OKTsKLQkJCWFkZFR5cGUoWFNfREFZVElNRURVUkFUSU9OKTsKLQkJCWFkZFR5cGUoWFNfRkxPQVQpOwotCQkJYWRkVHlwZShYU19ET1VCTEUpOwotCQkJYWRkVHlwZShYU19ERUNJTUFMKTsKLQkJCWFkZFR5cGUoWFNfSU5URUdFUik7Ci0JCQlhZGRUeXBlKFhTX05PTlBPU0lUSVZFSU5URUdFUik7Ci0JCQlhZGRUeXBlKFhTX05FR0FUSVZFSU5URUdFUik7Ci0JCQlhZGRUeXBlKFhTX0xPTkcpOwotCQkJYWRkVHlwZShYU19JTlQpOwotCQkJYWRkVHlwZShYU19TSE9SVCk7Ci0JCQlhZGRUeXBlKFhTX0JZVEUpOwotCQkJYWRkVHlwZShYU19OT05ORUdBVElWRUlOVEVHRVIpOwotCQkJYWRkVHlwZShYU19VTlNJR05FRExPTkcpOwotCQkJYWRkVHlwZShYU19VTlNJR05FRElOVCk7Ci0JCQlhZGRUeXBlKFhTX1VOU0lHTkVEU0hPUlQpOwotCQkJYWRkVHlwZShYU19VTlNJR05FREJZVEUpOwotCQkJYWRkVHlwZShYU19QT1NJVElWRUlOVEVHRVIpOwotCQkJYWRkVHlwZShYU19HWUVBUk1PTlRIKTsKLQkJCWFkZFR5cGUoWFNfR1lFQVIpOwotCQkJYWRkVHlwZShYU19HTU9OVEhEQVkpOwotCQkJYWRkVHlwZShYU19HREFZKTsKLQkJCWFkZFR5cGUoWFNfR01PTlRIKTsKLQkJCWFkZFR5cGUoWFNfU1RSSU5HKTsKLQkJCWFkZFR5cGUoWFNfTk9STUFMSVpFRFNUUklORyk7Ci0JCQlhZGRUeXBlKFhTX1RPS0VOKTsKLQkJCWFkZFR5cGUoWFNfTEFOR1VBR0UpOwotCQkJYWRkVHlwZShYU19OTVRPS0VOKTsKLQkJCWFkZFR5cGUoWFNfTkFNRSk7Ci0JCQlhZGRUeXBlKFhTX05DTkFNRSk7Ci0JCQlhZGRUeXBlKFhTX0lEKTsKLQkJCWFkZFR5cGUoWFNfSURSRUYpOwotCQkJYWRkVHlwZShYU19FTlRJVFkpOwotCQkJYWRkVHlwZShYU19CT09MRUFOKTsKLQkJCWFkZFR5cGUoWFNfQkFTRTY0QklOQVJZKTsKLQkJCWFkZFR5cGUoWFNfSEVYQklOQVJZKTsKLQkJCWFkZFR5cGUoWFNfQU5ZVVJJKTsKLQkJCWFkZFR5cGUoWFNfUU5BTUUpOwotCQkJYWRkVHlwZShYU19OT1RBVElPTik7Ci0JCQlhZGRUeXBlKFhTX0lEUkVGUyk7Ci0JCQlhZGRUeXBlKFhTX05NVE9LRU5TKTsKLQkJCWFkZFR5cGUoWFNfRU5USVRJRVMpOwotCQl9Ci0KLQkJcHJpdmF0ZSB2b2lkIGFkZFR5cGUoQnVpbHRpblR5cGVEZWZpbml0aW9uIGJ0ZCkgeyBidWlsdGluVHlwZXMucHV0KGJ0ZC5nZXROYW1lKCksIGJ0ZCk7IH0KLQotCQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZShOb2RlIG5vZGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfTsKLQkKLQkvLyBOb3QgdHlwZXMgdW5kZXIgWE1MIFNjaGVtYSBuYW1lc3BhY2UKLS8vCWl0ZW0KLS8vCXhzOmFueUF0b21pY1R5cGUKLS8vCW5vZGUKLS8vCWF0dHJpYnV0ZQotLy8JdXNlci1kZWZpbmVkIGF0dHJpYnV0ZSB0eXBlcwotLy8JY29tbWVudAotLy8JZG9jdW1lbnQKLS8vCXVzZXItZGVmaW5lZCBkb2N1bWVudCB0eXBlcwotLy8JZWxlbWVudAotLy8JdXNlci1kZWZpbmVkIGVsZW1lbnQgdHlwZXMKLS8vCXByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24KLS8vCXRleHQKLQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9idWlsdGluL1NpbmdsZUl0ZW1TZXF1ZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy9idWlsdGluL1NpbmdsZUl0ZW1TZXF1ZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTFiNDQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvYnVpbHRpbi9TaW5nbGVJdGVtU2VxdWVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZTsKLQotcHVibGljIGludGVyZmFjZSBTaW5nbGVJdGVtU2VxdWVuY2UgZXh0ZW5kcyBJdGVtLCBSZXN1bHRTZXF1ZW5jZSB7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvdXNlcmRlZmluZWQvVXNlckRlZmluZWRDdHJMaWJyYXJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3VzZXJkZWZpbmVkL1VzZXJEZWZpbmVkQ3RyTGlicmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzgwNjVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMvdXNlcmRlZmluZWQvVXNlckRlZmluZWRDdHJMaWJyYXJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy51c2VyZGVmaW5lZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC5mdW5jdGlvbi5Db25zdHJ1Y3RvckZMOwotCi1wdWJsaWMgY2xhc3MgVXNlckRlZmluZWRDdHJMaWJyYXJ5IGV4dGVuZHMgQ29uc3RydWN0b3JGTCB7Ci0KLQlwdWJsaWMgVXNlckRlZmluZWRDdHJMaWJyYXJ5KFN0cmluZyBucykgewotCQlzdXBlcihucyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3hlcmNlcy9Db21wbGV4WGVyY2VzVHlwZURlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMveGVyY2VzL0NvbXBsZXhYZXJjZXNUeXBlRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmZlNGI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMveGVyY2VzL0NvbXBsZXhYZXJjZXNUeXBlRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMueGVyY2VzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5Db21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDb21wbGV4WGVyY2VzVHlwZURlZmluaXRpb24gZXh0ZW5kcyBYZXJjZXNUeXBlRGVmaW5pdGlvbiBpbXBsZW1lbnRzIENvbXBsZXhUeXBlRGVmaW5pdGlvbiB7Ci0KLQlwcml2YXRlIGZpbmFsIFhTQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLQotCXB1YmxpYyBDb21wbGV4WGVyY2VzVHlwZURlZmluaXRpb24oWFNDb21wbGV4VHlwZURlZmluaXRpb24gYWQpIHsKLQkJc3VwZXIoYWQpOwotCQl0aGlzLmNvbXBsZXhUeXBlRGVmaW5pdGlvbiA9IGFkOwotCX0KLQotCXB1YmxpYyBTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRTaW1wbGVUeXBlKCkgewotCQlYU1NpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSBjb21wbGV4VHlwZURlZmluaXRpb24uZ2V0U2ltcGxlVHlwZSgpOwotCQlpZiAoc2ltcGxlVHlwZSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gY3JlYXRlVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0JCX0gZWxzZSByZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc2hvcnQgZ2V0RGVyaXZhdGlvbk1ldGhvZCgpIHsKLQkJLy8gVE9ETzogTWFwIGl0Ci0JCXJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb24uZ2V0RGVyaXZhdGlvbk1ldGhvZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldEFic3RyYWN0KCkgewotCQlyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uLmdldEFic3RyYWN0KCk7Ci0JfQotCi0JcHVibGljIHNob3J0IGdldENvbnRlbnRUeXBlKCkgewotCQlyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNQcm9oaWJpdGVkU3Vic3RpdHV0aW9uKHNob3J0IHJlc3RyaWN0aW9uKSB7Ci0JCXJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb24uaXNQcm9oaWJpdGVkU3Vic3RpdHV0aW9uKHJlc3RyaWN0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc2hvcnQgZ2V0UHJvaGliaXRlZFN1YnN0aXR1dGlvbnMoKSB7Ci0JCXJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb24uZ2V0UHJvaGliaXRlZFN1YnN0aXR1dGlvbnMoKTsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3MgZ2V0TmF0aXZlVHlwZSgpIHsKLQkJcmV0dXJuIE5vZGVMaXN0LmNsYXNzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy94ZXJjZXMvU2ltcGxlWGVyY2VzVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy94ZXJjZXMvU2ltcGxlWGVyY2VzVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVhNGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMveGVyY2VzL1NpbXBsZVhlcmNlc1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLnhlcmNlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuSW52YWxpZERhdGF0eXBlVmFsdWVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi5WYWxpZGF0ZWRJbmZvOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5kdi5YU1NpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC52YWxpZGF0aW9uLlZhbGlkYXRpb25TdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5QcmltaXRpdmVUeXBlOwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlWGVyY2VzVHlwZSBleHRlbmRzIFNpbXBsZVhlcmNlc1R5cGVEZWZpbml0aW9uIGltcGxlbWVudHMgUHJpbWl0aXZlVHlwZSB7Ci0KLQlwcml2YXRlIGZpbmFsIFhTU2ltcGxlVHlwZSBzaW1wbGVUeXBlOwotCi0JcHVibGljIFNpbXBsZVhlcmNlc1R5cGUoWFNTaW1wbGVUeXBlIGFkKSB7Ci0JCXN1cGVyKGFkKTsKLQkJdGhpcy5zaW1wbGVUeXBlID0gYWQ7Ci0JfQotCi0JcHVibGljIHNob3J0IGdldFByaW1pdGl2ZUtpbmQoKSB7Ci0JCXJldHVybiBzaW1wbGVUeXBlLmdldFByaW1pdGl2ZUtpbmQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgY29udGVudCkgewotCQlib29sZWFuIGlzVmFsdWVWYWxpZCA9IHRydWU7Ci0JCXRyeSB7Ci0JCQlWYWxpZGF0ZWRJbmZvIHZhbGlkYXRlZEluZm8gPSBuZXcgVmFsaWRhdGVkSW5mbygpOwotCQkJVmFsaWRhdGlvbkNvbnRleHQgdmFsaWRhdGlvblN0YXRlID0gbmV3IFZhbGlkYXRpb25TdGF0ZSgpOwotICAgICAJCQotCQkJLy8gYXR0ZW1wdCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgd2l0aCB0aGUgc2ltcGxlVHlwZQotCQkJc2ltcGxlVHlwZS52YWxpZGF0ZShjb250ZW50LCB2YWxpZGF0aW9uU3RhdGUsIHZhbGlkYXRlZEluZm8pOwotCSAgICB9IAotCQljYXRjaChJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiBleCl7Ci0JCQlpc1ZhbHVlVmFsaWQgPSBmYWxzZTsKLQkgICAgfQotCQlyZXR1cm4gaXNWYWx1ZVZhbGlkOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRXF1YWwoT2JqZWN0IHZhbHVlMSwgT2JqZWN0IHZhbHVlMikgewotCQlyZXR1cm4gc2ltcGxlVHlwZS5pc0VxdWFsKHZhbHVlMSwgdmFsdWUyKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0lEVHlwZSgpIHsKLQkJcmV0dXJuIHNpbXBsZVR5cGUuaXNJRFR5cGUoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZU5hdGl2ZShPYmplY3QgY29udGVudCkgewotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSXRlbSBjb25zdHJ1Y3QoT2JqZWN0IGNvbnRlbnQpIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImNvbnN0cnVjdCBub3Qgc3VwcG9ydGVkIGZvciBYZXJjZXMgdHlwZXMiKTsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3MgZ2V0SW50ZXJmYWNlQ2xhc3MoKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnZXRJbnRlcmZhY2VDbGFzcyBub3Qgc3VwcG9ydGVkIGZvciBYZXJjZXMgdHlwZXMiKTsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3MgZ2V0TmF0aXZlVHlwZSgpIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdldE5hdGl2ZVR5cGUgbm90IHN1cHBvcnRlZCBmb3IgWGVyY2VzIHR5cGVzIik7Ci0JfQotCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3hlcmNlcy9TaW1wbGVYZXJjZXNUeXBlRGVmaW5pdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy94ZXJjZXMvU2ltcGxlWGVyY2VzVHlwZURlZmluaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhY2QwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3hlcmNlcy9TaW1wbGVYZXJjZXNUeXBlRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMueGVyY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU09iamVjdExpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5TaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlWGVyY2VzVHlwZURlZmluaXRpb24gZXh0ZW5kcyBYZXJjZXNUeXBlRGVmaW5pdGlvbiBpbXBsZW1lbnRzIFNpbXBsZVR5cGVEZWZpbml0aW9uIHsKLQotCXByaXZhdGUgZmluYWwgWFNTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotCXB1YmxpYyBTaW1wbGVYZXJjZXNUeXBlRGVmaW5pdGlvbihYU1NpbXBsZVR5cGVEZWZpbml0aW9uIGFkKSB7Ci0JCXN1cGVyKGFkKTsKLQkJdGhpcy5zaW1wbGVUeXBlRGVmaW5pdGlvbiA9IGFkOwotCX0KLQotCXB1YmxpYyBzaG9ydCBnZXRWYXJpZXR5KCkgewotCQlyZXR1cm4gc2ltcGxlVHlwZURlZmluaXRpb24uZ2V0VmFyaWV0eSgpOwotCX0KLQotCXB1YmxpYyBTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRQcmltaXRpdmVUeXBlKCkgewotCQlyZXR1cm4gY3JlYXRlVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZURlZmluaXRpb24uZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQl9Ci0KLQlwdWJsaWMgc2hvcnQgZ2V0QnVpbHRJbktpbmQoKSB7Ci0JCXJldHVybiBzaW1wbGVUeXBlRGVmaW5pdGlvbi5nZXRCdWlsdEluS2luZCgpOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRJdGVtVHlwZSgpIHsKLQkJcmV0dXJuIGNyZWF0ZVR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGVEZWZpbml0aW9uLmdldEl0ZW1UeXBlKCkpOwotCX0KLQotCXB1YmxpYyBMaXN0Lyo8U2ltcGxlVHlwZURlZmluaXRpb24+Ki8gZ2V0TWVtYmVyVHlwZXMoKSB7Ci0JCVhTT2JqZWN0TGlzdCB4c01lbWJlclR5cGVzID0gc2ltcGxlVHlwZURlZmluaXRpb24uZ2V0TWVtYmVyVHlwZXMoKTsKLQkJTGlzdC8qPFNpbXBsZVR5cGVEZWZpbml0aW9uPiovIG1lbWJlclR5cGVzID0gbmV3IExpbmtlZExpc3QvKjxTaW1wbGVUeXBlRGVmaW5pdGlvbj4qLygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHhzTWVtYmVyVHlwZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJbWVtYmVyVHlwZXMuYWRkKGNyZWF0ZVR5cGVEZWZpbml0aW9uKChYU1NpbXBsZVR5cGVEZWZpbml0aW9uKSB4c01lbWJlclR5cGVzLml0ZW0oaSkpKTsKLQkJfQotCQlyZXR1cm4gbWVtYmVyVHlwZXM7Ci0JfQotCi0JcHVibGljIHNob3J0IGdldE9yZGVyZWQoKSB7Ci0JCXJldHVybiBzaW1wbGVUeXBlRGVmaW5pdGlvbi5nZXRPcmRlcmVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RmluaXRlKCkgewotCQlyZXR1cm4gc2ltcGxlVHlwZURlZmluaXRpb24uZ2V0RmluaXRlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0Qm91bmRlZCgpIHsKLQkJcmV0dXJuIHNpbXBsZVR5cGVEZWZpbml0aW9uLmdldEJvdW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXROdW1lcmljKCkgewotCQlyZXR1cm4gc2ltcGxlVHlwZURlZmluaXRpb24uZ2V0TnVtZXJpYygpOwotCX0KLQotCXB1YmxpYyBDbGFzcyBnZXROYXRpdmVUeXBlKCkgewotCQlyZXR1cm4gTm9kZS5jbGFzczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMveGVyY2VzL1hlcmNlc1R5cGVEZWZpbml0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3R5cGVzL3hlcmNlcy9YZXJjZXNUeXBlRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzY2OTNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMveGVyY2VzL1hlcmNlc1R5cGVEZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMueGVyY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uUFNWSUF0dHJOU0ltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLlBTVklFbGVtZW50TlNJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuWFNTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlNob3J0TGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1NpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLnR5cGVzeXN0ZW0uVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWGVyY2VzVHlwZURlZmluaXRpb24gaW1wbGVtZW50cyBUeXBlRGVmaW5pdGlvbiB7Ci0KLQlwcml2YXRlIGZpbmFsIFhTVHlwZURlZmluaXRpb24geHNUeXBlRGVmaW5pdGlvbjsKLQlwcml2YXRlIFhlcmNlc1R5cGVEZWZpbml0aW9uIGJhc2VUeXBlID0gbnVsbDsKLQkKLQlwdWJsaWMgWGVyY2VzVHlwZURlZmluaXRpb24oWFNUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKSB7Ci0JCWlmICh0eXBlRGVmID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInR5cGVEZWYiKTsKLQkJeHNUeXBlRGVmaW5pdGlvbiA9IHR5cGVEZWY7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKSB7Ci0JCXJldHVybiB4c1R5cGVEZWZpbml0aW9uLmdldE5hbWVzcGFjZSgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIHhzVHlwZURlZmluaXRpb24uZ2V0TmFtZSgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ29tcGxleFR5cGUoKSB7Ci0JCXJldHVybiAoeHNUeXBlRGVmaW5pdGlvbi5nZXRUeXBlQ2F0ZWdvcnkoKSAmIFhTQ29uc3RhbnRzLlBBUlRJQ0xFKSAhPSAwOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRCYXNlVHlwZSgpIHsKLQkJLy8gVE9ETzogQ2FjaGUgcGVyLW1vZGVsPz8KLQkJaWYgKGJhc2VUeXBlID09IG51bGwgJiYgeHNUeXBlRGVmaW5pdGlvbi5nZXRCYXNlVHlwZSgpICE9IG51bGwpCi0JCQliYXNlVHlwZSA9IGNyZWF0ZVR5cGVEZWZpbml0aW9uKHhzVHlwZURlZmluaXRpb24uZ2V0QmFzZVR5cGUoKSk7Ci0JCXJldHVybiBiYXNlVHlwZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVkRnJvbVR5cGUoVHlwZURlZmluaXRpb24gYW5jZXN0b3JUeXBlLAotCQkJc2hvcnQgZGVyaXZhdGlvbk1ldGhvZCkgewotCi0JCWlmIChhbmNlc3RvclR5cGUgaW5zdGFuY2VvZiBYZXJjZXNUeXBlRGVmaW5pdGlvbikgewotCQkJWGVyY2VzVHlwZURlZmluaXRpb24geGVyY2VzVHlwZSA9IChYZXJjZXNUeXBlRGVmaW5pdGlvbilhbmNlc3RvclR5cGU7Ci0JCQlyZXR1cm4geHNUeXBlRGVmaW5pdGlvbi5kZXJpdmVkRnJvbVR5cGUoeGVyY2VzVHlwZS54c1R5cGVEZWZpbml0aW9uLCBtYXBGbGFncyhkZXJpdmF0aW9uTWV0aG9kKSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4geHNUeXBlRGVmaW5pdGlvbi5kZXJpdmVkRnJvbShhbmNlc3RvclR5cGUuZ2V0TmFtZXNwYWNlKCksIGFuY2VzdG9yVHlwZS5nZXROYW1lKCksIG1hcEZsYWdzKGRlcml2YXRpb25NZXRob2QpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBib29sZWFuIGRlcml2ZWRGcm9tKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lLAotCQkJc2hvcnQgZGVyaXZhdGlvbk1ldGhvZCkgewotCi0JCXJldHVybiB4c1R5cGVEZWZpbml0aW9uLmRlcml2ZWRGcm9tKG5hbWVzcGFjZSwgbmFtZSwgbWFwRmxhZ3MoZGVyaXZhdGlvbk1ldGhvZCkpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHNob3J0IG1hcEZsYWdzKHNob3J0IG1vZGVsRmxhZ3MpIHsKLQkJc2hvcnQgeGVyY2VzRmxhZ3MgPSAwOwotCQlpZiAoKG1vZGVsRmxhZ3MgJiBUeXBlRGVmaW5pdGlvbi5ERVJJVkFUSU9OX05PTkUpICE9IDApIHhlcmNlc0ZsYWdzIHw9IFhTQ29uc3RhbnRzLkRFUklWQVRJT05fTk9ORTsKLQkJaWYgKChtb2RlbEZsYWdzICYgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9FWFRFTlNJT04pICE9IDApIHhlcmNlc0ZsYWdzIHw9IFhTQ29uc3RhbnRzLkRFUklWQVRJT05fRVhURU5TSU9OOyAKLQkJaWYgKChtb2RlbEZsYWdzICYgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9SRVNUUklDVElPTikgIT0gMCkgeGVyY2VzRmxhZ3MgfD0gWFNDb25zdGFudHMuREVSSVZBVElPTl9SRVNUUklDVElPTjsKLQkJaWYgKChtb2RlbEZsYWdzICYgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9TVUJTVElUVVRJT04pICE9IDApIHhlcmNlc0ZsYWdzIHw9IFhTQ29uc3RhbnRzLkRFUklWQVRJT05fU1VCU1RJVFVUSU9OOwotCQlpZiAoKG1vZGVsRmxhZ3MgJiBUeXBlRGVmaW5pdGlvbi5ERVJJVkFUSU9OX1VOSU9OKSAhPSAwKSB4ZXJjZXNGbGFncyB8PSBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX1VOSU9OOyAgICAKLQkJaWYgKChtb2RlbEZsYWdzICYgVHlwZURlZmluaXRpb24uREVSSVZBVElPTl9MSVNUKSAhPSAwKSB4ZXJjZXNGbGFncyB8PSBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX0xJU1Q7Ci0KLQkJcmV0dXJuIHhlcmNlc0ZsYWdzOwotCX0KLQkKLQlwdWJsaWMgTGlzdC8qPFNob3J0PiovIGdldFNpbXBsZVR5cGVzKEF0dHIgYXR0cikgewotCQlQU1ZJQXR0ck5TSW1wbCBwc3ZpQXR0cj0gKFBTVklBdHRyTlNJbXBsKWF0dHI7Ci0JCXJldHVybiBtYXBMaXN0KHBzdmlBdHRyLmdldEl0ZW1WYWx1ZVR5cGVzKCkpOwotCX0KLQotCXB1YmxpYyBMaXN0Lyo8U2hvcnQ+Ki8gZ2V0U2ltcGxlVHlwZXMoRWxlbWVudCBlbGVtZW50KSB7Ci0JCVBTVklFbGVtZW50TlNJbXBsIHBzdmlFbGVtZW50PSAoUFNWSUVsZW1lbnROU0ltcGwpZWxlbWVudDsKLQkJcmV0dXJuIG1hcExpc3QocHN2aUVsZW1lbnQuZ2V0SXRlbVZhbHVlVHlwZXMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0Lyo8U2hvcnQ+Ki8gbWFwTGlzdChTaG9ydExpc3QgdmFsdWVUeXBlcykgewotCQlpZiAodmFsdWVUeXBlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkJTGlzdC8qPFNob3J0PiovIHR5cGVzID0gbmV3IExpbmtlZExpc3QvKjxTaG9ydD4qLygpOwotCQlpbnQgbGltaXQgPSB2YWx1ZVR5cGVzLmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHR5cGVzLmFkZChTaG9ydC52YWx1ZU9mKHZhbHVlVHlwZXMuaXRlbShpKSkpOwotCQlyZXR1cm4gdHlwZXM7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgWGVyY2VzVHlwZURlZmluaXRpb24gY3JlYXRlVHlwZURlZmluaXRpb24oWFNUeXBlRGVmaW5pdGlvbiBhZCkgewotCQlpZiAoYWQgaW5zdGFuY2VvZiBYU1NpbXBsZVR5cGUpIHJldHVybiBuZXcgU2ltcGxlWGVyY2VzVHlwZSgoWFNTaW1wbGVUeXBlKWFkKTsKLQkJZWxzZSBpZiAoYWQgaW5zdGFuY2VvZiBYU1NpbXBsZVR5cGVEZWZpbml0aW9uKSByZXR1cm4gbmV3IFNpbXBsZVhlcmNlc1R5cGVEZWZpbml0aW9uKChYU1NpbXBsZVR5cGVEZWZpbml0aW9uKWFkKTsKLQkJZWxzZSByZXR1cm4gbmV3IENvbXBsZXhYZXJjZXNUeXBlRGVmaW5pdGlvbigoWFNDb21wbGV4VHlwZURlZmluaXRpb24pYWQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU2ltcGxlWGVyY2VzVHlwZURlZmluaXRpb24gY3JlYXRlVHlwZURlZmluaXRpb24oWFNTaW1wbGVUeXBlRGVmaW5pdGlvbiBhZCkgewotCQlpZiAoYWQgaW5zdGFuY2VvZiBYU1NpbXBsZVR5cGUpIHJldHVybiBuZXcgU2ltcGxlWGVyY2VzVHlwZSgoWFNTaW1wbGVUeXBlKWFkKTsKLQkJcmV0dXJuIG5ldyBTaW1wbGVYZXJjZXNUeXBlRGVmaW5pdGlvbigoWFNTaW1wbGVUeXBlRGVmaW5pdGlvbilhZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBDb21wbGV4WGVyY2VzVHlwZURlZmluaXRpb24gY3JlYXRlVHlwZURlZmluaXRpb24oWFNDb21wbGV4VHlwZURlZmluaXRpb24gYWQpIHsKLQkJcmV0dXJuIG5ldyBDb21wbGV4WGVyY2VzVHlwZURlZmluaXRpb24oKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKWFkKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdHlwZXMveGVyY2VzL1hlcmNlc1R5cGVNb2RlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy94ZXJjZXMvWGVyY2VzVHlwZU1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMzY0ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC90eXBlcy94ZXJjZXMvWGVyY2VzVHlwZU1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy54ZXJjZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5FbGVtZW50UFNWSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5JdGVtUFNWSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0F0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkudHlwZXN5c3RlbS5UeXBlTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFhlcmNlc1R5cGVNb2RlbCBpbXBsZW1lbnRzIFR5cGVNb2RlbCB7Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBYU01vZGVsIF9zY2hlbWE7Ci0KLQlwdWJsaWMgWGVyY2VzVHlwZU1vZGVsKERvY3VtZW50IGRvYykgewotCQlfc2NoZW1hID0gKChFbGVtZW50UFNWSSkgZG9jLmdldERvY3VtZW50RWxlbWVudCgpKS5nZXRTY2hlbWFJbmZvcm1hdGlvbigpOwotCX0KLQotCXB1YmxpYyBYZXJjZXNUeXBlTW9kZWwoWFNNb2RlbCBtb2RlbCkgewotCQlfc2NoZW1hID0gbW9kZWw7Ci0JfQotCi0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gbG9va3VwVHlwZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgdHlwZU5hbWUpIHsKLQkJWFNUeXBlRGVmaW5pdGlvbiBhZCA9IF9zY2hlbWEuZ2V0VHlwZURlZmluaXRpb24odHlwZU5hbWUsIG5hbWVzcGFjZSk7Ci0KLQkJcmV0dXJuIFhlcmNlc1R5cGVEZWZpbml0aW9uLmNyZWF0ZVR5cGVEZWZpbml0aW9uKGFkKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gbG9va3VwRWxlbWVudERlY2xhcmF0aW9uKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBlbGVtZW50TmFtZSkgewotCQlYU0VsZW1lbnREZWNsYXJhdGlvbiBhZCA9IF9zY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnROYW1lLCBuYW1lc3BhY2UpOwotCi0JCXJldHVybiBYZXJjZXNUeXBlRGVmaW5pdGlvbi5jcmVhdGVUeXBlRGVmaW5pdGlvbihhZC5nZXRUeXBlRGVmaW5pdGlvbigpKTsKLQl9Ci0KLQlwdWJsaWMgVHlwZURlZmluaXRpb24gbG9va3VwQXR0cmlidXRlRGVjbGFyYXRpb24oU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpIHsKLQkJWFNBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhZCA9IF9zY2hlbWEuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oYXR0cmlidXRlTmFtZSwgbmFtZXNwYWNlKTsKLQotCQlyZXR1cm4gWGVyY2VzVHlwZURlZmluaXRpb24uY3JlYXRlVHlwZURlZmluaXRpb24oYWQuZ2V0VHlwZURlZmluaXRpb24oKSk7Ci0JfQotCi0JcHVibGljIFR5cGVEZWZpbml0aW9uIGdldFR5cGUoTm9kZSBub2RlKSB7Ci0JCWlmIChub2RlIGluc3RhbmNlb2YgSXRlbVBTVkkpIHsKLQkJCVhTVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb24gPSAoKEl0ZW1QU1ZJKW5vZGUpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQlpZiAodHlwZURlZmluaXRpb24gIT0gbnVsbCkKLQkJCQlyZXR1cm4gWGVyY2VzVHlwZURlZmluaXRpb24uY3JlYXRlVHlwZURlZmluaXRpb24odHlwZURlZmluaXRpb24pOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL0NvZGVQb2ludEl0ZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL0NvZGVQb2ludEl0ZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwY2NlODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db2RlUG9pbnRJdGVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBKZXNwZXIgU3RlZW4gTW9lbGxlciBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBidWcgMjgyMDk2IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ29kZVBvaW50SXRlcmF0b3IgZXh0ZW5kcyBDbG9uZWFibGUKLXsKLSAgICAvKioKLSAgICAgKiBTZW50aW5lbCB2YWx1ZSByZXR1cm5lZCBmcm9tIGl0ZXJhdG9yIHdoZW4gdGhlIGVuZCBpcyByZWFjaGVkLgotICAgICAqIFRoZSB2YWx1ZSBpcyAtMSB3aGljaCB3aWxsIG5ldmVyIGJlIGEgdmFsaWQgY29kZXBvaW50LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERPTkUgPSAtMTsKLQotICAgIC8qKgotICAgICAqIFJlc2V0cyB0aGUgcG9zaXRpb24gdG8gMCBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY29kZSBwb2ludC4KLSAgICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBjb2RlIHBvaW50IGluIHRoZSB0ZXh0LCBvciBET05FIGlmIHRoZSB0ZXh0IGlzIGVtcHR5Ci0gICAgICovCi0gICAgcHVibGljIGludCBmaXJzdCgpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgcG9zaXRpb24gdG8gdGhlIGxhc3QgcG9zc2libGUgcG9zaXRpb24gKG9yIDAgaWYgdGhlIHRleHQgaXMgZW1wdHkpCi0gICAgICogYW5kIHJldHVybnMgdGhlIGNvZGUgcG9pbnQgYXQgdGhhdCBwb3NpdGlvbi4KLSAgICAgKiBAcmV0dXJuIHRoZSBsYXN0IGNvZGUgcG9pbnQgaW4gdGhlIHRleHQsIG9yIERPTkUgaWYgdGhlIHRleHQgaXMgZW1wdHkKLSAgICAgKiBAc2VlICNnZXRFbmRJbmRleCgpCi0gICAgICovCi0gICAgcHVibGljIGludCBsYXN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBnZXRJbmRleCgpKS4KLSAgICAgKiBAcmV0dXJuIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9yIERPTkUgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgdGV4dC4KLSAgICAgKiBAc2VlICNnZXRJbmRleCgpCi0gICAgICovCi0gICAgcHVibGljIGludCBjdXJyZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBJbmNyZW1lbnRzIHRoZSBpdGVyYXRvcidzIGNvZGUgcG9pbnQgaW5kZXggYnkgb25lIGFuZCByZXR1cm5zIHRoZSBjb2RlIHBvaW50Ci0gICAgICogYXQgdGhlIG5ldyBpbmRleC4gIElmIHRoZSByZXN1bHRpbmcgaW5kZXggaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCB0aGUKLSAgICAgKiBpbmRleCBpcyBub3QgaW5jcmVtZW50ZWQsIGFuZCBET05FIGlzIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gdGhlIGNvZGUgcG9pbnQgYXQgdGhlIG5ldyBwb3NpdGlvbiBvciBET05FIGlmIHRoZSBuZXcKLSAgICAgKiBwb3NpdGlvbiBpcyBhZnRlciB0aGUgdGV4dCByYW5nZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IG5leHQoKTsKLQotICAgIC8qKgotICAgICAqIERlY3JlbWVudHMgdGhlIGl0ZXJhdG9yJ3MgaW5kZXggYnkgb25lIGFuZCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIKLSAgICAgKiBhdCB0aGUgbmV3IGluZGV4LiBJZiB0aGUgY3VycmVudCBpbmRleCBpcyAwLCB0aGUgaW5kZXgKLSAgICAgKiByZW1haW5zIGF0IDAgYW5kIGEgdmFsdWUgb2YgRE9ORSBpcyByZXR1cm5lZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGNvZGUgcG9pbnQgYXQgdGhlIG5ldyBwb3NpdGlvbiAob3IgRE9ORSBpZiB0aGUgY3VycmVudAotICAgICAqIHBvc2l0aW9uIGlzIDApCi0gICAgICovCi0gICAgcHVibGljIGludCBwcmV2aW91cygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBpbmRleCAoYXMgYSBjb2RlcG9pbnQsIG5vdCBhIHN0cmluZyBpbmRleCkuCi0gICAgICogQHJldHVybiB0aGUgY3VycmVudCBpbmRleC4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldEluZGV4KCk7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBjb3B5IG9mIHRoaXMgY29kZSBwb2ludCBpdGVyYXRvcgotICAgICAqIEByZXR1cm4gQSBjb3B5IG9mIHRoaXMKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvQ29tcGFyYWJsZVR5cGVQcm9tb3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db21wYXJhYmxlVHlwZVByb21vdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OGJhMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9Db21wYXJhYmxlVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIEplc3BlciBTdGVlbiBNb2xsZXIsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNBbnlVUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNEYXRlVGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuWFNTdHJpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVGltZTsKLQotcHVibGljIGNsYXNzIENvbXBhcmFibGVUeXBlUHJvbW90ZXIgZXh0ZW5kcyBTY2FsYXJUeXBlUHJvbW90ZXIgewotCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tDb21iaW5hdGlvbihDbGFzcyBuZXdUeXBlKSB7Ci0KLQkJQ2xhc3MgdGFyZ2V0VHlwZSA9IGdldFRhcmdldFR5cGUoKTsKLQkJaWYgKG5ld1R5cGUgPT0gWFNTdHJpbmcuY2xhc3MgfHwgbmV3VHlwZSA9PSBYU1RpbWUuY2xhc3MgfHwgdGFyZ2V0VHlwZSA9PSBYU1N0cmluZy5jbGFzcyB8fCB0YXJnZXRUeXBlID09IFhTVGltZS5jbGFzcykgewotCQkJcmV0dXJuIHRhcmdldFR5cGUgPT0gbmV3VHlwZTsJCi0JCX0KLQkJaWYgKG5ld1R5cGUgPT0gWFNEYXRlLmNsYXNzICYmIHRhcmdldFR5cGUgPT0gWFNEYXRlVGltZS5jbGFzcykgcmV0dXJuIHRydWU7IC8vIGxlYXZlIGFsb25lCi0JCWlmIChuZXdUeXBlID09IFhTRGF0ZVRpbWUuY2xhc3MgJiYgdGFyZ2V0VHlwZSAhPSBYU0RhdGVUaW1lLmNsYXNzKSB7Ci0JCQlpZiAodGFyZ2V0VHlwZSA9PSBYU0RhdGUuY2xhc3MpIHsKLQkJCQlzZXRUYXJnZXRUeXBlKFhTRGF0ZVRpbWUuY2xhc3MpOwotCQkJfSBlbHNlIHJldHVybiBmYWxzZTsKLQkJfQotCi0JCXJldHVybiBzdXBlci5jaGVja0NvbWJpbmF0aW9uKG5ld1R5cGUpOwotCX0KLQotCXByb3RlY3RlZCBDbGFzcyBzdWJzdGl0dXRlKENsYXNzIHR5cGVUb0NvbnNpZGVyKSB7Ci0JCWlmICh0eXBlVG9Db25zaWRlciA9PSBYU0FueVVSSS5jbGFzcyB8fCB0eXBlVG9Db25zaWRlciA9PSBYU1N0cmluZy5jbGFzcykgewotCQkJcmV0dXJuIFhTU3RyaW5nLmNsYXNzOwotCQl9Ci0JCWlmICh0eXBlVG9Db25zaWRlciA9PSBYU0RhdGVUaW1lLmNsYXNzIHx8IHR5cGVUb0NvbnNpZGVyID09IFhTRGF0ZS5jbGFzcyB8fCB0eXBlVG9Db25zaWRlciA9PSBYU1RpbWUuY2xhc3MpIHsKLQkJCXJldHVybiB0eXBlVG9Db25zaWRlcjsKLQkJfQotCi0JCXJldHVybiBzdXBlci5zdWJzdGl0dXRlKHR5cGVUb0NvbnNpZGVyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL0xpdGVyYWxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9MaXRlcmFsVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwZGNjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL0xpdGVyYWxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBKZXNwZXIgU3RlZW4gTb9sbGVyIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKLQotLyoqCi0gKiBTdHJpbmcgbGl0ZXJhbCB1dGlsaXRpZXMKLSAqIAotICoKLSAqLwotcHVibGljIGNsYXNzIExpdGVyYWxVdGlscyB7Ci0JCi0JLyoqCi0JICogVW5xdW90ZXMgYSBxdW90ZWQgc3RyaW5nLCBjaGFuZ2luZyBkb3VibGUgcXVvdGVzIGludG8gc2luZ2xlIHF1b3RlcyBhcyB3ZWxsLgotICAgICAqIEV4YW1wbGVzIChzdHJpbmcgZGVsaW1pdGVkIGJ5ID4gYW5kIDwpOgotICAgICAqICA+IkEiPCBiZWNvbWVzID5BPCAKLSAgICAgKiAgPidCJzwgYmVjb21lcyA+QjwgCi0JICogID4iQSIiQiI8IGJlY29tZXMgPkEiQjwKLQkgKiAgPiJBIiJCIjwgYmVjb21lcyA+QSJCPAotCSAqICA+J0EnJycnQic8IGJlY29tZXMgPkEnJ0I8Ci0JICogID4iQScnJydCIjwgYmVjb21lcyA+QScnJydCPAotCSAqIEBwYXJhbSBxdW90ZWRTdHJpbmcgQSBxdW90ZWQgc3RyaW5nIHBvc3NpYmx5IGNvbnRhaW5pbmcgZXNjYXBlZCBxdW90ZXMKLQkgKiBAcmV0dXJuIHVucXVvdGVkIGFuZCB1bmVzY2FwZWQgc3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdW5xdW90ZShTdHJpbmcgcXVvdGVkU3RyaW5nKSB7Ci0JCWludCBpbnB1dExlbmd0aCA9IHF1b3RlZFN0cmluZy5sZW5ndGgoKTsKLQkJY2hhciBxdW90ZUNoYXIgPSBxdW90ZWRTdHJpbmcuY2hhckF0KDApOwotCQlpZiAocXVvdGVkU3RyaW5nLmluZGV4T2YocXVvdGVDaGFyLCAxKSA9PSBpbnB1dExlbmd0aC0xKSB7Ci0JCQkvLyBUaGUgdHJpdmlhbCBjYXNlIHdoZXJlIHRoZXJlJ3Mgbm8gcXVvdGVzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmluZy4KLQkJCXJldHVybiBxdW90ZWRTdHJpbmcuc3Vic3RyaW5nKDEsIGlucHV0TGVuZ3RoLTEpOwotCQl9Ci0JCQotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoaW50IGkgPSAxOyBpIDwgaW5wdXRMZW5ndGgtMTsgKytpKSB7Ci0JCQljaGFyIGNoID0gcXVvdGVkU3RyaW5nLmNoYXJBdChpKTsKLQkJCXNiLmFwcGVuZChjaCk7Ci0JCQlpZiAoY2ggPT0gcXVvdGVDaGFyKSArK2k7IC8vIFNraXAgcGFzdCBzZWNvbmQgcXVvdGUgY2hhciAoZW5zdXJlZCBieSB0aGUgbGV4ZXIpCi0JCX0KLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9OdW1lcmljVHlwZVByb21vdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL051bWVyaWNUeXBlUHJvbW90ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkMjQwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL051bWVyaWNUeXBlUHJvbW90ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSmVzcGVyIFN0ZWVuIE1vbGxlciwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBidWcgMjgxMDI4IC0gYXZnL21pbi9tYXgvc3VtIHdvcmsKLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuRHluYW1pY0Vycm9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0RlY2ltYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRG91YmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0Zsb2F0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU0ludGVnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTVW50eXBlZEF0b21pYzsKLQotcHVibGljIGNsYXNzIE51bWVyaWNUeXBlUHJvbW90ZXIgZXh0ZW5kcyBUeXBlUHJvbW90ZXIgewotCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tDb21iaW5hdGlvbihDbGFzcyBuZXdUeXBlKSB7Ci0JCS8vIE5vdGU6IERvdWJsZSBvciBmbG9hdCB3aWxsIG92ZXJyaWRlIGV2ZXJ5dGhpbmcKLQkJaWYgKG5ld1R5cGUgPT0gWFNEb3VibGUuY2xhc3MgfHwgZ2V0VGFyZ2V0VHlwZSgpID09IFhTRG91YmxlLmNsYXNzKSB7Ci0JCQlzZXRUYXJnZXRUeXBlKFhTRG91YmxlLmNsYXNzKTsKLQkJfSBlbHNlIGlmIChuZXdUeXBlID09IFhTRmxvYXQuY2xhc3MgfHwgZ2V0VGFyZ2V0VHlwZSgpID09IFhTRmxvYXQuY2xhc3MpIHsKLQkJCXNldFRhcmdldFR5cGUoWFNGbG9hdC5jbGFzcyk7Ci0JCS8vIElmIHdlJ3JlIHN0aWxsIHdpdGggaW50ZWdlcnMsIHN0aWNrIHdpdGggaXQKLQkJfSBlbHNlIGlmIChuZXdUeXBlID09IFhTSW50ZWdlci5jbGFzcyAmJiBnZXRUYXJnZXRUeXBlKCkgPT0gWFNJbnRlZ2VyLmNsYXNzKSB7Ci0JCQlzZXRUYXJnZXRUeXBlKFhTSW50ZWdlci5jbGFzcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBPdGhlcndpc2UsIHN3aXRjaCB0byBkZWNpbWFscwotCQkJc2V0VGFyZ2V0VHlwZShYU0RlY2ltYWwuY2xhc3MpOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBBbnlBdG9taWNUeXBlIGRvUHJvbW90ZShBbnlBdG9taWNUeXBlIHZhbHVlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0Zsb2F0LmNsYXNzKSB7Ci0JCQlyZXR1cm4gbmV3IFhTRmxvYXQodmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JCX0gZWxzZSBpZiAoZ2V0VGFyZ2V0VHlwZSgpID09IFhTRG91YmxlLmNsYXNzKSB7Ci0JCQlyZXR1cm4gbmV3IFhTRG91YmxlKHZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0ludGVnZXIuY2xhc3MpIHsKLQkJCXJldHVybiBuZXcgWFNJbnRlZ2VyKHZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl9IGVsc2UgaWYgKGdldFRhcmdldFR5cGUoKSA9PSBYU0RlY2ltYWwuY2xhc3MpIHsKLQkJCXJldHVybiBuZXcgWFNEZWNpbWFsKHZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCBDbGFzcyBzdWJzdGl0dXRlKENsYXNzIHR5cGVUb0NvbnNpZGVyKSB7Ci0JCWlmICh0eXBlVG9Db25zaWRlciA9PSBYU1VudHlwZWRBdG9taWMuY2xhc3MpIHJldHVybiBYU0RvdWJsZS5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRmxvYXQuY2xhc3MpKSByZXR1cm4gWFNGbG9hdC5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRG91YmxlLmNsYXNzKSkgcmV0dXJuIFhTRG91YmxlLmNsYXNzOwotCQlpZiAoaXNEZXJpdmVkRnJvbSh0eXBlVG9Db25zaWRlciwgWFNJbnRlZ2VyLmNsYXNzKSkgcmV0dXJuIFhTSW50ZWdlci5jbGFzczsKLQkJaWYgKGlzRGVyaXZlZEZyb20odHlwZVRvQ29uc2lkZXIsIFhTRGVjaW1hbC5jbGFzcykpIHJldHVybiBYU0RlY2ltYWwuY2xhc3M7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0Rlcml2ZWRGcm9tKENsYXNzIHR5cGVUb0NvbnNpZGVyLCBDbGFzcyBzdXBlclR5cGUpIHsKLQkJcmV0dXJuIHN1cGVyVHlwZS5pc0Fzc2lnbmFibGVGcm9tKHR5cGVUb0NvbnNpZGVyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1NjYWxhclR5cGVQcm9tb3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9TY2FsYXJUeXBlUHJvbW90ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwOWQzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1NjYWxhclR5cGVQcm9tb3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgTXVrdWwgR2FuZGhpIC0gYnVnIDI4MDc5OCAtIFBzeWNob1BhdGggc3VwcG9ydCBmb3IgSkRLIDEuNAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnR5cGVzLlhTRGF5VGltZUR1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5YU1llYXJNb250aER1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgU2NhbGFyVHlwZVByb21vdGVyIGV4dGVuZHMgTnVtZXJpY1R5cGVQcm9tb3RlciB7Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0NvbWJpbmF0aW9uKENsYXNzIG5ld1R5cGUpIHsKLQotCQlDbGFzcyB0YXJnZXRUeXBlID0gZ2V0VGFyZ2V0VHlwZSgpOwotCQlpZiAodGFyZ2V0VHlwZSA9PSBYU0RheVRpbWVEdXJhdGlvbi5jbGFzcyB8fCB0YXJnZXRUeXBlID09IFhTWWVhck1vbnRoRHVyYXRpb24uY2xhc3MpIHsKLQkJCXJldHVybiB0YXJnZXRUeXBlID09IG5ld1R5cGU7CQotCQl9Ci0JCXJldHVybiBzdXBlci5jaGVja0NvbWJpbmF0aW9uKG5ld1R5cGUpOwotCX0KLQotCXByb3RlY3RlZCBDbGFzcyBzdWJzdGl0dXRlKENsYXNzIHR5cGVUb0NvbnNpZGVyKSB7Ci0JCWlmICh0eXBlVG9Db25zaWRlciA9PSBYU0RheVRpbWVEdXJhdGlvbi5jbGFzcyB8fCB0eXBlVG9Db25zaWRlciA9PSBYU1llYXJNb250aER1cmF0aW9uLmNsYXNzKSB7Ci0JCQlyZXR1cm4gdHlwZVRvQ29uc2lkZXI7Ci0JCX0KLQotCQlyZXR1cm4gc3VwZXIuc3Vic3RpdHV0ZSh0eXBlVG9Db25zaWRlcik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9TdHJpbmdDb2RlUG9pbnRJdGVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci9pbnRlcm5hbC91dGlscy9TdHJpbmdDb2RlUG9pbnRJdGVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDBjNTFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIEplc3BlciBTdGVlbiBNb2VsbGVyIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIGJ1ZyAyODIwOTYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBNdWt1bCBHYW5kaGkgLSBidWcgMjgwNzk4IC0gUHN5Y2hvUGF0aCBzdXBwb3J0IGZvciBKREsgMS40Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmludGVybmFsLnV0aWxzOwotCi1pbXBvcnQgY29tLmlibS5pY3UubGFuZy5VQ2hhcmFjdGVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IgaW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvcgotewotICAgIHByaXZhdGUgU3RyaW5nIHRleHQ7Ci0gICAgcHJpdmF0ZSBpbnQgZW5kOwotICAgIC8vIGludmFyaWFudDogMCA8PSBwb3MgPD0gZW5kCi0gICAgcHJpdmF0ZSBpbnQgcG9zOwotCXByaXZhdGUgaW50IGNwUG9zOwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBpdGVyYXRvciB3aXRoIGFuIGluaXRpYWwgaW5kZXggb2YgMC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IoU3RyaW5nIHRleHQpCi0gICAgewotICAgICAgICBpZiAodGV4dCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICB0aGlzLnRleHQgPSB0ZXh0OwotICAgICAgICB0aGlzLmVuZCA9IHRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChlbmQgPiAwICYmIFVDaGFyYWN0ZXIuaXNIaWdoU3Vycm9nYXRlKHRleHQuY2hhckF0KGVuZC0xKSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIFVURi0xNiBzZXF1ZW5jZSBlbmRpbmcgd2l0aCBhIGhpZ2ggc3Vycm9nYXRlIik7Ci0gICAgICAgCi0gICAgICAgIHRoaXMucG9zID0gMDsKLSAgICAgICAgdGhpcy5jcFBvcyA9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgdGhpcyBpdGVyYXRvciB0byBwb2ludCB0byBhIG5ldyBzdHJpbmcuICBUaGlzIHBhY2thZ2UtdmlzaWJsZQotICAgICAqIG1ldGhvZCBpcyB1c2VkIGJ5IG90aGVyIGphdmEudGV4dCBjbGFzc2VzIHRoYXQgd2FudCB0byBhdm9pZCBhbGxvY2F0aW5nCi0gICAgICogbmV3IFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIG9iamVjdHMgZXZlcnkgdGltZSB0aGVpciBzZXRUZXh0IG1ldGhvZAotICAgICAqIGlzIGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSAgdGV4dCAgIFRoZSBTdHJpbmcgdG8gYmUgaXRlcmF0ZWQgb3ZlcgotICAgICAqIEBzaW5jZSAxLjIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7Ci0gICAgICAgIGlmICh0ZXh0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICAgICAgdGhpcy5lbmQgPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICB0aGlzLnBvcyA9IDA7Ci0gICAgICAgIHRoaXMuY3BQb3MgPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IuZmlyc3QoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjZmlyc3QKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGZpcnN0KCkKLSAgICB7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIGNwUG9zID0gMDsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRzIENvZGVQb2ludEl0ZXJhdG9yLmxhc3QoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjbGFzdAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbGFzdCgpCi0gICAgewotICAgICAgICBwb3MgPSBlbmQ7Ci0gICAgICAgIGNwUG9zID0gVUNoYXJhY3Rlci5jb2RlUG9pbnRDb3VudCh0ZXh0LCAwLCBwb3MpOwotICAgICAgICByZXR1cm4gcHJldmlvdXMoKTsKLSAgICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5jdXJyZW50KCkgZm9yIFN0cmluZy4KLSAgICAgKiBAc2VlIENvZGVQb2ludEl0ZXJhdG9yI2N1cnJlbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGN1cnJlbnQoKQotICAgIHsKLSAgICAgICAgaWYgKHBvcyA8IGVuZCkgewotICAgICAgICAgICAgY2hhciBjaDEgPSAgdGV4dC5jaGFyQXQocG9zKTsKLSAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzSGlnaFN1cnJvZ2F0ZShjaDEpKSAKLSAgICAgICAgICAgICAgIHJldHVybiBVQ2hhcmFjdGVyLnRvQ29kZVBvaW50KGNoMSwgdGV4dC5jaGFyQXQocG9zKzEpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGNoMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBET05FOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5uZXh0KCkgZm9yIFN0cmluZy4KLSAgICAgKiBAc2VlIENvZGVQb2ludEl0ZXJhdG9yI25leHQKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IG5leHQoKQotICAgIHsKLSAgICAgICAgaWYgKHBvcyA8IGVuZCAtIDEpIHsKLSAgICAgICAgICAgIHBvcysrOwotICAgICAgICAgICAgaWYgKFVDaGFyYWN0ZXIuaXNMb3dTdXJyb2dhdGUodGV4dC5jaGFyQXQocG9zKSkpIHBvcysrOwotICAgICAgICAgICAgY3BQb3MrKzsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIAlwb3MgPSBlbmQ7Ci0gICAgICAgICAgICByZXR1cm4gRE9ORTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudHMgQ29kZVBvaW50SXRlcmF0b3IucHJldmlvdXMoKSBmb3IgU3RyaW5nLgotICAgICAqIEBzZWUgQ29kZVBvaW50SXRlcmF0b3IjcHJldmlvdXMKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IHByZXZpb3VzKCkKLSAgICB7Ci0gICAgICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgICAgICBwb3MtLTsKLSAgICAgICAgICAgIGlmIChVQ2hhcmFjdGVyLmlzTG93U3Vycm9nYXRlKHRleHQuY2hhckF0KHBvcykpKSBwb3MtLTsgCi0gICAgICAgICAgICBjcFBvcy0tOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBET05FOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50cyBDb2RlUG9pbnRJdGVyYXRvci5nZXRJbmRleCgpIGZvciBTdHJpbmcuCi0gICAgICogQHNlZSBDb2RlUG9pbnRJdGVyYXRvciNnZXRJbmRleAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNwUG9zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmVzIHRoZSBlcXVhbGl0eSBvZiB0d28gU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0cy4KLSAgICAgKiBAcGFyYW0gb2JqIHRoZSBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aC4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG9iaiBpcyB0aGUgc2FtZSBhcyB0aGlzCi0gICAgICogU3RyaW5nQ29kZVBvaW50SXRlcmF0b3Igb2JqZWN0OyBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSBvYmopCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZ0NvZGVQb2ludEl0ZXJhdG9yIHRoYXQgPSAoU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpIG9iajsKLQotICAgICAgICBpZiAoaGFzaENvZGUoKSAhPSB0aGF0Lmhhc2hDb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdGV4dC5lcXVhbHModGhhdC50ZXh0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHBvcyAhPSB0aGF0LnBvcyB8fCBlbmQgIT0gdGhhdC5lbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXB1dGVzIGEgaGFzaGNvZGUgZm9yIHRoaXMgaXRlcmF0b3IuCi0gICAgICogQHJldHVybiBBIGhhc2ggY29kZQotICAgICAqLwotCXB1YmxpYyBpbnQgaGFzaENvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRleHQuaGFzaENvZGUoKSBeIHBvcyBeIGVuZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGl0ZXJhdG9yLgotICAgICAqIEByZXR1cm4gQSBjb3B5IG9mIHRoaXMKLSAgICAgKi8KLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmdDb2RlUG9pbnRJdGVyYXRvciBvdGhlcgotICAgICAgICAgICAgPSAoU3RyaW5nQ29kZVBvaW50SXRlcmF0b3IpIHN1cGVyLmNsb25lKCk7Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvVHlwZVByb21vdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL2ludGVybmFsL3V0aWxzL1R5cGVQcm9tb3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODAxNTg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvaW50ZXJuYWwvdXRpbHMvVHlwZVByb21vdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODEwMjggLSBhdmcvbWluL21heC9zdW0gd29yawotICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5EeW5hbWljRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlBdG9taWNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5BbnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC50eXBlcy5Ob2RlVHlwZTsKLQotLyoqCi0gKiBHZW5lcmljIHR5cGUgcHJvbW90ZXIgZm9yIGhhbmRsaW5nIHN1YnR5cGUgc3Vic3RpdHV0aW9uIGFuZCB0eXBlIHByb21vdGlvbnMgZm9yIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZVByb21vdGVyIHsKLQlwcml2YXRlIENsYXNzIHRhcmdldFR5cGUgPSBudWxsOwotCi0JYWJzdHJhY3QgcHVibGljIEFueUF0b21pY1R5cGUgZG9Qcm9tb3RlKEFueUF0b21pY1R5cGUgdmFsdWUpIHRocm93cyBEeW5hbWljRXJyb3I7CQotCi0JcHVibGljIGZpbmFsIEFueUF0b21pY1R5cGUgcHJvbW90ZShBbnlUeXBlIHZhbHVlKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJLy8gVGhpcyBpcyBhIHNob3J0IGN1dCwgcmVhbGx5Ci0JCWlmICh2YWx1ZS5nZXRDbGFzcygpID09IGdldFRhcmdldFR5cGUoKSkgcmV0dXJuIChBbnlBdG9taWNUeXBlKXZhbHVlOwotCi0JCXJldHVybiBkb1Byb21vdGUoYXRvbWl6ZSh2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0eXBlVG9Db25zaWRlciBUaGUgCi0JICogQHJldHVybiBUaGUgc3VwZXJ0eXBlIHRvIHRyZWF0IGl0IGFzIChpLmUuIGlmIGEgeHM6bm9uTmVnYXRpdmVJbnRlZ2VyIGlzIHRyZWF0ZWQgYXMgeHM6bnVtYmVyKQotCSAqLwotCWFic3RyYWN0IHByb3RlY3RlZCBDbGFzcyBzdWJzdGl0dXRlKENsYXNzIHR5cGVUb0NvbnNpZGVyKTsJCi0KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0NvbWJpbmF0aW9uKENsYXNzIG5ld1R5cGUpOwotCQkKLQlwdWJsaWMgdm9pZCBjb25zaWRlclR5cGUoQ2xhc3MgdHlwZVRvQ29uc2lkZXIpIHRocm93cyBEeW5hbWljRXJyb3IgewotCQlDbGFzcyBiYXNlVHlwZSA9IHN1YnN0aXR1dGUodHlwZVRvQ29uc2lkZXIpOwotCQkKLQkJaWYgKGJhc2VUeXBlID09IG51bGwpIHsKLQkJCXRocm93IER5bmFtaWNFcnJvci5hcmd1bWVudF90eXBlX2Vycm9yKHR5cGVUb0NvbnNpZGVyKTsKLQkJfQotCQkKLQkJaWYgKHRhcmdldFR5cGUgPT0gbnVsbCkgewotCQkJdGFyZ2V0VHlwZSA9IGJhc2VUeXBlOwotCQl9IGVsc2UgewotCQkJaWYgKCEgY2hlY2tDb21iaW5hdGlvbihiYXNlVHlwZSkpIHsKLQkJCQl0aHJvdyBEeW5hbWljRXJyb3IuYXJndW1lbnRfdHlwZV9lcnJvcih0eXBlVG9Db25zaWRlcik7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgY29uc2lkZXJUeXBlcyhDb2xsZWN0aW9uIHR5cGVzVG9Db25zaWRlcikgdGhyb3dzIER5bmFtaWNFcnJvciB7CQkKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gdHlwZXNUb0NvbnNpZGVyLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJY29uc2lkZXJUeXBlKChDbGFzcylpdGVyLm5leHQoKSk7CQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNvbnNpZGVyU2VxdWVuY2UoUmVzdWx0U2VxdWVuY2Ugc2VxdWVuY2VUb0NvbnNpZGVyKSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXF1ZW5jZVRvQ29uc2lkZXIuc2l6ZSgpOyArK2kpIHsKLQkJCUl0ZW0gaXRlbSA9IHNlcXVlbmNlVG9Db25zaWRlci5pdGVtKGkpOwotCQkJY29uc2lkZXJWYWx1ZShpdGVtKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgQ2xhc3MgZ2V0VGFyZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIHRhcmdldFR5cGU7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldFR5cGUoQ2xhc3MgY2xhc3MxKSB7Ci0JCXRoaXMudGFyZ2V0VHlwZSA9IGNsYXNzMTsKLQl9Ci0KLQlwdWJsaWMgQW55QXRvbWljVHlwZSBhdG9taXplKEl0ZW0gYXQpIHsKLQkJaWYgKGF0IGluc3RhbmNlb2YgTm9kZVR5cGUpIHsKLQkJCXJldHVybiAoQW55QXRvbWljVHlwZSkoKE5vZGVUeXBlKWF0KS50eXBlZF92YWx1ZSgpLmZpcnN0KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gKEFueUF0b21pY1R5cGUpYXQ7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgY29uc2lkZXJWYWx1ZShJdGVtIGF0KSB0aHJvd3MgRHluYW1pY0Vycm9yIHsKLQkJY29uc2lkZXJUeXBlKGF0b21pemUoYXQpLmdldENsYXNzKCkpOwotCX0KLQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci91dGlsL0R5bmFtaWNDb250ZXh0QnVpbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci91dGlsL0R5bmFtaWNDb250ZXh0QnVpbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWZiMzU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvdXRpbC9EeW5hbWljQ29udGV4dEJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKLQotaW1wb3J0IGphdmF4LnhtbC5kYXRhdHlwZS5EYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwuZGF0YXR5cGUuRHVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5Db2xsYXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRHluYW1pY0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLlJlc3VsdFNlcXVlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5ET01Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlhlcmNlc0xvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwuZnVuY3Rpb24uRm5Db2xsZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIER5bmFtaWMgQ29udGV4dC4KLSAqIAotICogSW5pdGlhbGl6ZXMgYW5kIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgb2YgYSBkeW5hbWljIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZQotICogWFBhdGggMi4wIHNwZWNpZmljYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEeW5hbWljQ29udGV4dEJ1aWxkZXIgaW1wbGVtZW50cyBEeW5hbWljQ29udGV4dCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRhdHlwZUZhY3RvcnkgX2RhdGF0eXBlRmFjdG9yeTsKLQlzdGF0aWMgewotCQl0cnkgewotCQkJX2RhdGF0eXBlRmFjdG9yeSA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQl9Ci0JCWNhdGNoIChEYXRhdHlwZUNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbm5vdCBpbml0aWFsaXplIFhNTCBkYXRhdHlwZXMiLCBlKTsKLQkJfQotCX0KLQlwcml2YXRlIFRpbWVab25lIF9zeXN0ZW1UaW1lem9uZSA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKLQkKLQlwcml2YXRlIER1cmF0aW9uIF90eiA9IF9kYXRhdHlwZUZhY3RvcnkubmV3RHVyYXRpb24oX3N5c3RlbVRpbWV6b25lLmdldFJhd09mZnNldCgpKTsKLQlwcml2YXRlIEdyZWdvcmlhbkNhbGVuZGFyIF9jdXJyZW50RGF0ZVRpbWU7Ci0JCi0JcHJpdmF0ZSBNYXA8UU5hbWUsUmVzdWx0U2VxdWVuY2U+IF92YXJpYWJsZXMgPSBuZXcgSGFzaE1hcDxRTmFtZSxSZXN1bHRTZXF1ZW5jZT4oKTsKLQlwcml2YXRlIGZpbmFsIFN0YXRpY0NvbnRleHQgX3N0YXRpY0NvbnRleHQ7Ci0KLQlwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8RG9jdW1lbnQ+PiBfY29sbGVjdGlvbnM7Ci0KLQlwcml2YXRlIE1hcDxVUkksIERvY3VtZW50PiBfbG9hZGVkX2RvY3VtZW50cyA9IG5ldyBIYXNoTWFwPFVSSSwgRG9jdW1lbnQ+KCk7Ci0KLQlwdWJsaWMgRHluYW1pY0NvbnRleHRCdWlsZGVyKFN0YXRpY0NvbnRleHQgc2MpIHsKLQkJX3N0YXRpY0NvbnRleHQgPSBzYzsKLQl9Ci0JCi0JLyoqCi0JICogUmVhZHMgdGhlIGRheSBmcm9tIGEgVGltZUR1cmF0aW9uIHR5cGUKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIHhzOmludGVnZXIgX3R6Ci0JICovCi0JcHVibGljIER1cmF0aW9uIGdldFRpbWV6b25lT2Zmc2V0KCkgewotCQlyZXR1cm4gX3R6OwotCX0KLQotCS8qKgotCSAqIEdldHMgdGhlIEN1cnJlbnQgc3RhYmxlIGRhdGUgdGltZSBmcm9tIHRoZSBkeW5hbWljIGNvbnRleHQuCi0JICovCi0JcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyIGdldEN1cnJlbnREYXRlVGltZSgpIHsKLQkJaWYgKF9jdXJyZW50RGF0ZVRpbWUgPT0gbnVsbCkgewotCQkJX2N1cnJlbnREYXRlVGltZSA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UIikpOwotCQl9Ci0JCXJldHVybiBfY3VycmVudERhdGVUaW1lOwotCX0KLQotCXB1YmxpYyBOb2RlIGdldExpbWl0Tm9kZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFJlc3VsdFNlcXVlbmNlIGdldFZhcmlhYmxlKFFOYW1lIG5hbWUpIHsKLQkJcmV0dXJuIF92YXJpYWJsZXMuZ2V0KG5hbWUpOwotCX0KLQotCXB1YmxpYyBEb2N1bWVudCBnZXREb2N1bWVudChVUkkgcmVzb2x2ZWQpIHsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJaWYgKF9sb2FkZWRfZG9jdW1lbnRzLmNvbnRhaW5zS2V5KHJlc29sdmVkKSkgewotCQkJIC8vdHJpZWQgYmVmb3JlCi0JCQlkb2MgPSBfbG9hZGVkX2RvY3VtZW50cy5nZXQocmVzb2x2ZWQpOwotCQl9IGVsc2UgewotCQkJZG9jID0gcmV0cmlldmVfZG9jKHJlc29sdmVkKTsKLQkJCV9sb2FkZWRfZG9jdW1lbnRzLnB1dChyZXNvbHZlZCwgZG9jKTsKLQkJfQotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8vIFhYWCBtYWtlIGl0IG5pY2UsIGFuZCBtb3ZlIGl0IG91dCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24KLQlwcml2YXRlIERvY3VtZW50IHJldHJpZXZlX2RvYyhVUkkgdXJpKSB7Ci0JCXRyeSB7Ci0JCQlET01Mb2FkZXIgbG9hZGVyID0gbmV3IFhlcmNlc0xvYWRlcigpOwotCQkJbG9hZGVyLnNldF92YWxpZGF0aW5nKGZhbHNlKTsKLQotCQkJRG9jdW1lbnQgZG9jID0gbG9hZGVyLmxvYWQobmV3IFVSTCh1cmkudG9TdHJpbmcoKSkub3BlblN0cmVhbSgpKTsKLQkJCWRvYy5zZXREb2N1bWVudFVSSSh1cmkudG9TdHJpbmcoKSk7Ci0JCQlyZXR1cm4gZG9jOwotCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgVVJJIHJlc29sdmVVcmkoU3RyaW5nIHVyaSkgewotCQl0cnkgewotCQkJVVJJIHJlYWxVUkkgPSBVUkkuY3JlYXRlKHVyaSk7Ci0JCQlpZiAocmVhbFVSSS5pc0Fic29sdXRlKCkpIHsKLQkJCQlyZXR1cm4gcmVhbFVSSTsKLQkJCX0KLQkJCXJldHVybiBfc3RhdGljQ29udGV4dC5nZXRCYXNlVXJpKCkucmVzb2x2ZSh1cmkpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gZ2V0Q29sbGVjdGlvbnMoKSB7Ci0JCXJldHVybiBfY29sbGVjdGlvbnM7Ci0JfQotCi0JcHVibGljIExpc3Q8RG9jdW1lbnQ+IGdldERlZmF1bHRDb2xsZWN0aW9uKCkgewotCQlyZXR1cm4gZ2V0Q29sbGVjdGlvbnMoKS5nZXQoRm5Db2xsZWN0aW9uLkRFRkFVTFRfQ09MTEVDVElPTl9VUkkpOwotCX0KLQotCXB1YmxpYyBEeW5hbWljQ29udGV4dEJ1aWxkZXIgd2l0aFZhcmlhYmxlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcU5hbWUsIFJlc3VsdFNlcXVlbmNlIHZhbHVlcykgewotCQl0aGlzLl92YXJpYWJsZXMucHV0KHFOYW1lLCB2YWx1ZXMpOwotCQlyZXR1cm4gdGhpczsKLQl9Ci0JCi0JcHVibGljIER5bmFtaWNDb250ZXh0QnVpbGRlciB3aXRoVGltZXpvbmVPZmZzZXQoRHVyYXRpb24gZCkgewotCQl0aGlzLl90eiA9IGQ7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpdGhDb2xsZWN0aW9ucyhNYXA8U3RyaW5nLCBMaXN0PERvY3VtZW50Pj4gbWFwKSB7Ci0JCXRoaXMuX2NvbGxlY3Rpb25zID0gbWFwOwotCX0KLQkKLQlwdWJsaWMgQ29sbGF0aW9uUHJvdmlkZXIgZ2V0Q29sbGF0aW9uUHJvdmlkZXIoKSB7Ci0JCXJldHVybiBfc3RhdGljQ29udGV4dC5nZXRDb2xsYXRpb25Qcm92aWRlcigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvdXRpbC9SZXN1bHRTZXF1ZW5jZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvdXRpbC9SZXN1bHRTZXF1ZW5jZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzOTY3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3V0aWwvUmVzdWx0U2VxdWVuY2VVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuUmVzdWx0U2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLlJlc3VsdFNlcXVlbmNlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuQW55VHlwZTsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBSZXN1bHRTZXF1ZW5jZVV0aWwgewotCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXF1ZW5jZSBuZXdUb09sZCgKLQkJCW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5SZXN1bHRTZXF1ZW5jZSByZXN1bHQpIHsKLQkJaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdFNlcXVlbmNlKSAKLQkJCXJldHVybiAoUmVzdWx0U2VxdWVuY2UpcmVzdWx0OwotCQkKLQkJUmVzdWx0U2VxdWVuY2UgcnMgPSBSZXN1bHRTZXF1ZW5jZUZhY3RvcnkuY3JlYXRlX25ldygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkgewotCQkJcnMuYWRkKChBbnlUeXBlKSByZXN1bHQuaXRlbShpKSk7Ci0JCX0KLQkJcmV0dXJuIHJzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Ivc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci91dGlsL1N0YXRpY0NvbnRleHRCdWlsZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3V0aWwvU3RhdGljQ29udGV4dEJ1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU0YThlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3V0aWwvU3RhdGljQ29udGV4dEJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBKZXNwZXIgU3RlZW4gTW9sbGVyLCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTW9sbGVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0byBuZXcgWFBhdGgyIEFQSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnV0aWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC54bWwuWE1MQ29uc3RhbnRzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuTmFtZXNwYWNlQ29udGV4dDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIuYXBpLkNvbGxhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5hcGkuRnVuY3Rpb25MaWJyYXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS5TdGF0aWNWYXJpYWJsZVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLkl0ZW1UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZnVuY3Rpb24uRm5GdW5jdGlvbkxpYnJhcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZ1bmN0aW9uLlhTQ3RyTGlicmFyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuaW50ZXJuYWwudHlwZXMuYnVpbHRpbi5CdWlsdGluVHlwZUxpYnJhcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFN0YXRpY0NvbnRleHRCdWlsZGVyIGltcGxlbWVudHMgU3RhdGljQ29udGV4dCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9GVU5DVElPTlNfTlMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMiOwotCi0JcHJpdmF0ZSBib29sZWFuIF94cGF0aDFfY29tcGF0aWJsZSA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIF9kZWZhdWx0X25hbWVzcGFjZSA9ICIiOwotCXByaXZhdGUgU3RyaW5nIF9kZWZhdWx0X2Z1bmN0aW9uX25hbWVzcGFjZSA9IFhQQVRIX0ZVTkNUSU9OU19OUzsKLQlwcml2YXRlIFR5cGVEZWZpbml0aW9uIF9pbml0aWFsQ29udGV4dFR5cGUgPSBudWxsOyAKLQlwcml2YXRlIFN0cmluZyBfZGVmYXVsdENvbGxhdGlvbiA9IENvbGxhdGlvblByb3ZpZGVyLkNPREVQT0lOVF9DT0xMQVRJT047Ci0KLQkvLyBrZXk6IFN0cmluZyBwcmVmaXgsIGNvbnRlbnRzOiBTdHJpbmcgbmFtZXNwYWNlCi0JcHJpdmF0ZSBNYXAvKjxTdHJpbmcsIFN0cmluZz4qLyBfbmFtZXNwYWNlcyA9IG5ldyBIYXNoTWFwLyo8U3RyaW5nLCBTdHJpbmc+Ki8oKTsKLQlwcml2YXRlIE1hcDxTdHJpbmcsIEZ1bmN0aW9uTGlicmFyeT4gX2Z1bmN0aW9uTGlicmFyaWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbkxpYnJhcnk+KCk7Ci0JewotCQlfZnVuY3Rpb25MaWJyYXJpZXMucHV0KFhQQVRIX0ZVTkNUSU9OU19OUywgbmV3IEZuRnVuY3Rpb25MaWJyYXJ5KCkpOwotCQlfZnVuY3Rpb25MaWJyYXJpZXMucHV0KFhTQ3RyTGlicmFyeS5YTUxfU0NIRU1BX05TLCBuZXcgWFNDdHJMaWJyYXJ5KCkpOwotCX0KLQotCXByaXZhdGUgVVJJIF9iYXNlX3VyaTsKLQlwcml2YXRlIE1hcC8qPFN0cmluZywgVHlwZURlZmluaXRpb24+Ki8gX3ZhcmlhYmxlVHlwZXMgPSBuZXcgSGFzaE1hcC8qPFN0cmluZywgVHlwZURlZmluaXRpb24+Ki8oKTsKLQlwcml2YXRlIE1hcC8qPFN0cmluZywgU2hvcnQ+Ki8gX3ZhcmlhYmxlQ2FyZGluYWxpdHkgPSBuZXcgSGFzaE1hcC8qPFN0cmluZywgU2hvcnQ+Ki8oKTsKLQlwcml2YXRlIE1hcC8qPFN0cmluZywgVHlwZURlZmluaXRpb24+Ki8gX2NvbGxlY3Rpb25UeXBlcyA9IG5ldyBIYXNoTWFwLyo8U3RyaW5nLCBUeXBlRGVmaW5pdGlvbj4qLygpOwotCi0JcHJpdmF0ZSBTZXQvKjxRTmFtZT4qLyBfaGlkZGVuRnVuY3Rpb25zID0gbmV3IEhhc2hTZXQvKjxRTmFtZT4qLygpOwotCi0JcHJpdmF0ZSBUeXBlTW9kZWwgX3R5cGVNb2RlbDsKLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1hQYXRoMUNvbXBhdGlibGUoKSB7Ci0JCXJldHVybiBfeHBhdGgxX2NvbXBhdGlibGU7Ci0JfQotCi0JcHVibGljIE5hbWVzcGFjZUNvbnRleHQgZ2V0TmFtZXNwYWNlQ29udGV4dCgpIHsKLQkJcmV0dXJuIG5ldyBOYW1lc3BhY2VDb250ZXh0KCkgewotCQkJCi0JCQlwdWJsaWMgSXRlcmF0b3IgZ2V0UHJlZml4ZXMoU3RyaW5nIG5zKSB7Ci0JCQkJTGlzdC8qPFN0cmluZz4qLyBwcmVmaXhlcyA9IG5ldyBMaW5rZWRMaXN0Lyo8U3RyaW5nPiovKCk7Ci0JCQkJZm9yIChJdGVyYXRvciBpdCA9IF9uYW1lc3BhY2VzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApIHsKLQkJCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSlpdC5uZXh0KCk7Ci0JCQkJCQotCQkJCQlpZiAoZW50cnkuZ2V0VmFsdWUoKS5lcXVhbHMobnMpKSBwcmVmaXhlcy5hZGQoZW50cnkuZ2V0S2V5KCkpOwotCQkJCX0KLQkJCQlyZXR1cm4gcHJlZml4ZXMuaXRlcmF0b3IoKTsKLQkJCX0KLQkJCQotCQkJcHVibGljIFN0cmluZyBnZXRQcmVmaXgoU3RyaW5nIG5zKSB7Ci0JCQkJZm9yIChJdGVyYXRvciBpdCA9IF9uYW1lc3BhY2VzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApIHsKLQkJCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSlpdC5uZXh0KCk7CQkJCQkKLQkJCQkJaWYgKGVudHJ5LmdldFZhbHVlKCkuZXF1YWxzKG5zKSkgewotCQkJCQkJcmV0dXJuIChTdHJpbmcpZW50cnkuZ2V0S2V5KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKFN0cmluZyBwcmVmaXgpIHsKLQkJCQlTdHJpbmcgbnMgPSAoU3RyaW5nKV9uYW1lc3BhY2VzLmdldChwcmVmaXgpOwotCQkJCWlmIChucyA9PSBudWxsKSBucyA9IFhNTENvbnN0YW50cy5OVUxMX05TX1VSSTsKLQkJCQlyZXR1cm4gbnM7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKCkgewotCQlyZXR1cm4gX2RlZmF1bHRfbmFtZXNwYWNlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEZ1bmN0aW9uTmFtZXNwYWNlKCkgewotCQlyZXR1cm4gX2RlZmF1bHRfZnVuY3Rpb25fbmFtZXNwYWNlOwotCX0KLQotCXB1YmxpYyBUeXBlTW9kZWwgZ2V0VHlwZU1vZGVsKCkgewotCQlpZiAoX3R5cGVNb2RlbCAhPSBudWxsKSByZXR1cm4gX3R5cGVNb2RlbDsKLQkJCi0JCXJldHVybiBuZXcgVHlwZU1vZGVsKCkgewotCi0JCQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZShOb2RlIG5vZGUpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGxvb2t1cFR5cGUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBsb29rdXBFbGVtZW50RGVjbGFyYXRpb24oU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGVsZW1lbnROYW1lKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBsb29rdXBBdHRyaWJ1dGVEZWNsYXJhdGlvbihTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkgewotCQkJCXJldHVybiBudWxsOwotCQkJfX07Ci0JfQotCi0JcHVibGljIEZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbihRTmFtZSBuYW1lLCBpbnQgYXJpdHkpIHsKLQkJaWYgKF9oaWRkZW5GdW5jdGlvbnMuY29udGFpbnMobmFtZSkpIHJldHVybiBudWxsOwotCQlGdW5jdGlvbkxpYnJhcnkgZmxpYiA9IF9mdW5jdGlvbkxpYnJhcmllcy5nZXQobmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCWlmIChmbGliICE9IG51bGwpIHsKLQkJCXJldHVybiBmbGliLnJlc29sdmVGdW5jdGlvbihuYW1lLmdldExvY2FsUGFydCgpLCBhcml0eSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFVSSSBnZXRCYXNlVXJpKCkgewotCQlyZXR1cm4gX2Jhc2VfdXJpOwotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBGdW5jdGlvbkxpYnJhcnk+IGdldEZ1bmN0aW9uTGlicmFyaWVzKCkgewotCQlyZXR1cm4gX2Z1bmN0aW9uTGlicmFyaWVzOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRDb2xsZWN0aW9uVHlwZShTdHJpbmcgY29sbGVjdGlvbk5hbWUpIHsKLQkJcmV0dXJuIChUeXBlRGVmaW5pdGlvbikgX2NvbGxlY3Rpb25UeXBlcy5nZXQoY29sbGVjdGlvbk5hbWUpOwotCX0KLQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXRJbml0aWFsQ29udGV4dFR5cGUoKSB7Ci0JCXJldHVybiBfaW5pdGlhbENvbnRleHRUeXBlOwotCX0KLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QnVpbGRlciB3aXRoTmFtZXNwYWNlKFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkpIHsKLQkJX25hbWVzcGFjZXMucHV0KHByZWZpeCwgdXJpKTsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JcHVibGljIFN0YXRpY0NvbnRleHRCdWlsZGVyIHdpdGhEZWZhdWx0TmFtZXNwYWNlKFN0cmluZyB1cmkpIHsKLQkJX2RlZmF1bHRfbmFtZXNwYWNlID0gdXJpOwotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlwdWJsaWMgU3RhdGljQ29udGV4dEJ1aWxkZXIgd2l0aFhQYXRoMUNvbXBhdGliaWxpdHkoYm9vbGVhbiBjb21wYXRpYmxlKSB7Ci0JCV94cGF0aDFfY29tcGF0aWJsZSA9IGNvbXBhdGlibGU7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QnVpbGRlciB3aXRoVHlwZU1vZGVsKFR5cGVNb2RlbCB0bSkgewotCQlfdHlwZU1vZGVsID0gdG07Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QnVpbGRlciB3aXRob3V0RnVuY3Rpb24oUU5hbWUgZnVuY3Rpb25Ub1N1cHByZXNzKSB7Ci0JCV9oaWRkZW5GdW5jdGlvbnMuYWRkKGZ1bmN0aW9uVG9TdXBwcmVzcyk7Ci0JCXJldHVybiB0aGlzOwotCX0KLQlwdWJsaWMgU3RhdGljQ29udGV4dEJ1aWxkZXIgd2l0aG91dEZ1bmN0aW9uKFFOYW1lIC4uLiBmdW5jdGlvbnNUb1N1cHByZXNzKSB7Ci0JCWZvciAoUU5hbWUgbmFtZSA6IGZ1bmN0aW9uc1RvU3VwcHJlc3MpCi0JCQlfaGlkZGVuRnVuY3Rpb25zLmFkZChuYW1lKTsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCQotCXB1YmxpYyBUeXBlRGVmaW5pdGlvbiBnZXREZWZhdWx0Q29sbGVjdGlvblR5cGUoKSB7Ci0JCXJldHVybiBCdWlsdGluVHlwZUxpYnJhcnkuWFNfVU5UWVBFRDsKLQl9Ci0KLQlwdWJsaWMgU3RhdGljVmFyaWFibGVSZXNvbHZlciBnZXRJblNjb3BlVmFyaWFibGVzKCkgewotCQlyZXR1cm4gbmV3IFN0YXRpY1ZhcmlhYmxlUmVzb2x2ZXIoKSB7Ci0KLQkJCXB1YmxpYyBib29sZWFuIGlzVmFyaWFibGVQcmVzZW50KFFOYW1lIG5hbWUpIHsKLQkJCQlyZXR1cm4gX3ZhcmlhYmxlVHlwZXMuY29udGFpbnNLZXkobmFtZSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBJdGVtVHlwZSBnZXRWYXJpYWJsZVR5cGUoUU5hbWUgbmFtZSkgewotCQkJCXJldHVybiAoSXRlbVR5cGUpIF92YXJpYWJsZVR5cGVzLmdldChuYW1lKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQkvLyBXZSBhcmUgZXhwbGljaXRseSBOT1QgdXNpbmcgZ2VuZXJpY3MgaGVyZSwgaW4gYW50aWNpcGF0aW9uIG9mIEpESzEuNCBjb21wYXRpYmlsaXR5Ci0JcHJpdmF0ZSBzdGF0aWMgQ29tcGFyYXRvciBDT0RFUE9JTlRfQ09NUEFSQVRPUiA9IG5ldyBDb21wYXJhdG9yKCkgewotCQkKLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlyZXR1cm4gKChTdHJpbmcpbzEpLmNvbXBhcmVUbygoU3RyaW5nKW8yKTsKLQkJfQotCX07Ci0JCi0JcHJpdmF0ZSBDb2xsYXRpb25Qcm92aWRlciBfY29sbGF0aW9uUHJvdmlkZXIgPSBuZXcgQ29sbGF0aW9uUHJvdmlkZXIoKSB7Ci0JCQotCQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRDb2xsYXRpb24oKSB7Ci0JCQlyZXR1cm4gX2RlZmF1bHRDb2xsYXRpb247Ci0JCX0KLQkJCi0JCXB1YmxpYyBDb21wYXJhdG9yIGdldENvbGxhdGlvbihTdHJpbmcgdXJpKSB7Ci0JCQlpZiAoQ29sbGF0aW9uUHJvdmlkZXIuQ09ERVBPSU5UX0NPTExBVElPTi5lcXVhbHModXJpKSkgcmV0dXJuIENPREVQT0lOVF9DT01QQVJBVE9SOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9OwotCi0JcHVibGljIENvbGxhdGlvblByb3ZpZGVyIGdldENvbGxhdGlvblByb3ZpZGVyKCkgewotCQlyZXR1cm4gX2NvbGxhdGlvblByb3ZpZGVyOwotCX0KLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QnVpbGRlciB3aXRoQ29sbGF0aW9uUHJvdmlkZXIoQ29sbGF0aW9uUHJvdmlkZXIgY3ApIHsKLQkJX2NvbGxhdGlvblByb3ZpZGVyID0gY3A7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QnVpbGRlciB3aXRoVmFyaWFibGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZSwKLQkJCUl0ZW1UeXBlIHR5cGUpIHsKLQkJX3ZhcmlhYmxlVHlwZXMucHV0KHFOYW1lLCB0eXBlKTsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JcHVibGljIFN0YXRpY0NvbnRleHRCdWlsZGVyIHdpdGhCYXNlVXJpKFN0cmluZyBzdHJpbmcpIHRocm93cyBVUklTeW50YXhFeGNlcHRpb24gewotCQlfYmFzZV91cmkgPSBuZXcgVVJJKHN0cmluZyk7CQkKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JcHVibGljIFN0YXRpY0NvbnRleHRCdWlsZGVyIHdpdGhGdW5jdGlvbkxpYnJhcnkoCi0JCQlTdHJpbmcgbmFtZXNwYWNlLAotCQkJRnVuY3Rpb25MaWJyYXJ5IGZsKSB7Ci0JCV9mdW5jdGlvbkxpYnJhcmllcy5wdXQobmFtZXNwYWNlLCBmbCk7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBTdGF0aWNDb250ZXh0QnVpbGRlciB3aXRoRGVmYXVsdENvbGxhdGlvbihTdHJpbmcgdXJpKSB7Ci0JCXRoaXMuX2RlZmF1bHRDb2xsYXRpb24gPSB1cmk7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyBJdGVtVHlwZSBnZXREb2N1bWVudFR5cGUoVVJJIGRvY3VtZW50VXJpKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNWUzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjVhMzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRhcmdldApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMWEyMTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYmY2OTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNNb24gQXByIDEyIDAxOjMyOjM4IENFU1QgMjAxMAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2I1YzdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMKLUJ1bmRsZS1WZXJzaW9uOiAyLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3I7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjUwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMy4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSIxLjEuNTAwIgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTczNDE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzYxMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgIENvcHlyaWdodCAoYykgMjAxMCBKZXNwZXIgU3RlZW4gTW9lbGxlciBhbmQgb3RoZXJzLgotIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jICBDb250cmlidXRvcnM6Ci0jICAgICAgSmVzcGVyIFN0ZWVuIE1vZWxsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMKLSMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDExLzAzLzA0IDAyOjA1OjU3IGptb2xsZXIgRXhwICQKLQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lID0gWFBhdGgyIFdUUCBDb250ZW50TW9kZWwgVHlwZU1vZGVsIEJyaWRnZQotcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvcG9tLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjMThlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIud3RwdHlwZXM8L2FydGlmYWN0SWQ+Ci0gICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0gICA8dmVyc2lvbj4yLjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgIDxuYW1lPlBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvcjwvbmFtZT4KLQotICAgPHBhcmVudD4KLSAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDItcGFyZW50PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2RldmVsb3BtZW50L2F0aGVuYS9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5yZWxlbmcKLSAgICAgIDwvcmVsYXRpdmVQYXRoPgotICAgPC9wYXJlbnQ+Ci0KLSAgIDxidWlsZD4KLSAgICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0gICAgICA8cGx1Z2luTWFuYWdlbWVudD4KLSAgICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXBtZC1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICA8dmVyc2lvbj4yLjU8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgIDwvcGx1Z2lucz4KLSAgICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KLSAgICAgIDxwbHVnaW5zPgotICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi43PC92ZXJzaW9uPgotICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICA8L3BsdWdpbnM+Ci0gICA8L2J1aWxkPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi53dHB0eXBlcy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvd3RwdHlwZXMvWHNkRE9NVHlwZVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi93dHB0eXBlcy9Yc2RET01UeXBlUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0Y2Q3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi93dHB0eXBlcy9Yc2RET01UeXBlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5DTURvY3VtZW50TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLmFwaS50eXBlc3lzdGVtLlR5cGVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsLlhTREF0dHJpYnV0ZVVzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuWFNESW1wbC5YU0RFbGVtZW50RGVjbGFyYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLlhTREltcGwuWFNEU2NoZW1hQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgWHNkRE9NVHlwZVByb3ZpZGVyIHsKLQlwdWJsaWMgVHlwZU1vZGVsIGdldFR5cGVNb2RlbChmaW5hbCBEb2N1bWVudCBkb2MpIHsKLQkJaWYgKGRvYyBpbnN0YW5jZW9mIElET01Eb2N1bWVudCkgewotCQkJcmV0dXJuIG5ldyBYc2RUeXBlTW9kZWwoKElET01Eb2N1bWVudClkb2MpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBpbnRlcmZhY2UgV3JhcHBlZENNUXVlcnk8Uj4gewotCQlSIHF1ZXJ5KCk7Ci0JfQotCi0Jc3RhdGljIHB1YmxpYyA8Uj4gUiB3cmFwQ01RdWVyeShDTURvY3VtZW50TWFuYWdlciBkb2N1bWVudE1hbmFnZXIsIFdyYXBwZWRDTVF1ZXJ5PFI+IHF1ZXJ5KSB7Ci0JCWJvb2xlYW4gd2FzQXN5bmMgPSBkb2N1bWVudE1hbmFnZXIuZ2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FTWU5DX0xPQUQpOwotCQlib29sZWFuIHdhc0F1dG9Mb2FkID0gZG9jdW1lbnRNYW5hZ2VyLmdldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQpOwotCQl0cnkgewotCQkJZG9jdW1lbnRNYW5hZ2VyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBmYWxzZSk7Ci0JCQlkb2N1bWVudE1hbmFnZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FVVE9fTE9BRCwgdHJ1ZSk7Ci0JCQkKLQkJCXJldHVybiBxdWVyeS5xdWVyeSgpOwotCQl9IGZpbmFsbHkgewotCQkJZG9jdW1lbnRNYW5hZ2VyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCB3YXNBc3luYyk7Ci0JCQlkb2N1bWVudE1hbmFnZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FVVE9fTE9BRCwgd2FzQXV0b0xvYWQpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBYc2RUeXBlTW9kZWwgaW1wbGVtZW50cyBUeXBlTW9kZWwgewotCQlwcml2YXRlIGZpbmFsIE1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsQWRhcHRlcjsKLQkJcHJpdmF0ZSBmaW5hbCBJRE9NRG9jdW1lbnQgZG9jOwotCQotCQlwdWJsaWMgWHNkVHlwZU1vZGVsKElET01Eb2N1bWVudCBkb2MpIHsKLQkJCXRoaXMuZG9jID0gZG9jOwotCQkJbW9kZWxBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBkb2MuZ2V0QWRhcHRlckZvcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCX0KLQkKLQkJcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiBsb29rdXBYU0RUeXBlKGZpbmFsIFN0cmluZyBuYW1lc3BhY2UsIGZpbmFsIFN0cmluZyBsb2NhbE5hbWUpIHsKLQkJCXJldHVybiB3cmFwQ01RdWVyeShtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNRG9jdW1lbnRNYW5hZ2VyKCksIG5ldyBXcmFwcGVkQ01RdWVyeTxYU0RUeXBlRGVmaW5pdGlvbj4oKSB7Ci0JCQkJcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIHF1ZXJ5KCkgewotCQkJCQkKLQkJCQkJQ01Eb2N1bWVudCBjbURvYyA9IG1vZGVsQWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCkuZ2V0Q29ycmVzcG9uZGluZ0NNRG9jdW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQkJCQkJCi0JCQkJCWlmIChjbURvYyBpbnN0YW5jZW9mIFhTRFNjaGVtYUFkYXB0ZXIpIHsKLQkJCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKSAoKFhTRFNjaGVtYUFkYXB0ZXIpY21Eb2MpLmdldEtleSgpOwotCQkJCQkJWFNEVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb24gPSBzY2hlbWEucmVzb2x2ZVR5cGVEZWZpbml0aW9uKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLQkJCQkJCWlmICh0eXBlRGVmaW5pdGlvbi5nZXRCYXNlVHlwZSgpID09IG51bGwpIHJldHVybiBudWxsOyAvLyBjcnVkZSBjaGVjayBmb3Igb24tdGhlLWZseSBjcmVhdGVkIHVucmVzb2x2ZWQgdHlwZXMgCi0JCQkJCQlyZXR1cm4gdHlwZURlZmluaXRpb247Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkKLQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGxvb2t1cFR5cGUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpIHsKLQkJCVhTRFR5cGVEZWZpbml0aW9uIHhzZERlZiA9IGxvb2t1cFhTRFR5cGUobmFtZXNwYWNlLCBuYW1lKTsKLQkJCXJldHVybiB4c2REZWYgIT0gbnVsbCA/IG5ldyBYc2RUeXBlRGVmaW5pdGlvbih4c2REZWYpIDogbnVsbDsKLQkJfQotCQotCQlwdWJsaWMgVHlwZURlZmluaXRpb24gbG9va3VwRWxlbWVudERlY2xhcmF0aW9uKGZpbmFsIFN0cmluZyBuYW1lc3BhY2UsCi0JCQkJZmluYWwgU3RyaW5nIGVsZW1lbnROYW1lKSB7Ci0JCi0JCQlyZXR1cm4gd3JhcENNUXVlcnkobW9kZWxBZGFwdGVyLmdldE1vZGVsUXVlcnkoKS5nZXRDTURvY3VtZW50TWFuYWdlcigpLCBuZXcgV3JhcHBlZENNUXVlcnk8WHNkVHlwZURlZmluaXRpb24+KCkgewotCQkJCXB1YmxpYyBYc2RUeXBlRGVmaW5pdGlvbiBxdWVyeSgpIHsKLQkJCQkJQ01Eb2N1bWVudCBjbURvYyA9IG1vZGVsQWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCkuZ2V0Q29ycmVzcG9uZGluZ0NNRG9jdW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQkJCQkJaWYgKGNtRG9jIGluc3RhbmNlb2YgWFNEU2NoZW1hQWRhcHRlcikgewotCQkJCQkJWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpICgoWFNEU2NoZW1hQWRhcHRlciljbURvYykuZ2V0S2V5KCk7Ci0JCQkJCQkKLQkJCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKG5hbWVzcGFjZSwgZWxlbWVudE5hbWUpOwotCQkJCQkJaWYgKGRlY2xhcmF0aW9uICE9IG51bGwpIHJldHVybiBuZXcgWHNkVHlwZURlZmluaXRpb24oZGVjbGFyYXRpb24uZ2V0VHlwZURlZmluaXRpb24oKSk7Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkKLQkJcHVibGljIFR5cGVEZWZpbml0aW9uIGxvb2t1cEF0dHJpYnV0ZURlY2xhcmF0aW9uKGZpbmFsIFN0cmluZyBuYW1lc3BhY2UsCi0JCQkJZmluYWwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpIHsKLQkJCQotCQkJcmV0dXJuIHdyYXBDTVF1ZXJ5KG1vZGVsQWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCkuZ2V0Q01Eb2N1bWVudE1hbmFnZXIoKSwgbmV3IFdyYXBwZWRDTVF1ZXJ5PFhzZFR5cGVEZWZpbml0aW9uPigpIHsKLQkJCQlwdWJsaWMgWHNkVHlwZURlZmluaXRpb24gcXVlcnkoKSB7Ci0JCQkJCUNNRG9jdW1lbnQgY21Eb2MgPSBtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENvcnJlc3BvbmRpbmdDTURvY3VtZW50KGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0JCQkJCQotCQkJCQlpZiAoY21Eb2MgaW5zdGFuY2VvZiBYU0RTY2hlbWFBZGFwdGVyKSB7Ci0JCQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gKFhTRFNjaGVtYSkgKChYU0RTY2hlbWFBZGFwdGVyKWNtRG9jKS5nZXRLZXkoKTsKLQkJCQkJCQotCQkJCQkJWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBzY2hlbWEucmVzb2x2ZUF0dHJpYnV0ZURlY2xhcmF0aW9uKG5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSk7Ci0JCQkJCQlpZiAoZGVjbGFyYXRpb24gIT0gbnVsbCkgcmV0dXJuIG5ldyBYc2RUeXBlRGVmaW5pdGlvbihkZWNsYXJhdGlvbi5nZXRUeXBlRGVmaW5pdGlvbigpKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCQotCQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0VHlwZShmaW5hbCBOb2RlIG5vZGUpIHsKLQkJCXJldHVybiB3cmFwQ01RdWVyeShtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNRG9jdW1lbnRNYW5hZ2VyKCksIG5ldyBXcmFwcGVkQ01RdWVyeTxYc2RUeXBlRGVmaW5pdGlvbj4oKSB7Ci0JCQkJcHVibGljIFhzZFR5cGVEZWZpbml0aW9uIHF1ZXJ5KCkgewotCQkJCQlpZiAobm9kZSBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCQkJCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oKEF0dHIpbm9kZSk7Ci0JCQkJCQlpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewotCQkJCQkJCUNNTm9kZSBub2RlRGVjbCA9IG1vZGVsQWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCkuZ2V0T3JpZ2luKG5vZGUpOwotCQkJCQkJCWlmIChub2RlRGVjbCBpbnN0YW5jZW9mIENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGRlY2xhcmF0aW9uID0gIChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBub2RlRGVjbDsKLQkJCQkJCX0JCQkJCQkJCi0JCQkJCQlpZiAoZGVjbGFyYXRpb24gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2VBZGFwdGVyKSB7Ci0JCQkJCQkJWFNEQXR0cmlidXRlVXNlIGF1ID0gKFhTREF0dHJpYnV0ZVVzZSkoKFhTREF0dHJpYnV0ZVVzZUFkYXB0ZXIpZGVjbGFyYXRpb24pLmdldEtleSgpOwotCQkJCQkJCXJldHVybiBuZXcgWHNkVHlwZURlZmluaXRpb24oYXUuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXRUeXBlRGVmaW5pdGlvbigpKTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkgewkJCQkJCQotCQkJCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNRWxlbWVudERlY2xhcmF0aW9uKChFbGVtZW50KW5vZGUpOwotCQkJCQkJaWYgKGRlY2xhcmF0aW9uID09IG51bGwpIHsKLQkJCQkJCQlDTU5vZGUgbm9kZURlY2wgPSBtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldE9yaWdpbihub2RlKTsKLQkJCQkJCQlpZiAobm9kZURlY2wgaW5zdGFuY2VvZiBDTUVsZW1lbnREZWNsYXJhdGlvbikgZGVjbGFyYXRpb24gPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pIG5vZGVEZWNsOwotCQkJCQkJfQotCQkJCQkJaWYgKGRlY2xhcmF0aW9uIGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uQWRhcHRlcikgewotCQkJCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBkZWNsID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pKChYU0RFbGVtZW50RGVjbGFyYXRpb25BZGFwdGVyKWRlY2xhcmF0aW9uKS5nZXRLZXkoKSkuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJCQlyZXR1cm4gbmV3IFhzZFR5cGVEZWZpbml0aW9uKGRlY2wuZ2V0VHlwZURlZmluaXRpb24oKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkKLQkJcHVibGljIGNsYXNzIFhzZFR5cGVEZWZpbml0aW9uIGltcGxlbWVudHMgVHlwZURlZmluaXRpb24gewotCQkKLQkJCXByaXZhdGUgZmluYWwgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZmluaXRpb247Ci0JCQotCQkJcHVibGljIFhzZFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJdGhpcy50eXBlRGVmaW5pdGlvbiA9IHR5cGVEZWZpbml0aW9uOwotCQkJfQotCQkKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkgewotCQkJCXJldHVybiB0eXBlRGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCX0KLQkJCi0JCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCX0KLQkJCi0JCQlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXhUeXBlKCkgewotCQkJCXJldHVybiB0eXBlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLQkJCX0KLQkJCi0JCQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0QmFzZVR5cGUoKSB7Ci0JCQkJWFNEVHlwZURlZmluaXRpb24gYmFzZSA9IG51bGw7Ci0JCQkJCi0JCQkJaWYgKHR5cGVEZWZpbml0aW9uIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pIHsKLQkJCQkJYmFzZSA9ICgoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pdHlwZURlZmluaXRpb24pLmdldEJhc2VUeXBlRGVmaW5pdGlvbigpOwotCQkJCX0gZWxzZSBpZiAodHlwZURlZmluaXRpb24gaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLQkJCQkJYmFzZSA9ICgoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXR5cGVEZWZpbml0aW9uKS5nZXRCYXNlVHlwZURlZmluaXRpb24oKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcmV0dXJuIChiYXNlICE9IG51bGwpID8gbmV3IFhzZFR5cGVEZWZpbml0aW9uKGJhc2UpIDogbnVsbDsKLQkJCX0KLQkJCi0JCQlwdWJsaWMgVHlwZURlZmluaXRpb24gZ2V0U2ltcGxlVHlwZSgpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCQkJCi0JCQlwdWJsaWMgYm9vbGVhbiBkZXJpdmVkRnJvbVR5cGUoVHlwZURlZmluaXRpb24gYW5jZXN0b3JUeXBlLAotCQkJCQlzaG9ydCBkZXJpdmF0aW9uTWV0aG9kKSB7Ci0JCQkJaWYgKGFuY2VzdG9yVHlwZSA9PSBudWxsKSB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImFuY2VzdG9yVHlwZSBtdXN0IGJlIG5vbi1udWxsIik7IC8vIU5PTi1OTFMtMQotCQkJCQotCQkJCVhTRFR5cGVEZWZpbml0aW9uIHhzZEFuY2VzdG9yID0gbWFwWHNkVHlwZShhbmNlc3RvclR5cGUpOwotCQkJCWlmICh4c2RBbmNlc3RvciA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0JCi0JCQkJcmV0dXJuIGlzRGVyaXZlZEZyb20oeHNkQW5jZXN0b3IsIHRoaXMudHlwZURlZmluaXRpb24sIGRlcml2YXRpb25NZXRob2QpOwotCQkJfQotCQotCQkJcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiBtYXBYc2RUeXBlKFR5cGVEZWZpbml0aW9uIGFuY2VzdG9yVHlwZSkgewotCQkJCWlmIChhbmNlc3RvclR5cGUgaW5zdGFuY2VvZiBYc2RUeXBlRGVmaW5pdGlvbikgewotCQkJCQlyZXR1cm4gKChYc2RUeXBlRGVmaW5pdGlvbilhbmNlc3RvclR5cGUpLnR5cGVEZWZpbml0aW9uOwotCQkJCX0gZWxzZSB7Ci0JIAkJCQkvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbiB3aGVyZSB3ZSBhcmUgcGFzc2VkIGEgdHlwZSBmcm9tIGEgZGlmZmVyZW50IChraW5kIG9mKSB0eXBlIHByb3ZpZGVyCi0JCQkJCS8vIFdlJ2xsIHRyeSB0byBtYXAgdGhpcyB0eXBlIHRvIHRoZSBuYW1lIHR5cGUgaW4gb3VyIHN5c3RlbSwgYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlcmUgaXMgbm8gcmVsYXRpb25zaGlwLi4uCi0JCQkJCXJldHVybiBsb29rdXBYU0RUeXBlKGFuY2VzdG9yVHlwZS5nZXROYW1lc3BhY2UoKSwgYW5jZXN0b3JUeXBlLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQkKLQkJCXB1YmxpYyBib29sZWFuIGRlcml2ZWRGcm9tKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lLAotCQkJCQlzaG9ydCBkZXJpdmF0aW9uTWV0aG9kKSB7Ci0JCQkJWFNEVHlwZURlZmluaXRpb24gYW5jZXN0b3JUeXBlID0gbG9va3VwWFNEVHlwZShuYW1lc3BhY2UsIG5hbWUpOwotCQkJCWlmIChhbmNlc3RvclR5cGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotCQkJCQotCQkJCXJldHVybiBpc0Rlcml2ZWRGcm9tKGFuY2VzdG9yVHlwZSwgdGhpcy50eXBlRGVmaW5pdGlvbiwgZGVyaXZhdGlvbk1ldGhvZCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBMaXN0PFNob3J0PiBnZXRTaW1wbGVUeXBlcyhBdHRyIGF0dHIpIHsKLQkJCQlyZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgoc2hvcnQpMCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBMaXN0PFNob3J0PiBnZXRTaW1wbGVUeXBlcyhFbGVtZW50IGF0dHIpIHsKLQkJCQlyZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgoc2hvcnQpMCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBDbGFzcyBnZXROYXRpdmVUeXBlKCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQkKLQkJfQotCX0KLQotCXN0YXRpYyBib29sZWFuIGlzRGVyaXZlZEZyb20oWFNEVHlwZURlZmluaXRpb24gYmFzZSwgWFNEVHlwZURlZmluaXRpb24gZGVyaXZlZCwgc2hvcnQgZGVyaXZhdGlvbk1ldGhvZCkgewotCQlpZiAoYmFzZSA9PSBkZXJpdmVkKSByZXR1cm4gdHJ1ZTsKLQkJCi0JCS8vIFRPRE86IENoZWNrIGZsYWdzCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgVHlwZU1vZGVsIGdldFR5cGVNb2RlbCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDE1NTU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/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+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlY2EyN2YuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDE4ZWY5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMTk4M2QuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVBzY3lob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvciBGZWF0dXJlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YUGF0aCAyLjAgUHJvY2Vzc29yCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwOSBBbmRyZWEgQml0dGF1LCBEYXZpZCBDYXJ2ZXIsIE11a3VsIEdhbmRoaSwgYW5kIG90aGVycyAyMDA4LlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrKVxuXAotICAgIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIC0gaHR0cDovL3d3dy5zdGFyc3RhbmRhcmQub3JnKVxuXAotICAgIEplc3BlciBNb2xsZXIgKE5pbmVDb25zdWx0IC0gaHR0cDovL3d3dy5uaW5lY29uc3VsdC5kaylcblwKLSAgICBNdWt1bCBHYW5kaGlcbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotIyBsaWNlbnNlIGFuZCBsaWNlbnNlVVJMIHByb3BlcnRpZXMgd2VyZSByZW1vdmVkIGFzIGEgcmVzdWx0IHRvIG1pZ3JhdGluZyB0byBuZXcgUERFIGxpY2Vuc2Ugc3VwcG9ydC4gCi0jICAgIFRob3NlIHByb3BlcnRpZXMgYXJlIG5vdyBhZGRlZCBhdCBidWlsZCB0aW1lLiBTZWUgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXF1aW5veC9wMi9MaWNlbnNlX01lY2hhbmlzbS4gCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLSMgbGljZW5zZSBhbmQgbGljZW5zZVVSTCBwcm9wZXJ0aWVzIHdlcmUgcmVtb3ZlZCBhcyBhIHJlc3VsdCB0byBtaWdyYXRpbmcgdG8gbmV3IFBERSBsaWNlbnNlIHN1cHBvcnQuIAotIyAgICBUaG9zZSBwcm9wZXJ0aWVzIGFyZSBub3cgYWRkZWQgYXQgYnVpbGQgdGltZS4gU2VlIGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0VxdWlub3gvcDIvTGljZW5zZV9NZWNoYW5pc20uIAotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTA5MTE5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4wLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIiCi0gICAgICBsaWNlbnNlLWZlYXR1cmU9Im9yZy5lY2xpcHNlLmxpY2Vuc2UiCi0gICAgICBsaWNlbnNlLWZlYXR1cmUtdmVyc2lvbj0iMS4wLjAucXVhbGlmaWVyIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmFfY3VwLnJ1bnRpbWUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnhlcmNlcyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3NvciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnd0cHR5cGVzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9wb20ueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MyM2ZhYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCi0JPHBhcmVudD4KLQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDI8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLXBhcmVudDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmU8L2FydGlmYWN0SWQ+Ci0JPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4KLQk8bmFtZT5Qc3ljaG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3IgRmVhdHVyZTwvbmFtZT4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk5YmRiLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmMWJhNy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V1RQIFhTTCBTb3VyY2VcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCksIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKVxuXAotYW5kIG90aGVycyAyMDA4LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTUxNzMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXBsdWdpbk5hbWU9V1RQIFBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvcgotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODM5YTcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID1cCi1lY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLWZlYXR1cmUueG1sLFwKLWZlYXR1cmUucHJvcGVydGllcyxcCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZGJjNGIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1Qc3ljaG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3IgRmVhdHVyZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgV1RQIFBzeWNob1BhdGggWFBhdGggMi4wIHByb2Nlc3Nvci4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA5IEFuZHJlYSBCaXR0YXUsXG5cCi1EYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCksIE11a3VsIEdhbmRoaSBhbmQgb3RoZXJzIDIwMDkuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgQW5kcmVhIEJpdHRhdSAtIGluaXRpYWwgY29kZSBhbmQgaW1wbGVtZW50YXRpb25cblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBNdWt1bCBHYW5kaGlcbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotIyBsaWNlbnNlIGFuZCBsaWNlbnNlVVJMIHByb3BlcnRpZXMgd2VyZSByZW1vdmVkIGFzIGEgcmVzdWx0IHRvIG1pZ3JhdGluZyB0byBuZXcgUERFIGxpY2Vuc2Ugc3VwcG9ydC4gCi0jICAgIFRob3NlIHByb3BlcnRpZXMgYXJlIG5vdyBhZGRlZCBhdCBidWlsZCB0aW1lLiBTZWUgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXF1aW5veC9wMi9MaWNlbnNlX01lY2hhbmlzbS4gCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLSMgbGljZW5zZSBhbmQgbGljZW5zZVVSTCBwcm9wZXJ0aWVzIHdlcmUgcmVtb3ZlZCBhcyBhIHJlc3VsdCB0byBtaWdyYXRpbmcgdG8gbmV3IFBERSBsaWNlbnNlIHN1cHBvcnQuIAotIyAgICBUaG9zZSBwcm9wZXJ0aWVzIGFyZSBub3cgYWRkZWQgYXQgYnVpbGQgdGltZS4gU2VlIGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0VxdWlub3gvcDIvTGljZW5zZV9NZWNoYW5pc20uIAotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTVhNDAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjgzOTBhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Yzk4YjEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1XVFAgWFNMIFNvdXJjZVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSwgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpXG5cCi1hbmQgb3RoZXJzIDIwMDguIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGE1NzVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzNDFjYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcGx1Z2luTmFtZT1XVFAgWFNMIFNvdXJjZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhMjcwYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDMwMDAzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+QXVndXN0LCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZTQ2M2EuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2MxMDE0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9UHNjeWhvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yIFNESyBGZWF0dXJlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YUGF0aCAyLjAgUHJvY2Vzc29yIFNESwotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDkgQW5kcmVhIEJpdHRhdSwgRGF2aWQgQ2FydmVyLCBNdWt1bCBHYW5kaGksIGFuZCBvdGhlcnMgMjAwOC5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51aylcblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBKZXNwZXIgTW9sbGVyIChOaW5lQ29uc3VsdCAtIGh0dHA6Ly93d3cubmluZWNvbnN1bHQuZGspXG5cCi0gICAgTXVrdWwgR2FuZGhpXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLSMgbGljZW5zZSBhbmQgbGljZW5zZVVSTCBwcm9wZXJ0aWVzIHdlcmUgcmVtb3ZlZCBhcyBhIHJlc3VsdCB0byBtaWdyYXRpbmcgdG8gbmV3IFBERSBsaWNlbnNlIHN1cHBvcnQuIAotIyAgICBUaG9zZSBwcm9wZXJ0aWVzIGFyZSBub3cgYWRkZWQgYXQgYnVpbGQgdGltZS4gU2VlIGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0VxdWlub3gvcDIvTGljZW5zZV9NZWNoYW5pc20uIAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi0jIGxpY2Vuc2UgYW5kIGxpY2Vuc2VVUkwgcHJvcGVydGllcyB3ZXJlIHJlbW92ZWQgYXMgYSByZXN1bHQgdG8gbWlncmF0aW5nIHRvIG5ldyBQREUgbGljZW5zZSBzdXBwb3J0LiAKLSMgICAgVGhvc2UgcHJvcGVydGllcyBhcmUgbm93IGFkZGVkIGF0IGJ1aWxkIHRpbWUuIFNlZSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcXVpbm94L3AyL0xpY2Vuc2VfTWVjaGFuaXNtLiAKLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJiMGIyLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIyLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMiI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3BvbS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI5NTI5NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCTxwYXJlbnQ+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjIuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL3NkZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucmVsZW5nPC9yZWxhdGl2ZVBhdGg+Ci0JPC9wYXJlbnQ+Ci0KLQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmU8L2FydGlmYWN0SWQ+Ci0JPHZlcnNpb24+Mi4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4KLQk8bmFtZT5Qc3ljaG9QYXRoIFhQYXRoIDIuMCBQcm9jZXNzb3I6IFNESyBGZWF0dXJlPC9uYW1lPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5OWJkYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTVhNDAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjgzOTBhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncwotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcwotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0wPUBidWlsZEAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjFiYTcuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1XVFAgWFNMIFNvdXJjZVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSwgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpXG5cCi1hbmQgb3RoZXJzIDIwMDguIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYTU3NWMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE1MTczLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcGx1Z2luTmFtZT1XVFAgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgUHJvY2Vzc29yCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTgzOWE3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPVwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWRiYzRiLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVBzeWNob1BhdGggWFBhdGggMi4wIFByb2Nlc3NvciBGZWF0dXJlCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1Tb3VyY2UgY29kZSBXVFAgUHN5Y2hvUGF0aCBYUGF0aCAyLjAgcHJvY2Vzc29yLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDkgQW5kcmVhIEJpdHRhdSxcblwKLURhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKSwgTXVrdWwgR2FuZGhpIGFuZCBvdGhlcnMgMjAwOS5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBBbmRyZWEgQml0dGF1IC0gaW5pdGlhbCBjb2RlIGFuZCBpbXBsZW1lbnRhdGlvblxuXAotICAgIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIC0gaHR0cDovL3d3dy5zdGFyc3RhbmRhcmQub3JnKVxuXAotICAgIE11a3VsIEdhbmRoaVxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi0jIGxpY2Vuc2UgYW5kIGxpY2Vuc2VVUkwgcHJvcGVydGllcyB3ZXJlIHJlbW92ZWQgYXMgYSByZXN1bHQgdG8gbWlncmF0aW5nIHRvIG5ldyBQREUgbGljZW5zZSBzdXBwb3J0LiAKLSMgICAgVGhvc2UgcHJvcGVydGllcyBhcmUgbm93IGFkZGVkIGF0IGJ1aWxkIHRpbWUuIFNlZSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcXVpbm94L3AyL0xpY2Vuc2VfTWVjaGFuaXNtLiAKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotIyBsaWNlbnNlIGFuZCBsaWNlbnNlVVJMIHByb3BlcnRpZXMgd2VyZSByZW1vdmVkIGFzIGEgcmVzdWx0IHRvIG1pZ3JhdGluZyB0byBuZXcgUERFIGxpY2Vuc2Ugc3VwcG9ydC4gCi0jICAgIFRob3NlIHByb3BlcnRpZXMgYXJlIG5vdyBhZGRlZCBhdCBidWlsZCB0aW1lLiBTZWUgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXF1aW5veC9wMi9MaWNlbnNlX01lY2hhbmlzbS4gCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2M5OGIxLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLCBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLWFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzQxY2EuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wbHVnaW5OYW1lPVdUUCBYU0wgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5zZGsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3Iuc2RrLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnNkay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgo=